flashback之flashback database

《三思筆記》--讀書筆記

flashback database要求數據庫在歸檔模式,且數據庫必須啓動flashback database和force logging

制約因素:

1,flashback database 用來將數據庫中的數據恢復至之前的某個時間點,而非介質恢復,因此不能使用flashback database恢復之前被刪除的某個數據文件

2,如果控制文件被重建,則在此之前所產生的所有flashback logs通通失效,也就是說不能將flashback databse恢復到控制文件被重建之前

3,不支持對數據庫執行過shrink操作後的恢復


flashback database操作示例

1,將數據庫啓動flashback database和force logging

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2228944 bytes
Variable Size             318770480 bytes
Database Buffers           92274688 bytes
Redo Buffers                4272128 bytes
Database mounted.
SQL> alter database flashback on;

Database altered.

SQL> alter database force logging;

Database altered.

SQL> alter database open;

Database altered.

2,檢查是否啓動了flash recovery area

SQL> conn / as sysdba
Connected.
SQL> show parameter DB_RECOVER

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/oracle/app/oracle/fast_re
                                                 covery_area
db_recovery_file_dest_size           big integer 4122M

3,檢查是否啓用了歸檔

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/arch_log
Oldest online log sequence     1
Next log sequence to archive   2
Current log sequence           2

4,檢查是否啓用了flashback database 和force logging

SQL> select flashback_on,force_logging from v$database;

FLASHBACK_ON       FOR
------------------ ---
YES                YES

5,查詢當前的SCN

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1806450

6,模擬誤刪除操作

SQL> conn cindy/cindy;
Connected.
SQL> drop table flash_tbl purge;

Table dropped.

7,重新啓動到Mount 狀態,然後執行恢復

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2228944 bytes
Variable Size             318770480 bytes
Database Buffers           92274688 bytes
Redo Buffers                4272128 bytes
Database mounted.

SQL> flashback database to scn 1806450;

Flashback complete.

至此之後,有兩種方式打開數據庫

1)alter database open resetlogs

2)另一種方式是先執行alter database open read only打開數據庫,然後立刻通過邏輯導出的方式將誤操作涉及表的數據導出,再執行recover database命令以重新應用數據庫產生的redo,將數據庫修復到flashback database操作前的狀態,然後再通過邏輯導入的方式,將之前誤操作的表重新導入

SQL> alter database open resetlogs;

Database altered.

SQL> conn cindy/cindy;
Connected.
SQL> select * from flash_tbl;

        ID VL
---------- --
         8 G
         9 H
        10 I
        11 J
        12 K
        13 L
        14 M
        15 N
       116 O
       117 P
       118 Q

        ID VL
---------- --
       119 R
       120 S
       201 A1
       202 B1

15 rows selected.

顯然數據回來了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章