wangyan188 发表于 2018-9-10 11:06:23

Oracle Study之案例--数据恢复神器Flashback(3)

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等
  
$ 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 日志:
  
$ 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 Area314572800 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 Area314572800 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 hh24: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                        TABTYPECLUSTERID
  
------------------------------ ------- ----------
  
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 Area314572800 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 hh24: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 NOCURRENT                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


页: [1]
查看完整版本: Oracle Study之案例--数据恢复神器Flashback(3)