閃回資料庫(基礎例項講解)

oracle_zsx發表於2013-08-24
一、
檢視閃回資料庫功能是否開啟
SQL> select flashback_on from v$database;
閃回資料庫例項:
1、
查詢當前的時間
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
TIME
-----------------
13-05-30 01:02:40
2、
建立一張表,並插入資料,然後查詢當前的時間
SQL> create table t (id int);
Table created.
SQL> insert into t values(1);
1 row created.
SQL> commit;
Commit complete.
SQL>  select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
TIME
-----------------
13-05-30 01:04:23
3、
發生checkpoint和switchlog
SQL> alter system checkpoint;
System altered.
SQL> alter system switch logfile;
System altered.
4、
關閉資料庫然後開啟資料庫到mount狀態:
shutdown immediate
startup mount
5、
閃回資料庫到建立表之前的狀態
SQL> flashback database to timestamp to_timestamp('13-05-30 01:02:40','yy-mm-dd hh24:mi:ss');
Flashback complete.
6、
閃回之後,開啟資料庫用resetlogs的方式
SQL> alter database open resetlogs;
Database altered.
7、開啟資料庫,查詢表t是否存在(不存在的話就對了)
SQL> select * from t;
select * from t
              *
ERROR at line 1:
ORA-00942: table or view does not exist
警告:
閃回資料庫需要注意的問題:
1、必須在歸檔模式下
2、必須在mount狀態下閃回資料庫
3、必須以resetlog的方式開啟
4、閃回資料庫日誌預設放在閃回恢復區
5、如果閃回恢復區滿了,那麼資料庫就會hang住
 

二、
閃回資料庫,用SCN的方法
1、
查詢當前的系統改變號(兩種方法)
方法一:
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
     678771
方法二:
select timestamp_to_scn(sysdate)  from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
                   678772
2、
查詢表中的資料
SQL> select * from t;
        ID
----------
         1
刪除表中的資料
delete from t;
1 row deleted.
然後查詢當前的scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
     679055
3、
在mount狀態下去閃回資料庫
SQL> flashback database to scn 678799;
Flashback complete.
4、
開啟資料庫,並查詢表中的資料是否存在
SQL> alter database open resetlogs;
Database altered.
SQL> select * from t;
        ID
----------
         1
注意:
之間不能有ddl操作
 

三、
閃回資料庫,模擬閃回日誌丟失
1、
關閉資料庫
shutdown immediate
2、
切到閃回恢復區
cd /u01/app/oracle/flash_recovery_area/ORCL/
幹掉所有的閃回日誌
rm -rf *
3、
啟動資料庫到mount
SQL> startup mountORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size             113247632 bytes
Database Buffers          197132288 bytes
Redo Buffers                2973696 bytes
Database mounted.
開啟資料庫(發現出錯了)
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database
4、
解決辦法:
先關閉閃回資料庫功能
SQL> alter database flashback off;
Database altered.
5、
開啟資料庫
SQL> alter database open;
Database altered.
6、
檢視閃回資料庫是否開啟
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29107230/viewspace-769175/,如需轉載,請註明出處,否則將追究法律責任。

相關文章