★★★★★FireGrass★★★★★

※※※※※ΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞジ
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

只有数据库文件的情况下迁移数据库

Posted on 2006-12-08 17:22  火草  阅读(236)  评论(0)    收藏  举报

      今天在没有别人的帮助下终于把数据库的迁移搞定了,还是有点成就感的,呵呵。
      下面就说下步骤供大家参考参考:
      比如你要把A机器上的数据库迁移到B机器上,首先在机器B上安装oracle,安装地址也一样最好,呵呵,建一个跟A机器上数据库一样的数据库,包括数据库名,SID,这样的话即使你没有保留oracle/admin也可以迁移过来。
      把A机器上oracle/admin/test文件夹下的内容都复制到B机器上(先把B机器上这两个文件夹里的东西备份下),随后修改目录下的 init.ora 文件
    D:\oracle\admin\test\pfile\init.ora
    下面是需要修改的内容(即db_name instance_name 以及相应的路径)

    # 其他
    ###########################################
    compatible=""
    db_name=test

    # 文件配置
    ###########################################
    control_files=("D:\oracle\oradata\test\control01.ctl","D:\oracle\oradata\test\control02.ctl", "D:\oracle\oradata\test\control03.ctl")

    # 网络注册
    ###########################################
    instance_name=test
    ###########################################
    # 诊断和统计
    ###########################################
    background_dump_dest=D:\oracle\admin\cj\bdump
    core_dump_dest=D:\oracle\admin\cj\cdump
    timed_statistics=TRUE
    user_dump_dest=D:\oracle\admin\cj\udump
 (2) 配置监听服务,需要关心的文件主要有两个,分别是$ORACLE\network\admin\下的listener.ora、tnsnames.ora,

 A、 对于listener.ora文件: 添加
      (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = h:\oracle\ora92)
      (SID_NAME = test)
      )
      修改后如下
  
    # LISTENER.ORA Network Configuration File: D:\oracle\ora92\network\admin\listener.ora
      # Generated by Oracle configuration tools.

      LISTENER =
      (DESCRIPTION_LIST =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ecidh-firegrass)(PORT = 1521))
      )
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
      )

      SID_LIST_LISTENER =
      (SID_LIST =
      (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = D:\oracle\ora92)
      (SID_NAME = test)
      )
      (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = D:\oracle\ora92)
      (SID_NAME = test)
      )
  
 B、 对于tnsnames.ora文件:同样添加修改
  
   ####################################
      # TNSNAMES.ORA Configuration File:D:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora
      # Generated by Oracle Enterprise Manager V2
      # Date..........: Tue Aug 09 09:17:21 CST 2005
      ####################################
      ORA =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ecidh-firegrass)(PORT = 1521))
      )
      (CONNECT_DATA = (SERVICE_NAME = test))
      )
      test =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ecidh-firegrass)(PORT = 1521))
      )
      (CONNECT_DATA = (SERVICE_NAME = test))
      )
  
 2、 复制A机上的数据库物理文件。
 
  1. 通过网络或移动存储设备将A机上的数据库文件(oracle/oradata/test/)拷贝至B机D:\oracle\oradata\test下
         在同事A机上执行
      SQL>alter database backup controlfile to trace得到位于 D:\oracle\admin\ora\udump目录下的 trace文件拷贝至本机桌面吧
主要内容如下

      STARTUP NOMOUNT
      CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS NOARCHIVELOG
      MAXLOGFILES 5
      MAXLOGMEMBERS 5
      MAXDATAFILES 100
      MAXINSTANCES 1
      MAXLOGHISTORY 113
      LOGFILE
      GROUP 1 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' SIZE 10M,
      GROUP 2 'D:\ORACLE\ORADATA\TEST\REDO02.LOG' SIZE 20M,
      GROUP 3 'D:\ORACLE\ORADATA\TEST\REDO03.LOG' SIZE 10M
      # STANDBY LOGFILE
      DATAFILE
      'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF',
      'D:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF',
      'D:\ORACLE\ORADATA\TEST\INDX01.DBF',
      'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF',
      'D:\ORACLE\ORADATA\TEST\USERS01.DBF'
      CHARACTER SET ZHS16GBK
      ;
      # Recovery is required if any of the datafiles are restored backups,
      # or if the last shutdown was not normal or immediate.
      RECOVER DATABASE
      # Database can now be opened normally.
      ALTER DATABASE OPEN;
      # Commands to add tempfiles to temporary tablespaces.
      # Online tempfiles have complete space information.
      # Other tempfiles may require adjustment.
      ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' REUSE;
      # End of tempfile additions.
      #  
  2、 启动B机上的数据库。
  
  经过上面的操作,现在B机上实际上已经有了一个完整的数据库了。现在我们来启动B机上的数据库。看看是否能成功运行:
  
  (1)启动监听服务:
     c:\>lsnrctl start 
  (2)启动数据库:
     c:\>sqlplusw /nolog 
     SQL>conn sys/manager@test as sysdba ——这里sys的密码与A机上sys账户密码相同
  
     ——因为都是使用的同一个密码文件。
     修改上面得到的trace文件如下所示 并执行
     SQL>  

         STARTUP NOMOUNT
         CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG
         MAXLOGFILES 5
         MAXLOGMEMBERS 5
         MAXDATAFILES 100
         MAXINSTANCES 1
         MAXLOGHISTORY 113
         LOGFILE
         GROUP 1 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' SIZE 10M,
         GROUP 2 'D:\ORACLE\ORADATA\TEST\REDO02.LOG' SIZE 20M,
         GROUP 3 'D:\ORACLE\ORADATA\TEST\REDO03.LOG' SIZE 10M
         # STANDBY LOGFILE
         DATAFILE
         'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF',
         'D:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF',
         'D:\ORACLE\ORADATA\TEST\INDX01.DBF',
         'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF',
         'D:\ORACLE\ORADATA\TEST\USERS01.DBF'
         CHARACTER SET ZHS16GBK
         ;

         SQL>alter database open resetlogs;

         这样在本机就得到了和A机一样的数据库

         SQL> conn sys/manager@test as sysdba
         已连接。
         SQL> select * from v$database;
               SQL> alter database open;
               数据库打开,这样就OK了。

      正如开始所说,如果你的安装路径,数据库名,SID都一样,那么前面的都不要做,只要把oracle/admin/test和oracle/oradata/test(以及oracle\ora92\database下的PWDtest.ora和SPFILETEST.ORA文件,如果没有就只能重新生成,或则每次开机的时候执行下面的命令)下的都复制到B机器上对应的目录下,甚至连oracle/admin/test都不用复制,从前面就可以看出,只要执行下面一句:
      SQL> alter database open;
就OK了,简单啊,费了我半天时间