技术开发 频道

可传输表空间特性复制数据:转换字节顺序


【IT168技术文档】
    对于oracle10g的可传输表空间特性而言,我觉着最另人兴奋的就是跨平台的传输了(尽管仍非所有平台都支持)。这意味着一旦数据库涉及到操作系统平台的变更,再不用像之前那样通过exp/imp这类慢的要死的应用来操作了。更加值的庆幸的是,转换这个操作并不复杂,归根结底,它只是一个命令(挠头,难道真的只有一个吗,不像oracle风格啊,oracle一向是喜欢出选择题的),是的,只有一个--CONVERT。 

CONVERT是RMAN中提供的一个命令,专门用于进行字节顺序转换的解决方案,其语法如图所示:


由上图可见,CONVERT命令可以转换数据文件、表空间甚至整个数据库的字节顺序,
 CONVERT TABLESPACE:用于在源库转换指定表空间的数据文件(第3步执行)。
 CONVERT DATAFILE:用于在目标库转换数据文件到目标平台(第4步执行)。
 CONVERT DATABASE:用于从源平台转换及传输整个数据库到目标平台,并确保创建需要的数据文件,视你的需求即可以在源库执行也可以在目标库执行。

CONVERT DATAFILE和CONVERT TABLESPACE还可用于操作ASM(Automatic Storage Management自动存储管理)文件的移入移出,这项功能用处极大,因为众所周知通常操作系统的命令例如Unix系统的cp或Windows系统的copy等命令是不能直接读写ASM中文件。要想操作ASM中文件,只有RMAN,这可是真正的华山一条路,舍它其谁。

没有CONVERT是不行的,但是CONVERT也不是功能较多的。
1、对于CONVERT DATAFILE, CONVERT TABLESPACE以及CONVERT DATABASE的所有应用,需要注意:
 CONVERT操作并不会改变源文件,转换操作也并不是在本地完成,而是直接写入目的地。
 源库和目标库的初始化参数中COMPATIBLE参数至少被设置为10.0
 在10g之前,CLOB字段做为变长字符集创建,CONVERT命令并不会转换这些列,而直接将其传输到目标库。直到后续有读取操作时,自动将其转换为目标字节顺序格式并保存。10g之后CLOB列的字符集被设置为AL16UTF16,完全平台无关,所以就更加不用考虑了。
 CONVERT命令并不会转换用户自定义的数据类型。如果你希望在数据库之间传输平台指定格式的映射对象,应该调用Data Pump。
 在传输到其它平台之前,要传输的表空间至少要被置为read-write状态一次(为什么?因为数据文件的文件头必须能够识别其所属的原平台是什么)。因此对于那些read-only的待传输表空间,你必须先将其置为read-write,然后再置为read-only。

2、对于CONVERT DATAFILE和CONVERT TABLESPACE操作的一些注意事项:
 如果在源库平台操作,必须使用CONVERT TABLESPACE... TO PLATFORM,不能使用CONVERT DATAFILE转换个别数据文件。而如果是在目标库平台操作,则必须使用CONVERT DATAFILE... FROM PLATFORM... TO PLATFORM而不能用CONVERT TABLESPACE。因为目标库还没有表空间的信息,自然也找到其对应的数据文件。
 FORMAT和DB_FILE_NAME_CONVERT参数可以同时使用,也可以都不使用,如果两个参数都不使用的话,目标平台中的文件路径会默认引用源平台中的路径。
 并非所有的平台都支持CONVERT,通过查询V$TRANSPORTABLE_PLATFORM视图确认所操作的平台是否支持CONVERT命令。要跨平台的传输表空间必须源和目标平台都在视图中的平台列表才可以。
 由于操作系统命令不支持直接操作文件到ASM,你可以通过CONVERT TABLESPACE或CONVERT DATAFILE移动文件到ASM中即使不涉及endian format的转换。使用CONVERT命令可以提供与操作系统的copy操作等同的功能,所不同的是CONVERT操作的是ASM。

3、对于CONVERT DATABASE的操作,除了上述第1条中的限制外,还有些其它的注意事项:
    对于传输整个数据库而言最主要的一个限制是源平台和目标平台必须拥有相同的endian format(只能有限跨平台了)。例如,你可以从Windows系统传输数据库到Linux x86系统,或者从HP-UX到AIX,但是如果你想从Solaris传输整个数据库到Linux x86的话就不能应用这项特性了。当然如果必须在这种情况下传输的话,可以选择手工建库,然后通过CONVERT TABLESPACE或CONVERT DATAFILE命令传输。

    提示:事实上,即使源平台和目标平台的endian formats完全相同,对于CONVERT DATABASE命令而言也仍然需要转换的过程。这主要是为了保证各种类型,比如回滚段等都被重新格式以确保与目标平台的兼容性。

下面是些其它方面不支持直接使用的限制:
 控制文件和Redo log文件不会被传输。目标平台的控制文件和redo logs会在传输过程中自动创建,并且目标库建立后以open resetlogs方式打开新数据库。
提示:由于目标库的控制文件是在传输过程中创建,源库中的RMAN备份信息并不会被生成到新库中(即使有)。
 BFILE类型对应的文件不会被传输。不过RMAN在执行CONVERT DATABASE时会将引用BFILE类型的对象输出一个列表,用户可以根据列表手工操作BFILE的文件到目标平台。
 本地管理的临时表空间数据文件不会被传输,而在传输过程中自动重建。
 外部表以及Directories不会被传输。与BFILE一样,RMAN也会提供一个列表供你手工操作时参考。
 密码文件不会被传输。不过RMAN也会在执行CONVERT DATABASE命令时输出用户以及其对应的权限,你可以对照输出手工创建新的密码文件。

CONVERT命令的参数并不多,而且也都比较容易理解,不再一一详细介绍,后面我们通过具体示例演示来辅助理解。

0
相关文章