天天看点

ORACLE闪回----闪回删除flashback dropNOTICE!!!!!!!

flashback分类:

   1)flashback drop

   2)flashback query

   3)flashback data archive

   4)flashback table

   5)flashback version query

   6)flashback transaction

   7)flashback database

闪回删除的前提和应用

很多场景的数据库都会出现误删除数据并提交,(未提交的情况可以rollback)

提交后发现数据或者表有用影响程序运行,但处于生产中的数据库不能做停机操作来进行不完全数据恢复怎么办!!?

flashback

能闪则闪这是经验主义的惯性思维,这话固然是有道理的毕竟闪回删除的数据一般是不需要停机。

图出自哪里我不清楚,但是表述很清晰。

1、employees表存在切有PK 主键

2、DROP TABLE /or delete from 

3和4、此时查看一下recyclebin 就能看到这些信息。 解释一下当前数据块状态:我执行了删除drop表的命令后,数据被清除但是存放数据的数据块被标记未DBA_FREE_SPACE状态,

如果此空间不被新的数据占用,那么将一直保留此信息。有个特例情况就是,删除后新建了一张同名的表,并也执行了删除命令这个我后续会补充,请读者先记得这个事情

ORACLE闪回----闪回删除flashback dropNOTICE!!!!!!!
ORACLE闪回----闪回删除flashback dropNOTICE!!!!!!!

EXAMPLE

废话不多说 上示例:

我操作的是我自己创建的一个用户tony。

查看一下TONY的默认表空间以及表空间里的表

[email protected] prod>select username,default_tablespace from dba_users where username='TONY';

USERNAME                                                                                   DEFAULT_TABLESPACE
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
TONY                                                                                       TEST01
[email protected] prod>
[email protected] prod>select segment_name from dba_segments where tablespace_name='TEST01';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BIN$vcfnm3iVKF7gVYv2vTElrw==$0
EMP01
EMP1
           

清理掉这些表,后查看表空间使用大小。这里出先了一个小插曲,大家可以自行查阅一下相关ORA-55610报错,后续的文章我也会提到这部分内容

[email protected] prod>drop table tony.emp1;
drop table tony.emp1
           *
第 1 行出现错误:
ORA-55610: 针对历史记录跟踪表的 DDL 语句无效


[email protected] prod>select owner_name,flashback_archive_name,create_time,status from dba_flashback_archive;

OWNER_NAME
------------------------------------------------------------------------------------------
FLASHBACK_ARCHIVE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_TIME                                                                 STATUS
--------------------------------------------------------------------------- ---------------------
SYS
FLA1
2021-03-18 15:59:59.000000000

[email protected] prod>alter table tony.emp1 no flashback archive;

表已更改。

[email protected] prod>drop table tony.emp01;

表已删除。

[email protected] prod>select segment_name from dba_segments where tablespace_name='TEST01';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BIN$vcfnm3iVKF7gVYv2vTElrw==$0
EMP1

[email protected] prod>drop table tony.emp1;

表已删除。

[email protected] prod>
[email protected] prod>
[email protected] prod>
[email protected] prod>
[email protected] prod>select segment_name from dba_segments where tablespace_name='TEST01';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BIN$vdzkcdKXe7XgVYv2vTElrw==$1
BIN$vdzkcdKYe7XgVYv2vTElrw==$0

[email protected] prod>purge recyclebin;

回收站已清空。
[email protected] prod>
[email protected] prod>
[email protected] prod>select segment_name from dba_segments where tablespace_name='TEST01';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BIN$vdzkcdKXe7XgVYv2vTElrw==$1
BIN$vdzkcdKYe7XgVYv2vTElrw==$0
           
[email protected] prod>select sum(bytes) from dba_free_space where tablespace_name='TEST01';

SUM(BYTES)
----------
   9437184
           

创建一张表,将表空间撑爆。

ORA-01653

[email protected] prod>create table emp as select * from scott.emp;

表已创建。

[email protected] prod>insert into emp select * from emp;

