sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 运维DBA >

【学习笔记】Oracle表空间传输 OTTS传输总结

时间:2016-12-25 12:14   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle表空间传输的文章,详细介绍总结了OTTS的传输过程。详细讨论了使用RMAN工具的CONVERT DATAFILE,CONVERT TABLESPACE和CONVERT DATABASE命令实现跨平台传输表空间和数据库,这篇文章是基于Oracle 10gR2官方文档翻译而来。

一.跨平台传输表空间

      使用跨平台传输表空间,平台之间可以是不同的字节存储顺序(endian format)。当源平台目的地平台的字节存储顺序不同,源平台要传输表空间下的数据文件的字节存储顺序必须转换成和目的地平台相同。转换操作使用RMAN CONVERT TABLESPACE命令(在源平台转换)或者CONVERT DATAFILE命令(在目的地平台转换)。

CONVERT TABLESPACE命令必须用在源平台,CONVERT DATAFILE命令用在目的地平台

1.在源平台使用CONVERT TABLESPACE... TO PLATFORM命令:

     CONVERT TABLESPACE... TO PLATFORM命令用于在源平台转换表空间到目的地平台格式。在源平台数据库调用CONVERT TABLESPACE命令指定一个或更多表空间名称,例如:

RMAN> CONVERT TABLEPSACE ts_1, ts_2 ...
  TO PLATFORM 'platform_name';

platform_name支持的值可以从V$TRANSPORTABLE_PLATFORM查询到。

在源平台必须转换整个表空间,不能只转换一个数据文件。

CONVERT TABLESPACE ... TO PLATFORM包含如下可选参数:

PARALLELISM n
      用于指定n个服务器会话并行执行转换工作,以提升性能。每个数据文件只能分配一个单独的服务器会话进行转换,因此,不能通过分配一个大并行度转换单一数据文件来提升性能。

fileNameConversionSpec
      指定使用fileNameConversionSpec参数,用于对转换的数据文件生成新的文件名。

FORMAT formatSpec
      提供一个格式模板用于对转换的数据文件生成新的,唯一的文件名。如果没有指定FORMAT,RMAN使用和平台相关的目的地和格式。

下面在源平台转换表空间的例子:

1).设置传输表空间为只读模式

2).在V$TRANSPORTABLE_PLATFORM中查看目的地平台的名称

SQL> SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
   FROM V$TRANSPORTABLE_PLATFORM
   WHERE UPPER(PLATFORM_NAME) LIKE 'LINUX';

针对Linux在PC上的PLATFORM_NAME是'Linux IA (32bit)'。

3).使用CONVERT TABLESPACE转换命令

使用RMAN转换数据文件到目的地平台的字节存储顺序,FORMAT参数控制转换后数据文件的名称位置
% rman TARGET /
RMAN> CONVERT TABLESPACE finance,hr
   TO PLATFORM 'Linux IA (32-bit)'
   FORMAT='/tmp/transport_linux/%U';

转换后的数据文件被放在/tmp/transport_linux目录,数据和目的地系统的字节存储顺序相同。

4).使用导出工具创建导出dump文件。

5).移动转换后的文件和导出的dump文件到目的地平台主机。

6).使用导入工具插入表空间到新数据库。

7).修改表空间为读写模式。


2.在目的地主机使用CONVERT DATAFILE... FROM PLATFORM命令:

       CONVERT DATAFILE ... FROM PLATFORM用于在目的地平台转换源平台的表空间字节存储顺序。不能在目的地平台使用CONVERT TABLESPACE。

CONVERT DATAFILE命令可以跟上一个或多个需要转换的数据文件,例如:

RMAN> CONVERT DATAFILE datafile_1, datafile_2 ...
   FROM PLATFORM 'platform_name'
   FORMAT ' datafile_1, datafile_2 .';

        提供的FROM PLATFORM值必须匹配待转换数据文件的真实平台,否则RMAN返回一个错误,platform_name支持的值可以从V$TRANSPORTABLE_PLATFORM查询到。

PARALLELISM、FORMAT、fileNameConversionSpec参数和CONVERT TABLESPACE在源平台用法是相同的

下面是在目的地平台转换数据文件的例子:

1).在源库将需要转换的表空间设置为只读模式,表空间对应的数据文件包括:
/tmp/transport_solaris/fin/fin01.dbf
/tmp/transport_solaris/fin/fin02.dbf
/tmp/transport_solaris/hr/hr01.dbf
/tmp/transport_solaris/hr/hr02.dbf

2).在源库使用导出工具创建dump文件。

3).拷贝dump文件和数据文件到目的地。

4).使用RMAN CONVERT命令转换数据文件到目标主机格式,将转换后的数据文件存放在/orahome/dbs目录。

