如何强制打开Oracle数据库?

数据库正常关闭之后,数据文件头有以下几个典型的特征:
数据文件头的SCN和数据文件记录在控制文件中的SCN处于一致状态。即VKaTeX parse error: Expected 'EOF', got '#' at position 27: …ECKPOINT_CHANGE#̲和VDATAFILE_HEADER.CHECKPOINT_CHANGE#相同。
控制文件中的LAST_CHANGE#和数据文件头的SCN值相同。即VKaTeX parse error: Expected 'EOF', got '#' at position 21: …ILE.LAST_CHANGE#̲和VDATAFILE_HEADER.CHECKPOINT_CHANGE#相同。
数据文件头的CHECKPOINT COUNT和数据文件记录在控制文件中的CHECKPOINT COUNT处于一致状态。
数据文件头的fuzzy状态为NO。
而异常关闭的数据库则有以下几个典型的特征:
数据文件头的fuzzy标记为YES。当数据块的SCN可能大于数据文件头的SCN时,fuzzy标记为YES,所以数据库打开时的数据文件头fuzzy状态始终为YES。
VKaTeX parse error: Expected 'EOF', got '#' at position 21: …ILE.LAST_CHANGE#̲值为空,各个数据文件头的SCN…datafile_header;

 FILE# STATUS  CHECKPOINT_CHANGE#

     1 ONLINE          1073843946
     2 ONLINE          1073843946
     3 ONLINE          1073843946
     4 ONLINE          1073843946

Oracle 9i数据文件头的SCN存放在数据文件头块offset 140中,占6个字节。Oracle 10g/11g数据文件头的SCN存放在数据文件头块offset 484中,占6个字节,以下为bbed查看结果:
BBED> dump offset 484
File: /ora10205/oradata/ora10205/system01.dbf (0)
Block: 1 Offsets: 484 to 491 Dba:0x00000000

ea8e0140 00000000

<32 bytes per line>
用bbed修改所有数据文件头的SCN值为1099616200704(1073843946*1024),16进制值为0x100063BA800。以下为用bbed工具修改system01.dbf的过程:
BBED> dump offset 484
File: /ora10205/oradata/ora10205/system01.dbf (0)
Block: 1 Offsets: 484 to 491 Dba:0x00000000

ea8e0140 00000000

<32 bytes per line>

BBED> modify 0x00a83b06
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /ora10205/oradata/ora10205/system01.dbf (0)
Block: 1 Offsets: 484 to 491 Dba:0x00000000

00a83b06 00000000

BBED> dump offset 488
File: /ora10205/oradata/ora10205/system01.dbf (0)
Block: 1 Offsets: 488 to 495 Dba:0x00000000

00100000 bd66262f

<32 bytes per line>

BBED> modify 0x0001
File: /ora10205/oradata/ora10205/system01.dbf (0)
Block: 1 Offsets: 488 to 495 Dba:0x00000000

00010000 bd66262f

<32 bytes per line>

BBED> sum apply
Check value for File 0, Block 1:
current = 0xb4ca, required = 0xb4ca
用bbed工具修改数据文件头完成之后,所有数据文件头的SCN显示为如下内容:
SQL> select file#,status,checkpoint_change# from v$datafile_header;

 FILE# STATUS        CHECKPOINT_CHANGE#

     1 ONLINE             1099616200704
     2 ONLINE             1099616200704
     3 ONLINE             1099616200704
     4 ONLINE             1099616200704

(2)用bbed修改数据文件头的fuzzy标记。它位于数据文件头块offset 138中,占1个字节。0x04表示fuzzy为YES,0x00表示fuzzy为NO。修改之前数据文件头的SCN显示为YES:
SQL> select file#,status,fuzzy from v$datafile_header;

 FILE# STATUS  FUZ

     1 ONLINE  YES
     2 ONLINE  YES
     3 ONLINE  YES
     4 ONLINE  YES

修改所有数据文件头的fuzzy标记,将YES修改为NO。以下为用bbed工具修改system01.dbf的过程:
BBED> dump
File: /ora10205/oradata/ora10205/system01.dbf (1)
Block: 1 Offsets: 138 to 138 Dba:0x00400001

04

<32 bytes per line>

BBED> modify 0x00
File: /ora10205/oradata/ora10205/system01.dbf (1)
Block: 1 Offsets: 138 to 138 Dba:0x00400001

00

<32 bytes per line>

BBED> sum apply
Check value for File 1, Block 1:
current = 0xb4ce, required = 0xb4ce
修改完成之后,所有数据文件头的fuzzy显示为NO:
SQL> select file#,status,fuzzy from v$datafile_header;

 FILE# STATUS  FUZ

     1 ONLINE  NO
     2 ONLINE  NO
     3 ONLINE  NO
     4 ONLINE  NO

(3)用resetlogs选项重建控制文件,如下所示:
SQL> startup nomount
ORACLE instance started.

Total System Global Area 314572800 bytes
Fixed Size 1273468 bytes
Variable Size 83886468 bytes
Database Buffers 226492416 bytes
Redo Buffers 2920448 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE “ORA10205” RESETLOGS FORCE LOGGING ARCHIVELOG
2 MAXLOGFILES 67
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 ‘/ora10205/oradata/ora10205/redo01.log’ SIZE 50M,
9 GROUP 2 ‘/ora10205/oradata/ora10205/redo02.log’ SIZE 50M,
10 GROUP 3 ‘/ora10205/oradata/ora10205/redo03.log’ SIZE 50M,
11 GROUP 4 ‘/ora10205/oradata/ora10205/redo04.log’ SIZE 50M,
12 GROUP 5 ‘/ora10205/oradata/ora10205/redo05.log’ SIZE 50M
13 – STANDBY LOGFILE
14 DATAFILE
15 ‘/ora10205/oradata/ora10205/system01.dbf’,
16 ‘/ora10205/oradata/ora10205/undotbs01.dbf’,
17 ‘/ora10205/oradata/ora10205/sysaux01.dbf’,
18 ‘/ora10205/oradata/ora10205/users01.dbf’
19 CHARACTER SET ZHS16GBK
20 ;

Control file created.
使用RESETLOGS选项控制文件重建过程中,控制文件中的数据文件SCN取自数据文件头的SCN,重建完成之后数据文件状态显示为RECOVER,如下所示:
SQL> select file#,status,checkpoint_change# from v$datafile;

 FILE# STATUS        CHECKPOINT_CHANGE#

     1 SYSTEM             1099616200704
     2 RECOVER            1099616200704
     3 RECOVER            1099616200704
     4 RECOVER            1099616200704

(3)使用不完全恢复命令之后,强制打开数据库。可以看到数据库的CURRENT SCN值已经在数据文件头SCN值的基础上递增。如下所示:
SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

SQL> recover database using backup controlfile until cancel;
ORA-00279: change 1099616200704 generated at 08/11/2012 14:57:01 needed for
thread 1
ORA-00289: suggestion : /archlog/ora10205/1_43_790110410.dbf
ORA-00280: change 1099616200704 for thread 1 is in sequence #43

Specify log: {=suggested | filename | AUTO | CANCEL}
cancel

SQL> alter database open resetlogs;

Database altered.

SQL> select current_scn from v$database;

   CURRENT_SCN

 1099616201151
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值