欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle在不同windows系统中的迁移

程序员文章站 2022-05-06 15:09:42
...

在Windows操作系统环境下运行的Oracle系统。很不幸的是,格式化C盘Windows系统重装了,Oracle不能用了。这时你会怎么做。最笨最保险的方法,重装oracle系统。因为我们都知道如果是在linux下很容易实现了,拷贝拷贝oracle系统文件,配置配置环境变量即可,但在windows下就不那么简单了。Oracle数据库系统,不仅仅是一些oracle系统文件,还有一些和注册表及windows服务密切相互的配置信息。更有甚者,如果Windows系统不是重装,而是升级了,例如从Windows2003升级到Windows2008,我们又该怎么办?

 

(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1766889 )

虽然Windows升级了,只要Oracle系统还能在新系统上正常运行,我们就能在不重装ORACLE的前提下将Oracle运行起来。
刚好有这样一个案例,运行在Windows2003上的oracle 10.2.0.4,需要迁移到一个新采购服务器上。新服务器,你知道的,一般都说只能安装最新的系统,这里就选择安装了Windows2008。
如果是你,你会怎么处理这个需求?我开始想到的是在windows2008上安装oracle 10.2.0.1,再升级到10.2.0.4。因为对windows真的不熟悉,也没能力去学好它,所以采用这种最笨但是最保险的方法。但是,oracle 10.2.0.1不能在windows2008上安装,执行setup.exe直接给我中止,报什么未知错误。oracle以前倒是提供了一个10.2.0.3 for vista的版本,据说可以在windows2008上安装。但是在oracle网站上现在也下载不到了。这个windows 2008又是R2版的,右键点setup.exe 选属性,选兼容模式,也没有windows2003可兼容。
没有其他办法了,手工来配置吧。注意,我从oracle文档中证实了Windows2008上是能运行oracle 10.2.0.4的,所以才想手工配置方法。如果不能跑oracle 10.2.0.4,那么只好老老实实升级oracle到11g了。

我一开始就想,参照着linux下迁移方法,就配置配置环境变量,拷贝拷贝oracle系统文件,看看Oracle系统文件中的数据库实例能不能启动起来。

set PATH=D:\oracle\product\10.2.0\db_1\bin;%PATH%
set ORACLE_HOME=D:\oracle\product\10.2.0\db_1
set ORACLE_SID=mikidb

 
在cmd中设置了这三个环境变量值,使用sqlplus / as sysdba连接,

D:\oracle\product\10.2.0\db_1\database>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jan 9 11:18:23 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:
ORA-12560: TNS:protocol adapter error

 
结果是直接给我报了"ORA-12560: TNS:protocol adapter error"错误。

这个错误可能会是操作系统用户不属于ora_dba组,监听没启动,windows服务没配置或没启动,参数配置不正确等等因素导致的。

在这台windows2008上,系统用户因为安装过11g,所以它已经属于ora_dba组了。监听和windows服务那是没有的,还没有配置呢。

我又测试了dbca建库操作,在建库进度条2%处,出错,报ORA-12560。搜了metalink,说这是一个bug。在windows 2008上oracle 10.2.0.4会发生,只好下载补丁包去apply。这里又因为没有oinventory,我又opatch apply了半天。

Symptoms
 
Install Oracle 10.2.0.3 (Vista/2008 version) on Windows 2008 Active Directory Controller.
When trying to create the database, around 2% completion, the error ORA-12560 will occur.


This Problem can occur on both 32bit and 64bit.

This Problem does NOT reproduce on a Member server. Only the Active Directory Controller.


Cause
 
 BUG 7263061.
 
Solution
 
For Oracle 10.2.0.4:
This issue has been resolved in the Oracle 10.2.0.4 Patch 14 patch.
Patch number 7677780 (MS Windows 32bit), or Patch number 7677781 (MS Windows 64bit (x64)).
NOTE: You will need to be at the 10.2.0.4 version, before applying this patch. 

 

在opatch apply这个补丁包时,我又伪造了oinventory的信息。将windows2003的c盘的program file的oracle目录也拷贝了一份过来。使opatch apply操作成功。


我再回到windows服务上来,手工新建windows服务。但如何新建呢,没经验啦,google一下。

oradim -new -sid mikidb -startmode auto -pfile d:\oracle\product\10.2.0\db_1\database\INITmikidb.ORA

服务导致一下子就创建成功,但在windows服务中死活也起不来,说系统找不到文件,要找啥文件呢?

想想还有注册表中的oracle信息可以添加。参照windows 2003上关于oracle软件的注册表信息,照猫画虎,将记录都添加上。完事后,我导出了一份。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]
@=""
"inst_loc"="C:\\Program Files\\Oracle\\Inventory"

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]
"ORACLE_BASE"="d:\\oracle\\product\\10.2.0"
"ORACLE_BUNDLE_NAME"="Enterprise"
"ORACLE_GROUP_NAME"="Oracle - OraDb10g_home1"
"ORACLE_HOME"="d:\\oracle\\product\\10.2.0\\db_1"
"ORACLE_HOME_KEY"="SOFTWARE\\ORACLE\\KEY_OraDb10g_home1"
"ORACLE_HOME_NAME"="OraDb10g_home1"
"ORACLE_SID"="mikidb"
"ORA_mikidb_AUTOSTART"=hex(2):54,00,52,00,55,00,45,00,00,00
"ORA_mikidb_SHUTDOWN"=hex(2):54,00,52,00,55,00,45,00,00,00
"ORA_mikidb_SHUTDOWNTYPE"=hex(2):69,00,6d,00,6d,00,65,00,64,00,69,00,61,00,\
  74,00,65,00,00,00
"ORA_mikidb_SHUTDOWN_TIMEOUT"=hex(2):39,00,30,00,00,00
"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

 
然后再使用oradim将服务删除掉重建。

D:\oracle\product\10.2.0\db_1\database>sc delete OracleServicemikidb
[SC] DeleteService 成功

D:\oracle\product\10.2.0\db_1\database>oradim -new -sid mikidb -startmode auto
 -pfile d:\oracle\product\10.2.0\db_1\database\INITmikidb.ORA
Instance created.

 
最终给了我一个instance created的反馈。到windows服务中,能手工重启这个服务。在cmd中,配置好环境变量后,使用sqlplus / as sysdba也能连接到这个实例。

到此,oracle 10.2.0.4的实例已经能跑在windows 2008上,任务完成。

回想一下,如果不打那个补丁,行不行呢。我又将d盘的oracle目录恢复成没打补丁之前,发现也行,没出现ORA-12560错误,实例也正常。再使用dbca新建一个库,也成功了。应该是这个ORA-12560问题和这个bug没有关系,根本原因还是我在开始配置不正确。

总结一下,在windows操作系统迁移中,主要配置有三项。1、操作系统用户所属组是否有ora_dba;2、注册表是否配置了oracle项;3、windows服务是否新建了数据库实例服务。这三项都正确了,一般都能成功的。其他如监听器的配置,可用netca自己配。