1、在源数据库上设置为只读模式(必须是在归档模式下):
Sql>shutdown immediate;
Sql>startup mount;
Sql>alter database open read only;
2、利用dbms_tdb包检查数据库能否被传输以及列出外部表和DIRECTORY等无法传输的对象信息(本例从windows2003x64迁移至redhat 5.8x64平台;实例是全库迁移,这个检查实际上并不起到实际的作用):
检查ORACLE支持转换的平台信息:
Sql> select *
from V$TRANSPORTABLE_PLATFORM order by 3;
Sql>set
serveroutput on
Sql>declare
Db_ready Boolean;
Bein
Db_ready:=dbms_tdb.check(‘Linux
x86 64-bit’,dbms_tdb.skip_none);
End;
/
结果为如下表示正常:
PL/SQL procedure
successfully completed.
Sql>declare
External Boolean;
Begin
external :=
dbms_tdb.check_external;
end;
/
如下结果只是SYS表对象可以不用考虑:
The following
directories exist in the database:
SYS.DATA_PUMP_DIR,
SYS.ORACLE_OCM_CONFIG_DIR, SYS.ADMIN_DIR, SYS.WORK_DIR,
SYS.EXPDIR
PL/SQL procedure
successfully completed.
3、开始进行数据文件转换(在源库中进行,需要先在阵列上建立目录f:\oralinux):
Rman target /
RMAN>convert
database new database ‘ora92’
transport
script ‘f:\oralinux\transportdb.sql’
to
platform ‘Linux x86 64-bit’
db_file_name_convert
‘f:\oracle\ora92\’ ‘f:\oralinux\’;
4、修改f:\oralinux\transportdb.sql脚本,将源库中的涉及到的路径全部修改为LINUX对应的路径名称;
5、将目标库上的ORACLE停止(之前已经在LINUX上创建过ora92实例),并且将原/u01/app/oracle/ora92更名为/u01/app/oracle/ora92local;
6、拷贝数据文件(f:\oralinux\*.*)至linux的相应目录中(/u01/app/oracle/ora92),采用mput *.* .方式,之前先加入prompt以取消提示分个上传方式。
7、开始恢复目标库(执行上传的脚本文件/u01/app/oracle/ora92/transportdb.sql建立控制文件内容,本例忽略建立SPFILE过程):
$sqlplus /nolog
Sql>startup nomount;
Sql>create controlfile reuse set
database ‘ora92’
Resetlogs noarchivelog
……;
8、重新启动数据库并执行打开数据库(可参阅transportdb.sql脚本内容):
Sql>shutdown immediate;
Sql>startup mount;
Sql>alter database open resetlogs;
--开始建立源库中的临时表空间
Sql>alter tablespace temp add tempfile size 2G autoextend on next
655360 maxsize 32767M;
Sql>alter tablespace zltooltmp add tempfile size 2G autoextend on
next 655360 maxsize 32767M;
9、最后还必须执行数据库特殊脚本:
Sql>shutdown immediate;
Sql>startup upgrade;
Sql>@?/rdbms/admin/utlirp.sql;--注意脚本名称:utlirp.sql
Sql>shutdown immediate;
Sql>startup;
Sql>@?/rdbms/adminutlrp.sql;--注意脚本名称:utlrp.sql
至此跨平台同版本同字节数据库迁移完成。