oracle_10g_flashback(数据恢复)

flashback:即回闪,是从oracle9i就开始提出的一种操作恢复的功能,(还有一种叫logminer)在oracle10g中进行了增强和修改,通过回闪,用户可以完成许多不可能恢复的工作,目前oracle10g的回闪包括以下特性;


1〉oracle falshback Database. 特性允许oracle通过Flashback database语句,将数据库会滚到前一个时间点或者scn上,而不需要作时间点的恢复工作!

2〉oracle falshback table. 特性允许oracle通过flashback table语句,将表会滚到前一个时间点或者scn上。

3〉oracle falshback drop. 特性允许oracle把恢复drop掉的table或者索引。

4〉oracle falshback version query. 特性可以得到特定的表在某一个时间段内的任何修改记录!

5〉oracle falshback transaction query 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务。


一:oracle falshback table


oracle flashback table即回闪表

可以进行的操作:操作1>flashback table tablename to befor drop;

对于误drop的table此可以使用本操作,还原drop的table!

此操作需要用户有以下的权限:

A:falshback any table的系统权限或者是某一个表的flashback权限。

B:有table的select、insert、delect、alter权限。

C:有table的row Movement权限(alter table test enable row movement)

SQL> set serveroutput on

SQL> set time on

11:24:37 SQL> set feadback off;

11:24:59 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

A1 TABLE 

A TABLE 

----------------------

可以看到本用户下有table A,现在drop它;

-----------------------

11:25:01 SQL> drop table a;

11:26:18 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

BIN$dFFlS6jJQLShRwRQ+kLJMg==$0 TABLE 

A1 TABLE 

----------------------

table已经删除,可以看到table并不是真正意义上的删除掉了,而是多了一个"BIN$dFFlS6jJQLShRwRQ+kLJMg==$0"的表,这个表是原来的A表,这是oracle的recyclebin,一个类似垃圾回收站的机制。当用户删除表以后把表放到recyclebin中,而不是删除掉!

----------------------

现在使用命令恢复表A

11:26:29 SQL> flashback table a to before drop;

11:30:45 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

A1 TABLE 

A TABLE 

可以看到表A已经恢复!


可以进行的操作:操作2>flashback table tablename to scn/timestamp(a timestamp);

此操作可以利用scn(在后面介绍)或者timestamp将table恢复到某一个时间点!

-----给table row movement权限

11:41:49 SQL> alter table a enable row movement;

----插入一条记录

11:44:16 SQL> insert into a values('www',11);

11:45:15 SQL> commit;

----得到该记录的scn:1576479

11:45:20 SQL> select a.*,ora_rowscn from a;


NAME AGE ORA_ROWSCN

---------- ---------- ----------

500 65 1576479

600 65 1576479

111 10 1576479

222 100 1576479

333 30 1576479

444 40 1576479

555 50 1576479

www 11 1576479

888 34 1573035

---删除一条记录

11:45:55 SQL> delete from a where name ='www';

11:46:19 SQL> commit;

---利用scn命令恢复删掉的纪录!

11:46:20 SQL> flashback table a to scn 1576479;

11:46:49 SQL> select * from a;


NAME AGE

---------- ----------

500 65

600 65

111 10

222 100

333 30

444 40

555 50

www 11

888 34

---利用timestamp命令恢复删掉的纪录!

11:46:54 SQL> flashback table a to timestamp to_timestamp('2007-04-27 11:45:20','yyyy-mm-dd hh24:mi:ss');

11:56:28 SQL> select * from a;


NAME AGE

---------- ----------

500 65

600 65

111 10

222 100

333 30

444 40

555 50

888 34

附:--关于scn的介绍:

SCN:system change numbers,oracle10g的每一个表都有ora_rowscn列!但是desc是看不到改列的。

可以通过select ora_rowscn from table 得到每一条结果集当前的SCN,timestamp_to_scn()将scn转换到stmestamp;scn_to_timestamp()将timestamp转换到scn。

二:flashback drop

利用flashback drop oracle10g可以对DDL操作进行恢复,oracla提供类似回收站的recyclebin来收集被删除的对象,其实对象在删除的时候oracle把对象写到一个数据字典表中,当用户不需要该对象的时候,可以利用purge命令来从回收站进行清除。

--察看用户下所有表

SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

SYS_TEMP_FBT TABLE 

A1 TABLE 

A TABLE


Executed in 0.078 seconds

--drop 表A1

SQL> drop table a1;


Executed in 0.047 seconds

--再察看此时用户所拥有的所有表;

SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

SYS_TEMP_FBT TABLE 

A TABLE 

BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 TABLE


Executed in 0.078 seconds