已创建 14 行。

[email protected] prod>/

已创建 28 行。

[email protected] prod>/

已创建 56 行。

[email protected] prod>/

已创建 112 行。

[email protected] prod>/

已创建 224 行。

[email protected] prod>/

已创建 448 行。

[email protected] prod>/

已创建 896 行。

[email protected] prod>/

已创建 1792 行。

[email protected] prod>/

已创建 3584 行。

[email protected] prod>/

已创建 7168 行。

[email protected] prod>/

已创建 14336 行。

[email protected] prod>/

已创建 28672 行。

[email protected] prod>/

已创建 57344 行。

[email protected] prod>/
insert into emp select * from emp
*
第 1 行出现错误:
ORA-01653: 表 TONY.EMP 无法通过 128 (在表空间 TEST01 中) 扩展


[email protected] prod>/
insert into emp select * from emp
*
第 1 行出现错误:
ORA-01653: 表 TONY.EMP 无法通过 128 (在表空间 TEST01 中) 扩展

这个地方我的显示是128是因为我给了db_cache_size非标准块了大小
           

查看表数据量,稍微剩余1M多空间无碍!

[email protected] prod>select count(*) from emp;

  COUNT(*)
----------
    114688

[email protected] prod>select sum(bytes) from dba_free_space where tablespace_name='TEST01';

SUM(BYTES)
----------
   1048576

此时表空间仍有剩余空间
           

删除表 查看回收站里内容及表空间大小,说明表空间里被删除的数据释放出来的表空间仍可以被使用,对应上图1 中就是DBA_FREE_SPACE。

[email protected] prod>purge recyclebin;

回收站已清空。

[email protected] prod>
[email protected] prod>drop table emp;

表已删除。

[email protected] prod>desc recyclebin;
 名称                                                                                                                                                                        是否为空? 类型
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
 OBJECT_NAME                                                                                                                                                                   NOT NULL VARCHAR2(30)
 ORIGINAL_NAME                                                                                                                                                                          VARCHAR2(32)
 OPERATION                                                                                                                                                                              VARCHAR2(9)
 TYPE                                                                                                                                                                                   VARCHAR2(25)
 TS_NAME                                                                                                                                                                                VARCHAR2(30)
 CREATETIME                                                                                                                                                                             VARCHAR2(19)
 DROPTIME                                                                                                                                                                               VARCHAR2(19)
 DROPSCN                                                                                                                                                                                NUMBER
 PARTITION_NAME                                                                                                                                                                         VARCHAR2(32)
 CAN_UNDROP                                                                                                                                                                             VARCHAR2(3)
 CAN_PURGE                                                                                                                                                                              VARCHAR2(3)
 RELATED                                                                                                                                                                       NOT NULL NUMBER
 BASE_OBJECT                                                                                                                                                                   NOT NULL NUMBER
 PURGE_OBJECT                                                                                                                                                                  NOT NULL NUMBER
 SPACE                                                                                                                                                                                  NUMBER

[email protected] prod>show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP              BIN$vd6orv2YNIHgVYv2vTElrw==$0 TABLE        2021-03-19:14:17:02
[email protected] prod>
           
[email protected] prod>select sum(bytes) from dba_free_space where tablespace_name='TEST01';

SUM(BYTES)
----------
   9437184

[email protected] prod>
           

查看TEST01表空间段的信息,仍有段信息存在只不过名字不一样了。

[email protected] prod> select segment_name from dba_segments where tablespace_name='TEST01';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BIN$vd6orv2YNIHgVYv2vTElrw==$0

[email protected] prod>
           

查询表数据结果:

[email protected] prod>select * from emp;
select * from emp
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在

           

执行闪回删除重新查询数据

[email protected] prod>select * from emp;
select * from emp
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在


[email protected] prod>flashback table emp  to before drop;

闪回完成。

[email protected] prod>select count(*) from emp;

  COUNT(*)
----------
    169036

[email protected] prod>
           

闪回删除操作完成!!

NOTICE!!!!!!!

