暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

RMAN 跨平台CONVERT总结

2026

检查可传输平台

  • 如果源平台和目标平台具有相同的字节序,则数据将从源平台传输到目标平台,而不需要进行任何数据转换。
  • 如果源平台和目标平台具有不同的字节序,则必须将正在传输的数据转换为目标平台格式。

COLUMN PLATFORM_NAME FORMAT A40
COLUMN ENDIAN_FORMAT A14

SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM
ORDER BY PLATFORM_ID;

PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT


      1 Solaris[tm] OE (32-bit)                  Big
      2 Solaris[tm] OE (64-bit)                  Big
      3 HP-UX (64-bit)                           Big
      4 HP-UX IA (64-bit)                        Big
      5 HP Tru64 UNIX                            Little
      6 AIX-Based Systems (64-bit)               Big
      7 Microsoft Windows IA (32-bit)            Little
      8 Microsoft Windows IA (64-bit)            Little
      9 IBM zSeries Based Linux                  Big
     10 Linux IA (32-bit)                        Little
     11 Linux IA (64-bit)                        Little
     12 Microsoft Windows x86 64-bit             Little
     13 Linux x86 64-bit                         Little
     15 HP Open VMS                              Little
     16 Apple Mac OS                             Big
     17 Solaris Operating System (x86)           Little
     18 IBM Power Based Linux                    Big
     19 HP IA Open VMS                           Little
     20 Solaris Operating System (x86-64)        Little
     21 Apple Mac OS (x86-64)                    Little
     22 Linux OS (S64)                           Big

21 rows selected.

Converting Data Files on the Target System Before Import

  • RMAN CONVERT命令不支持具有undo段的数据文件在不同的端格式之间的数据文件转换
  • 如果您使用DBMS_FILE_TRANSFER包将数据文件传输到目标系统,那么在文件传输过程中数据文件会自动转换。无需再进行以下转换。

C:\Temp\sales_101.dbf
C:\Temp\sales_201.dbf

C:\>RMAN TARGET /

Recovery Manager: Release 12.1.0.1.0 - Production

Copyright (c) 1982, 2012, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORAWIN (DBID=3462152886)

RMAN> CONVERT DATAFILE 
'C:\Temp\sales_101.dbf',
'C:\Temp\sales_201.dbf'
TO PLATFORM="Microsoft Windows IA (32-bit)"
FROM PLATFORM="Solaris[tm] OE (32-bit)"
DB_FILE_NAME_CONVERT=
'C:\Temp\', 'C:\app\orauser\DATADG\orawin\'
 PARALLELISM=4;

Converting Data Between Platforms Using the DBMS_FILE_TRANSFER Package

  • 在数据文件传输过程中,可以使用DBMS_FILE_TRANSFER包的GET_FILE或PUT_FILE过程在平台之间转换数据。

1、源端创建directory

CREATE OR REPLACE DIRECTORY sales_dir_source 
   AS '+data/dbsa/datafile';

创建目录对象时,指定的文件系统目录必须存在。

2、创建一个从目标数据库到源数据库的DBLINK。
3、创建一个目录对象来存储要从源数据库传输的数据文件

CREATE OR REPLACE DIRECTORY sales_dir_target 
  AS '+data/dbsb/datafile';

4、运行DBMS_FILE_TRANSFER包中的GET_FILE过程来传输数据文件。(在目标库使用)

BEGIN
  DBMS_FILE_TRANSFER.GET_FILE(
    source_directory_object      => 'sales_dir_source',
    source_file_name             => 'mytable.342.123456789',
    source_database              => 'source_link',
    destination_directory_object => 'sales_dir_target',
    destination_file_name        => 'mytable');
END;
/

Oracle ASM不允许在GET_FILE过程的destination_file_name参数中使用完全限定的文件名形式。

RMAN CONVERT增量备份

  • 转换增量备份
cat tsbkupmap.txt

TESTTB1::21,17,5,19,11,14,16,20,12,15:::1=a7t3n1nj_1_1
TESTTB2::9:::1=a6t3n1n4_1_1

DECLARE
  handle    varchar2(512);
  comment   varchar2(80);
  media     varchar2(80);
  concur    boolean;
  recid     number;
  stamp     number;
  pltfrmfr number; ---源平台id
  devtype   VARCHAR2(512);
BEGIN
    sys.dbms_backup_restore.restoreCancel(TRUE);
    devtype := sys.dbms_backup_restore.deviceAllocate;
    sys.dbms_backup_restore.backupBackupPiece(
	bpname => '/export/home/oracle/xtts/stage_dest/a7t3n1nj_1_1',  --转换前备份集
    fname => '/export/home/oracle/xtts/backupondest/a7t3n1nj_1_1',  --转换后备份集
    handle => handle,media=> media,comment=> comment,concur=> concur,recid=> recid,stamp=>stamp,check_logical => FALSE,copyno=> 1, deffmt=> 0, copy_recid=> 0,copy_stamp => 0,npieces=> 1,dest=> 0,pltfrmfr=> 6);
    
    sys.dbms_backup_restore.backupBackupPiece(
	bpname => '/export/home/oracle/xtts/stage_dest/a6t3n1n4_1_1',
    fname => '/export/home/oracle/xtts/backupondest/a6t3n1n4_1_1',
    handle => handle,media=> media,comment=> comment,concur=> concur,recid=> recid,stamp=>stamp,check_logical => FALSE,copyno=> 1, deffmt=> 0, copy_recid=> 0,copy_stamp => 0,npieces=> 1,dest=> 0,pltfrmfr=> 6);

    sys.dbms_backup_restore.deviceDeallocate;
