背景:
最近因为一次设备故障,导致一台运行windows环境下的机器无法启动,里面有一个正在使用的财务数据库,该数据库也只是每月使用一次,需要把物理数据迁移出来,于是拔出了故障机器的硬盘,通过一个专门的硬盘接口器读取了数据的数据库数据来做物理迁移。
把物理数据库拷入新机器,以下所有操作都在新机器上进行。
1.拷入spfile和数据文件到对应的目录
把spfile拷入$ORACLE_HOME/dbs下
把数据库物理文件拷入$ORACLE_BASE/oradata下
在$ORACLE_BASE/admin/下创建adump bdump cdump udump文件下
2.登录sqlpus 报ora-12560错误
C:\Windows\system32>set ORACLE_SID=ZDJS
C:\Windows\system32>echo %ORACLE_SID%ZDJS
C:\Windows\system32>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 4月 23 16:37:07 2015Copyright (c)1982, 2005, Oracle. All rights reserved.
SQL> conn /assysdba
ERROR:
ORA-12560: TNS: 协议适配器错误
这一点和liunx下是不同的,windows下不会自动地创建实例,我们需要手动创建实例。
3.使用oradim工具创建对应数据库实例
C:\Windows\system32>oradim -new -sid ZDJS -startmode auto -spfile
实例已创建。
C:\Windows\system32>set ORACLE_SID=ZDJS
C:\Windows\system32>echo %ORACLE_SID%ZDJS
C:\Windows\system32>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 4月 23 16:40:05 2015Copyright (c)1982, 2005, Oracle. All rights reserved.
SQL> conn /assysdba
已连接到空闲例程。
SQL>
注意:使用oradim工具创建创建新实力后,可以在系统服务里自动生成对应的服务OracleServiceZDJS OracleJobSchedulerZDJS
windows上删除服务:
C:\Windows\system32>sc delete OracleServiceZDJS
[SC] DeleteService 成功
C:\Windows\system32>sc delete OracleJobSchedulerZDJS
[SC] DeleteService 成功
C:\Windows\system32>sc delete OracleDBConsolezdjs
[SC] DeleteService 成功
创建实例后我们就可以连接到一个空闲例程里。
4.利用spfile生产pfile
SQL> create pfile='C:\oracle\product\10.2.0\db_1\dbs\INITZDJS.ORA' from spfile='C:\oracle\product\10.2.0\db_1\dbs\SPFILEZDJS.ORA';
文件已创建。
5.手动修改pfile中的路径dump文件及控制文件路径
*.audit_file_dest='D:\oracle\product\10.2.0/admin/ZDJS/adump'
*.background_dump_dest='D:\oracle\product\10.2.0/admin/ZDJS/bdump'
*.control_files='D:\oracle\product\10.2.0/oradata/ZDJS/\control01.ctl','D:\oracle\product\10.2.0/oradata/ZDJS/\control02.ctl','D:\oracle\product\10.2.0/oradata/ZDJS/\control03.ctl'
*.core_dump_dest='D:\oracle\product\10.2.0/admin/ZDJS/cdump'
*.user_dump_dest='D:\oracle\product\10.2.0/admin/ZDJS/udump'
修改为:
*.audit_file_dest='C:\oracle\product\10.2.0\admin\ZDJS\adump'
*.background_dump_dest='C:\oracle\product\10.2.0\admin\ZDJS\bdump'
*.control_files='C:\oracle\product\10.2.0\oradata\ZDJS\control01.ctl','C:\oracle\product\10.2.0\oradata\ZDJS\control02.ctl','C:\oracle\product\10.2.0\oradata\ZDJS\control03.ctl'
*.core_dump_dest='C:\oracle\product\10.2.0\admin\ZDJS\cdump'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\ZDJS\udump'
6.利用pfile生成spfile,把原spfile删除
SQL> create spfile='C:\oracle\product\10.2.0\db_1\dbs\SPFILEZDJS.ORA' from pfile='C:\oracle\product\10.2.0\db_1\dbs\INITZDJS.ORA';
文件已创建。
7.使用spfile把数据库启动到mount状态
SQL>startup mount
ORA-01078: failure inprocessing system parameters
LRM-00109: ???????????????? 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITZDJS.ORA'
注意到提示的路径下查看文件C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITZDJS.ORA
查看该路径下文件是否存在,如果不存在创建该文件,如果存在则修改为:
SPFILE='C:\oracle\product\10.2.0\db_1\dbs\SPFILEZDJS.ORA'
注意后面没有';'
重新启动数据库到mount状态:
SQL>startup mount
ORACLE 例程已经启动。
Total System Global Area1199570944bytes
Fixed Size1332300bytes
Variable Size537537460bytes
Database Buffers654311424bytes
Redo Buffers6389760bytes
数据库装载完毕。
7.修改文件对应的路径
--数据文件
SQL> select name fromv$datafile;
NAME--------------------------------------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST02.DBF
已选择6行。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSTEM01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\SYSTEM01.DBF';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\UNDOTBS01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\UNDOTBS01.DBF';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSAUX01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\SYSAUX01.DBF';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\USERS01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\USERS01.DBF';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\TEST01.DBF';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST02.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\TEST02.DBF';
数据库已更改。
SQL> select name fromv$datafile;
NAME--------------------------------------------------------------------------------C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEST02.DBF
已选择6行。
--日志文件
SQL> select group#,member fromv$logfile;
GROUP# MEMBER---------- --------------------------------------------------
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO03.LOG2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO02.LOG1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO01.LOG
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO01.LOG' to 'C:\oracle\product\10.2.0\oradata\ZDJS\REDO01.LOG';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO02.LOG' to 'C:\oracle\product\10.2.0\oradata\ZDJS\REDO02.LOG';
数据库已更改。
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO03.LOG' to 'C:\oracle\product\10.2.0\oradata\ZDJS\REDO03.LOG';
数据库已更改。
SQL> select group#,member fromv$logfile;
GROUP# MEMBER---------- --------------------------------------------------
3 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO03.LOG2 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO02.LOG1 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\REDO01.LOG
--临时文件
SQL> select name fromv$tempfile;
NAME--------------------------------------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEMP01.DBF
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEMP01.DBF' to 'C:\oracle\product\10.2.0\oradata\ZDJS\TEMP01.DBF';
数据库已更改。
SQL> select name fromv$tempfile;
NAME--------------------------------------------------------------------------------C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZDJS\TEMP01.DBF
8.打开数据库
SQL>alter database open;
数据库已更改。
SQL> select open_mode fromv$database;
OPEN_MODE--------------------READ WRITE
SQL> select status fromv$instance;
STATUS------------------------OPEN
至此数据库在新机器中打开,迁移完成。
9.验证数据库是否自动注册到监听里
C:\Windows\system32>lsnrctl status
LSNRCTLfor 32-bit Windows: Version 10.2.0.1.0 - Production on 24-4月 -2015 10:13:00Copyright (c)1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=RLSC-SERVER)(PORT=1521)))
LISTENER 的 STATUS------------------------别名 LISTENER
版本 TNSLSNRfor 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:\oracle\product\10.2.0\db_1\network\admin\listener.ora
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.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环境下是否能够自动开机启动
经验证数据库在新机器是能够正常开机启动的。