Oracle 各备份恢复环境下 SCN
2013-09-08 21:59
381 查看
转自:http://space.itpub.net/21162451/viewspace-736571
系统检查点scn(v$database(checkpoint_change#)) v$database-信息来自控制文件
information about the database from the control file.
数据文件检查点(v$datafile(checkpoint_change#))v$datafile--信息来自控制文件
file.
数据文件终止scn(v$datafile(last_change#))
启动scn (v$datafile_header(checkpoint_change#) v$datafile_header-信息来自数据文件头
from the datafile headers
1、系统正常关闭:
会使得:system checkpoint scn = datafile checkpoint scn = start scn = stop scn
1)system checkpoint scn = datafile checkpoint scn = start scn,不需要介质恢复
2)stop scn is not null = start SCN,不需要实例恢复
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 2064873
Datafile Start SCN - V$Datafile_header:checkpoint_change# 2064873
Datafile Stop SCN - V$Datafile:Last_change# 2064873
System Checkpoint SCN - V$Database:checkpoint_change# 2064873
2、系统异常关闭:
会使得:system checkpoint scn = datafile checkpoint scn = start scn , stop scn is NULL
1)system checkpoint scn = datafile checkpoint scn = start scn,不需要介质恢复
2)stop scn is null,需要实例恢复
SQL> alter database open;
Database altered.
SQL> startup mount force
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 2064876
Datafile Start SCN - V$Datafile_header:checkpoint_change# 2064876
Datafile Stop SCN - V$Datafile:Last_change#
-->此处为空,需要实例恢复
System Checkpoint SCN - V$Database:checkpoint_change# 2064876
3、旧数据文件
会使得:system checkpoint scn = datafile checkpoint scn > start scn,stop scn is null/ is not null
1)system checkpoint scn = datafile checkpoint scn > start scn
需要介质恢复成system checkpoint scn = datafile checkpoint scn = start scn
2)stop scn is null,需要实例恢复,is not null 不需要实例恢复
用冷备份的数据文件覆盖当前的数据文件,然后
SQL> startup
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf'
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825991
Datafile Start SCN - V$Datafile_header:checkpoint_change#
825008-->此处小于系统检查点,需要介质恢复
Datafile Stop SCN - V$Datafile:Last_change# 825991
System Checkpoint SCN - V$Database:checkpoint_change# 825991
SQL> recover database
Media recovery complete.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825991
Datafile Start SCN - V$Datafile_header:checkpoint_change#
825989-->介质恢复后,两者达到一致
Datafile Stop SCN - V$Datafile:Last_change#
825989-->介质恢复后,两者达到一致
System Checkpoint SCN - V$Database:checkpoint_change# 825991
4、备份控制文件
会使得:system checkpoint scn = datafile checkpoint scn <= start scn(当数据文件为旧且和旧控制文件为同一版本的时候相等,如果数据文件是当前的数据文件则是小于),stop scn not null/null
1)system checkpoint scn = datafile checkpoint scn <= start scn,需要使用using backup controlfile介质恢复成system scn = datafile scn = start scn = current log scn(当前日志最大SCN)
2)为保证上一次恢复没有用到log日志不被使用,必须在恢复完成后用resetlogs打开数据库
用冷备份的控制文件覆盖当前的控制文件,然后
SQL> startup mount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825008
Datafile Start SCN - V$Datafile_header:checkpoint_change#
826676-->数据文件头SCN比控制文件中检查点信息高
Datafile Stop SCN - V$Datafile:Last_change# 825008
System Checkpoint SCN - V$Database:checkpoint_change# 825008
SQL> startup nomount force
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 826676
Datafile Start SCN - V$Datafile_header:checkpoint_change# 826676
Datafile Stop SCN - V$Datafile:Last_change# 826676
System Checkpoint SCN - V$Database:checkpoint_change# 826676
SQL> alter database open;
Database altered.
5、以noresetlogs方式重建控制文件
在以这种方式重建控制文件时,控制文件中的datafile checkpoint scn来自于Online logs中的Current log头,因此
current log scn = system checkpoint scn = datafile scn >= start scn(如果数据文件为备份而来则会大于start SCN,如果是当前的则为相等于start SCN), stop scn not null/null
1)current log scn = system checkpoint scn = datafile checkpoint scn >= start scn,因此需要介质恢复成system checkpoint scn = datafile scn = start scn = redolog scn(当前日志最大SCN)
2)stopscn is not null 不需要实例恢复
以下为简要测试:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN"
NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @gettrace
TRACE
---------------------------------------------------------------------------
/home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
SQL> !:>/home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
SQL> @getlogdump
GROUP# FIRST_CHANGE# NEXT_CHANGE# MEMBER STATUS
---------- ------------- ------------ --------------------------------------------- ----------------
3 823813 826679 /home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z INACTIVE
9z7hfd_.log
1 826679 832119 /home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z INACTIVE
9z796m_.log
2 832119 2.8147E+14 /home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z CURRENT
9z7d97_.log
Enter value for log_file_name:
/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log
old 1: alter system dump logfile '&LOG_FILE_NAME'
new 1: alter system dump logfile '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log'
System altered.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
832119 -->此处控制文件中记录的系统检查点SCN为832119
Datafile Start SCN - V$Datafile_header:checkpoint_change#
828043-->此处StartSCN<System SCN,需要进行介质恢复
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
832119-->此处控制文件中记录的数据文件的检查点SCN为832119
通过查看Current Log的dump trace文件,可发现Current Log的Closed SCN也为
832119 ,控制文件中的Checkpoint SCN与该值一致
SQL> !vi /home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
*** 2012-07-25 09:57:50.769
Log read is SYNCHRONOUS though disk_asynch_io is enabled!
DUMP OF REDO FROM FILE '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log'
Opcodes *.*
RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
Times: creation thru eternity
FILE HEADER:
Compatibility Vsn = 186646528=0xb200000
Db ID=1896079205=0x7103df65, Db Name='SUN'
Activation ID=1896068453=0x7103b565
Control Seq=942=0x3ae, File size=102400=0x19000
File Number=2, Blksiz=512, File Type=2 LOG
descrip:"Thread 0001, Seq# 0000000008, SCN 0x0000000cb277-0xffffffffffff"
thread: 1 nab: 0xffffffff seq: 0x00000008 hws: 0x1 eot: 1 dis: 0
resetlogs count: 0x2ef56169 scn: 0x0000.000b8338 (754488)
prev resetlogs count: 0x296a3120 scn: 0x0000.00000001 (1)
Low scn: 0x0000.000cb277 (832119) 07/25/2012 09:48:45
Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
Enabled scn: 0x0000.000b8338 (754488) 07/05/2012 10:33:13
Thread closed scn: 0x0000.000cb277 (832119) 07/25/2012 09:48:45
Disk cksum: 0x3a97 Calc cksum: 0x3a97
Terminal recovery stop scn: 0x0000.00000000
Terminal recovery 01/01/1988 00:00:00
Most recent redo scn: 0x0000.00000000
Largest LWN: 0 blocks
End-of-redo stream : No
Unprotected mode
Miscellaneous flags: 0x800000
Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000.00000000
SQL> recover database;
Media recovery complete.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 852196
Datafile Start SCN - V$Datafile_header:checkpoint_change# 852196
Datafile Stop SCN - V$Datafile:Last_change# 852196
System Checkpoint SCN - V$Database:checkpoint_change# 832119
SQL> alter database open;
Database altered.
SQL>
6、以resetlogs方式重建控制文件
控制文件中datafile checkpoint scn 来自各数据文件头(start scn),而且system checkpoint scn会归为0
system checkpoint scn < datafile checkpoint scn = start scn,stop scn not null/null
1)system checkpoint scn < datafile checkpoint scn = start scn,需要使用using backup controlfile介质恢复成system checkpoint scn = datafile checkpoint scn = start scn(当前日志最大SCN),stop scn not null
2)stopscn is not null 不需要实例恢复,而且因为SCN已经为redolog scn,log已经不能使用,必须用resetlogs方式打开数据库
以下为简要测试:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
852914-->此处控制文件中记录的数据文件的检查点SCN为852914
Datafile Start SCN - V$Datafile_header:checkpoint_change#
852914-->此处数据文件头上记录的检查点SCN为852914
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
0-->此处控制文件中记录的系统检查点SCN为0
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
852918
Datafile Start SCN - V$Datafile_header:checkpoint_change#
852918
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
852918
SQL> @getlog
GROUP# FIRST_CHANGE# NEXT_CHANGE# MEMBER STATUS
---------- ------------- ------------ --------------------------------------------- ----------------
3 0 0 /home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z UNUSED
9z7hfd_.log
2 0 0 /home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z UNUSED
9z7d97_.log
1 852915 2.8147E+14 /home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z CURRENT
9z796m_.log
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence
1
Next log sequence to archive
1
Current log sequence
1
注:
使用resetlogs打开数据库(log sequence number变为1)后无必完整地备份一次数据库。而且这一操作会抛弃所有在上一次恢复没有用到的日志信息,确保这部分日志不被重新用与恢复。
如果我们指定以alter database open resetlogs打开数据库,那么我们当前online line日志的sequence number会归为1,并且之前的日志信息都会被抛弃。
以下条件需要使用resetlog
1)在不完全恢复(介质恢复)
2)使用备份控制文件(backup的控制文件一般从日志文件和数据库的信息以及SCN的信息,相比目前的状态都已经过期了)
getscn 内容如下:
select 'System Checkpoint SCN - V$Database:checkpoint_change#' "SCN Location",checkpoint_change# from v$database
union
select 'Datafile Checkpoint SCN - V$Datafile:checkpoint_change#' "SCN Location",checkpoint_change# from v$datafile
union
select 'Datafile Start SCN - V$Datafile_header:checkpoint_change#' "SCN Location",checkpoint_change# from v$datafile_header
union
select 'Datafile Stop SCN - V$Datafile : last_change#' "SCN Location",last_change# from v$datafile;
系统检查点scn(v$database(checkpoint_change#)) v$database-信息来自控制文件
V$DATABASEdisplays
information about the database from the control file.
数据文件检查点(v$datafile(checkpoint_change#))v$datafile--信息来自控制文件
V$DATAFILEdisplays datafile information from the control
file.
数据文件终止scn(v$datafile(last_change#))
启动scn (v$datafile_header(checkpoint_change#) v$datafile_header-信息来自数据文件头
V$DATAFILE_HEADERdisplays datafile information
from the datafile headers
1、系统正常关闭:
会使得:system checkpoint scn = datafile checkpoint scn = start scn = stop scn
1)system checkpoint scn = datafile checkpoint scn = start scn,不需要介质恢复
2)stop scn is not null = start SCN,不需要实例恢复
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 2064873
Datafile Start SCN - V$Datafile_header:checkpoint_change# 2064873
Datafile Stop SCN - V$Datafile:Last_change# 2064873
System Checkpoint SCN - V$Database:checkpoint_change# 2064873
2、系统异常关闭:
会使得:system checkpoint scn = datafile checkpoint scn = start scn , stop scn is NULL
1)system checkpoint scn = datafile checkpoint scn = start scn,不需要介质恢复
2)stop scn is null,需要实例恢复
SQL> alter database open;
Database altered.
SQL> startup mount force
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 2064876
Datafile Start SCN - V$Datafile_header:checkpoint_change# 2064876
Datafile Stop SCN - V$Datafile:Last_change#
-->此处为空,需要实例恢复
System Checkpoint SCN - V$Database:checkpoint_change# 2064876
3、旧数据文件
会使得:system checkpoint scn = datafile checkpoint scn > start scn,stop scn is null/ is not null
1)system checkpoint scn = datafile checkpoint scn > start scn
需要介质恢复成system checkpoint scn = datafile checkpoint scn = start scn
2)stop scn is null,需要实例恢复,is not null 不需要实例恢复
用冷备份的数据文件覆盖当前的数据文件,然后
SQL> startup
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf'
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825991
Datafile Start SCN - V$Datafile_header:checkpoint_change#
825008-->此处小于系统检查点,需要介质恢复
Datafile Stop SCN - V$Datafile:Last_change# 825991
System Checkpoint SCN - V$Database:checkpoint_change# 825991
SQL> recover database
Media recovery complete.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825991
Datafile Start SCN - V$Datafile_header:checkpoint_change#
825989-->介质恢复后,两者达到一致
Datafile Stop SCN - V$Datafile:Last_change#
825989-->介质恢复后,两者达到一致
System Checkpoint SCN - V$Database:checkpoint_change# 825991
4、备份控制文件
会使得:system checkpoint scn = datafile checkpoint scn <= start scn(当数据文件为旧且和旧控制文件为同一版本的时候相等,如果数据文件是当前的数据文件则是小于),stop scn not null/null
1)system checkpoint scn = datafile checkpoint scn <= start scn,需要使用using backup controlfile介质恢复成system scn = datafile scn = start scn = current log scn(当前日志最大SCN)
2)为保证上一次恢复没有用到log日志不被使用,必须在恢复完成后用resetlogs打开数据库
用冷备份的控制文件覆盖当前的控制文件,然后
SQL> startup mount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
Database mounted.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 825008
Datafile Start SCN - V$Datafile_header:checkpoint_change#
826676-->数据文件头SCN比控制文件中检查点信息高
Datafile Stop SCN - V$Datafile:Last_change# 825008
System Checkpoint SCN - V$Database:checkpoint_change# 825008
SQL> startup nomount force
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 826676
Datafile Start SCN - V$Datafile_header:checkpoint_change# 826676
Datafile Stop SCN - V$Datafile:Last_change# 826676
System Checkpoint SCN - V$Database:checkpoint_change# 826676
SQL> alter database open;
Database altered.
5、以noresetlogs方式重建控制文件
在以这种方式重建控制文件时,控制文件中的datafile checkpoint scn来自于Online logs中的Current log头,因此
current log scn = system checkpoint scn = datafile scn >= start scn(如果数据文件为备份而来则会大于start SCN,如果是当前的则为相等于start SCN), stop scn not null/null
1)current log scn = system checkpoint scn = datafile checkpoint scn >= start scn,因此需要介质恢复成system checkpoint scn = datafile scn = start scn = redolog scn(当前日志最大SCN)
2)stopscn is not null 不需要实例恢复
以下为简要测试:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN"
NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @gettrace
TRACE
---------------------------------------------------------------------------
/home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
SQL> !:>/home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
SQL> @getlogdump
GROUP# FIRST_CHANGE# NEXT_CHANGE# MEMBER STATUS
---------- ------------- ------------ --------------------------------------------- ----------------
3 823813 826679 /home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z INACTIVE
9z7hfd_.log
1 826679 832119 /home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z INACTIVE
9z796m_.log
2 832119 2.8147E+14 /home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z CURRENT
9z7d97_.log
Enter value for log_file_name:
/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log
old 1: alter system dump logfile '&LOG_FILE_NAME'
new 1: alter system dump logfile '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log'
System altered.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
832119 -->此处控制文件中记录的系统检查点SCN为832119
Datafile Start SCN - V$Datafile_header:checkpoint_change#
828043-->此处StartSCN<System SCN,需要进行介质恢复
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
832119-->此处控制文件中记录的数据文件的检查点SCN为832119
通过查看Current Log的dump trace文件,可发现Current Log的Closed SCN也为
832119 ,控制文件中的Checkpoint SCN与该值一致
SQL> !vi /home/oracle/diag/rdbms/sun/sun/trace/sun_ora_29201.trc
*** 2012-07-25 09:57:50.769
Log read is SYNCHRONOUS though disk_asynch_io is enabled!
DUMP OF REDO FROM FILE '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log'
Opcodes *.*
RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
Times: creation thru eternity
FILE HEADER:
Compatibility Vsn = 186646528=0xb200000
Db ID=1896079205=0x7103df65, Db Name='SUN'
Activation ID=1896068453=0x7103b565
Control Seq=942=0x3ae, File size=102400=0x19000
File Number=2, Blksiz=512, File Type=2 LOG
descrip:"Thread 0001, Seq# 0000000008, SCN 0x0000000cb277-0xffffffffffff"
thread: 1 nab: 0xffffffff seq: 0x00000008 hws: 0x1 eot: 1 dis: 0
resetlogs count: 0x2ef56169 scn: 0x0000.000b8338 (754488)
prev resetlogs count: 0x296a3120 scn: 0x0000.00000001 (1)
Low scn: 0x0000.000cb277 (832119) 07/25/2012 09:48:45
Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
Enabled scn: 0x0000.000b8338 (754488) 07/05/2012 10:33:13
Thread closed scn: 0x0000.000cb277 (832119) 07/25/2012 09:48:45
Disk cksum: 0x3a97 Calc cksum: 0x3a97
Terminal recovery stop scn: 0x0000.00000000
Terminal recovery 01/01/1988 00:00:00
Most recent redo scn: 0x0000.00000000
Largest LWN: 0 blocks
End-of-redo stream : No
Unprotected mode
Miscellaneous flags: 0x800000
Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000.00000000
SQL> recover database;
Media recovery complete.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change# 852196
Datafile Start SCN - V$Datafile_header:checkpoint_change# 852196
Datafile Stop SCN - V$Datafile:Last_change# 852196
System Checkpoint SCN - V$Database:checkpoint_change# 832119
SQL> alter database open;
Database altered.
SQL>
6、以resetlogs方式重建控制文件
控制文件中datafile checkpoint scn 来自各数据文件头(start scn),而且system checkpoint scn会归为0
system checkpoint scn < datafile checkpoint scn = start scn,stop scn not null/null
1)system checkpoint scn < datafile checkpoint scn = start scn,需要使用using backup controlfile介质恢复成system checkpoint scn = datafile checkpoint scn = start scn(当前日志最大SCN),stop scn not null
2)stopscn is not null 不需要实例恢复,而且因为SCN已经为redolog scn,log已经不能使用,必须用resetlogs方式打开数据库
以下为简要测试:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 836976640 bytes
Fixed Size 1339740 bytes
Variable Size 620760740 bytes
Database Buffers 209715200 bytes
Redo Buffers 5160960 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "SUN" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z9z796m_.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z9z7d97_.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z9z7hfd_.log' SIZE 50M BLOCKSIZE 512
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/home/oracle/oradata/SUN/datafile/o1_mf_system_7z9z4zhr_.dbf',
14 '/home/oracle/oradata/SUN/datafile/o1_mf_sysaux_7z9z4zm5_.dbf',
15 '/home/oracle/oradata/SUN/datafile/o1_mf_undotbs1_7z9z4znc_.dbf',
16 '/home/oracle/oradata/SUN/datafile/o1_mf_users_7z9z4zpo_.dbf'
17 CHARACTER SET WE8MSWIN1252
18 ;
Control file created.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
852914-->此处控制文件中记录的数据文件的检查点SCN为852914
Datafile Start SCN - V$Datafile_header:checkpoint_change#
852914-->此处数据文件头上记录的检查点SCN为852914
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
0-->此处控制文件中记录的系统检查点SCN为0
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
SQL> @getscn
SCN Location CHECKPOINT_CHANGE#
--------------------------------------------------------- ------------------
Datafile Checkpoint SCN - V$Datafile:checkpoint_change#
852918
Datafile Start SCN - V$Datafile_header:checkpoint_change#
852918
Datafile Stop SCN - V$Datafile:Last_change#
System Checkpoint SCN - V$Database:checkpoint_change#
852918
SQL> @getlog
GROUP# FIRST_CHANGE# NEXT_CHANGE# MEMBER STATUS
---------- ------------- ------------ --------------------------------------------- ----------------
3 0 0 /home/oracle/oradata/SUN/onlinelog/o1_mf_3_7z UNUSED
9z7hfd_.log
2 0 0 /home/oracle/oradata/SUN/onlinelog/o1_mf_2_7z UNUSED
9z7d97_.log
1 852915 2.8147E+14 /home/oracle/oradata/SUN/onlinelog/o1_mf_1_7z CURRENT
9z796m_.log
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence
1
Next log sequence to archive
1
Current log sequence
1
注:
使用resetlogs打开数据库(log sequence number变为1)后无必完整地备份一次数据库。而且这一操作会抛弃所有在上一次恢复没有用到的日志信息,确保这部分日志不被重新用与恢复。
如果我们指定以alter database open resetlogs打开数据库,那么我们当前online line日志的sequence number会归为1,并且之前的日志信息都会被抛弃。
以下条件需要使用resetlog
1)在不完全恢复(介质恢复)
2)使用备份控制文件(backup的控制文件一般从日志文件和数据库的信息以及SCN的信息,相比目前的状态都已经过期了)
getscn 内容如下:
select 'System Checkpoint SCN - V$Database:checkpoint_change#' "SCN Location",checkpoint_change# from v$database
union
select 'Datafile Checkpoint SCN - V$Datafile:checkpoint_change#' "SCN Location",checkpoint_change# from v$datafile
union
select 'Datafile Start SCN - V$Datafile_header:checkpoint_change#' "SCN Location",checkpoint_change# from v$datafile_header
union
select 'Datafile Stop SCN - V$Datafile : last_change#' "SCN Location",last_change# from v$datafile;
相关文章推荐
- Oracle SCN机制———在备份与恢复中
- oracle正式环境备份恢复到测试环境的一个方便方案
- ORACLE11G 将dataguard的rman备份恢复到测试环境的单机oracle中的详细过程
- Oracle 之利用BBED修改数据块SCN----没有备份数据文件的数据恢复
- ORACLE11G 将dataguard的rman备份恢复到测试环境的单机oracle中的详细过程
- Oracle 之利用BBED修改数据块SCN----极端环境下的数据恢复(一)
- Oracle异常恢复前备份保护现场建议—ASM环境
- Oracle异常恢复前备份保护现场建议—FileSystem环境
- Linux 环境下Oracle安装与调试(七)之SQL Loader,备份和恢复
- Oracle中的SCN与备份,恢复的关系。
- 借助SCN的变化来理解oracle备份与恢复的基本原理
- 【ORACLE备份与恢复】用户管理的:基于scn的数据库不完全恢复
- 【翻译自mos文章】在Oracle 11.2 GI环境中,怎么备份与恢复OLR?
- Oracle技术之利用scn增量备份实现数据库增量恢复
- ORACLE11G 将dataguard的rman备份恢复到測试环境的单机oracle中的具体过程
- Oracle+sde数据备份、恢复
- 某公司金蝶Kingdee EAS ORACLE数据泵在线备份恢复
- Oracle备份与恢复案例(五)
- oracle备份与恢复
- Oracle 数据库的备份与恢复