END;
/
  • 应用增量备份
xttnewdatafiles.txt
::TESTTB2
9,+DATADG/racdb/datafile/TESTTB2_9.dbf
::TESTTB1
17,+DATADG/racdb/datafile/TESTTB1_17.dbf
19,+DATADG/racdb/datafile/TESTTB1_19.dbf
11,+DATADG/racdb/datafile/TESTTB1_11.dbf
14,+DATADG/racdb/datafile/TESTTB1_14.dbf
16,+DATADG/racdb/datafile/TESTTB1_16.dbf
20,+DATADG/racdb/datafile/TESTTB1_20.dbf
12,+DATADG/racdb/datafile/TESTTB1_12.dbf
15,+DATADG/racdb/datafile/TESTTB1_15.dbf
21,+DATADG/racdb/datafile/TESTTB1_21.dbf
5,+DATADG/racdb/datafile/TESTTB1_5.dbf

set serveroutput on;
DECLARE
   outhandle varchar2(512) ;
   outtag varchar2(30) ;
   done boolean ;
   failover boolean ;
   devtype VARCHAR2(512);
BEGIN
 DBMS_OUTPUT.put_line('Entering RollForward');
 -- Now the rolling forward.
 devtype := sys.dbms_backup_restore.deviceAllocate;
 sys.dbms_backup_restore.applySetDatafile(check_logical => FALSE, cleanup => FALSE) ;
 DBMS_OUTPUT.put_line('After applySetDataFile');
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  17 ,toname => '+DATADG/racdb/datafile/TESTTB1_17.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  19 ,toname => '+DATADG/racdb/datafile/TESTTB1_19.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  11 ,toname => '+DATADG/racdb/datafile/TESTTB1_11.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  14 ,toname => '+DATADG/racdb/datafile/TESTTB1_14.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  16 ,toname => '+DATADG/racdb/datafile/TESTTB1_16.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  20 ,toname => '+DATADG/racdb/datafile/TESTTB1_20.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  12 ,toname => '+DATADG/racdb/datafile/TESTTB1_12.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  15 ,toname => '+DATADG/racdb/datafile/TESTTB1_15.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  21 ,toname => '+DATADG/racdb/datafile/TESTTB1_21.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
sys.dbms_backup_restore.applyDatafileTo(dfnumber =>  5 ,toname => '+DATADG/racdb/datafile/TESTTB1_5.dbf',fuzziness_hint => 0, max_corrupt => 0, islevel0 => 0,recid => 0, stamp => 0);
DBMS_OUTPUT.put_line('Done: applyDataFileTo');

-- Restore Set Piece
sys.dbms_backup_restore.restoreSetPiece(handle => '/export/home/oracle/xtts/backupondest/a7t3n1nj_1_1',tag => null, fromdisk => true, recid => 0, stamp => 0) ;
DBMS_OUTPUT.put_line('Done: RestoreSetPiece');
-- Restore Backup Piece
sys.dbms_backup_restore.restoreBackupPiece(done => done, params => null, outhandle => outhandle,outtag => outtag, failover => failover);
DBMS_OUTPUT.put_line('Done: RestoreBackupPiece');
sys.dbms_backup_restore.restoreCancel(TRUE);
sys.dbms_backup_restore.deviceDeallocate;
END;
/

RMAN CONVERT Transportable Tablespace with Data Pump: Example

1、alter tablesapce read only

SQL> ALTER TABLESPACE fsindex READ ONLY;
Tablespace altered.
SQL> ALTER TABLESPACE fsdata READ ONLY;
Tablespace altered.

2、expdp
expdp system TRANSPORT_TABLESPACES=fsdata,fsindex TRANSPORT_FULL_CHECK=YES DIRECTORY=dp_for_cloud

3、源库convert tablesapce,cp到目标

RMAN> CONVERT TABLESPACE fsdata, fsindex
TO PLATFORM 'Linux x86 64-bit'
FORMAT '/tmp/%U ';
…
input datafile file number=00006 name=/u01/app/oracle/DATADG/orcl/fsdata01.dbf
converted datafile=/tmp/data_D-ORCL_I-1410251631_TS-FSDATA_FNO-6_0aqc9un3
…
input datafile file number=00007 name=/u01/app/oracle/DATADG/orcl/fsindex01.dbf
converted datafile=/tmp/data_D-ORCL_I-1410251631_TS-FSINDEX_FNO-7_0bqc9un6

4、目标创建用户

SQL> CREATE USER fsowner
  2  PROFILE default
  3  IDENTIFIED BY fspass
  4  TEMPORARY TABLESPACE temp
  5  ACCOUNT UNLOCK;

5、目标IMPDP

impdp system DIRECTORY=dp_from_onprem \
TRANSPORT_DATAFILES='/u02/app/oracle/DATADG/ORCL/fsdata01.dbf', \
'/u02/app/oracle/DATADG/ORCL/fsindex01.dbf'

6、验证数据后,alter tablespace read write

SQL> ALTER TABLESPACE fsdata READ WRITE;
Tablespace altered.
SQL> ALTER TABLESPACE fsindex READ WRITE;
Tablespace altered.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论