把控制文件备份到trace文件:
[David备注]需要先将数据库置为mount状态: alter database mount;
- SQL> alter database backup controlfile to trace;
-
- Database altered
(5)重建控制文件,先关闭数据库,删除之前从备份中恢复出来的控制文件,启动到nomount状态:
- SQL> shutdown immediate;
- ORA-01109: database not open
-
-
- Database dismounted.
- ORACLE instance shut down.
删除控制文件:
- SQL> startup nomount ;
- ORACLE instance started.
-
- Total System Global Area 3221225472 bytes
- Fixed Size 2024200 bytes
- Variable Size 637537528 bytes
- Database Buffers 2566914048 bytes
- Redo Buffers 14749696 bytes
[David备注]trace文件生成时会生成两个脚本:resetlogs与noresetlogs,且说明如果online redo logs还是全的,就使用noresetlogs,如果online redo logs不可用,则使用resetlogs:
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
(6)用noresetlogs创建,因为联机日志还在,所以可以用noresetlogs的方法创建:
- SQL> CREATE CONTROLFILE REUSE DATABASE
"CTEST" NORESETLOGS ARCHIVELOG
- 2 MAXLOGFILES 16
- 3 MAXLOGMEMBERS 3
- 4 MAXDATAFILES 100
- 5 MAXINSTANCES 8
- 6 MAXLOGHISTORY 292
- 7 LOGFILE
- 8 GROUP 1 '/zxm/cindytest/ctest/redo01.log' SIZE 50M,
- 9 GROUP 2 '/zxm/cindytest/ctest/redo02.log' SIZE 50M,
- 10 GROUP 3 '/zxm/cindytest/ctest/redo03.log' SIZE 50M
- 11 -- STANDBY LOGFILE
- 12 DATAFILE
- 13 '/zxm/cindytest/ctest/system01.dbf',
- 14 '/zxm/cindytest/ctest/undotbs01.dbf',
- 15 '/zxm/cindytest/ctest/sysaux01.dbf',
- 16 '/zxm/cindytest/ctest/users01.dbf'
- 17 CHARACTER SET ZHS16GBK;
-
- Control file created.
-
- SQL> alter database open;
- alter database open
- *
- ERROR at line 1:
- ORA-01113: file 1 needs media recovery
- ORA-01110: data file 1: '/zxm/cindytest/ctest/system01.dbf'
7)目前数据文件还不一致,需要进行介质恢复,但是不用using子句:
- SQL> recover database;
- Media recovery complete.
(8)打开数据库:
- SQL> alter database open;
-
- Database altered.
[David备注]在trace文件中的步骤比这个多一些: -- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- Block change tracking was enabled, so re-enable it now.
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '+DATA/ipcdb/changetracking/ctf.256.835737421' REUSE;
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/ipcdb/tempfile/temp.265.835737729' REUSE;
-- End of tempfile additions.
9.6.6 例子3:用resetlogs方法重建控制文件
(1)模拟过程和之前的步骤都一样,就不再演示了,主要看重建控制文件之后的操作。
(2)因为联机日志还在,如果用resetlogs方法,要求联机日志中必须要没有活动事务才行。创建控制文件的操作并不会清空当前联机日志内容,因此,如果有数据文件的不一致,当前联机日志还是可以用来恢复的;
- SQL> CREATE CONTROLFILE REUSE DATABASE "CTEST"
RESETLOGS ARCHIVELOG
- 2 MAXLOGFILES 16
- 3 MAXLOGMEMBERS 3
- 4 MAXDATAFILES 100
- 5 MAXINSTANCES 8
- 6 MAXLOGHISTORY 292
- 7 LOGFILE
- 8 GROUP 1 '/zxm/cindytest/ctest/redo01.log' SIZE 50M,
- 9 GROUP 2 '/zxm/cindytest/ctest/redo02.log' SIZE 50M,
- 10 GROUP 3 '/zxm/cindytest/ctest/redo03.log' SIZE 50M
- 11 -- STANDBY LOGFILE
- 12 DATAFILE
- 13 '/zxm/cindytest/ctest/system01.dbf',
- 14 '/zxm/cindytest/ctest/un