重装了操作系统,存储数据文件的盘符发生了变化,所以,通过重建控制文件来恢复了数据库。
过了几天后才发现这个重建控制文件的脚本是旧的,有十几个数据文件没有包含在脚本中(数据文件还在)。
当SQL访问到存储在这些表空间的数据时就会报错,提示数据文件不存在。
修改数据文件为离线,可以打开数据库,但是尝试介质恢复时,发现没有之前并没有启用归档。
而且之前的在线日志文件也没有备份,已经用Resetlog方式打开数据库运行了一段时间了。
现在,请问:有没有可能把这十几个数据文件正常加入到数据库中来?
答案是,可以。
1.通过重设日志文件方式来重建控制文件,脚本中补上之前遗漏的数据文件。
2.设置隐含参数_allow_resetlogs_corruption,跳过一致性检查
3.设置这个隐含参数后,要使用resetlogs选项打开数据库,隐含参数才会生效,否则Oracle在打开数据库时会忽略此参数。
不完全恢复后,原来的online redo log里面包含的是未做恢复前的数据,而这些数据对于恢复后的数据库不再有效,
所以,数据库会要求在Open之前先对online redo log的sequence置零。
Resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,
每次使用Resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容。
Oracle把这个数据库逻辑生存期称为incarnation,每次使用resetlogs打开数据库,就会使incarnation + 1,也就是产生一个新的incarnation。
参考代码:
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 524288000 bytes
Fixed Size 1291576 bytes
Variable Size 150997704 bytes
Database Buffers 364904448 bytes
Redo Buffers 7094272 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "DYYY" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\DYYY\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\DYYY\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\DYYY\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'E:\DYYY\SYSTEM01.DBF',
13 'E:\DYYY\ZL9PEISDATA.DBF',
14 'E:\DYYY\SYSAUX01.DBF',
15 'E:\DYYY\USERS01.DBF',
16 'E:\DYYY\ZLTOOLSTBS.DBF',
17 'E:\DYYY\ZL9BASEITEM.DBF',
18 'E:\DYYY\ZL9PATIENT.DBF',
19 'E:\DYYY\ZL9EXPENSE.DBF',
20 'E:\DYYY\ZL9MEDLST.DBF',
21 'E:\DYYY\ZL9DUEREC.DBF',
22 'E:\DYYY\ZL9CISREC.DBF',
23 'E:\DYYY\ZL9EPRLOB.DBF',
24 'E:\DYYY\ZL9EPRDAT.DBF',
25 'E:\DYYY\ZL9CISAUDIT.DBF',
26 'E:\DYYY\ZL9INDEXHIS.DBF',
27 'E:\DYYY\ZL9INDEXCIS.DBF',
28 'E:\DYYY\ZLBAK1.DBF',
29 'E:\DYYY\ZLBAK2014.DBF',
30 'E:\DYYY\ZLPDT.DBF',
31 'E:\DYYY\UNDOTBS02.DBF',
32 'E:\DYYY\ZL9BLOODDATA.DBF',
33 'E:\DYYY\ZL9DEVBASE.DBF',
34 'E:\DYYY\ZL9DEVREC.DBF',
35 'E:\DYYY\ZL9DEVUSE.DBF',
36 'E:\DYYY\ZL9INDEXDEV.DBF',
37 'E:\DYYY\ZL9IFTBASE.DBF',
38 'E:\DYYY\ZL9IFTREC.DBF',
39 'E:\DYYY\ZL9INDEXIFT.DBF',
40 'E:\DYYY\ZL9LISDATA.DBF',
41 'E:\DYYY\ZL9INDEXLIS.DBF',
42 'E:\DYYY\ZL9MTLBASE.DBF',
43 'E:\DYYY\ZL9MTLREC.DBF',
44 'E:\DYYY\ZL9INDEXMTL.DBF',
45 'E:\DYYY\ZL9MEDBASE.DBF',
46 'E:\DYYY\ZL9MEDREC.DBF',
47 'E:\DYYY\ZL9MEDDAY.DBF',
48 'E:\DYYY\ZL9INDEXMDR.DBF',
49 'E:\DYYY\ZL9OPSDATA.DBF',
50 'E:\DYYY\ZLPACSBASETAB.DBF',
51 'E:\DYYY\ZL9WIZARDDATA.DBF',
52 'E:\DYYY\ZL9INDEXPSS.DBF',
53 'E:\DYYY\ZLDCHIS.DBF',
54 'E:\DYYY\ZLDCIDXHIS.DBF',
55 'E:\DYYY\ZLPACSBASEINDEX.DBF',
56 'E:\DYYY\ZLPACSBIZTAB.DBF',
57 'E:\DYYY\ZLPACSBIZINDEX.DBF',
58 'E:\DYYY\ZLPACSBIZXML.DBF',
59 'E:\DYYY\ZLBAK2012.DBF',
60 'E:\DYYY\ZLISS10.DBF'
61 CHARACTER SET ZHS16GBK
62 ;
控制文件已创建。
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
SQL> startup force mount
ORACLE 例程已经启动。
Total System Global Area 524288000 bytes
Fixed Size 1291576 bytes
Variable Size 155192008 bytes
Database Buffers 360710144 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
SQL> alter database open resetlogs;
数据库已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 524288000 bytes
Fixed Size 1291576 bytes
Variable Size 159386312 bytes
Database Buffers 356515840 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/117319/viewspace-2110316/
,如需转载,请注明出处,否则将追究法律责任。