技术开发 频道

如何恢复一个只有完好数据文件的数据库?

  5、开始重建控制文件

  1)在类似的数据库(比如数据库名称"rman")上执行:
  alter database backup controlfile to trace;
  然后在D:oracleadminrmanudump下找到最新的trace文件,以文本方式打开,找到类似下面的一段话:

STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "rman" NORESETLOGS ARCHIVELOG -- SET STANDBY TO MAXIMIZE PERFORMANCE MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 'D:ORACLEORADATARMANREDO01.LOG' SIZE 100M, GROUP 2 'D:ORACLEORADATARMANREDO02.LOG' SIZE 100M, GROUP 3 'D:ORACLEORADATARMANREDO03.LOG' SIZE 100M -- STANDBY LOGFILE DATAFILE 'D:ORACLEORADATARMANSYSTEM01.DBF', 'D:ORACLEORADATARMANUNDOTBS01.DBF', 'D:ORACLEORADATARMANCWMLITE01.DBF', 'D:ORACLEORADATARMANDRSYS01.DBF', 'D:ORACLEORADATARMANEXAMPLE01.DBF', 'D:ORACLEORADATARMANINDX01.DBF', 'D:ORACLEORADATARMANODM01.DBF', 'D:ORACLEORADATARMANTOOLS01.DBF', 'D:ORACLEORADATARMANUSERS01.DBF', 'D:ORACLEORADATARMANXDB01.DBF', 'D:ORACLEORADATARMANTEST.ORA' CHARACTER SET WE8MSWIN1252

  2)将上面这段话修改为如下:

STARTUP NOMOUNT CREATE CONTROLFILE set DATABASE "tti" RESETLOGS --注意这里要"set" -- SET STANDBY TO MAXIMIZE PERFORMANCE MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 'D:ORACLEORADATAttiREDO01.LOG' SIZE 100M, GROUP 2 'D:ORACLEORADATAttiREDO02.LOG' SIZE 100M, GROUP 3 'D:ORACLEORADATAttiREDO03.LOG' SIZE 100M -- STANDBY LOGFILE DATAFILE 'D:ORACLEORADATAttiSYSTEM01.DBF', 'D:ORACLEORADATAttiUNDOTBS01.DBF', 'D:ORACLEORADATAttiCWMLITE01.DBF', 'D:ORACLEORADATAttiDRSYS01.DBF', 'D:ORACLEORADATAttiEXAMPLE01.DBF', 'D:ORACLEORADATAttiINDX01.DBF', 'D:ORACLEORADATAttiODM01.DBF', 'D:ORACLEORADATAttiTOOLS01.DBF', 'D:ORACLEORADATAttiUSERS01.DBF', 'D:ORACLEORADATAttiXDB01.DBF', 'D:ORACLEORADATAttiTEST.ORA' CHARACTER SET WE8MSWIN1252

  3)开始重建控制文件

D:>sqlplus/nolog SQL*Plus: Release 9.2.0.1.0 - Production on Thu Nov 16 09:08:19 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn sys/zlw001@tti as sysdba; Connected to an idle instance. SQL> startup nomount pfile=d:oracleadminttipfileinit.ora; ORACLE instance started. Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes SQL> CREATE CONTROLFILE set DATABASE "tti" RESETLOGS 2 -- SET STANDBY TO MAXIMIZE PERFORMANCE 3 MAXLOGFILES 50 4 MAXLOGMEMBERS 5 5 MAXDATAFILES 100 6 MAXINSTANCES 1 7 MAXLOGHISTORY 226 8 LOGFILE 9 GROUP 1 'D:ORACLEORADATAttiREDO01.LOG' SIZE 100M, 10 GROUP 2 'D:ORACLEORADATAttiREDO02.LOG' SIZE 100M, 11 GROUP 3 'D:ORACLEORADATAttiREDO03.LOG' SIZE 100M 12 -- STANDBY LOGFILE 13 DATAFILE 14 'D:ORACLEORADATAttiSYSTEM01.DBF', 15 'D:ORACLEORADATAttiUNDOTBS01.DBF', 16 'D:ORACLEORADATAttiCWMLITE01.DBF', 17 'D:ORACLEORADATAttiDRSYS01.DBF', 18 'D:ORACLEORADATAttiEXAMPLE01.DBF', 19 'D:ORACLEORADATAttiINDX01.DBF', 20 'D:ORACLEORADATAttiODM01.DBF', 21 'D:ORACLEORADATAttiTOOLS01.DBF', 22 'D:ORACLEORADATAttiUSERS01.DBF', 23 'D:ORACLEORADATAttiXDB01.DBF', 24 'D:ORACLEORADATAttiTEST.ORA' 25 CHARACTER SET WE8MSWIN1252; Control file created. SQL> alter database open resetlogs; Database altered. SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS ---------------- ------------ tti OPEN SQL> select ts#,name from v$datafile; file# NAME --------- -------------------------------------------- 1 D:ORACLEORADATATTISYSTEM01.DBF 2 D:ORACLEORADATATTIUNDOTBS01.DBF 3 D:ORACLEORADATATTICWMLITE01.DBF 4 D:ORACLEORADATATTIDRSYS01.DBF 5 D:ORACLEORADATATTIEXAMPLE01.DBF 6 D:ORACLEORADATATTIINDX01.DBF 7 D:ORACLEORADATATTIODM01.DBF 8 D:ORACLEORADATATTITOOLS01.DBF 9 D:ORACLEORADATATTIUSERS01.DBF 10 D:ORACLEORADATATTIXDB01.DBF 11 D:ORACLEORADATATTITEST.ORA 11 rows selected. SQL>

  至此全部结束!

0
相关文章