本文以通过对其他数据库的冷备份,手动还原到新建MYTEST数据库为例:
1.冷备份orcl数据库文件
服务停止前执行下面的命令,对控制文件生成脚本进行备份。
SQL>alter database backup controlfile to trace;
在d:/oracle/product/10.2.0/admin/orcl/udump/下面找到最新的ora文件,之后要用到。
停止orcl数据库的服务,将orcl的下列文件备份到其他目录
D:/oracle/product/10.2.0/oradata/orcl/数据库文件(不用备份控制文件)
D:/oracle/product/10.2.0/admin/orcl/pfile/初期化文件
2.建相MYTEST数据库对应的目录
D:/oracle/product/10.2.0/admin/MYTEST/adump
D:/oracle/product/10.2.0/admin/MYTEST/bdump
D:/oracle/product/10.2.0/admin/MYTEST/cdump
D:/oracle/product/10.2.0/admin/MYTEST/pdump
D:/oracle/product/10.2.0/admin/MYTEST/pfile
D:/oracle/product/10.2.0/admin/MYTEST/udump
D:/oracle/product/10.2.0/flash_recovery_area/MYTEST
D:/oracle/product/10.2.0/oradata/MYTEST
并将前面备份的数据库文件复制到D:/oracle/product/10.2.0/oradata/MYTEST。
3. 之前备份的pfile文件,作相应修改(将orcl字样修改为MYTEST,含文件路径),并将文件保存到下面位置,文件名为init<SID>.ora。
D:/oracle/product/10.2.0/db_1/database/initMYTEST.ora
pfile或spfile相关内容:
http://blog.csdn.net/jsjzzh/archive/2011/02/02/6171935.aspx
4.手动建立密码文件(这是sys的密码)
orapwd file=D:/oracle/product/10.2.0/db_1/database/PWDMYTEST.ora password=test entries=10
密码文件相关内容:
http://blog.csdn.net/jsjzzh/archive/2011/02/02/6171912.aspx
5.通过oradim.exe命令,在服务里生成一个新实例MYTEST管理服务,启动方式为手动。
D:/oracle/product/10.2.0/db_1/BIN/oradim -new -sid MYTEST -startmode manual
6.启动数据库到nomount模式
D:/>set ORACLE_SID=MYTEST
D:/>sqlplus sys/test as sysdba
SQL>startup nomount
7.从建控制文件(关键步骤)
在之前备份的控制文件生成脚本中取得控制文件做成命令,将原orcl改为MYTEST执行。
SQL>CREATE CONTROLFILE REUSE DATABASE "MYTEST" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO01.LOG' SIZE 50M,
GROUP 2 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO02.LOG' SIZE 50M,
GROUP 3 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/SYSTEM01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/UNDOTBS01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/SYSAUX01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/USERS01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/EXAMPLE01.DBF'
CHARACTER SET JA16SJIS;
ORA-01503: create controlfile
ORA-01161: database name in file header does not match given name of
ORA-01110: ………………………………………..
因为是从建控制文件,不能使用REUSE选项,将REUSE修改为SET,NORESETLOGS修改为RESETLOGS再执行(SET DATABASE指定后可以变更数据库名,且必须指定RESETLOGS选项,忽视LOGFILE文件中的内容)。
SQL>CREATE CONTROLFILE SET DATABASE "MYTEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO01.LOG' SIZE 50M,
GROUP 2 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO02.LOG' SIZE 50M,
GROUP 3 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/SYSTEM01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/UNDOTBS01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/SYSAUX01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/USERS01.DBF',
'D:/ORACLE/PRODUCT/10.2.0/ORADATA/MYTEST/EXAMPLE01.DBF'
CHARACTER SET JA16SJIS;
成功!
注意:本人是日文系统CHARACTER SET请根据实际情况修改。
SQL>shutdown immediate
SQL>startup mount
SQL> alter database open
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open.
SQL>alter database open resetlogs;
成功!
确认与orcl库内容是一致的。
另外,通过oradim.exe命令建立新实例时,没有设定服务启动时实例也同时启动。可以使用startmode选项,如果希望随系统启动服务,使用srvcstart 选项
oradim -edit -sid ORACLE_SID -startmode auto -srvcstart system