zoukankan      html  css  js  c++  java
  • 记一次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环境下是否能够自动开机启动

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

  • 相关阅读:
    EJB3.0
    EJB
    到底EJB是什么
    EJB到底是什么,真的那么神秘吗??
    ssh和ejb的区别
    struts2的一些小问题
    Struts2中ValueStack结构和总结
    Java 监听器
    浅谈cookie 和session 的区别
    理解Cookie和Session机制
  • 原文地址:https://www.cnblogs.com/myrunning/p/4476095.html
Copyright © 2011-2022 走看看