Oracle在不同windows系统中的迁移
在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自己配。
推荐阅读
-
在windows操作系统中,查询端口占用和清除端口占用的程序
-
linux系统在不同的局域网中ip地址不变换的问题如何解决?
-
windows系统下axure 7.0 无法在发布中预览的解决办法
-
在windows操作系统中查询端口占用和清除端口占用的程序
-
Oracle Copy命令中SQL*Plus的Copy命令操作(在不同的表(同一服务
-
Oracle Copy命令中SQL*Plus的Copy命令操作(在不同的表(同一服务
-
having在Oracle和mysql中的一点不同点_MySQL
-
having在Oracle和mysql中的一点不同点_MySQL
-
Oracle在不同windows系统中的迁移
-
Oracle在不同windows系统中的迁移