*****************接下来我要说第二种情况***************

当我删除表数据之后,新的事务占据了原来的表空间,也就是说DBA_FREE_SPACE空间被占用,闪回时候会生效呢?

重新做一遍删除表操作 并建立新的数据表 插入大量数据

[email protected] prod>drop table  emp;

表已删除。

[email protected] prod>select sum(bytes) from dba_free_space where tablespace_name='TEST01';

SUM(BYTES)
----------
   9437184

[email protected] prod>

[email protected] prod>create table emp2 as select * from scott.emp;

表已创建。

[email protected] prod>insert into emp2 select * from emp2;

已创建 14 行。

[email protected] prod>/

已创建 28 行。

[email protected] prod>/

已创建 56 行。

[email protected] prod>/

已创建 112 行。

[email protected] prod>/

已创建 224 行。

[email protected] prod>/

已创建 448 行。

[email protected] prod>/

已创建 896 行。

[email protected] prod>/

已创建 1792 行。

[email protected] prod>/

已创建 3584 行。

[email protected] prod>/

已创建 7168 行。

[email protected] prod>/

已创建 14336 行。

[email protected] prod>/

已创建 28672 行。

[email protected] prod>/

已创建 57344 行。

[email protected] prod>/
insert into emp2 select * from emp2
*
第 1 行出现错误:
ORA-01653: 表 TONY.EMP2 无法通过 128 (在表空间 TEST01 中) 扩展


[email protected] prod>
[email protected] prod>
[email protected] prod>commit;

提交完成。

[email protected] prod>show recyclebin;
           

我再次进行闪回操作,很遗憾 对象已经不在回收站里了

ORA-38305: 对象不在回收站中

ORACLE闪回----闪回删除flashback dropNOTICE!!!!!!!

第三中操作,删除后清除回收站

[email protected] prod>select count(*) from emp2;

  COUNT(*)
----------
    114688

[email protected] prod>his
SP2-0042: 未知命令 "his" - 其余行忽略。
[email protected] prod>history
SP2-0042: 未知命令 "history" - 其余行忽略。
[email protected] prod>drop table emp2;

表已删除。

[email protected] prod>select count(*) from emp2;
select count(*) from emp2
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在


[email protected] prod>show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2             BIN$vd6orv2bNIHgVYv2vTElrw==$0 TABLE        2021-03-19:14:36:31
[email protected] prod>flashback table "BIN$vd6orv2bNIHgVYv2vTElrw==$0" to before drop;

闪回完成。

[email protected] prod>select count(*) from emp2;

  COUNT(*)
----------
    114688

[email protected] prod>drop table emp2;

表已删除。

[email protected] prod>purge recyclebin;

回收站已清空。

[email protected] prod>show recyclebin;
[email protected] prod>flashback table emp2 to before drop;
flashback table emp2 to before drop
*
第 1 行出现错误:
ORA-38305: 对象不在回收站中


[email protected] prod>
           

第四种情况,如果表中包含索引,索引会随着表删除而删除,随着表flashback而恢复只不过显示出来会有乱码,乱码解决方法即重名命索引名

[email protected] prod>create table emp3 as select * from scott.emp;

表已创建。

[email protected] prod>create index  pk_empno emp3(empno);
create index  pk_empno emp3(empno)
                       *
第 1 行出现错误:
ORA-00969: 缺失 ON 关键字


[email protected] prod>create index  pk_empno on emp3(empno);

索引已创建。

[email protected] prod>select * from user_indexes;

INDEX_NAME                                                                                 INDEX_TYPE                                                                        TABLE_OWNER
------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------
TABLE_NAME                                                                                 TABLE_TYPE                        UNIQUENESS                  COMPRESSION              PREFIX_LENGTH TABLESPACE_NAME                                 INI_TRANS
------------------------------------------------------------------------------------------ --------------------------------- --------------------------- ------------------------ ------------- ------------------------------------------------------------------------------------------ ----------
 MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE PCT_THRESHOLD INCLUDE_COLUMN  FREELISTS FREELIST_GROUPS   PCT_FREE LOGGING       BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY CLUSTERING_FACTOR STATUS                          NUM_ROWS
