记一次windows下物理迁移数据库的过程

背景:
      最近因为一次设备故障,导致一台运行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
正常运行时间              222 小时 4219 秒
跟踪级别                  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环境下是否能够自动开机启动

经验证数据库在新机器是能够正常开机启动的。

原文地址:https://www.cnblogs.com/myrunning/p/4476095.html