生成备份所有数据文件的脚本:
select 'alter tablespace '||tablespace_name||' begin backup;'||chr(10)||
'ho cp -v '||file_name||' /home/oracle/hotbk/'||chr(10)||
'alter tablespace '||tablespace_name||' end backup;'
from dba_data_files;
备份controlfile:
alter database backup controlfile to '/home/oracle/hotbk/ctl_after_reset.bk';
alter database backup controlfile to trace as '/home/oracle/hotbk/cre_ctl.sql';
alter database backup controlfile to '/home/oracle/hotbk/ctl_after_reset.bk';
alter database backup controlfile to trace as '/home/oracle/hotbk/cre_ctl.sql';
备份成功后切换一次归档日志:
alter system switch logfile;
alter system switch logfile;
online redolog 很重要!!!
sql> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
1079325
------------------
1079325
alter tablespace USERS begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/users01.dbf /home/oracle/hotbk/
alter tablespace USERS end backup;
alter tablespace UNDOTBS1 begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/undotbs01.dbf /home/oracle/hotbk/
alter tablespace UNDOTBS1 end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/undotbs01.dbf /home/oracle/hotbk/
alter tablespace UNDOTBS1 end backup;
alter tablespace SYSAUX begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/sysaux01.dbf /home/oracle/hotbk/
alter tablespace SYSAUX end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/sysaux01.dbf /home/oracle/hotbk/
alter tablespace SYSAUX end backup;
alter tablespace SYstem begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/system01.dbf /home/oracle/hotbk/
alter tablespace SYstem end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/system01.dbf /home/oracle/hotbk/
alter tablespace SYstem end backup;
alter tablespace JF_DATA begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data01.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data01.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
alter tablespace JF_DATA begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data02.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data02.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
alter tablespace T2 begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/t2a.dbf /home/oracle/hotbk/
alter tablespace T2 end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/t2a.dbf /home/oracle/hotbk/
alter tablespace T2 end backup;
sql> select CHECKPOINT_CHANGE# from v$database;
COUNT(*)
----------
500002
----------
500002
sql> select CHECKPOINT_CHANGE# from v$database;
COUNT(*)
----------
500002
----------
500002
sql> DELETE FROM DAODAO;
500002 rows deleted.
sql> select CHECKPOINT_CHANGE# from v$database;
sql> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
1079325
sql> conn / as sysdba
Connected.
sql> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/archivelog
Oldest online log sequence 7
Next log sequence to archive 10
Current log sequence 10
sql> select CHECKPOINT_CHANGE# from v$database;
------------------
1079325
sql> conn / as sysdba
Connected.
sql> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/archivelog
Oldest online log sequence 7
Next log sequence to archive 10
Current log sequence 10
sql> select CHECKPOINT_CHANGE# from v$database;
Table dropped.
sql> purge recyclebin;
Recyclebin purged.
sql> select group#,status from v$log where status='CURRENT';
GROUP# STATUS
---------- ----------------
2 CURRENT
sql> SELECT MEMBER FROM V$LOGFILE WHERE GROUP#=2;
---------- ----------------
2 CURRENT
sql> SELECT MEMBER FROM V$LOGFILE WHERE GROUP#=2;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/mdnss/redo02.log
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/mdnss/redo02.log
挖掘dml语句需要将数据库置为追加日志数据模式:
默认只是记录ddl语句
alter database add SUPPLEMENTAL LOG data;
sql> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/mdnss/redo02.log',dbms_logmnr.new);
默认只是记录ddl语句
alter database add SUPPLEMENTAL LOG data;
sql> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/mdnss/redo02.log',dbms_logmnr.new);
PL/sql procedure successfully completed.
sql> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/mdnss/redo01.log',dbms_logmnr.addfile);
PL/sql procedure successfully completed.
sql> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/mdnss/redo03.log',dbms_logmnr.addfile);
PL/sql procedure successfully completed.
sql> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
sql> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/sql procedure successfully completed.
select scn,sql_redo from v$logmnr_contents where lower(sql_redo) like '%drop%' and seg_name='DAODAO' and seg_owner='SCott'
sql> select scn,sql_redo from v$logmnr_contents where lower(sql_redo) like '%drop%' and seg_name='DAODAO' and seg_owner='SCott';
SCN
----------
sql_REDO
--------------------------------------------------------------------------------
1089685
drop table daodao purge;
说明这个SCN号上面删除了这个对应的表所以得进行还原
----------
sql_REDO
--------------------------------------------------------------------------------
1089685
drop table daodao purge;
说明这个SCN号上面删除了这个对应的表所以得进行还原
sql> select * from v$log;
sql> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
1079325
------------------
1079325
alter tablespace USERS begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/users01.dbf /home/oracle/hotbk/
alter tablespace USERS end backup;
alter tablespace UNDOTBS1 begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/undotbs01.dbf /home/oracle/hotbk/
alter tablespace UNDOTBS1 end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/undotbs01.dbf /home/oracle/hotbk/
alter tablespace UNDOTBS1 end backup;
alter tablespace SYSAUX begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/sysaux01.dbf /home/oracle/hotbk/
alter tablespace SYSAUX end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/sysaux01.dbf /home/oracle/hotbk/
alter tablespace SYSAUX end backup;
alter tablespace SYstem begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/system01.dbf /home/oracle/hotbk/
alter tablespace SYstem end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/system01.dbf /home/oracle/hotbk/
alter tablespace SYstem end backup;
alter tablespace JF_DATA begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data01.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data01.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
alter tablespace JF_DATA begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data02.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/jf_data02.dbf /home/oracle/hotbk/
alter tablespace JF_DATA end backup;
alter tablespace T2 begin backup;
ho cp -v /u01/app/oracle/oradata/mdnss/t2a.dbf /home/oracle/hotbk/
alter tablespace T2 end backup;
ho cp -v /u01/app/oracle/oradata/mdnss/t2a.dbf /home/oracle/hotbk/
alter tablespace T2 end backup;
alter database backup controlfile to '/home/oracle/hotbk/ctl_after_reset.bk';
alter database backup controlfile to trace as '/home/oracle/hotbk/cre_ctl.sql';
sql> select CHECKPOINT_CHANGE# from v$database;
alter database backup controlfile to trace as '/home/oracle/hotbk/cre_ctl.sql';
sql> select CHECKPOINT_CHANGE# from v$database;
COUNT(*)
----------
500002
----------
500002
sql> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FirsT_CHANGE# FirsT_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 9 52428800 512 1 YES
INACTIVE 1089570 31-JUL-13 1089575 31-JUL-13
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FirsT_CHANGE# FirsT_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 9 52428800 512 1 YES
INACTIVE 1089570 31-JUL-13 1089575 31-JUL-13
2 1 10 52428800 512 1 NO
CURRENT 1089575 31-JUL-13 2.8147E+14
CURRENT 1089575 31-JUL-13 2.8147E+14
3 1 7 52428800 512 1 YES
INACTIVE 1089560 31-JUL-13 1089565 31-JUL-13
INACTIVE 1089560 31-JUL-13 1089565 31-JUL-13
4 1 8 52428800 512 1 YES
INACTIVE 1089565 31-JUL-13 1089570 31-JUL-13
INACTIVE 1089565 31-JUL-13 1089570 31-JUL-13
select * from v$logfile
GROUP# STATUS TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
/u01/app/oracle/oradata/mdnss/redo03.log
NO
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
/u01/app/oracle/oradata/mdnss/redo03.log
NO
2 ONLINE
/u01/app/oracle/oradata/mdnss/redo02.log
NO
/u01/app/oracle/oradata/mdnss/redo02.log
NO
1 ONLINE
/u01/app/oracle/oradata/mdnss/redo01.log
NO
/u01/app/oracle/oradata/mdnss/redo01.log
NO
4 ONLINE
/u01/app/oracle/oradata/mdnss/redo09.log
NO
/u01/app/oracle/oradata/mdnss/redo09.log
NO
[oracle@node1 hotbk]$ cp -v ./*.dbf /u01/app/oracle/oradata/mdnss/
`./jf_data01.dbf' -> `/u01/app/oracle/oradata/mdnss/jf_data01.dbf'
`./jf_data02.dbf' -> `/u01/app/oracle/oradata/mdnss/jf_data02.dbf'
`./sysaux01.dbf' -> `/u01/app/oracle/oradata/mdnss/sysaux01.dbf'
`./system01.dbf' -> `/u01/app/oracle/oradata/mdnss/system01.dbf'
`./t2a.dbf' -> `/u01/app/oracle/oradata/mdnss/t2a.dbf'
`./undotbs01.dbf' -> `/u01/app/oracle/oradata/mdnss/undotbs01.dbf'
`./users01.dbf' -> `/u01/app/oracle/oradata/mdnss/users01.dbf'
`./jf_data01.dbf' -> `/u01/app/oracle/oradata/mdnss/jf_data01.dbf'
`./jf_data02.dbf' -> `/u01/app/oracle/oradata/mdnss/jf_data02.dbf'
`./sysaux01.dbf' -> `/u01/app/oracle/oradata/mdnss/sysaux01.dbf'
`./system01.dbf' -> `/u01/app/oracle/oradata/mdnss/system01.dbf'
`./t2a.dbf' -> `/u01/app/oracle/oradata/mdnss/t2a.dbf'
`./undotbs01.dbf' -> `/u01/app/oracle/oradata/mdnss/undotbs01.dbf'
`./users01.dbf' -> `/u01/app/oracle/oradata/mdnss/users01.dbf'
[oracle@node1 ~]$ ls /home/oracle/hotbk
jf_data01.dbf jf_data02.dbf sysaux01.dbf system01.dbf t2a.dbf undotbs01.dbf users01.dbf
[oracle@node1 ~]$ ls /u01/app/oracle/oradata/mdnss
control01.ctl jf_data02.dbf redo02.log redo09.log redo10.log system01.dbf temp01.dbf users01.dbf
jf_data01.dbf redo01.log redo03.log redo10b.log sysaux01.dbf t2a.dbf undotbs01.dbf
[oracle@node1 ~]$ cp -v /home/oracle/hotbk/ctl_after_reset.bk /u01/app/oracle/oradata/mdnss/control01.ctl
`/home/oracle/hotbk/ctl_after_reset.bk' -> `/u01/app/oracle/oradata/mdnss/control01.ctl'
[oracle@node1 ~]$ cp -v /home/oracle/hotbk/ctl_after_reset.bk /u01/app/oracle/flash_recovery_area/mdnss/control02.ctl
`/home/oracle/hotbk/ctl_after_reset.bk' -> `/u01/app/oracle/flash_recovery_area/mdnss/control02.ctl'
startup mount
sql> recover database using backup controlfile until change 1089684;
ORA-00279: change 1086571 generated at 07/31/2013 16:01:31 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_3_822209838.dbf
ORA-00280: change 1086571 for thread 1 is in sequence #3
sql> select * from v$recover_file;
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
1 ONLINE ONLINE
1086670
31-JUL-13
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
1 ONLINE ONLINE
1086670
31-JUL-13
2 ONLINE ONLINE
1086631
31-JUL-13
1086631
31-JUL-13
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
3 ONLINE ONLINE
1086599
31-JUL-13
1086599
31-JUL-13
4 ONLINE ONLINE
1086571
1086571
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
31-JUL-13
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
31-JUL-13
5 ONLINE ONLINE
1086706
31-JUL-13
1086706
31-JUL-13
6 ONLINE ONLINE
FILE# ONLINE ONLINE_
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
1086725
31-JUL-13
---------- ------- -------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
---------
1086725
31-JUL-13
7 ONLINE ONLINE
1086744
31-JUL-13
1086744
31-JUL-13
7 rows selected.
注意这个SCN是通过日志查出的SCN -1的状态1089684=1089685-1的SCN状态处去
sql> recover database using backup controlfile until change 1089684;
ORA-00279: change 1086571 generated at 07/31/2013 16:01:31 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_3_822209838.dbf
ORA-00280: change 1086571 for thread 1 is in sequence #3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_3_822209838.dbf
ORA-00279: change 1087756 generated at 07/31/2013 16:10:54 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_4_822209838.dbf
ORA-00280: change 1087756 for thread 1 is in sequence #4
ORA-00278: log file '/home/oracle/archivelog/1_3_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_4_822209838.dbf
ORA-00279: change 1088643 generated at 07/31/2013 16:11:10 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_5_822209838.dbf
ORA-00280: change 1088643 for thread 1 is in sequence #5
ORA-00278: log file '/home/oracle/archivelog/1_4_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_5_822209838.dbf
ORA-00279: change 1089508 generated at 07/31/2013 16:11:27 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_6_822209838.dbf
ORA-00280: change 1089508 for thread 1 is in sequence #6
ORA-00278: log file '/home/oracle/archivelog/1_5_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_6_822209838.dbf
ORA-00279: change 1089560 generated at 07/31/2013 16:13:29 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_7_822209838.dbf
ORA-00280: change 1089560 for thread 1 is in sequence #7
ORA-00278: log file '/home/oracle/archivelog/1_6_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_7_822209838.dbf
ORA-00279: change 1089565 generated at 07/31/2013 16:13:33 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_8_822209838.dbf
ORA-00280: change 1089565 for thread 1 is in sequence #8
ORA-00278: log file '/home/oracle/archivelog/1_7_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_8_822209838.dbf
ORA-00279: change 1089570 generated at 07/31/2013 16:13:37 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_9_822209838.dbf
ORA-00280: change 1089570 for thread 1 is in sequence #9
ORA-00278: log file '/home/oracle/archivelog/1_8_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_9_822209838.dbf
ORA-00279: change 1089575 generated at 07/31/2013 16:13:40 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_10_822209838.dbf
ORA-00280: change 1089575 for thread 1 is in sequence #10
ORA-00278: log file '/home/oracle/archivelog/1_9_822209838.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/archivelog/1_10_822209838.dbf
ORA-00308: cannot open archived log
'/home/oracle/archivelog/1_10_822209838.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional @R_825_4045@ion: 3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
sql> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FirsT_CHANGE# FirsT_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 9 52428800 512 1 YES
INACTIVE 1089570 31-JUL-13 1089575 31-JUL-13
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FirsT_CHANGE# FirsT_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 9 52428800 512 1 YES
INACTIVE 1089570 31-JUL-13 1089575 31-JUL-13
2 1 10 52428800 512 1 NO
CURRENT 1089575 31-JUL-13 2.8147E+14
CURRENT 1089575 31-JUL-13 2.8147E+14
3 1 7 52428800 512 1 YES
INACTIVE 1089560 31-JUL-13 1089565 31-JUL-13
INACTIVE 1089560 31-JUL-13 1089565 31-JUL-13
4 1 8 52428800 512 1 YES
INACTIVE 1089565 31-JUL-13 1089570 31-JUL-13
INACTIVE 1089565 31-JUL-13 1089570 31-JUL-13
select * from v$logfile
GROUP# STATUS TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
/u01/app/oracle/oradata/mdnss/redo03.log
NO
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
/u01/app/oracle/oradata/mdnss/redo03.log
NO
2 ONLINE
/u01/app/oracle/oradata/mdnss/redo02.log
NO
/u01/app/oracle/oradata/mdnss/redo02.log
NO
所以在应用完所有归档日志文件之前 来试用输入在线日志 就 可以恢复到对应的SCN状态点
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/mdnss/redo02.log
Log applied.
Media recovery complete.
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/mdnss/redo02.log
Log applied.
Media recovery complete.
sql> alter database open resetlogs;
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/mdnss/redo02.log
Log applied.
Media recovery complete.
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/mdnss/redo02.log
Log applied.
Media recovery complete.
sql> alter database open resetlogs;
COUNT(*) ---------- 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。