** Oracle ** ** 数据库整机移植技术 **
本文源自一次做 Oracle9i DataGuard 测试而产生的思路。前些时间有网友提出因为 OS 损坏,在硬盘没有损坏的情况下可否将数据库恢复至另一台机器上。现在不管从理论上讲,还是通过实践,都可以从本文中找到答案。
l 本文测试环境:
硬件环境:两台 PC 电脑,一台机器名为 A 机,另一台机器名为 B 机;
操作系统 (OS) :均为 Window2000 advance server ;
Oracle RDBMS :均为 Oracle 9.2.0.1 ;
数据库 sid :要求 A 机与 B 机均为 testdb 。
l 测试目的:
将 A 机现有数据库系统快速移植到 B 机。
l 测试要求:
硬件配置最好一致,如果 A 机与 B 机硬件配置不一致,最需要修改的地方是内存配置,其原则是数据库的总内存配置要小于物理内存;除此之外,对于 CPU 数量不一样的情况,在只要求可恢复性的前提条件下,可以不做其它修改。
操作系统配置 (OS) :版本要求一致;对于 B 机上的硬盘逻辑分区至少要求物理文件存放置与 A 机对应的同一个盘区,如: \\A\D:\oracle\oradata\testdb\ , \\B\D:\oracle\oradata\testdb\ ,
Oracle 软件的安装位置 ($ORACLE_HOME) 可以不一致,如 \\A\G:\oracle\ora92\ , \\B\D:\oracle\ora92\ 。
Oracle RDBMS 配置:要求版本必须一致,否则在 B 机上如果出现版本不兼容的问题将很难解决,例如查看 A 机上现在数据库的版本为 v9.2.0.1 :
SQL>conn sys@myoracle as sysdba;
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release ** 9.2.0.1.0 ** - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 – Production
所以要求 B 机上也要安装 Oracle v9.2.0.1 版本的数据库软件。
l 测试步骤:
1、 在 B 机上作如下操作 ( 为了尽量减少操作时间,最好在 B 机上将所有的准备工作都做好 ) :
(1) 安装 Oracle 软件,但可以不用创建数据库;
(2) 创建与 A 机上物理文件所在目录相同的文件夹,通俗点讲就是文件克隆 (Clone file) ,例如: c:>mkdir d:\oracle\oradata\testdb ;
(3) 配置监听服务,需要关心的文件主要有两个,分别是 $ORACLE\network\admin\ 下的 listener.ora 、 tnsnames.ora , Oracle 连接时需要读这两个文件和 sqlnet.ora 文件。配置时最好采用“开始— > 程序 ( P ) — > Oracle - OraHome92 — > Configuration and
Migration Tools — > Net Manager ”在图形界面下进行配置,这同时可以生成上述的 listener.ora 、 tnsnames.ora 两个文件,而且可以保证配置的准确性;另外一种方法是直接从 A 机上的 $ORACLE\network\admin\ 目录直接 copy 这两个文件至 B 机上的 $ORACLE\network\admin\ 目录,需要修改这两个文件如下标示:
A、 对于 listener.ora 文件:
LISTENER.ORA Network Configuration File:
F:\oracle\ora92\NETWORK\ADMIN\listener.ora
Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)( ** HOST = B ** )(PORT = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = testdb. ** B ** )
(SID_NAME = testdb)
)
)
B、 对于 tnsnames.ora 文件:
TNSNAMES.ORA Network Configuration File:
F:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora
Generated by Oracle configuration tools.
MYORACLE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ** B ** )(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb. ** B ** )
)
)
以上红色标记的地方表示需要改动,其实只将文件里的 A 主机名改成 B 主机名或者将 A 主机 IP 改成 B 主机 IP 就可以了。
(4) 创建实例服务,由于前面只安装了数据库软件,所以这时实例服务名还不存在,现在创建它 ( 对于 Linux 或 Unix 系统,就没有此步骤了 ) :
c:>oradim –NEW –SID testdb
这里直接将实例服务名创建成与 A 机上 sid 同名,为了保证下面的过程顺利进 行,推荐按前述方法创建。
2、 复制 A 机上的数据库物理文件。
关闭 A 机数据库,对于已崩溃的系统,当然就没有关闭数据库这一步骤了:
SQL>conn sys@myoracle as sysdba
SQL>shutdown immediate
SQL>create pfile from spfile;
通过网络或移动存储设备将 A 机上的物理文件:包括所有数据文件,重做日志文件, 归档日
志文 件,控制文件,密码文件和刚才创建的初始化参数文件 inittestdb.ORA , copy 至 B 机上相对应的与 A 机同名的目录。例如:
copy ** A ** \D:\oracle\oradata\testdb\. ** B ** \D:\oracle\oradata\testdb\
copy ** A ** \ F:\oracle\admin\. ** B ** \E:\oracle\admin\ -- 这是日志文件目录
copy ** A ** \ F:\oracle\ora92\network\admin\*.ORA ** B ** \ E:\oracle\ora92\network\admin\ ( 如 果 前 面已经配置好了监听,此步略过 )
copy ** A ** \ F:\oracle\ora92\database\*.ORA ** B ** \ E:\oracle\ora92\database\
这里只是举例示范,实意是为了便于理解,但必须要经过上面的 copy 步骤。注意 上面
复 制的文件包括警报日志文件目录,也可以直接在 B 机上手工创建文件目录,当启动 Oracle 时, Oracle 会 根据初始化参数里指定的目录自动创建警报日志文件。
修改从 A机上copy过来的D:\oracle\ora92\database\inittestdb.ORA文件,将 *.db_domain=' ** A ** ' 修改为 *.db_domain=' ** B ** '就可以了。如果物理文件的位置在B机上发生了改变,则需要修改这个文件里相应的参数,但建议不要作任何改动,以减少操作失败的可能性。
3、 启动 B 机上的数据库。
经过上面的操作,现在 B 机上实际上已经有了一个完整的数据库了。现在我们来启动 B 机上的数据库。看看是否能成功运行:
(1) 启动监听服务:
c:>lsnrctl start
(2) 启动实例服务:
c:>oradim -startup -sid testdb
(3) 启动数据库:
c:>sqlplus /nolog
SQL>conn sys@myoracle as sysdba -- 这里 sys 的密码与 A 机上 sys 账户密码相同
-- 因为都是使用的同一个密码文件。
SQL>startup<span st