% rman TARGET /
RMAN> CONVERT DATAFILE
   '/tmp/transport_solaris/fin/fin01.dbf',
   '/tmp/transport_solaris/fin/fin02.dbf',
   '/tmp/transport_solaris/hr/hr01.dbf',
   '/tmp/transport_solaris/hr/hr02.dbf'
   DB_FILE_NAME_CONVERT
        '/tmp/transport_solaris/fin','/orahome/dbs/fin',
        '/tmp/transport_solaris/hr','/orahome/dbs/hr';

注意:
     a).FORMAT参数控制数据文件的名称和位置
     b).当在目的地平台转换数据文件时,必须使用FROM PLATFORM参数指定源平台。否则,RMAN将假设源和目的地平台字节存储顺序是相同的。

5).使用导入工具插入转换后的表空间到新的数据库。

6).修改表空间为读写模式。

        对于跨平台传输表空间而言,如果源平台和目的地平台的字节存储顺序是相同,那么可以不必执行CONVERT TABLESPACE或CONVERT DATAFILE进行转换,直接简单拷贝即可。

CONVERT TABLESPACE和CONVERT DATAFILE限制:

a).源和目的地数据库的COMPATIBLE初始化参数必须设置为10.0或者更高

b).不是所有源和目的地平台的组合都是支持的,确定源和目的地平台是否被支持需要查询V$TRANSPORTABLE_PLATFORM。如果源和目的地都在该视图列表中,那么CONVERT能用于一个平台到另一个平台的转换。

c).在10g版本,使用CONVERT命令将表空间传递到另一个平台之前必须至少一次被设置为读写模式。

d).RMAN的endian转换不能处理用户自定义数据类型。

e).10g之前的版本,CLOBs以可变长度字符集创建,并且依赖字节存储顺序存储,CONVERT命令不能执行CLOBs的转换RMAN捕获每个LOB字段的字节存储顺序,传播它到目的地数据库。之后通过SQL层读写这个数据,基于两者之一的字节存储顺序正确翻译数据,如果表空间可写,那么基于相关字节存储顺序写数据。

f).在Oracle Database 10g创建的CLOBs,存储在AL16UTF16字符集中,具有平台独立性。


二.跨平台传输数据库

      RMAN CONVERT DATABASE命令用于自动从一个平台(源平台)移动整个数据库到另一个平台(目的地平台)。源和目的地平台必须是相同的字节存储顺序,RMAN在目的地平台自动完成大多数创建新数据库的步骤,确保与源数据库有相同的数据,相同的设置。

      CONVERT DATABASE步骤可以在源平台或者目的地平台执行

      跨平台传输数据库要求平台之间必须有相同的字节存储顺序(endian format),传输数据库的数据文件必须经历转换过程,不能简单的从一个平台拷贝到另一个平台,可传输表空间是可以的。

      如果数据库使用的是PFILE,它是可以被传递的。如果使用的是SPFILE,那么将基于SPFILE生成PFILE,进行传递,之后在目标主机基于PFILE的设置创建一个新的SPFILE。大多数情况下,PFILE中的一些参数要求手动更新到新的数据库,例如,DB_NAME,CONTROL_FILES等。


跨平台传输数据库的限制:

a).源和目的地平台字节存储顺序必须是相同的

b).数据库文件不能简单的直接从源拷贝到目标主机必须经过转换过程

c).源平台的Redo日志文件和控制文件不支持传输,在传输过程中,针对新的数据库将创建新的控制文件和redo日志文件,OPEN RESETLOGS执行一次,新数据库即被创建。

注意:转换后的数据库控制文件不会包含源库的RMAN资料库的拷贝信息,源数据库的备份不能用于转换后的新数据库。

d).BFILEs不能被传输,RMAN在CONVERT DATABASE命令的输出中包含BFILE类型的对象列表,用户必须拷贝BFILEs到目的地平台指定的位置。

e).属于本地管理的临时表空间下的临时文件不能被传输,当执行transport script时,临时表空间将在目的地平台被重建。

f).外部表和directory不能传输,RMAN在CONVERT DATABASE命令的输出中列出了受影响的对象,用户必须在目的地数据库重新定义。

g).密码文件不能被传输。如果源库有密码文件,CONVERT DATABASE命令的输出将包括密码文件中所有用户的列表和它们对应的权限,用户参考这些信息在目的地数据库中重新创建新的密码文件。


1.使用DBMS_TDB包准备CONVERT DATABASE操作。

