背景:
最近因为一次设备故障,导致一台运行windows环境下的机器无法启动,里面有一个正在使用的财务数据库,该数据库也只是每月使用一次,需要把物理数据迁移出来,于是拔出了故障机器的硬盘,通过一个专门的硬盘接口器读取了数据的数据库数据来做物理迁移。
把物理数据库拷入新机器,以下所有操作都在新机器上进行。
1.拷入spfile和数据文件到对应的目录
把spfile拷入$ORACLE_HOME/dbs下
把数据库物理文件拷入$ORACLE_BASE/oradata下
在$ORACLE_BASE/admin/下创建adump bdump cdump udump文件下
2.登录sqlpus 报ora-12560错误
C:Windowssystem32>set ORACLE_SID=ZDJS C:Windowssystem32>echo %ORACLE_SID% ZDJS C:Windowssystem32>sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 4月 23 16:37:07 2015 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> conn /as sysdba ERROR: ORA-12560: TNS: 协议适配器错误
这一点和liunx下是不同的,windows下不会自动地创建实例,我们需要手动创建实例。
3.使用oradim工具创建对应数据库实例
C:Windowssystem32>oradim -new -sid ZDJS -startmode auto -spfile 实例已创建。 C:Windowssystem32>set ORACLE_SID=ZDJS C:Windowssystem32>echo %ORACLE_SID% ZDJS C:Windowssystem32>sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 4月 23 16:40:05 2015 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> conn /as sysdba 已连接到空闲例程。 SQL>
注意:使用oradim工具创建创建新实力后,可以在系统服务里自动生成对应的服务OracleServiceZDJS OracleJobSchedulerZDJS
windows上删除服务:
C:Windowssystem32>sc delete OracleServiceZDJS [SC] DeleteService 成功 C:Windowssystem32>sc delete OracleJobSchedulerZDJS [SC] DeleteService 成功 C:Windowssystem32>sc delete OracleDBConsolezdjs [SC] DeleteService 成功
创建实例后我们就可以连接到一个空闲例程里。
4.利用spfile生产pfile
SQL> create pfile='C:oracleproduct10.2.0db_1dbsINITZDJS.ORA' from spfile='C:oracleproduct10.2.0db_1dbsSPFILEZDJS.ORA'; 文件已创建。
5.手动修改pfile中的路径dump文件及控制文件路径
*.audit_file_dest='D:oracleproduct10.2.0/admin/ZDJS/adump' *.background_dump_dest='D:oracleproduct10.2.0/admin/ZDJS/bdump' *.control_files='D:oracleproduct10.2.0/oradata/ZDJS/control01.ctl','D:oracleproduct10.2.0/oradata/ZDJS/control02.ctl','D:oracleproduct10.2.0/oradata/ZDJS/control03.ctl' *.core_dump_dest='D:oracleproduct10.2.0/admin/ZDJS/cdump' *.user_dump_dest='D:oracleproduct10.2.0/admin/ZDJS/udump'
修改为:
*.audit_file_dest='C:oracleproduct10.2.0adminDJSadump' *.background_dump_dest='C:oracleproduct10.2.0adminDJSdump' *.control_files='C:oracleproduct10.2.0oradataDJScontrol01.ctl','C:oracleproduct10.2.0oradataDJScontrol02.ctl','C:oracleproduct10.2.0oradataDJScontrol03.ctl' *.core_dump_dest='C:oracleproduct10.2.0adminDJScdump' *.user_dump_dest='C:oracleproduct10.2.0adminDJSudump'
6.利用pfile生成spfile,把原spfile删除
SQL> create spfile='C:oracleproduct10.2.0db_1dbsSPFILEZDJS.ORA' from pfile='C:oracleproduct10.2.0db_1dbsINITZDJS.ORA'; 文件已创建。
7.使用spfile把数据库启动到mount状态
SQL> startup mount ORA-01078: failure in processing system parameters LRM-00109: ???????????????? 'C:ORACLEPRODUCT10.2.0DB_1DATABASEINITZDJS.ORA'
注意到提示的路径下查看文件C:ORACLEPRODUCT10.2.0DB_1DATABASEINITZDJS.ORA
查看该路径下文件是否存在,如果不存在创建该文件,如果存在则修改为:
SPFILE='C:oracleproduct10.2.0db_1dbsSPFILEZDJS.ORA'
注意后面没有';'
重新启动数据库到mount状态:
SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 1199570944 bytes Fixed Size 1332300 bytes Variable Size 537537460 bytes Database Buffers 654311424 bytes Redo Buffers 6389760 bytes 数据库装载完毕。
7.修改文件对应的路径
--数据文件
SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- D:ORACLEPRODUCT10.2.0ORADATADJSSYSTEM01.DBF D:ORACLEPRODUCT10.2.0ORADATADJSUNDOTBS01.DBF D:ORACLEPRODUCT10.2.0ORADATADJSSYSAUX01.DBF D:ORACLEPRODUCT10.2.0ORADATADJSUSERS01.DBF D:ORACLEPRODUCT10.2.0ORADATADJSTEST01.DBF D:ORACLEPRODUCT10.2.0ORADATADJSTEST02.DBF 已选择6行。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSSYSTEM01.DBF' to 'C:oracleproduct10.2.0oradataDJSSYSTEM01.DBF'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSUNDOTBS01.DBF' to 'C:oracleproduct10.2.0oradataDJSUNDOTBS01.DBF'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSSYSAUX01.DBF' to 'C:oracleproduct10.2.0oradataDJSSYSAUX01.DBF'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSUSERS01.DBF' to 'C:oracleproduct10.2.0oradataDJSUSERS01.DBF'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSTEST01.DBF' to 'C:oracleproduct10.2.0oradataDJSTEST01.DBF'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSTEST02.DBF' to 'C:oracleproduct10.2.0oradataDJSTEST02.DBF'; 数据库已更改。 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- C:ORACLEPRODUCT10.2.0ORADATADJSSYSTEM01.DBF C:ORACLEPRODUCT10.2.0ORADATADJSUNDOTBS01.DBF C:ORACLEPRODUCT10.2.0ORADATADJSSYSAUX01.DBF C:ORACLEPRODUCT10.2.0ORADATADJSUSERS01.DBF C:ORACLEPRODUCT10.2.0ORADATADJSTEST01.DBF C:ORACLEPRODUCT10.2.0ORADATADJSTEST02.DBF 已选择6行。
--日志文件
SQL> select group#,member from v$logfile; GROUP# MEMBER ---------- -------------------------------------------------- 3 D:ORACLEPRODUCT10.2.0ORADATADJSREDO03.LOG 2 D:ORACLEPRODUCT10.2.0ORADATADJSREDO02.LOG 1 D:ORACLEPRODUCT10.2.0ORADATADJSREDO01.LOG SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSREDO01.LOG' to 'C:oracleproduct10.2.0oradataDJSREDO01.LOG'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSREDO02.LOG' to 'C:oracleproduct10.2.0oradataDJSREDO02.LOG'; 数据库已更改。 SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSREDO03.LOG' to 'C:oracleproduct10.2.0oradataDJSREDO03.LOG'; 数据库已更改。 SQL> select group#,member from v$logfile; GROUP# MEMBER ---------- -------------------------------------------------- 3 C:ORACLEPRODUCT10.2.0ORADATADJSREDO03.LOG 2 C:ORACLEPRODUCT10.2.0ORADATADJSREDO02.LOG 1 C:ORACLEPRODUCT10.2.0ORADATADJSREDO01.LOG
--临时文件
SQL> select name from v$tempfile; NAME -------------------------------------------------------------------------------- D:ORACLEPRODUCT10.2.0ORADATADJSTEMP01.DBF SQL> alter database rename file 'D:ORACLEPRODUCT10.2.0ORADATADJSTEMP01.DBF' to 'C:oracleproduct10.2.0oradataDJSTEMP01.DBF'; 数据库已更改。 SQL> select name from v$tempfile; NAME -------------------------------------------------------------------------------- C:ORACLEPRODUCT10.2.0ORADATADJSTEMP01.DBF
8.打开数据库
SQL> alter database open; 数据库已更改。 SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE SQL> select status from v$instance; STATUS ------------------------ OPEN
至此数据库在新机器中打开,迁移完成。
9.验证数据库是否自动注册到监听里
C:Windowssystem32>lsnrctl status LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 24-4月 -2015 10:13:00 Copyright (c) 1991, 2005, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=RLSC-SERVER)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 启动日期 21-4月 -2015 11:30:42 正常运行时间 2 天 22 小时 42 分 19 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 C:oracleproduct10.2.0db_1 etworkadminlistener.ora 监听程序日志文件 C:oracleproduct10.2.0db_1 etworkloglistener.log 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=RLSC-SERVER)(PORT=1521))) 服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "PSDB0XDB" 包含 1 个例程。 例程 "psdb0", 状态 READY, 包含此服务的 1 个处理程序... 服务 "PSDB0_XPT" 包含 1 个例程。 例程 "psdb0", 状态 READY, 包含此服务的 1 个处理程序... 服务 "ZDJSXDB" 包含 1 个例程。 例程 "zdjs", 状态 READY, 包含此服务的 1 个处理程序... 服务 "ZDJS_XPT" 包含 1 个例程。 例程 "zdjs", 状态 READY, 包含此服务的 1 个处理程序... 服务 "psdb0" 包含 1 个例程。 例程 "psdb0", 状态 READY, 包含此服务的 1 个处理程序... 服务 "zdjs" 包含 1 个例程。 例程 "zdjs", 状态 READY, 包含此服务的 1 个处理程序... 命令执行成功
10.最后可以验证一下数据库在windows环境下是否能够自动开机启动
经验证数据库在新机器是能够正常开机启动的。