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