---------- -------------- ----------- ----------- ----------- ------------ ------------- -------------- ---------- --------------- ---------- --------- ---------- ----------- ------------- ----------------------- ----------------------- ----------------- ------------------------ ----------
SAMPLE_SIZE LAST_ANALYZED       DEGREE                                                                                                                   INSTANCES                                                                            PARTITION TEM GEN SEC
----------- ------------------- ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ --------- --- --- ---
BUFFER_POOL           FLASH_CACHE           CELL_FLASH_CACHE      USER_STAT DURATION                                      PCT_DIRECT_ACCESS ITYP_OWNER
--------------------- --------------------- --------------------- --------- --------------------------------------------- ----------------- ------------------------------------------------------------------------------------------
ITYP_NAME
------------------------------------------------------------------------------------------
PARAMETERS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GLOBAL_ST DOMIDX_STATUS                        DOMIDX_OPSTATUS    FUNCIDX_STATUS           JOIN_INDE IOT_REDUN DROPPED   VISIBILITY                  DOMIDX_MANAGEMENT                          SEGMENT_C
--------- ------------------------------------ ------------------ ------------------------ --------- --------- --------- --------------------------- ------------------------------------------ ---------
PK_EMPNO                                                                                   NORMAL                                                                            TONY
EMP3                                                                                       TABLE                             NONUNIQUE                   DISABLED                               TEST01                                          2
       255          65536     1048576           1  2147483645                                                                              10 YES                0           1            14                       1                       1     1 VALID                             14
         14 2021-03-19 14:39:37 1                                                                                                                        1                                                                                    NO         N   N   N
DEFAULT               DEFAULT               DEFAULT               NO


YES                                                                                        NO        NO        NO        VISIBLE                                                                YES


[email protected] prod>select index_name,index_type,table_name from user_indexes;

INDEX_NAME                                                                                 INDEX_TYPE                                                                        TABLE_NAME
------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------
PK_EMPNO                                                                                   NORMAL                                                                            EMP3

[email protected] prod>col index_name for a20
[email protected] prod>col index_type for a20
[email protected] prod>select index_name,index_type,table_name from user_indexes;

INDEX_NAME           INDEX_TYPE           TABLE_NAME
-------------------- -------------------- ------------------------------------------------------------------------------------------
PK_EMPNO             NORMAL               EMP3

[email protected] prod>
[email protected] prod>
[email protected] prod>
[email protected] prod>
[email protected] prod>
[email protected] prod>drop table emp3;

表已删除。

[email protected] prod>show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP3             BIN$vd6orv2eNIHgVYv2vTElrw==$0 TABLE        2021-03-19:14:41:12
[email protected] prod>select index_name,index_type,table_name from user_indexes;

未选定行

[email protected] prod>select * from user_constraints;

未选定行

[email protected] prod> flashback table emp3 to before drop;

闪回完成。

[email protected] prod>select * from user_constraints;

未选定行

[email protected] prod>select index_name,index_type,table_name from user_indexes;

INDEX_NAME           INDEX_TYPE           TABLE_NAME
-------------------- -------------------- ------------------------------------------------------------------------------------------
BIN$vd6orv2dNIHgVYv2 NORMAL               EMP3
vTElrw==$0


[email protected] prod>select * from emp3;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00        800                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00        950                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择14行。

[email protected] prod>
           
[email protected] prod>alter index "BIN$vd6orv2dNIHgVYv2vTElrw==$0" rename to pk_empno;

索引已更改。

[email protected] prod>select index_name,index_type,table_name from user_indexes;

INDEX_NAME           INDEX_TYPE           TABLE_NAME
-------------------- -------------------- ------------------------------------------------------------------------------------------
PK_EMPNO             NORMAL               EMP3

[email protected] prod>
           

OWNER:Jrojyun

DATE:2021-03-19