当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle10g同字节序跨平台迁移(五)
发布时间:2010/9/14 9:43:34 来源:www.xue.net 编辑:城市总裁吧

  完成了以上工作后,可以关闭数据库,再次启动数据库到Mount状态,这时候新的控制文件已经发挥作用:

  SQL> shutdown immediate;

  ORA-01109: ??????

  已经卸载数据库。

  ORACLE 例程已经关闭。

  SQL> startup mount;

  ORACLE 例程已经启动。

  Total System Global Area 943718400 bytes

  Fixed Size 1293960 bytes

  Variable Size 239075704 bytes

  Database Buffers 700448768 bytes

  Redo Buffers 2899968 bytes

  数据库装载完毕。

  8. 完成数据库恢复

  接下来再参考一下transport.sql中的推荐步骤:

  ALTER DATABASE OPEN RESETLOGS;

  -- Commands to add tempfiles to temporary tablespaces.

  -- Online tempfiles have complete space information.

  -- Other tempfiles may require adjustment.

  ALTER TABLESPACE TEMP ADD TEMPFILE

  SIZE 20971520 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

  -- End of tempfile additions.

  现在我们需要通过RESETLOGS方式来重新生成日志文件,然后手工添加临时文件。

  注意,在迁移过程中如果两个平台的数据库版本完全一致,则以上步骤可以顺利执行,参考transport.sql可以顺利完成迁移。而本例的测试平台由于Linux平台的数据库版本为10.2.0.1,Windows平台版本为10.2.0.3,所以实际操作中还会有所不同,在执行RESETLOGS过程中,数据库会发生中断:

  SQL> alter database open resetlogs;

  alter database open resetlogs

  *

  第 1 行出现错误:

  ORA-01092: ORACLE 实例终止。强制断开连接

  检查日志我们发现以下提示:

  Mon Jun 25 10:03:19 2007

  Errors in file c:\oracle\admin\julia\udump\julia_ora_3596.trc:

  ORA-00704: 引导程序进程失败

  ORA-39700: 必须用 UPGRADE 选项打开数据库

  Oracle要求以UPGRADE选项打开数据库,对数据库执行跨版本迁移。

  我们继续参考transport.sql的最后部分:

  SHUTDOWN IMMEDIATE

  STARTUP UPGRADE PFILE='/opt/oracle/product/10.2.0/dbs/init_00il1i4r_1_0.ora'

  @@ ?/rdbms/admin/utlirp.sql

  SHUTDOWN IMMEDIATE

  STARTUP PFILE='/opt/oracle/product/10.2.0/dbs/init_00il1i4r_1_0.ora'

  -- The following step will recompile all PL/SQL modules.

  -- It may take serveral hours to complete.

  @@ ?/rdbms/admin/utlrp.sql

  set feedback 6;

  再次启动数据库到UPGRADE模式,由于之前的数据库中断,现在这些需要进行一点恢复工作:

  SQL> startup upgrade;

  ORACLE 例程已经启动。

  Total System Global Area 943718400 bytes

  Fixed Size 1293960 bytes

  Variable Size 239075704 bytes

  Database Buffers 700448768 bytes

  Redo Buffers 2899968 bytes

  数据库装载完毕。

  ORA-01113: 文件 1 需要介质恢复

  ORA-01110: 数据文件 1:'C:\ORACLE\ORADATA\JULIA\DATAFILE\O1_MF_SYSTEM_37TC1XNS_.DBF'

  SQL> recover database;

  完成介质恢复。

  恢复完成之后启动数据库到UPGRADE模式:

  SQL> shutdown immediate;

  ORA-01109: 数据库未打开

  已经卸载数据库。

  ORACLE 例程已经关闭。

  SQL> startup upgrade;

  ORACLE 例程已经启动。

  Total System Global Area 943718400 bytes

  Fixed Size 1293960 bytes

  Variable Size 239075704 bytes

  Database Buffers 700448768 bytes

  Redo Buffers 2899968 bytes

  数据库装载完毕。

  数据库已经打开。

  执行脚本?/rdbms/admin/utlirp.sql,这个脚本执行完成之后会有如下提示:

  DOC>#######################################################################

  DOC> utlirp.sql completed successfully. All PL/SQL objects in the

  DOC> database have been invalidated.

  DOC>

  DOC> Shut down and restart the database in normal mode and run utlrp.sql to

  DOC> recompile invalid objects.

  DOC>#######################################################################

  也就是说,这个脚本的作用是使数据库中的PL/SQL对象INVALID,然后通过utlrp.sql的重新编译,消除跨平台的兼容性影响。

  按照transport.sql脚本提示的步骤,我们可以重新启动数据库来执行utlrp.sql脚本(由于本例涉及到版本迁移,需要再次启动数据库到upgrade模式,如果数据库版本相同,则可以直接启动数据库,执行utlrp.sql脚本完成最后的编译工作):

  SQL> @@ ?/rdbms/admin/utlrp.sql

  TIMESTAMP

  -------------------------------------------------------------------------------

  COMP_TIMESTAMP UTLRP_BGN 2007-06-25 10:27:57

  ............

  PL/SQL 过程已成功完成。

  TIMESTAMP

  -------------------------------------------------------------------------------

  COMP_TIMESTAMP UTLRP_END 2007-06-25 10:39:43

  PL/SQL 过程已成功完成。

  utlrp.sql执行完成之后我们需要再执行和数据库升级相关的脚本,这个脚本是catupgrd.sql:

  SQL> @?/rdbms/admin/catupgrd.sql

  这个脚本调用catlog.sql和 catproc.sql来重建字典对象等,在执行完这个脚本之后,我们可以关闭数据库后,正常打开数据库:

  SQL> startup

  ORACLE 例程已经启动。

  Total System Global Area 943718400 bytes

  Fixed Size 1293960 bytes

  Variable Size 239075704 bytes

  Database Buffers 700448768 bytes

  Redo Buffers 2899968 bytes

  数据库装载完毕。

  数据库已经打开。

  SQL> select count(*) from dba_objects where status='INVALID';

  COUNT(*)

  ----------

  86

  已选择 1 行。

  SQL> @?\rdbms\admin\utlrp.sql

  catupgrd.sql脚本可能会使部分字典对象失效,我们可以再次运行utlrp.sql脚本来进行编译,编译完成后,不要忘记为数据库添加临时文件:

  SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

  2 SIZE 20971520 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

  表空间已更改。

  至此同字节序的跨平台迁移全部完成,当然由于版本的不同,整个过程稍微复杂了一些,不过这个过程对于跨平台的迁移及版本升级是一个很好的参考。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved