-
1.将oracle关闭
-
shutdown immediate;
-
-
2.启动到mount状态
-
startup mount;
-
-
3.检查oracle是否开启了archivelog模式,如果没开,则可能会报错
-
3.1 开启归档
-
alter database archivelog;
-
3.2 开启闪回特性
-
alter database flashback on;
-
注意:
-
如果开启了归档,则可以顺利打开闪回特性,否则会报下列错误:
-
ERROR at line 1:
-
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
-
ORA-38707: Media recovery is not enabled.
-
-
4.启动oracle到open状态
-
alter database open;
-
-
5.查看flashback的闪回时间
-
show parameter undo_retention ;
-
默认是900秒,也就是15分钟。
-
-
以下为具体的操作:
-
flashback:即回闪,是从oracle9i就开始提出的一种操作恢复的功能,在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权限
-
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上!由于牵扯到数据库的批量操作,这个方面的知识暂时无法研究了!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28878983/viewspace-2137633/
,如需转载,请注明出处,否则将追究法律责任。