|
1、构建测试环境
07:01:37 SQL> conn scott/tiger
Connected.
07:01:41 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
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
14 rows selected.
2、DML误操作
07:01:45 SQL> delete from test ;
14 rows deleted.
07:01:59 SQL> commit;
Commit complete.
07:02:03 SQL> select * from test;
no rows selected
07:02:05 SQL> insert into test select * from emp where rownum 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
07:02:37 SQL> commit;
Commit complete.
2、利用logminer工具查找误操作的时间点(挖掘current redo或archive log)
07:03:03 SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 0 52428800 1 YES UNUSED 0
2 1 1 52428800 1 NO CURRENT 1261015 17-AUG-11
3 1 0 52428800 1 YES UNUSED 0
07:03:20 SQL> col member for a50
07:03:23 SQL> select group#,member from v$logfile
GROUP# MEMBER
---------- --------------------------------------------------
3 /u01/app/oracle/oradata/prod/redo03.log
2 /u01/app/oracle/oradata/prod/redo02.log
1 /u01/app/oracle/oradata/prod/redo01.log
11:19:31 SQL> conn /as sysdba
Connected.
11:19:35 SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 12 52428800 2 YES INACTIVE 823116 29-SEP-11
2 1 14 52428800 2 NO CURRENT 828692 29-SEP-11
3 2 9 52428800 2 YES INACTIVE 824371 29-SEP-11
4 2 11 52428800 2 NO CURRENT 828868 29-SEP-11
5 1 13 52428800 2 YES INACTIVE 828670 29-SEP-11
6 2 10 52428800 2 YES INACTIVE 828817 29-SEP-11
6 rows selected.
11:19:41 SQL> col member for a50
11:19:57 SQL> select group# ,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
2 +DG1/prod/onlinelog/group_2.262.762877491
2 +RECOVERY/prod/onlinelog/group_2.258.762877501
1 +DG1/prod/onlinelog/group_1.261.762877473
1 +RECOVERY/prod/onlinelog/group_1.257.762877479
3 +DG1/prod/onlinelog/group_3.266.762877849
3 +RECOVERY/prod/onlinelog/group_3.259.762877855
4 +DG1/prod/onlinelog/group_4.267.762877859
4 +RECOVERY/prod/onlinelog/group_4.260.762877867
6 +DG1/prod/onlinelog/group_6.272.763037401
6 +RECOVERY/prod/onlinelog/group_6.262.763037407
5 +DG1/prod/onlinelog/group_5.271.763037441
GROUP# MEMBER
---------- --------------------------------------------------
5 +RECOVERY/prod/onlinelog/group_5.261.763037613
12 rows selected.
启动数据库附加日志:
11:19:58 SQL>Alter database add supplemental log data;
分析current redolog:
11:20:07 SQL> execute dbms_logmnr.add_logfile(logfilename=>'+DG1/prod/onlinelog/group_2.262.762877491',options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.
11:20:57 SQL> alter session set nls_date_format='yyyy-mm-dd';
Session altered.
11:21:32 SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
07:05:21 SQL> execute dbms_logmnr.end_logmnr;
PL/SQL procedure successfully completed.
查看DML操作的时间点:
11:23:11 SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='EMP1';
USERNAME SCN TIMESTAMP SQL_REDO
------------------------------ ---------- ---------- --------------------------------------------------
830293 2011-09-29 delete from "SCOTT"."EMP1" where "EMPNO" = '7369'
and "ENAME" = 'SMITH' and "JOB" = 'CLERK' and "MGR
" = '7902' and "HIREDATE" = TO_DATE('1980-12-17',
'yyyy-mm-dd') and "SAL" = '800' and "COMM" IS NULL
and "DEPTNO" = '20' and ROWID = 'AAAM01AAEAAAAGEA
AA';
3、flashback query基于时间点的查询
07:08:42 SQL> conn scott/tiger
Connected.
07:08:48 SQL> select * from test as of timestamp to_timestamp('2011-08-17 07:01:59','yyyy-mm-dd hh24:mi:ss');
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
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
14 rows selected.
将查询到的数据写入到表中:
07:08:50 SQL> insert into test (select * from test as of timestamp to_timestamp('2011-08-17 07:01:59','yyyy-mm-dd hh24:mi:ss'));
14 rows created.
07:09:10 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.
---至此,数据恢复完成!
|
|
|