Oracle 10g的新特性flashback

來源:互聯網
上載者:User
  1、flashback drop

    目前,Oracle10g為了加快使用者錯誤操作的恢複,提供了flashback drop新特性。

    flashback drop功能可以允許你從當前資料庫中恢複一個被drop了的對象,在執行drop操作時,現在Oracle不是真正刪除它,而是將該對象自動將清除。“資源回收筒”我們可以理解為一個虛擬容器,它用來存放所有被刪除的對象。在資源回收筒中,被刪除的對象將佔用建立時的同樣的空間,你甚至還可以對已經刪除的表查詢,也可以利用flashback功能來恢複它,這個就是flashback drop功能。

    資源回收筒內的相關資訊我們可以從recyclebin /user_recyclebin/dba_recyclebin等視圖中擷取,或者通過SQL*Plus的show recyclebin 命令查看。

例:

SQL> create table myemp as select * from emp

表建立.

 

SQL>  drop table myemp

表刪除.

 

SQL> show recyclebin

ORIGINAL NAME       RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

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

MYEMP            BIN$3oMpfWHfR6q1ccyEgXwBvg==$0 TABLE        2008-05-17:09:42:54

 

-----------------------閃回還原

SQL> flashback table myemp to before drop

  2  /

 

閃回完成。

 

SQL> select empno ,ename ,job,sal deptno from myemp where deptno=20

2       /

3        

4            EMPNO ENAME      JOB           DEPTNO

5       ---------- ---------- --------- ----------

6             7369 SMITH      CLERK            800

7             7566 JONES      MANAGER         2975

8             7788 SCOTT      ANALYST         3000

9             7876 ADAMS      CLERK           1100

10            7902 FORD       ANALYST         3000

 

    注意:使用"purge recyclebin"可以清除資源回收筒中的所有對象。

    同時,您也可以通過purge user_recyclebin或purge dba_recyclebin來清除不同的資源回收筒對象。通過PURGE TABLESPACE TSNAME,PURGE TABLESPACE TSNAME USER USERNAME命令來選擇清除資源回收筒。

    假如需要徹底刪除一個表,不想放到資源回收筒中,可以在drop語句中增加purge選項,例如:drop table tablename purge

    注釋:您需要注意的是sysdba的Drop操作不會被記錄,Oracle從不推薦使用者用sysdba身份來建立使用者物件。

 

   2、flashback database

    如果想啟動FLASHBACK DATABASE的功能,您必須在MOUNT模式下,執行alter database  flashback on命令。或者是alter tablespace tsname flashback on,資料庫將採集falshback log,如果需要關閉該功能,則修改On為OFF。
    如果想執行flashback database命令,你可以在兩種方式下執行:RMAN與SQLPLUS。

SQL >flashback database to time to_date(xxx);
SQL >flashback database to time TO_TIMESTAMP (xxx);
SQL >flashback database to scn xxx
SQL >flashback database to sequence xxx thread 1
SQL>flashback database to timestamp(sysdate-1/24)

    我們下面看看具體的例子說明

SQL>shutdown immediate;--立即關閉資料庫和執行個體

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount; --啟動執行個體並載入資料庫
ORACLE instance started.
Total System Global Area  113246208 bytes
Fixed Size                   787708 bytes
Variable Size              87030532 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
Database mounted.

SQL> alter database flashback on;--開啟閃回功能
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38707: Media recovery is not enabled.
可以看到,flashback還必須要歸檔的保證

SQL> alter database archivelog;--設為歸檔模式
Database altered.

SQL> alter database flashback on;
Database altered.

SQL> alter database open;--開啟資料庫
Database altered.

SQL> archive log list; --查看當前模式
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     13
Next log sequence to archive   15
Current log sequence           15
    經過以上步驟,我們確保了flashback database的功能,我們還可以發現,10g的自動歸檔是不需要手工幹預的,只要開啟了歸檔,就是自動歸檔了,歸檔區也在DB_RECOVERY_FILE_DEST參數指定的地點。

通過如下的查詢
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    Session altered.
SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
             1135440 2008-05-17 15:20:54

    我們可以知道,可以前滾恢複到的最早的SCN與時間點是多少,如果沒有確保flashback database,該視圖將沒有查詢結果。

    我們建立三個一樣的表
SQL> create table t1 as select * from dba_objects;
Table created.
SQL> create table t2 as select * from t1;
Table created.
SQL> create table t3 as select * from t1;
Table created.
SQL> set time on;
SQL> select sysdate from dual;
SYSDATE
-------------------
2008-05-17 15:29:33

    我們確定了一個時間點
    現在,我們分別truncate一個表與drop一個表,類比誤操作。

SQL> set time on;
15:30:10 SQL> truncate table t2;
Table truncated.
15:30:43 SQL> drop table t3;
Table dropped.
    沒有備份,我們利用flashback來恢複資料庫到2008-05-17 15:29:33時間點。

15:39:02 SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

15:39:31 SQL> startup mount exclusive
ORACLE instance started.

15:41:19 SQL> FLASHBACK DATABASE TO timestamp(to_date(2008-05-17 15:29:33','yyyy-mm-dd hh24:mi:ss'));
Flashback complete.

    之後,我們可以用 ALTER DATABASE OPEN READ ONLY 來檢查結果是否正確,如果滿足結果,則可以用resetlog來正式啟動資料庫,注意,一旦resetlogs之後,將不能再flashback的resetlogs之前的時間點。

15:41:32 SQL> alter database open resetlogs;
Database altered.
我們現在查詢那三個表
15:42:10 SQL> select count(*) from t1;
  COUNT(*)
----------
     47708
15:42:47 SQL> select count(*) from t2;
  COUNT(*)
----------
     47708
15:42:50 SQL> select count(*) from t3;
  COUNT(*)
----------
     47708

    發現truncate的記錄或者是drop的表都存在,現在資料庫已經前滾到前一個時間點了。

15:44:56 SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM $FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
             1136169 2008-05-17 15:41:50
    同時探索資料庫的最早的flashback的時間與scn都回到resetlog的時間點了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.