--如上可以看到A1表drop的同时,当前用户下又产生了一个以BIN开头的新表BIN$fPHKLxsBTBq6+bjBLPEJaw==$0,这就是原来的A1表

SQL> set timing off

SQL> set time on

14:25:40 SQL> select t.object_name,t.original_name from recyclebin t;


OBJECT_NAME ORIGINAL_NAME

------------------------------ --------------------------------

BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 A1

---采用flashback table命令恢复刚才删除的表A1

14:29:45 SQL> flashback table a1 to before drop;

14:29:49 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

SYS_TEMP_FBT TABLE 

A1 TABLE 

A TABLE 

--当用户确实不需要该对象时候,可以采用pruge来彻底删除改对象

14:29:55 SQL> drop table a1;

14:31:13 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

SYS_TEMP_FBT TABLE 

A TABLE 

BIN$N+i42FTvSSemvMrH6frCQg==$0 TABLE


14:31:32 SQL> purge table "BIN$N+i42FTvSSemvMrH6frCQg==$0";

14:31:49 SQL> select * from tab;


TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

B TABLE 

STEST TABLE 

TA TABLE 

GROUPINGTEST TABLE 

COLTABLE TABLE 

ROWTABLE TABLE 

COLTABLE1 TABLE 

ROWTABLE1 TABLE 

SYS_TEMP_FBT TABLE 

A TABLE 

--用purge命令收站想清空回收站里的别的表

14:31:56 SQL> purge recyclebin;

14:34:02 SQL> select object_name from recyclebin;


OBJECT_NAME

------------------------------

三:oracle falshback version query--闪回版本查询

oracle10g falshback 能将所有做了提交的行进行记录,就类似于审计的功能,通过falshback可以查询什么时候执行了什么操作,非常方便,包括闪回版本的查询和审计等。

1〉闪回版本的查询

14:41:22 SQL> insert into a values('zhao',24);

14:42:01 SQL> commit;

--查询当前版本

14:34:45 SQL> select a.*,ora_rowscn from a;


NAME AGE ORA_ROWSCN

---------- ---------- ----------

500 65 1577059

600 65 1577059

111 10 1577059

222 100 1577059

333 30 1577059

444 40 1577059

555 50 1577059

888 34 1573035


14:41:22 SQL> insert into a values('zhao',24);

14:42:01 SQL> commit;

14:42:03 SQL> select a.*,ora_rowscn from a;


NAME AGE ORA_ROWSCN

---------- ---------- ----------

500 65 1577059

600 65 1577059

111 10 1577059

222 100 1577059

333 30 1577059

444 40 1577059

555 50 1577059

888 34 1573035

zhao 24 1585133

--A:利用scn查询以前版本的记录

14:42:18 SQL> select * from a as of scn 1577059;


NAME AGE

---------- ----------

500 65

600 65

111 10

222 100

333 30

444 40

555 50

888 34

--B:利用timestamp查询以前版本的记录

14:42:51 SQL> select * from a as of timestamp scn_to_timestamp(1577059);


NAME AGE

---------- ----------

500 65

600 65

111 10

222 100

333 30

444 40

555 50

www 11

888 34

2〉审计的功能:

14:50:06 SQL> select a.*,versions_operation,versions_xid,versions_starttime from a

2 versions between timestamp minvalue and maxvalue;


NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME

---------- ---------- ------------------ ---------------- --------------------

600 65 

111 10 

222 100 

333 30 

444 40 

555 50 

888 34 

zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午

--可以看出 在27-4月 -07 02.42.00 下午 插入(I)了一条记录


14:50:53 SQL> a order byversions_starttime;

14:51:23 SQL> run;


NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME

---------- ---------- ------------------ ---------------- ----------------------

500 65 

600 65 

111 10 

222 100 

333 30 

444 40 

555 50 

888 34 

zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午

四:oracle falshback transaction query回闪事务查询

oracle10回闪事务功能提供对过去某段时间内所完成的事务的查询和撤销!

14:59:56 SQL> select undo_sql,table_name from flashback_transaction_query x where x.table_owner=upper('zxt') and x.xid ='0500110006030000';


UNDO_SQL TABLE_NAME

-------------------------------------------------------------------------------- --------------

delete from "ZXT"."A" where ROWID = 'AAANOsAAGAAAAMWAAA'; A

--其中UNDO_SQL 就是当时对表A的DML操作;

五:oracle falshback Database:闪回数据库

oracle10g提供数据库级别的闪回,可以使整个数据库的数据恢复到某一个时间点或者SCN上!由于牵扯到数据库的批量操作,这个方面的知识暂时无法研究了!



你可能感兴趣的:(oracle,数据回复,回闪,falshback)