DBMS_TDB PL/SQL包定义了两个函数用于准备CONVERT DATABASE操作。

      1).使用DBMS_TDB.CHECK_DB检查数据库状态:

      DBMS_TDB.CHECK_DB检查数据库是否能被传输到期望的平台,当前数据库状态是否允许传输。它能在不跟任何参数的情况下被调用,查看源库是否有任何条件输出。

      DBMS_TDB.CHECK_DB返回TRUE,表示源数据库能使用CONVERT DATABASE传输,FALSE表示不能被传输。

      确保数据库以只读模式打开,然后再带上合适的参数调用DBMS_TDB.CHECK_DB。

      如果SERVEROUTPUT是ON,DBMS_TDB.CHECK_DB返回FALSE,那么会输出数据库不能被传输的原因。以下是可能阻止使用CONVERT DATABASE传输的原因:
      a).未知的目的地平台名称。
      b).目的地平台有不同的字节存储顺序。
      c).数据库不是以只读模式打开。
      d).数据库有活动或被怀疑的事务。
      e).需要执行事务回滚操作。
      f).数据库兼容版本小于10。
      g).一些表空间没有在兼容版本是10或更高的库中以读写模式打开过。

      如果调用DBMS_TDB.CHECK_DB在PL/SQL procedure successfully completed消息之前没有阻止传输的消息显示,表明数据库准备好被传输。

       2).使用DBMS_TDB.CHECK_EXTERNAL标识外部对象:

       DBMS_TDB.CHECK_EXTERNAL用于表示任何外部表,directory或者BFILEs。RMAN不能自动传输这些文件。

       DBMS_TDB.CHECK_EXTERNAL没有参数,当SERVEROUTPUT设置为ON,DBMS_TDB.CHECK_EXTERNAL输出数据库包含的外部表,directory和BFILEs。


2.使用RMAN CONVERT DATABASE命令转换数据库。

      在源和目的地平台执行CONVERT DATABASE的过程是不同的。

      1).在源平台使用CONVERT DATABASE转换数据文件。

下面是转换步骤:

a).准备传输数据库,源数据库必须以只读方式打开。
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN READ ONLY;

b).使用DBMS_TDB.CHECK_DB检查数据库状态。
使用DBMS_TDB包的CHECK_DB函数检查数据库是否准备好了。
set serveroutput on
declare
    db_ready boolean;
  begin
    /* db_ready is ignored, but with SERVEROUTPUT set to ON any
     * conditions preventing transport will be output to console */
    db_ready := dbms_tdb.check_db('Microsoft Windows IA (32-bit)',
        dbms_tdb.skip_none);
  end;

c).使用DBMS_TDB.CHECK_EXTERNAL标识外部对象。
SQL> set serveroutput on
SQL> declare
     external boolean;
  begin
    /* value of external is ignored, but with SERVEROUTPUT set to ON
     * dbms_tdb.check_external displays report of external objects
     * on console */
    external := dbms_tdb.check_external;
  end;

      当数据库准备好传输后,执行RMAN CONVERT DATABASE命令,指定目的地平台和输出文件名称。RMAN处理需要移动到目的地数据库的文件,包括以下:

*数据库数据文件的完整拷贝,准备传输。

*用于目的地平台新数据库的PFILE,包括源数据库PFILE或者SPFILE的设置:
# Please change the values of the following parameters:
  control_files            = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"
  db_recovery_file_dest    = "/tmp/convertdb/orcva"
  db_recovery_file_dest_size= 10737418240
  instance_name            = "NEWDBT"
  service_names            = "NEWDBT.regress.rdbms.dev.us.oracle.com"
  plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"
  db_name                  = "NEWDBT"

*transport script,包含用于在目的地平台创建新数据库SQL语句。

d).执行CONVERT DATABASE操作。
以下是在源平台使用CONVERT DATABASE的例子:
RMAN> CONVERT DATABASE NEW DATABASE 'newdb'
        transport script '/tmp/convertdb/transportscript'
        to platform 'Microsoft Windows IA (32-bit)'
        db_file_name_convert '/disk1/oracle/dbs' '/tmp/convertdb'
        ;

Starting convert at 25-JAN-05
using channel ORA_DISK_1

External table SH.SALES_TRANSACTIONS_EXT found in the database

Directory SYS.DATA_PUMP_DIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database

BFILE PM.PRINT_MEDIA found in the database

User SYS with SYSDBA and SYSOPER privilege found in password file
User OPER with SYSDBA privilege found in password file
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
converted datafile=/tmp/convertdb/tbs_01.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
converted datafile=/tmp/convertdb/tbs_ax1.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
.
.
.
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
converted datafile=/tmp/convertdb/tbs_52.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Run SQL script /tmp/convertdb/transportscript on the target platform
  to create database
Edit init.ora file init_00gb3vfv_1_0.ora.This PFILE will be used to
  create the database on the target platform
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on
  the target platform
To change the internal database identifier, use DBNEWID Utility
Finished backup at 25-JAN-05

      当CONVERT DATABASE完成,源数据库可以以读写模式被再次打开。

