不完全恢复 - redo损坏
恢复:1. 完全恢复
- 恢复的起点
SQL > select file #,checkpoint_change# from v$datafile_header;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 1191483
2 1191483
3 1191483
4 1191483
5 1191483
- 恢复的终点
SQL > select file #,checkpoint_change# from v$datafile;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 1191483
2 1191483
3 1191483
4 1191483
5 1191483 - 我们需要的是:横向比较,各个文件之间进行比较
- 主动
SQL > select * from t;
ID SCN
-- ------------------ ----------------------------------------
1 1168049
2 1168427
3 1168514
4 1168523
5 1168535
SQL > set time on
22 : 16 : 02 SQL > drop table t;
表已删除。
22 : 16 : 18 SQL >
-- 可以恢复到指定的时间(22:16:02)之前,可以主动要求 - 被动 - 日志文件损坏,无法恢复“终点”
SQL
>
alter
database
add
logfile member
'
D:\app\Administrator\oradata\orcl\log\REDO01.LOG
'
to
group
1
;
数据库已更改。
SQL > alter database add logfile member ' D:\app\Administrator\oradata\orcl\log\REDO02.LOG ' to group 2 ;
数据库已更改。
SQL > alter database add logfile member ' D:\app\Administrator\oradata\orcl\log\REDO03.LOG ' to group 3 ;
数据库已更改。
-- ======刚开始都是INVALID状态,因为没有使用过======
SQL > select group #, sequence#, members from v$ log ;
GROUP # SEQUENCE# MEMBERS
-- -------- ---------- ----------
1 28 2
2 29 2
3 27 2
SQL > select status, member from v$logfile;
STATUS MEMBER
-- ------------ --------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO02. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO03. LOG
-- =====使用一次之后,就有状态了====
SQL > alter system switch logfile;
系统已更改。
SQL > select status, member from v$logfile;
STATUS MEMBER
-- ------------ --------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO03. LOG
数据库已更改。
SQL > alter database add logfile member ' D:\app\Administrator\oradata\orcl\log\REDO02.LOG ' to group 2 ;
数据库已更改。
SQL > alter database add logfile member ' D:\app\Administrator\oradata\orcl\log\REDO03.LOG ' to group 3 ;
数据库已更改。
-- ======刚开始都是INVALID状态,因为没有使用过======
SQL > select group #, sequence#, members from v$ log ;
GROUP # SEQUENCE# MEMBERS
-- -------- ---------- ----------
1 28 2
2 29 2
3 27 2
SQL > select status, member from v$logfile;
STATUS MEMBER
-- ------------ --------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO02. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO03. LOG
-- =====使用一次之后,就有状态了====
SQL > alter system switch logfile;
系统已更改。
SQL > select status, member from v$logfile;
STATUS MEMBER
-- ------------ --------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO01. LOG
INVALID D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO02. LOG
D:\APP\ADMINISTRATOR\ORADATA\ORCL\ LOG \REDO03. LOG
如果有日志文件有备份的镜像(member 坏了一个,但是还有别的),则不影响数据库的正常启动。
但是在跟踪日志文件中,还是会有一些“警告”提示。
NOTE 一个member损害:
- drop镜像,相当于没有做过镜像,修改控制文件...
SQL > alter database drop logfile member ' ***** ' ;
增加/删除日志组
--
没有指明group#,系统会自动搜索&使用最小编号
SQL > alter database add logfile ' E:\ORACLE\WPENG\WPENG\LOG\REDO04.LOG ' size 10m;
Database altered.
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------
1 1 133 52428800 2 YES INACTIVE 2837020 15 - OCT - 12
2 1 134 52428800 2 NO CURRENT 2837025 15 - OCT - 12
3 1 132 52428800 2 YES INACTIVE 2837012 15 - OCT - 12
4 1 0 10485760 1 YES UNUSED 0
-- 也可以自己指明所需要的group#
SQL > alter database add logfile group 6 ' E:\ORACLE\WPENG\WPENG\LOG\REDO05.LOG ' size 10m;
Database altered.
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------
1 1 133 52428800 2 YES INACTIVE 2837020 15 - OCT - 12
2 1 134 52428800 2 NO CURRENT 2837025 15 - OCT - 12
3 1 132 52428800 2 YES INACTIVE 2837012 15 - OCT - 12
4 1 0 10485760 1 YES UNUSED 0
6 1 0 10485760 1 YES UNUSED 0
可以看到,刚添加的日志组,状态都是为UNUSED。
SQL > alter database add logfile ' E:\ORACLE\WPENG\WPENG\LOG\REDO04.LOG ' size 10m;
Database altered.
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------
1 1 133 52428800 2 YES INACTIVE 2837020 15 - OCT - 12
2 1 134 52428800 2 NO CURRENT 2837025 15 - OCT - 12
3 1 132 52428800 2 YES INACTIVE 2837012 15 - OCT - 12
4 1 0 10485760 1 YES UNUSED 0
-- 也可以自己指明所需要的group#
SQL > alter database add logfile group 6 ' E:\ORACLE\WPENG\WPENG\LOG\REDO05.LOG ' size 10m;
Database altered.
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------
1 1 133 52428800 2 YES INACTIVE 2837020 15 - OCT - 12
2 1 134 52428800 2 NO CURRENT 2837025 15 - OCT - 12
3 1 132 52428800 2 YES INACTIVE 2837012 15 - OCT - 12
4 1 0 10485760 1 YES UNUSED 0
6 1 0 10485760 1 YES UNUSED 0
--
drop不会删除物理日志文件
SQL > alter database drop logfile group 6 ;
Database altered.
SQL > alter database drop logfile group 4 ;
Database altered.
SQL > alter database drop logfile group 6 ;
Database altered.
SQL > alter database drop logfile group 4 ;
Database altered.
recover database until ***
- recover database until scn
-
recover database until time
-
recover database until sequence#
???
恢复当下的 = 判别是否丢失数据
--
关闭数据
SQL > shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
-- =====删除当前日志文件组 group 3 所有的member file====
-- 启动数据库到mount状态
SQL > startup mount
ORACLE instance started.
Total System Global Area 1319546880 bytes
Fixed Size 2114656 bytes
Variable Size 503319456 bytes
Database Buffers 805306368 bytes
Redo Buffers 8806400 bytes
Database mounted.
-- 启动数据库到open状态
-- 失败:找不到group 3 的 members
SQL > alter database open ;
alter database open
*
ERROR at line 1 :
ORA - 00313 : open failed for members of log group 3 of thread 1
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
-- 尝试删除 group 3
-- 失败:group 3是当前日志组
SQL > alter database drop logfile group 3 ;
alter database drop logfile group 3
*
ERROR at line 1 :
ORA - 01623 : log 3 is current log for instance wpeng (thread 1 ) - cannot drop
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
-- 尝试切换当前日志组
-- 失败:数据库没有open
SQL > alter system archive log current ;
alter system archive log current
*
ERROR at line 1 :
ORA - 01109 : database not open
SQL > shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
-- =====删除当前日志文件组 group 3 所有的member file====
-- 启动数据库到mount状态
SQL > startup mount
ORACLE instance started.
Total System Global Area 1319546880 bytes
Fixed Size 2114656 bytes
Variable Size 503319456 bytes
Database Buffers 805306368 bytes
Redo Buffers 8806400 bytes
Database mounted.
-- 启动数据库到open状态
-- 失败:找不到group 3 的 members
SQL > alter database open ;
alter database open
*
ERROR at line 1 :
ORA - 00313 : open failed for members of log group 3 of thread 1
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
-- 尝试删除 group 3
-- 失败:group 3是当前日志组
SQL > alter database drop logfile group 3 ;
alter database drop logfile group 3
*
ERROR at line 1 :
ORA - 01623 : log 3 is current log for instance wpeng (thread 1 ) - cannot drop
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
-- 尝试切换当前日志组
-- 失败:数据库没有open
SQL > alter system archive log current ;
alter system archive log current
*
ERROR at line 1 :
ORA - 01109 : database not open
恢复以前的数据文件
--
关闭数据
SQL > shutdown immediate
ORA - 01109 : database not open
Database dismounted.
ORACLE instance shut down.
-- ===删除文件 + 使用用以前的备份文件====
-- 启动数据库到 mount状态
SQL > startup mount
ORACLE instance started.
Total System Global Area 1319546880 bytes
Fixed Size 2114656 bytes
Variable Size 503319456 bytes
Database Buffers 805306368 bytes
Redo Buffers 8806400 bytes
Database mounted.
-- 查看checkpoint_change#
SQL > select file #, checkpoint_change# from v$datafile;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 2839508
2 2839508
3 2839508
4 2839508
5 2839508
SQL > select file #, checkpoint_change# from v$datafile_header;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 2782605
2 2782605
3 2782605
4 2782605
5 2782605
-- 启动数据库 open,报错
SQL > alter database open ;
alter database open
*
ERROR at line 1 :
ORA - 01113 : file 1 needs media recovery
ORA - 01110 : data file 1 : ' E:\ORACLE\WPENG\WPENG\SYSTEM01.DBF '
-- recover database until cancel
SQL > recover database
ORA - 00279 : change 2782605 generated at 09 / 27 / 2012 10 : 09 : 32 needed for thread 1
ORA - 00289 : suggestion : E:\APP\WPENG\PRODUCT\ 11.1 . 0 \FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_09_ 27 \O1_MF_1_118_867GK3OW_
.ARC
ORA - 00280 : change 2782605 for thread 1 is in sequence # 118
Specify log : { < RET >= suggested | filename | AUTO | CANCEL}
ORA - 00283 : recovery session canceled due to errors
ORA - 00313 : open failed for members of log group 3 of thread 1
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
ORA - 27041 : unable to open file
OSD - 04002 : unable to open file
O / S - Error: (OS 2 ) The system cannot find the file specified.
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 27041 : unable to open file
OSD - 04002 : unable to open file
O / S - Error: (OS 2 ) The system cannot find the file specified.
ORA - 01112 : media recovery not started
-- group 3 member删除,只能cancel
SQL > recover database until cancel
ORA - 00279 : change 2839398 generated at 10 / 15 / 2012 09 : 17 : 16 needed for thread 1
ORA - 00289 : suggestion : E:\APP\WPENG\PRODUCT\ 11.1 . 0 \FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_10_ 15 \O1_MF_1_138_ % U_.ARC
ORA - 00280 : change 2839398 for thread 1 is in sequence # 138
Specify log : { < RET >= suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
-- resetlogs方式open database
SQL > alter database open resetlogs;
Database altered.
-- ====删除的member创建由系统创建===
-- 5 commit的数据,在当前group 3,由于被误删除,丢失,不完全恢复
SQL > select * from t;
ID
-- --------
1
2
3
4
-- 由于resetlogs方式打开数据库,所以log的sequence#重新开始了
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 1 52428800 2 YES ACTIVE 2839399 15 - OCT - 12
2 1 2 52428800 2 YES ACTIVE 2839935 15 - OCT - 12
3 1 3 52428800 2 NO CURRENT 2839937 15 - OCT - 12
SQL > shutdown immediate
ORA - 01109 : database not open
Database dismounted.
ORACLE instance shut down.
-- ===删除文件 + 使用用以前的备份文件====
-- 启动数据库到 mount状态
SQL > startup mount
ORACLE instance started.
Total System Global Area 1319546880 bytes
Fixed Size 2114656 bytes
Variable Size 503319456 bytes
Database Buffers 805306368 bytes
Redo Buffers 8806400 bytes
Database mounted.
-- 查看checkpoint_change#
SQL > select file #, checkpoint_change# from v$datafile;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 2839508
2 2839508
3 2839508
4 2839508
5 2839508
SQL > select file #, checkpoint_change# from v$datafile_header;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 2782605
2 2782605
3 2782605
4 2782605
5 2782605
-- 启动数据库 open,报错
SQL > alter database open ;
alter database open
*
ERROR at line 1 :
ORA - 01113 : file 1 needs media recovery
ORA - 01110 : data file 1 : ' E:\ORACLE\WPENG\WPENG\SYSTEM01.DBF '
-- recover database until cancel
SQL > recover database
ORA - 00279 : change 2782605 generated at 09 / 27 / 2012 10 : 09 : 32 needed for thread 1
ORA - 00289 : suggestion : E:\APP\WPENG\PRODUCT\ 11.1 . 0 \FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_09_ 27 \O1_MF_1_118_867GK3OW_
.ARC
ORA - 00280 : change 2782605 for thread 1 is in sequence # 118
Specify log : { < RET >= suggested | filename | AUTO | CANCEL}
ORA - 00283 : recovery session canceled due to errors
ORA - 00313 : open failed for members of log group 3 of thread 1
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\LOG\REDO03.LOG '
ORA - 27041 : unable to open file
OSD - 04002 : unable to open file
O / S - Error: (OS 2 ) The system cannot find the file specified.
ORA - 00312 : online log 3 thread 1 : ' E:\ORACLE\WPENG\WPENG\REDO03.LOG '
ORA - 27041 : unable to open file
OSD - 04002 : unable to open file
O / S - Error: (OS 2 ) The system cannot find the file specified.
ORA - 01112 : media recovery not started
-- group 3 member删除,只能cancel
SQL > recover database until cancel
ORA - 00279 : change 2839398 generated at 10 / 15 / 2012 09 : 17 : 16 needed for thread 1
ORA - 00289 : suggestion : E:\APP\WPENG\PRODUCT\ 11.1 . 0 \FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_10_ 15 \O1_MF_1_138_ % U_.ARC
ORA - 00280 : change 2839398 for thread 1 is in sequence # 138
Specify log : { < RET >= suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
-- resetlogs方式open database
SQL > alter database open resetlogs;
Database altered.
-- ====删除的member创建由系统创建===
-- 5 commit的数据,在当前group 3,由于被误删除,丢失,不完全恢复
SQL > select * from t;
ID
-- --------
1
2
3
4
-- 由于resetlogs方式打开数据库,所以log的sequence#重新开始了
SQL > select * from v$ log ;
GROUP # THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
-- -------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 1 52428800 2 YES ACTIVE 2839399 15 - OCT - 12
2 1 2 52428800 2 YES ACTIVE 2839935 15 - OCT - 12
3 1 3 52428800 2 NO CURRENT 2839937 15 - OCT - 12