关于“Oracle数据库整机移植技术”的文章,请大家看看并参与讨论。

zgh2003 2005-05-16 01:18:38
前些时间有网友提出因为OS损坏,在硬盘没有损坏的情况下可否将
数据库恢复至另一台机器上。现在将完整的解决方案写了出来,对
于想将Oracle数据库快速移植到另一台机器上,本文可以提供一个
详细的参考。同时本文可以帮助理解Oracle物理文件与Oracle RDBMS
之间的关系。如果有不同的建议,希望大家都能参与讨论。全文详
见:
http://blog.csdn.net/zgh2003/archive/2005/05/12/373940.aspx

注意事项:由于页面有时打开速度可能比较慢,请大家稍等或耐心点:)
...全文
204 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgh2003 2005-05-19
  • 打赏
  • 举报
回复
呵呵, 回复人: chengtwn(漠孤烟) 总结得更简单:)
cnepine 2005-05-19
  • 打赏
  • 举报
回复
谢了
zgh2003 2005-05-18
  • 打赏
  • 举报
回复
那个blog专栏总是出故障,整整提交了两天才将格式调得还差不多,
我晕:(
xiafan 2005-05-18
  • 打赏
  • 举报
回复
是不是大家都会啊?所以没人顶?
看来高手多多啊!!
LGQDUCKY 2005-05-18
  • 打赏
  • 举报
回复
我来顶!
怎么打不开?如果OS损坏的时候数据库检查点都一致,没有逻辑上的冲突应该恢复都没有什么问题!
chengtwn 2005-05-18
  • 打赏
  • 举报
回复
咳,我还以为是什么高深的技术呢!原来就是数据库物理文件的冷备份之后再恢复过来。做ORACLE双机就是这个原理。
其实简单点说:只要是ORACLE的版本一样,数据库的安装目录一样,那么数据库文件之间就可以来回COPY(当然如果仅仅是系统崩溃而不是数据库崩溃,如果数据库崩溃就很难说了)。当然有时需要重建密码文件。
对于ORACLE版本不一样,我们已经成功的从ORACLE10升到ORACLE9(过程需要调整很多东西)。对于数据库安装目录不一样同样也可以COPY,只要创建好控制文件就行了。
zgh2003 2005-05-18
  • 打赏
  • 举报
回复
CSDN的数据库与服务器也应该进行全新升级,以满足访问需求啦!

呵呵:)
xwqboy 2005-05-18
  • 打赏
  • 举报
回复
Server is too busy
zgh2003 2005-05-18
  • 打赏
  • 举报
回复
为了更能方便大家,现在把它Copy过来,如果需要转载,请注明“转载”,并请同时注明原文链
接地址(http://blog.csdn.net/zgh2003/archive/2005/05/12/373940.aspx),谢谢!!!

***********************************************************************

Oracle数据库整机移植技术(原创)
作者:zgh2003
2005-5

本文源自一次做Oracle9i DataGuard测试而产生的思路。前些时间有网友提出因为OS损坏,在硬盘没有损坏的情况下可否将数据库恢复至另一台机器上。现在不管从理论上讲,还是通过实践,都可以从本文中找到答案。
* 本文测试环境:
硬件环境:两台PC电脑,一台机器名为A机,另一台机器名为B机;
操作系统(OS):均为Window2000 advance server;
Oracle RDBMS:均为Oracle 9.2.0.1;
数据库sid:要求A机与B机均为testdb。
* 测试目的:
将A机现有数据库系统快速移植到B机。
* 测试要求:
硬件配置最好一致,如果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版本的数据库软件。
* 测试步骤:
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 --现在可以打开数据库使用了,如果正常的情况下,上面连
--接时就可以启动数据库了。

至此,一个数据库的克隆(Clone DB)成功完成。对于上面的操作,下面作个总结,以便对Oracle的物理文件与Oracle系统之间的关系有一定程度的理解或认识:
1、Oracle数据库物理文件与Oracle软件(这里的软件概念仅限于相关的命令或应用程序操作,如sqlplus,lsnrctl等命令)相对独立存在,两者之间只存在软件命令或应用程序对物理文件进行操作的关系;
2、Oracle软件命令或应用程序如果要对数据库物理文件进行读取,通常需要在Oracle默认安装的文件位置去查找,最主要的是密码文件与初始化参数文件,当然这两个文件所在目录也可以改变,但使用默认位置就可以了,因为对于我们的需求也仅限于默认位置就可以了;
3、对于是否有数据丢失,那要看A机上数据是否完整?因为现在B机上的数据库是A机数据库的完整克隆(Clone),所以最后A机数据库与B机数据库完全一样,当然前提是所有物理文件没有受到损坏;强烈推荐将A机上的数据库置于归档模式,这样Oracle可以最大程度保证数据不被丢失;
4、以上测试可以作为数据库倒腾到不同机器上的一个可选方案,同时对原来机器上的数据库不会有损坏的可能,因为上面步骤对原数据库没有修改操作;除非从A机复制物理文件至B机上时,采用的是cut命令而丢失了物理文件;
5、整个持续过程需要花费的时间较短:shutdown immediate时间,加上copy物理文件的时间,修改初始化参数的时间,与startup B机数据库的时间。
china2001ok 2005-05-18
  • 打赏
  • 举报
回复
晕 看不到 能不能把文章COPY出来呢?
thanks 大侠
zgh2003 2005-05-17
  • 打赏
  • 举报
回复
欢迎大家提出不同的建议进行讨论!
wangybyangxr 2005-05-16
  • 打赏
  • 举报
回复
学习。
学习zgh2003(世纪飞扬)的精神。
子陌红尘 2005-05-16
  • 打赏
  • 举报
回复
我来顶一下
zgh2003 2005-05-16
  • 打赏
  • 举报
回复
没人顶,晕:(

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