日期:2014-05-16  浏览次数:20549 次

Oracle数据库从Window XP迁移到Win7的诡异问题

最近公司的所有的操作系统都统一升级到Win7系统。我们公司有一个做工程计划的ORACLE 的一个产品软件叫Primavera Six(简称P6). 所以我需要把P6 的数据库从XP迁移到Win7系统。因为以前也做过从XP 到 XP系统的P6数据库的迁移成功过,而且是一次成功,没有出什么问题的。这次就没有在做迁移之前做测试。呵呵,有点自信过度了,以后一定要先做测试,否则如果是限制时间做数据库迁移的话,尤其是帮客户做项目的话,那可就被领导和客户批评了,还好我这次是自己公司的数据库,而且对时间要求不限制。我可以有几天的时间去查找回复不成功的原因。下面我来说说这个迁移的故事吧。

2014年4月10日早上就写邮件给相关用P6系统的同事,告诉他们,我从4月10号到4月11号做服务器的数据库迁移,所以在此其间数据库用不了。其实要不了这么长时间,主要是我们公司安装卸载程序还需要专门的人员授权才可以操作软件,所有的软件都不能在没有授权的情况下安装或者卸载,有点变态哦,哈哈。这也好,我就吧迁移时间说长点。我4月10日就和IT说,我4月11日要升级OS到WIN7,我今天把数据库和相关的软件做好备份,当然这个服务器里还有MYSQL数据库等信息。今天重点是说ORACLE的数据库的备份。MYSQL我自己写了个每天自动备份的小批处理,基本迁移到WIN7没有问题。于是我就把数据库做了几下日志切换:alter system switch logfile。我还是做两手准备吧,因为数据库比较小。

1,所以做一个全库冷备

a, 把数据库关闭 shutdown immediate 。

b,把所有的数据文件都拷贝下了, 包括tempfile,datafile,redo logile,controlfile等等

2,在数据库mount下用RMAN做一个全库备份。

a, RMAN的配置如下:

RMAN> configure channel device type disk format 'd:\bak\backupset\%U';

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:\bak\ctrlbak\%F';

RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
RMAN> CONFIGURE RETENTION POLICY TO recovery window of 5 days;
RMAN> backup as compressed backupset database plus archivelog;

 

b,从上面可以看出我备份的文件路径分别是:

控制文件自动备份的配置给设置好:CONFIGURE CONTROLFILE AUTOBACKUP on;

控制文件路径:d:\bak\ctrlbak

数据文件路径:d:\bak\backupset

 

C, 开始用RMAN做备份

RMAN〉BACKUP DATABASE;

备份完毕后,把d:\bak下的文件拷贝起来,同时把online redo log文件也拷贝下来,这个到后面,回复的时候我会告诉你的用处。再把其他的要备份的备份到移动硬盘上去。

4月10日就这样结束了,等待4月11日IT给吧XP的系统给抹掉,装上WIN7 系统再做回复。

 

To Be Continued......

4月11日,IT从早上一直搞到下午3点,才把OS升级到WIN7。于是,我就立即准备把MySQL安装上,把MYSQL的数据库回复上,MYSQL数据库恢复一切顺利,不到1个小时搞定,再把我自己开发的客户端程序安装下,连接下MYSQL数据库,一切正常。我开发的信息系统顺利连接上MYSQL数据库,客户端程序运行正常。下面就是开始着手安装Primavera Six,当然这个软件是自动的把ORACLE的数据库一起安装的,这个软件依然用的是ORACLE10.2.0.1.0的版本。用了差不多30分钟,P6安装好了。这个安装P6其实也是有一段很有趣的故事的,下面我来讲讲次故事:

因为我们的WIN7不是不一天安装的,公司人比较多,IT分了三个星期的时间分批安装,我一个同事在一周前安装P6的时候,发现不能用。后来让我去看下是什么原因,我查了下数据库,当我做数据库连接配置的时候,系统竟然说我没有权限在C:\Program Files (x86)\ ,具体的目录记不得了,写文件。连接数据库的配置是需要写数据库配置信息到本来磁盘的,竟然说我没有权限写的权限,我自己的电脑啊,我很纳闷,于是问我们的IT,他们说是公司的POLICY,所有的用户都没有administrator的超级用户的权限,这个权限在他们IT那。我当场晕死,奇葩吧。呵呵!没有办法,公司的POLICY,我们必须遵守。于是我尝试到C:\Program Files (x86)目录下创建一个文件夹,系统提示我需要输入用户名和密码验证,又一次当场晕倒,不让我建立目录,需要检验,怪不得程序没有办法写信息到此目录,于是我返回到C盘根目录下尝试创建一个文件夹,不需要验证,证明我是可以在C盘根目录下有写的权限的。你有可能会问我,为什么把数据库和系统盘安装在一个磁盘即C盘啊,这个我也不愿意啊,我们所有的电脑都只有一个分区盘即只有一个C盘。是不时觉得奇怪,你可能会问,难道不怕中病毒吧系统盘给搞坏了,那数据库不遭殃了啊。这个您放心,我们公司的杀毒软件还是可以的,监控不错。当然如果是磁盘坏了,我也没有办法了。通过上面的分析,我就分析,我们在用C:\Program Files (x86)下的权限有问题,由于很多安装程序都是默认安装到C:\Program Files (x86)下面的,所以导致了我们没有权限和没有办写数据库配置文件到本地的受权限控制的目录。所以我把P6卸载了重新安装,此时我把安装目录放到C盘的根目录下,花了20分钟,安装成功。当然,这个时候配置数据库也是成功的。此故事讲完了。

接着上面数据库恢复的事情,数据库安装好了后,我就把我用RMAN备份的数据拷贝到这个电脑的C:\bak\下。我就准备用RMAN做恢复操作,具体步骤如下:

a, 把数据库打到nomount 状态下。

SQL>startup nomount;

b,  用命令行启动RMAN接口, 具体命令是:

C:\>RMAN TARGET  sys/pwd  

b, 恢复备份的控制文件,具体命令如下:

RMAN>restore controlfile from 'disk path';

C, 控制文件恢复好了,我就可以把数据库置到mount状态了,这个样RMAN就可以读控制文件里的信息来恢复数据库了,我用的是controlfile,没有用catalog。所以这些信息都是存储在control file里的。把数据库置为MOUNT下,在RMAN里操作的命令如下:

RMAN〉sql ' alter database mount';