Oracle Study之案例--數據恢復神器Flashback(3)
Flashback Database:
案例分析:
flashback database:利用flashback log 對整個database 做回退到過去的某個時間點(用于DDL 的誤操作如drop 和 truncate),類似于RMAN的不完全恢復(media recovery incompelete)
因為flashback database是不完全恢復,在恢復到過去的時間點前應該對數據庫備份!
1、查看flashback database是否開啟 07:21:27 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO 2、創建recovery area 07:21:33 SQL> show parameter recover NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/flash_recovery _area db_recovery_file_dest_size big integer 2G recovery_parallelism integer 2 ---recovery area可以存儲flashback log、archive log、rman backup等 [oracle@work ~]$ mkdir -p /disk1/recovery/prod 配置recovery area: 07:22:49 SQL> alter system set db_recovery_file_dest='/disk1/recovery/prod' scope=spfile; System altered. 在歸檔模式下啟用flashback database: 07:25:06 SQL> alter database flashback on; Database altered. 07:25:29 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES 07:25:38 SQL> alter database open; Database altered. 案例1:flashback database恢復DDL誤操作(基于SCN) flashback database可以用于基于時間點或SCN的數據恢復(可以通過logminer來查看DDL操作的時間點) 1)模擬環境 15:18:17 SYS@ test1 >select current_scn from v$database; CURRENT_SCN ----------- 1264788 07:26:30 SQL> select * from test; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 16 rows selected. 07:26:36 SQL> drop table test purge; Table dropped. 07:27:20 SQL> create table test as select * from emp where rownum=1; Table created. 07:27:25 SQL> select * from test; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 查看flashback 日志: [oracle@work ~]$ ls /disk1/recovery/prod/PROD/flashback/ o1_mf_74q999lb_.flb 關閉數據庫后,在mount狀態下恢復: 07:29:22 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. 07:29:53 SQL> startup mount ORACLE instance started. Total System Global Area 314572800 bytes Fixed Size 1219184 bytes Variable Size 71304592 bytes Database Buffers 239075328 bytes Redo Buffers 2973696 bytes Database mounted. 通過flashback database將庫恢復到過去的scn: 07:30:02 SQL> flashback database to scn 1264788; Flashback complete. 將database以read only方式打開,先驗證下恢復是否成功,如果不成功,再從新進入mount下恢復 07:31:29 SQL> alter database open read only; Database altered. 07:31:34 SQL> select * from scott.test; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 16 rows selected. --恢復成功,重新以resetlogs的方式open database 07:31:40 SQL> shutdown immedaite SP2-0717: illegal SHUTDOWN option 07:31:45 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. 07:32:02 SQL> startup mount ORACLE instance started. Total System Global Area 314572800 bytes Fixed Size 1219184 bytes Variable Size 71304592 bytes Database Buffers 239075328 bytes Redo Buffers 2973696 bytes Database mounted. 07:32:10 SQL> alter database open resetlogs; Database altered. 驗證: 07:32:25 SQL> select * from scott.test; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 16 rows selected. 因為flashback database是不完全恢復,在恢復到過去的時間點前應該對數據庫備份! 案例2:基于timestamp的flashback database 04:04:28 SQL> show user; USER is "SYS" 04:08:04 SQL> conn scott/tiger Connected. 04:08:13 SQL> select to_char(sysdate,'yyyy-mm-dd hh34:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2011-03-18 04:08:42 04:09:02 SQL> conn /as sysdba Connected. 04:09:07 SQL> select current_scn from v$database; CURRENT_SCN ----------- 1437597 04:09:10 SQL> conn scott/tiger Connected. 04:09:29 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- EMP TABLE DEPT TABLE BONUS TABLE SALGRADE TABLE QUEST_SL_TEMP_EXPLAIN1 TABLE EMP1 TABLE ERRLOG TABLE PART_SALES TABLE T01 TABLE DEPT1 TABLE 10 rows selected. select * from t01; ID NA ---------- -- 1 TM 04:10:07 SQL> insert into t01 values(2,'aa'); 1 row created. 04:10:17 SQL> insert into t01 values(3,'bb'); 1 row created. 04:10:26 SQL> commit; Commit complete. 04:10:30 SQL> drop table t01; Table dropped. 04:10:59 SQL> conn /as sysdba Connected. 04:11:03 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. 04:11:28 SQL> startup mount ORACLE instance started. Total System Global Area 314572800 bytes Fixed Size 1219184 bytes Variable Size 184550800 bytes Database Buffers 125829120 bytes Redo Buffers 2973696 bytes Database mounted. 將database恢復到過去的時間點: 04:12:07 SQL> flashback database to timestamp to_timestamp('2011-03-18 04:10:26','yyyy-mm-dd hh34:mi:ss'); Flashback complete. 04:13:34 SQL> alter database open; alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open 04:14:10 SQL> alter database open noresetlogs; alter database open noresetlogs * ERROR at line 1: ORA-01610: recovery using the BACKUP CONTROLFILE option must be done 04:14:18 SQL> alter database open resetlogs; Database altered. 04:15:35 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- 1 1 0 52428800 2 YES UNUSED 0 2 1 0 52428800 2 YES UNUSED 0 3 1 0 52428800 2 YES UNUSED 0 4 1 0 52428800 2 YES UNUSED 0 5 1 0 52428800 2 YES UNUSED 0 6 1 1 52428800 2 NO CURRENT 1437637 2011-03-18 04:14:27 6 rows selected. 04:15:59 SQL> conn scott/tiger Connected. 04:16:18 SQL> select * from t01; ID NA ---------- -- 1 TM 04:34:35 SQL> desc v$flashback_database_log; Name Null? Type ----------------------------------------------------------------------------------- -------- - OLDEST_FLASHBACK_SCN NUMBER OLDEST_FLASHBACK_TIME DATE RETENTION_TARGET NUMBER FLASHBACK_SIZE NUMBER ESTIMATED_FLASHBACK_SIZE NUMBER 04:34:37 SQL> select * from v$flashback_database_log; OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE TIMATED_FLASHBACK_SIZE -------------------- ------------------- ---------------- -------------- ---------------------- 1436931 2011-03-18 03:51:43 1440 8192000 115703808
[oracle@rh7 ~]$ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 15 11:38:34 2015 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. 11:41:52 SYS@ test1 >select name,FLASHBACK_ON from v$database; NAME FLASHBACK_ON --------- ------------------ TEST1 YES Elapsed: 00:00:00.00 11:38:34 SYS@ test1 >startup ORACLE instance started. Total System Global Area 523108352 bytes Fixed Size 1337632 bytes Variable Size 188745440 bytes Database Buffers 327155712 bytes Redo Buffers 5869568 bytes Database mounted. Database opened. --下面查看閃回區分配的大小為大約M,閃回分鐘以內的數據則需要M左右的空間 --注意列oldest_flashback_time說明了允許返回的最早的時間點 11:39:17 SYS@ test1 >select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim, 11:39:37 2 retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz, 11:39:47 3 estimated_flashback_size/1024/1024 est_flhbck_size 11:40:01 4 from v$flashback_database_log; OLD_FLHBCK_SCN OLD_FLHBCK_T RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE -------------- ------------ ---------- ---------- --------------- 11898580 10-JAN-15 1440 305.429688 266.601563 --查看閃回 11:40:15 SYS@ test1 >select * from v$flashback_database_stat; BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE ------------ ------------ -------------- ---------- ---------- ------------------------ 15-JAN-15 15-JAN-15 573440 24576 109056 0 --查看sga中分配的閃回空間大小 11:40:45 SYS@ test1 >select * from v$sgastat where name like 'flashback%'; POOL NAME BYTES ------------ -------------------------- ---------- shared pool flashback generation buff 4149140 shared pool flashback_marker_cache_si 9196
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。