e).将所有处理的文件拷贝到目的地主机。

      放置数据文件到目的地主机期望的位置,如果在目的地的数据文件路径和源不同,编辑transport script引用新的数据文件位置。同时编辑PFILE修改任何针对目的地数据库的设置。

f).在目的地主机的SQL*PLUS中执行transport scirpt创建新数据库。

SQL> @transportscript

当transport sciprt完成,新数据库即创建完成。


2).在目的地主机使用CONVERT DATABASE转换数据文件。

      我们可能基于以下的原因考虑在目的地执行CONVERT DATABASE转换操作:
      *防止在源主机执行转换过程带来任何性能的开销。
      *从源系统分发数据库到多个可接受的不同的平台。

下面是转换步骤:

a).以只读模式打开源数据库。

b).执行DBMS_TDB.CHECK_DB标识任何阻止传输的原因。

c).执行DBMS_TDB.CHECK_EXTERNAL标识外部对象。

d).在源平台运行RMAN CONVERT DATABASE命令指定ON TARGET PLATFORM参数,下面是源主机上执行CONVERT DATABASE ON TARGET PLATFORM的例子:
RMAN> convert database on target platform
convert script '/tmp/convertdb/convertscript-target'
   transport script '/tmp/convertdb/transportscript-target'
   new database 'newdbt'
   format '/tmp/convertdb/%U'
   ;

Starting convert at 28-JAN-05
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=39 devtype=DISK

External table SH.SALES_TRANSACTIONS_EXT found in the database

Directory SYS.DATA_PUMP_DIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database

BFILE PM.PRINT_MEDIA found in the database

User SYS with SYSDBA and SYSOPER privilege found in password file
User OPER with SYSDBA privilege found in password file
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00017 name=/disk1/oracle/dbs/tbs_03.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
.
.
.
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00015 name=/disk1/oracle/dbs/tbs_51.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
Run SQL script /tmp/convertdb/transportscript-target on the target platform to create database
Edit init.ora file /tmp/convertdb/init_00gb9u2s_1_0.ora. This PFILE will be used to create the database on the target platform
Run RMAN script /tmp/convertdb/convertscript-target on target platform to convert datafiles
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform
To change the internal database identifier, use DBNEWID Utility
Finished backup at 28-JAN-05

      在源平台执行CONVERT DATABASE ON TARGET PLATFORM命令产生transport script,包含在目的地平台创建新数据库的SQL*PLUS命令,和包含同源数据库相同设置的新数据库PFILE。

e).将所有要处理的文件拷贝到目的地主机。

f).执行convert script。

      CONVERT DATABASE ON TARGET PLATFORM针对被传输的数据库的每个数据文件生成一个convert script,包含RMAN CONVERT DATAFILE命令。必须拷贝未转换的源数据文件到目的地相同的位置,然后在目的地运行转换脚本,转换数据文件到目的地可用的字节存储顺序。传统的转换命令类似以下内容:
RUN {

  CONVERT DATAFILE '/disk1/oracle/dbs/tbs_01.f'
  FROM PLATFORM 'Linux IA (32-bit)'
  FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-1_7qgb9u2s';

  CONVERT DATAFILE '/disk1/oracle/dbs/tbs_ax1.f'
  FROM PLATFORM 'Linux IA (32-bit)'
  FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSAUX_FNO-2_7rgb9u2s';

  CONVERT DATAFILE '/disk1/oracle/dbs/tbs_03.f'
  FROM PLATFORM 'Linux IA (32-bit)'
  FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-17_7sgb9u2s';
.
.
.

  CONVERT DATAFILE '/disk1/oracle/dbs/tbs_51.f'
  FROM PLATFORM 'Linux IA (32-bit)'
  FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-15_8egb9u2u';

  CONVERT DATAFILE '/disk1/oracle/dbs/tbs_52.f'
  FROM PLATFORM 'Linux IA (32-bit)'
  FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-16_8fgb9u2u';

}

CONVERT DATABASE ON TARGET PLATFORM不能处理转换后的数据文件拷贝。
如果源和目的地的临时位置不同,注意修改convert script中的CONVERT和FORMAT指定的位置。

g).创建参数文件和执行transport script。

      在目的地平台运行convert script准备数据文件,然后创建期望改变的参数文件,最后运行transport script创建新数据库。

当transport script完成,新数据库就创建。


参考文章:
Oracle Database Backup and Recovery Advanced User's Guide
10g Release 2 (10.2)
B14191-03
http://docs.oracle.com/cd/B19306_01/backup.102/b14191/dbxptrn.htm


--end--

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle表空间传输 OTTS传输总结

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1436.html

Oracle研究中心

关键词:

oracle跨平台传输数据库的限制

Oracle表空间传输

OTTS传输总结

CONVERT TABLESPACE和CONVERT DATAFILE限制