Oracle 10g R2支持手工跨平台移动数据库,即使这些平台具有不同的尾数格式(endian format)。 尾数格式与字节排序有关,它有两种不同的格式,即大尾数和小尾数。 如果在不同尾数字节格式的平台之间移动数据库,就需要手工操作,并且使用RMAN的convert datafile 或者 convert tablespace命令来将传送的数据文件转换为正确的尾数格式。




一、可跨平台传送的表空间


Oracle 支持几乎(不是所有)Oracle 数据库家族的所有平台之间的表空间移动。该功能具有如下的一些优点:


(1) 在不同的内容提供者之间有效地发布数据


(2) 在不同数据仓库,数据集和OLTP 系统之间轻松地转移数据。


(3) 轻松地跨平台迁移数据库


为了能够在平台之间移动表空间,必须将compatible 设置为10.0.0 或更高的值。 设置该参数后,在下一次启动操作时,表空间数据文件将被设置为支持跨平台操作。 注意的是: 只有在设置为可读写或联机时,只读文件和脱机数据文件才可支持跨平台操作。




二、字节排序和数据文件转换


1、数据文件排序


Oracle 平台一般使用两种不同的字节排序方法(称为:尾数格式)。 如果多个平台使用相同的字节排序方案,则可以采用以前的常用方法传送表空间,而不会产生任何问题。


如果字节排序方案不同,则需要在RMAN中使用convert 命令来将表空间转换为目标平台上所需的格式。 可以通过连接动态视图v$database和新的v$transportable_platform 视图来确定尾数格式:


SQL> select endian_format from v$transportable_platform tp, v$database d where tp.platform_name=d.platform_name;


ENDIAN_FORMAT


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


Little


该示例中,当前系统使用的是小尾数格式。 因此,如果在两个系统上的查询返回相同的结果,则表示有兼容的数据文件格式;如果返回不同的结果,则需要使用RMAN和compatible 参数来传送表空间。



2、使用RMAN 转换表空间尾数格式


如果需要转换另一个平台的表空间,则可以使用RMAN。


(1)转换表空间:


先将表空间转换为只读模式:


SQL> alter tablespace BL read only;


表空间已更改。


RMAN> convert tablespace BL to platform='AIX-Based Systems (64-bit)'


db_file_name_convert='D:/APP/ADMINISTRATOR/ORADATA/BL','F:/bl';


启动 conversion at source 于 08-7月 -10


使用通道 ORA_DISK_1


通道 ORA_DISK_1: 启动数据文件转换


输入数据文件: 文件号=00005 名称=D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF


已转换的数据文件 = F:/BL/BL01.DBF


通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:07


完成 conversion at source 于 08-7月 -10


启动 Control File and SPFILE Autobackup 于 08-7月 -10


段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBACKUP/2010_07_08/O1_M


F_S_723857700_63CW16C1_.BKP comment=NONE


完成 Control File and SPFILE Autobackup 于 08-7月 -10


说明,在这个实验中,我们发现它备份了控制文件和spfile文件,这也说明了以前的一个观点,当数据文件发生变化时,在开启自动备份的前提下,会自动备份这2个文件。



(2) 转换数据文件


RMAN> convert datafile 'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF' from platform


'AIX-Based Systems (64-bit)' db_file_name_convert 'D:/APP/ADMINISTRATOR/ORADATA/


BL','F:/bl';


有关 CONVERT DATAFILE or TABLESPACE,参考联机文档


http://www.di.unipi.it/~ghelli/didattica/bdldoc/B19306_01/backup.102/b14191/dbxptrn001.htm


使用平台名来自v$transportable_platform视图的platform_name列。 Oracle 对于放入正确的名称有严格的要求。


一旦完成了转换,就可以用下面的方式完成移动,使用可传送表空间手工移动数据文件或表空间。 注意的是,如果尾数格式不同,RMAN 就不能完成操作。尾数相同的可以按下面方法操作。


SQL> select * from v$transportable_platform;


PLATFORM_ID PLATFORM_NAME


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


         1 Solaris[tm] OE (32-bit)


         2 Solaris[tm] OE (64-bit)


         7 Microsoft Windows IA (32-bit)


        10 Linux IA (32-bit)


         6 AIX-Based Systems (64-bit)


         3 HP-UX (64-bit)




三、跨平台移动数据库


Oracle 10g 提供了全新的功能处理在尾数格式相同的平台之间移动数据库。Convert database命令结合DBMS_TDP程序包可以减少在平台之间移动数据库的整体工作量。 该过程包括如下步骤:


1、 以只读方式打开数据库


Start mount;


Alter database open read only;



2、使用dbms_tdp.check_db 过程来检查数据库状态。


Set serveroutput on


Declare


Db_ready boolean;


Begin


Db_ready := dbms_tdb.check_db


('Microsoft Windows IA (32-bit)',dbms_tdb.skip_readonly);


End;


/



3、 使用dbms_tdb.check_external 过程来标识外部对象:


Set serveroutput on


Declare


External boolean;


Begin


External := dbms_tdb.check_external;


End;


/



4、当数据库主备好传送时,就可以使用RMAN 的convert database命令。 RMAN 创建数据库移动所需要的脚本,但不实际执行移动,而是创建移动所需要的文件。


Convert database new database  'copy' transport scripts 'c:/oracle/copyscripts' to platform 'Microsoft Windows IA (32-bit)';


一旦完成该命令,只需遵循RMAN 提供的指令就可以在目标数据库上完成转换。



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html