可以使用RMAN跨不同endian格式的平台传输表空间。也可以使用RMAN传输整个数据库到不同的平台只要两个平台拥有相同的endian格式。
1.关于跨平台数据传输
跨平台可传输的表空间是普通的可传输表空间的一个变化。所有适用于可传输表空间的限制也在这里适用,比如需要确保所有被传输的对象完整地被包含在被传输的表空间集中。跨平台可传输表空间可以在具有相同或不同的endian格式的平台之间执行。
跨平台可传输数据库与可传输表空间不是同样的事情。在这种情况中,你拷贝整个数据库,包括SYSTEM表空间从一个平台到另外一个平台。包含检查是不相关的,因为SYSTEM表空间也要被拷贝,不需要export/import步骤。跨平台可传输的数据库只能在具有相同endian格式的平台之间执行。
1.1.跨平台数据传输的目的
可以传输运行在一个平台上的数据库中的表空间到运行在一个不同平台上的数据库中。跨平台可传输的表空间的典型使用包括以下:
1)作为可传输的表空间发布结构数据配送给客户,他们可以转换表空间整合到他们存在的数据库中不管平台的类型。
2)从大型数据仓库服务器中移动数据到更小的计算机上的数据集市比如基于Linux的工作站或服务器。
3)跨异类集群(其中的所有主机共享相同的endian格式)共享只读表空间
4)在最少的应用停机时间内跨平台迁移表空间
对可传输表空间,它们的使用和创建与使用它们的不同技术的全面讨论请参考《Oracle Database Administrator’s Guide》。
你也可以使用RMAN从一个平台传输整个数据库到另外的平台。例如,商业要求需要你运行数据库在使用不同平台的更廉价的服务器上。在这种情况中,你可以使用RMAN传输整个数据库而不是重建它和使用import工具或可传输表空间来导入数据。
可以在目的地主机或源主机上转换数据库。在目的地主机上转换的原因包括:
1)避免源主机上由于转换过程的性能消耗
2)从一个源系统分发数据库到几个不同平台上的多个接收者
3)评估迁移到新平台的路径
1.2.跨平台数据传输的方法
RMAN让你可以传输数据文件,表空间,或整个数据库从一个平台到另外的平台。当传输整个数据库到不同的平台时,目的地平台必须具有与源平台相同的endian格式。
使用以下一个方法跨平台传输数据:
1)使用映像副本传输数据
2)使用备份集传输数据
1.3.支持跨平台数据传输的平台
Oracle数据库为每个支持跨平台数据传输的平台维护一个内部名称的列表。这些名称存储在视图V$TRANSPORTABLE_PLATFORM中。使用这个视图确认源平台或目的地平台的内部名称。当跨平台传输数据时,你可能需要源或目的地平台的准确的名称。任何作为CONVERT或BACKUP命令的参数指定的平台名称必须如视图V$TRANSPORTABLE_PLATFORM中显示一样准确地输入。
使用以下查询获取连接的数据库的平台名称:
SELECT PLATFORM_NAME
FROM V$TRANSPORTABLE_PLATFORM
WHERE PLATFORM_ID =
( SELECT PLATFORM_ID FROM V$DATABASE );
使用以下查询获取Linux平台的名称:
COL PLATFORM_NAME FOR A40
SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM
WHERE UPPER(PLATFORM_NAME) LIKE ‘%LINUX%’;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
------------- ------------------------- --------------
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
9 IBM zSeries Based Linux Big
13 Linux x86 64-bit Little
18 IBM Power Based Linux Big
22 Linux OS (S64) Big
SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
------------- ------------------------- -------------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
10 Linux IA (32-bit) Little
6 AIX-Based Systems (64-bit) Big
3 HP-UX (64-bit) Big
5 HP Tru64 UNIX Little
4 HP-UX IA (64-bit) Big
11 Linux IA (64-bit) Little
15 HP Open VMS Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
13 Linux x86 64-bit Little
16 Apple Mac OS Big
12 Microsoft Windows x86 64-bit Little
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
2.使用映像副本跨平台数据传输
2.1.使用映像副本跨平台数据传输概述
RMAN可以使用映像副本传输表空间,数据文件或整个数据库。使用RMAN的CONVERT命令执行使用映像副本的跨平台传输。表空间传输有时通过单独传输存储表空间数据的数据文件来执行。然而,不能只传输作为包含多个数据文件的表空间的一部分的一个单一的数据文件。
当源平台与目的地平台不同和endian格式不同时,你必须在可传输的表空间操作中使用RMAN的CONVERT命令。如果你在具有相同endian格式的平台之间转换数据库的一部分,你可以使用操作系统方法从源平台拷贝文件到目的地平台。如果你转换整个具有相同endian格式的数据库,任何具有undo信息的数据文件都必须进行转换。你不能直接从源平台拷贝这些文件到目的地平台。
2.1.1.使用映像副本的表空间和数据文件转换概述
可以在源主机但不是目的地主机上使用CONVERT TABLESPACE命令执行表空间转换。CONVERT TABLESPACE命令不是就地执行数据文件转换,而是产生在目的地平台上使用的正确格式的输出文件。命令不会更改源数据库中的数据文件的内容。
可以使用CONVERT DATAFILE命令转换文件。通常,CONVERT DATAFILE命令在目的地主机上使用,CONVERT TABLESPACE命令在源主机上使用。当你在源主机上使用CONVERT DATAFILE命令时,确保数据文件干净地脱机或包含数据文件的表空间是只读的。Data Pump Export工具生成export dump文件,与数据文件一起手动被拷贝到目的地主机,可以import到目的地数据库中。数据文件不与数据库中的表空间名称关联直到Data Pump export dump文件被import到目的地数据库为止。在这种情况中,RAMN不能将表空间名称转换为数据文件列表。因此,你必须使用CONVERT DATAFILE和通过文件名称标明数据文件。
2.1.2.使用映像副本的数据库转换概述
转换整个数据库到不同的平台,两个平台必须使用相同的endian格式。RMAN的CONVERT DATABASE命令自动从源平台移动整个数据库到目的地平台。传输的数据库包含与源数据库相同的数据,也有与源数据库相同的设置,除了一些例外之外。
自动被传输到目的地平台的文件包括:
1)属于永久表空间的数据文件
不像跨平台传输表空间,传输整个数据库要求某些类型的数据块,比如在undo段中的块,重新格式化来确保与目的地平台的兼容性。即使源和目的地平台的endian格式是相同的,某些类型的文件必须经历一个转换过程。
2)初始化参数文件或spfile
如果数据库使用基于文本的初始化参数文件,那么RMAN传输它。如果数据库使用spfile,那么RMAN基于spfile生成初始化参数文件,传输它和在目的地基于初始化参数文件中的设置创建新的spfile。
通常,要求为新的数据库手动更新初始化参数文件中的某些参数。例如,你可能更改DB_NAME和比如CONTROL_FILES参数来指示目的地主机上的文件的位置。
可以在源平台或目的地平台上转换数据文件的格式。命令CONVERT DATABASE ON DESTINATION PLATFORM不会转换数据文件的格式,而是生成可以手动运行来执行转换的脚本。CONVERT SCRIPT参数创建可以在目的地主机上手动执行在批量模式中转换数据文件副本的转换脚本。TRANSPORT参数生成包含在目的地平台上创建新数据库的SQL语句的传输脚本。
2.2.使用映像副本跨平台执行数据传输
2.2.1.使用映像副本执行跨平台的表空间转换
查看《Oracle Database Backup and Recovery Reference》中描述的CONVERT命令前提要求列表,在执行这个章节的步骤之前满足这些先决条件。
为了阐述的目的,假设你必须从运行在Sun Solaris主机上的源数据库prod_source传输表空间finance和hr。你计划传输它们到运行在Linux PC上的目的地数据库prod_test。你计划存储转换的数据文件在源主机上的临时目录/tmp/transport_linux/中。
使用映象副本执行跨平台的表空间转换:
1)启动SQL*Plus,使用管理员权限连接到源数据库prod_source。
2)在视图V$TRANSPORTABLE_PLATFORM中查看目的地平台的名称。
col platform_name for a40
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
3)执行DBMS_TTS.TRANSPORT_SET_CHECK存储过程检查要传输的表空间是否是自包含。如果TRANSPORT_SET_VIOLATIONS视图包含与指定表空间对应的行,那么你必须在进行转换之前解决依赖。
BEGIN
DBMS_TTS.TRANSPORT_SET_CHECK(‘USERS,MIS_TS’, TRUE,TRUE);
END;
/
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
4)将要传输的表空间置于只读模式。
ALTER TABLESPACE finance READ ONLY;
ALTER TABLESPACE hr READ ONLY;
5)选择命名输出文件的方法。
6)启动RMAN,作为TARGET连接到源数据库(不是目的地数据库)。
% rman
RMAN> CONNECT TARGET “sbu@prod_source AS SYSBACKUP”;
7)运行CONVERT TABLESPACE命令转换数据文件到目的地主机的endian格式。
以下示例的FORMAT参数控制转换的数据文件的名称和位置:
RMAN> CONVERT TABLESPACE finance,hr
2> TO PLATFORM ‘Linux IA (64-bit)’
3> FORMAT ‘/tmp/transport_linux/%U’;
结果是在/tmp/transport_linux/目录下的一组转换的数据文件,它们的数据是正确的Linux IA (64-bit)平台的endian格式。
8)继续传输表空间其余的要点。
a. 在源主机上使用Oracle Data Pump Export工具创建export dump文件。
b. 将转换的数据文件和export dump文件从主机移动到目的地主机上期望的目录。
c. 使用Data Pump Import工具插入表空间到新的数据库。
d. 如果使用,将被传输的表空间置于读写模式。
2.2.2.使用映像副本执行跨平台的数据文件转换
查看《Oracle Database Backup and Recovery Reference》中描述的CONVERT命令前提要求列表,在执行这个章节的步骤之前满足这些先决条件。
关于RMAN跨平台的数据文件转换期间重命名输出文件
数据文件转换需要你选择一个命名输出文件的技术。你必须使用CONVERT命令的FORMAT或DB_FILE_NAME_CONVERT参数控制输出文件的命名。规则按优先顺序列出:
1)任何匹配DB_FILE_NAME_CONVERT子语句中提供的任何模式的文件基于这个模式命名。
2)如果指定FORMAT子语句,那么任何不基于DB_FILE_NAME_CONVERT子语句提供的模式命名的文件基于FORMAT模式命名。
注:当源和目的地文件都是OMF时,不能使用DB_FILE_NAME_CONVERT子语句为CONVERT命令生成输出文件的名称。
如果源和目的地平台不同,那么你必须指定FROM PLATFORM参数。查询V$TRANSPORTABLE_PLATFORM来查看平台名称。FROM PLATFORM的值必须匹配要被转换的数据文件的格式来避免错误。如果你不指定FROM PLATFORM,那么这个参数缺省是目的地平台的值。
本章节阐述如何使用CONVERT DATAFILE命令。本节假设你想传输运行在Sun Solaris主机上的源数据库prod_source的表空间finance(数据文件fin/fin01.dbf和fin/fin02.dbf)和hr(数据文件hr/hr01.dbf和hr/hr02.dbf)。你计划传输它们到运行在Linux PC上的目的地数据库prod_test。你计划在目的地主机上执行转换。
当数据文件插入到目的地数据库中时,你计划存储它们在/orahome/dbs和保留当前的目录结构,即hr表空间的数据文件存储在/orahome/dbs/hr子目录,finance表空间的数据文件存储在/orahome/dbs/find目录。
使用映象副本执行跨平台的数据文件转换:
1)启动SQL*Plus,使用管理员权限连接到源数据库prod_source。
2)在视图V$TRANSPORTABLE_PLATFORM中查看源平台的名称。
col platform_name for a40
SELECT PLATFORM_ID,PLATFORM_NAME,ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;
3)将要传输的表空间置于只读模式。
ALTER TABLESPACE finance READ ONLY;
ALTER TABLESPACE hr READ ONLY;
4)在源主机上,使用Data Pump Export工具创建export dump文件。在本示例中,dump文件命名为expdat.dmp文件。
5)将export dump文件和要传输的数据文件对目的地主机可用。
可以使用NFS让dump文件和当前的数据库文件(不是副本)可访问。或者,可以使用操作系统工具复制这些文件到目的地主机。
在本示例中,你存储文件在目的地主机的/tmp/transport_solaris/目录。你保留文件的原始位置的子目录结构,即数据文件存储如下:
• /tmp/transport_solaris/fin/fin01.dbf
• /tmp/transport_solaris/fin/fin02.dbf
• /tmp/transport_solaris/hr/hr01.dbf
• /tmp/transport_solaris/hr/hr02.dbf
6)启动RMAN,作为TARGET连接到目的地数据库(不是源数据库)。
% rman
RMAN> CONNECT TARGET “sbu@prod_test AS SYSBACKUP”;
7)执行CONVERT DATAFILE命令转换数据文件到目的地主机的endian格式。
以下示例使用DB_FILE_NAME_CONVERT控制转换的数据文件的名称和位置,你也指定FROM PLATFORM子语句:
RMAN> CONVERT DATAFILE
2> ‘/tmp/transport_solaris/fin/fin01.dbf’,
3> ‘/tmp/transport_solaris/fin/fin02.dbf’,
4> ‘/tmp/transport_solaris/hr/hr01.dbf’,
5> ‘/tmp/transport_solaris/hr/hr02.dbf’
6> DB_FILE_NAME_CONVERT
7> ‘/tmp/transport_solaris/fin’,‘/orahome/dbs/fin’,
8> ‘/tmp/transport_solaris/hr’,‘/orahome/dbs/hr’
9> FROM PLATFORM ‘Solaris[tm] OE (64-bit)’;
结果是在/orahome/dbs/目录下的一组转换的数据文件,它们的名称如下:
• /orahome/dbs/fin/fin01.dbf
• /orahome/dbs/fin/fin02.dbf
• /orahome/dbs/hr/hr01.dbf
• /orahome/dbs/hr/hr02.dbf
8)继续传输表空间其余的要点。
a. 使用Data Pump Import工具插入表空间到新的数据库。
b. 如果使用,将被传输的表空间置于读写模式。
2.2.3.使用映像副本执行跨平台的数据库转换
当使用映像副本执行跨平台的数据库转换时,你可以在源主机或目的地主机上转换数据文件。
2.2.3.1.在跨平台数据库转换之前检查数据库
如在“使用映像跨平台数据传输概述”中所阐述的,你可以使用RMAN的CONVERT DATABASE命令自动从一个平台拷贝整个数据库到另外一个平台。你在源或目的地平台上转换数据库数据文件。
在转换数据库之前,查看《Oracle Database Backup and Recovery Reference》中描述的CONVERT DATABASE 命令的前提要求列表,在尝试这个章节的步骤之前确认满足所有这些先决条件
一个先决条件是源和目的地平台都必须共享相同的endian格式。例如,你可以从Microsoft Windows传输数据库到Linux for x86(都是little-endian),或从HP-UX到AIX(都是big-endian),但不能从HP-UX到Linux for x86(big-endian到little-endian)。
注:如果你因为平台不共享endian格式而不能使用CONVERT DATABASE命令,那么你可以在目的地平台上创建一个新的数据库和使用跨平台可传输的表空间来拷贝数据。
当传输整个数据库时,注意某些文件要求RMAN转换来确保与目的地平台的兼容性。即使源和目的地平台的endian格式是相同的,这些文件不能简单地从源平台拷贝到目的地平台。以下类型的文件要求RMAN转换:
1)任何包含undo段的文件
2)任何包含自动段空间管理(ASSM)段头要传输到HP Tru64平台或从HP Tru64平台传输的文件
缺省情况下,CONVERT DATABASE命令使用RMAN转换处理数据库中的所有数据文件。RMAN转换从一个位置拷贝文件到另外一个位置,即使它不对文件做任何更改。如果你有其它更喜欢的方式来拷贝不需要RMAN转换的数据文件,你可以使用CONVERT DATABASE命令的SKIP UNNECESSARY DATAFILES选项。如果你选择这个选项,那么CONVERT DATABASE命令只处理需要转换的文件。所有其它文件必须对用户可访问或从源数据库拷贝到目的地数据库。
不管数据文件转换是在源主机还是在目的地主机上执行,你必须在源数据库以只读模式打开时拷贝文件。
在跨平台转换之前检查数据库:
1)在源数据库上,作为具有SYSDBA或SYSBACKUP权限的用户启动SQL*Plus会话。
2)以只读模式打开数据库。
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE OPEN READ ONLY;
3)确保打开了服务器输出。
SET SERVEROUTPUT ON
4)执行DBMS_TDB.CHECK_DB函数。
这个检查确保没有条件阻止数据库传输,比如不正确的兼容性设置,有疑问或活动的事务,或在源平台和目的地平台之间有不兼容的endian格式。
你可以调用不带参数的CHECK_DB来看源数据库是否有状况阻止传输。你也可以使用下表中的参数调用这个函数。
参数 | 描述 |
---|---|
target_platform_name | 如在V$DB_TRANSPORTABLE_PLATFORM视图中显示的目的地平台的名称。 参数是可选的,但当使用skip_option参数时它是必需的。如果省略,会假设目的地平台与源平台兼容,只测试与平台兼容性无关的条件。 |
skip_option | 指定当检查数据库是否可以被传输时,跳过哪个,如果任何,部分数据库。支持的值(NUMBER类型)是: 1)SKIP_NONE(或0),检查所有表空间 2)SKIP_OFFLINE(或2),跳过检查脱机表空间中的数据文件 3)SKIP_READONLY(或3),跳过只读表空间中的数据文件 |
SQL> select PLATFORM_ID,PLATFORM_NAME,ENDIAN_FORMAT from V$DB_TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- --------------------- --------------
5 HP Tru64 UNIX Little
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
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
17 Solaris Operating System (x86) Little
19 HP IA Open VMS Little
20 Solaris Operating System (x86-64) Little
21 Apple Mac OS (x86-64) Little
以下示例阐述在32位Linux平台上执行CHECK_DB来传输数据库到32位Windows,跳过只读表空间。
DECLARE
db_ready BOOLEAN;
BEGIN
db_ready :=
DBMS_TDB.CHECK_DB(‘Microsoft Windows IA (32-bit)’,DBMS_TDB.SKIP_READONLY);
END;
/
如果没有告警出现,或如果DBMS_TDB.CHECK_DB返回TRUE,那么可以传输数据库。进入步骤6。
如果告警出现,或如果DBMS_TDB.CHECK_DB返回FALSE,那么当前不能传输数据库。进入步骤5。
5)检查输出了解数据库不能传输的原因,如果可能,修复问题然后返回到步骤4。
6)执行DBMS_TDB.CHECK_EXTERNAL函数鉴别任何外部表,目录或BFILES。RMAN不能自动传输这些文件,因此你必须手动拷贝文件和创建数据库目录。
以下示例显示如何调用DBMS_TDB.CHECK_EXTERNAL函数。
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;
/
如果没有外部对象存在,那么存储过程完成时没有输出。如果外部对象存在,那么输出类似于以下:
The following external tables exist in the database:
SH.SALES_TRANSACTIONS_EXT
The following directories exist in the database:
SYS.DATA_PUMP_DIR, SYS.MEDIA_DIR, SYS.DATA_FILE_DIR, SYS.LOG_FILE_DIR
The following BFILEs exist in the database:
PM.PRINT_MEDIA
2.2.3.2.当跨平台传输数据库时在源主机上转换数据文件
当你传输整个数据库时,某些类型的块比如在undo段中的块必须重新格式化以确保与目的地平台的兼容性。即使源和目的地平台的endian格式是相同的,某些数据文件必须经过一个转换过程,不能简单地从一个平台拷贝到另外一个平台。
具有undo信息和那些来自HP Tru64平台的数据文件必须进行转换。缺省情况下,当执行CONVERT DATABASE命令时,所有数据文件都被转换。然后,如果在CONVERT DATABASE命令中使用SKIP UNNECESSARY DATAFILES,那么具有undo段和那些来自HP Tru64平台的数据文件被转换。所有其它数据文件不需要转换,可以使用FTP,操作系统拷贝命令,或某些其它机制来拷贝到新数据库。
本章节假设已经满足CONVERT DATABASE的所有前提条件和已经执行“在跨平台数据库转换之前检查数据库”中的步骤。步骤的目的是作为跨平台数据库传输的一部分在源主机上转换数据文件的格式。
假设你想转换Solaris上运行的数据库到在Windows上运行的数据库。
在源主机上转换数据库:
1)以只读模式打开源数据库。
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
2)启动RMAN和作为TARGET连接到源数据库。
3)运行CONVERT DATABASE命令。
以下示例的TRANSPORT SCRIPT参数指定生成的可以用来创建新数据库的SQL脚本的位置。TO PLATFORM参数指示目的地数据库的平台。DB_FILE_NAME_CONVERT参数指定生成的数据文件的命名方案。
RMAN> CONVERT DATABASE
2> NEW DATABASE ‘newdb’
3> TRANSPORT SCRIPT ‘/tmp/convertdb/transportscript.sql’
4> TO PLATFORM ‘Microsoft Windows IA (32-bit)’
5> DB_FILE_NAME_CONVERT ‘/disk1/oracle/dbs’ ‘/tmp/convertdb’;
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
Edit init.ora file init_00gb3vfv_1_0.ora. This PFILE will be used to
create the database on the target platform
Run SQL script /tmp/convertdb/transportscript.sql on the target platform
to create database
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 conversion at source at 25-NOV-13
4)在CONVERT DATABASE完成之后,可以再次以读写模式打开源数据库。
5)将由CONVERT DATABASE生成的数据文件移动到目的地主机上期望的位置。
在步骤3中,命令创建文件在源主机上的/tmp/convertdb/目录。移动这些文件到目的地主机上将包含这些目的地数据库文件的目录。
6)如果目的地主机上到数据文件的路径是不同的,那么编辑传输脚本来指向新的数据文件位置。
7)如果有必要,编辑初始化参数文件更改目的地数据库的设置。
当数据库移动到目的地平台时,你必须编辑初始化参数文件顶端的几行。例如,初始化参数文件可能看起来如下:
# Please change the values of the following parameters:
control_files = “/tmp/convertdb/cf_DNEWDBT_id-1778429277_00gb9u2s”
service_names = “NEWDBT.example.com”
db_recovery_file_dest = “/tmp/convertdb/orcva”
db_recovery_file_dest_size= 10737418240
instance_name = “NEWDBT”
db_name = “NEWDBT”
plsql_native_library_dir = “/tmp/convertdb/plsqlnld1”
注:从Oracle数据库19c开始,自定义使用SERVICE_NAMES参数是过时的。它可能在将来的版本中不受支持。为了管理服务,Oracle建议你使用SRVCTL或GDSCTL命令行工具,或DBMS_SERVICE包。
8)如果必要,编辑传输脚本使用转换数据文件的新名称。
在步骤3中,传输脚本被命名为/tmp/convertdb/transportscript.sql。可以在目的地主机上运行这个脚本来创建数据库。因此,你必须使用数据文件的正确名称编辑脚本。
9)在目的地主机上,启动SQL*Plus,使用操作系统认证作为SYSDBA或SYSBACKUP连接到目的地数据库实例。
SQL> CONNECT / AS SYSBACKUP
如果选择不使用操作系统认证,你可以创建一个密码文件,然后使用用户名和密码连接。
10)在SQL*Plus中执行传输脚本从而在目的地主机上创建新的数据库。
SQL> @transportscript
当传输脚本完成时,新数据库的创建完成。
2.2.3.3.当跨平台传输数据库时在目的地主机上转换数据文件
本章节假设已经满足CONVERT DATABASE的所有前提条件和已经执行“在跨平台数据库转换之前检查数据库”中的步骤。步骤的目的是作为跨平台数据库传输的一部分在目的地主机上转换数据文件的格式。
2.2.3.3.1.在源主机上执行初步的数据文件转换步骤
在这个步骤中,你在源主机上执行CONVERT DATABASE命令。这个命令生成初始化参数文件和你可以编辑在目的地主机上使用的脚本。你同时从源主机拷贝没有转换的数据文件到目的地主机。
在源主机上执行初步的数据文件转换步骤:
1)以只读模式打开源数据库。
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
2)启动RMAN和作为TARGET连接到源数据库。
3)运行CONVERT DATABASE ON DESTINATION PLATFORM命令。
参数ON DESTINATION PLATFORM指定任何数据文件需要的CONVERT命令在目的地平台而不是源平台上执行。FORMAT参数指定生成的文件的命名方案。
RMAN> CONVERT DATABASE
2> ON DESTINATION PLATFORM
3> CONVERT SCRIPT ‘/tmp/convertdb/convertscript-target’
4> TRANSPORT SCRIPT ‘/tmp/convertdb/transportscript-target’
5> NEW DATABASE ‘newdbt’
6> FORMAT ‘/tmp/convertdb/%U’;
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
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 SQL script /tmp/convertdb/transportscript-target on the target platform
to create database
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 conversion at source at 28-JAN-13
命令为新数据库创建传输脚本,初始化参数文件,包含每个要被转换的数据文件的RMAN CONVERT DATAFILE命令的转换脚本。
注:CONVERT DATABASE ON DESTINATION PLATFORM不产生转换的数据文件副本。这个命令只创建脚本。
4)使用操作系统工具拷贝以下文件到目的地主机上的临时位置:
a. 要被转换的数据文件
b.转换脚本
c.传输脚本
d. 目的地数据库的初始化文件
5)让源数据库可读写。
2.2.3.3.2.在目的地主机上运行转换脚本
本章节阐述如何使用在前面章节创建的脚本在目的地主机上转换数据文件和完成传输过程。
在前面阶段创建的转换脚本使用源数据库文件的原始数据文件名称。FORMAT参数指定CONVERT DATABASE命令生成的文件的名称。
如果源数据库的数据文件可以从目的地主机上使用相同的路径名称访问,那么只要源数据库是只读的,你可以在目的地主机上运行转换脚本而不需要任何更改。例如,如果源和目的地主机同时使用NFS挂载包含源数据文件的磁盘和如果两台主机的挂载点是/fs1/dbs/,那么不需要编辑。
在目的地主机上运行转换脚本:
1)如果必要,编辑转换脚本。
在脚本中,每个要被转换的数据文件存在一个CONVERT DATAFILE命令。转换脚本必须指示没有转换的数据文件的当前的临时文件名称和转换的数据文件的输出文件名称。一个典型的转换脚本看起来如下:
RUN
{
CONVERT
FROM PLATFORM ‘Linux IA (32-bit)’
PARALLELISM 10
DATAFILE ‘/disk1/oracle/dbs/tbs_01.f’
FORMAT ‘/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-1_7qgb9u2s’
DATAFILE ‘/disk1/oracle/dbs/tbs_ax1.f’
FORMAT ‘/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSAUX_FNO-2_7rgb9u2s’
DATAFILE ‘/disk1/oracle/dbs/tbs_03.f’
FORMAT ‘/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-17_7sgb9u2s’
DATAFILE ‘/disk1/oracle/dbs/tbs_51.f’
FORMAT ‘/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-15_8egb9u2u’
DATAFILE ‘/disk1/oracle/dbs/tbs_52.f’
FORMAT ‘/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-16_8fgb9u2u’;
}
编辑转换脚本中的每个DATAFILE命令来指定作为输入的每个数据文件的临时位置。同时,编辑每个命令的FORMAT参数指定传输数据库的数据文件的期望的最终位置。
2)如果必要,在目的地主机上编辑初始化参数来更改目的地数据库的设置。
你必须编辑初始化参数文件顶部的几行。例如,初始化参数文件可能看起来如下:
# Please change the values of the following parameters:
control_files = “/tmp/convertdb/cf_DNEWDBT_id-1778429277_00gb9u2s”
db_recovery_file_dest = “/tmp/convertdb/orcva”
db_recovery_file_dest_size= 10737418240
instance_name = “NEWDBT”
service_names = “NEWDBT.example.com”
plsql_native_library_dir = “/tmp/convertdb/plsqlnld1”
db_name = “NEWDBT”
注:从Oracle数据库19c开始,自定义使用SERVICE_NAMES参数是过时的。它可能在将来的版本中不受支持。为了管理服务,Oracle建议你使用SRVCTL或GDSCTL命令行工具,或DBMS_SERVICE包。
3)在目的地主机上,使用SQL*Plus启动数据库实例到NOMONT模式。
指定在前面步骤中拷贝的初始化参数文件。
SQL> STARTUP NOMOUNT PFILE=‘/tmp/init_convertdb_00i2gj63_1_0.ora’
4)启动RMAN,作为TARGET连接到目的地数据库(不是源数据库)。
% rman
RMAN> CONNECT TARGET “sbu@prod_dest AS SYSBACKUP”;
5)在RMAN提示符下运行转换脚本。
RMAN> @/tmp/convertdb/convertscript-target
6)关闭数据库实例。
这个步骤是必要的,因为传输脚本必须执行包括STARTUP NOMOUNT的命令。
7)如果必要,编辑传输脚本来使用转换数据文件的新名称。
在示例的步骤3中,传输脚本是/tmp/convertdb/transportscript.sql。你在目的地主机上运行这个脚本来创建数据库。因此,你必须使用数据文件的正确名称来编辑脚本。
8)在SQL*Plus中执行传输脚本。
SQL> @/tmp/convertdb/transportscript
当传输脚本完成时,目的地数据库创建完成。
3.使用备份集跨平台数据传输
3.1.使用备份集跨平台数据传输概述
RMAN可以通过使用备份集跨平台传输数据库,数据文件和表空间。使用备份集执行跨平台数据传输让你可以使用块压缩来减少备份的大小。这改善了备份的性能和减少了通过网络传输备份花费的时间。
注:为使用备份集执行跨平台数据传输,目的地数据库的版本必须是Oracle数据库12c Release 1(12.1)或以后的版本。
当你传输整个数据库到不同的平台,源和目的地平台必须使用相同的endian格式。然而,用户表空间可以传输到使用与源平台不同endian格式的目的地平台。
在源数据库上,可以创建需要传输的数据的跨平台备份。跨平台备份是一个可以在与源平台不同的目的地平台上还原的RMAN备份。在目的地数据库上,还原和恢复跨平台备份来获取你想传输的数据。跨平台备份可以在视图V$TRANSPORTABLE_PLATFORM中支持的任何平台上还原。
RMAN不会在控制文件中登记为跨平台传输创建的备份集。这确保为跨平台传输创建的备份集不会在常规的还原操作期间被使用。
关于用来创建跨平台备份的备份集的子语句
在BACKUP命令中使用FOR TRANSPORT或TO PLATFORM子语句创建跨平台备份。当你使用这些子语句之中的一个创建只读表空间的跨平台备份时,RMAN也可以创建一个包含插入这些表空间到目的地数据库需要的元数据的Data Pump export dump文件。
虽然TO PLATFORM或FOR TRANSPORT子语句在Oracle Database 10g Release 2(10.2)或Oracle Database 11g中不受支持,你可以从这些版本的数据库传输数据到Oracle Database 12c Release 1(12.1)。在源数据库上,首先创建要传输的表空间的备份集,然后使用expdp命令创建Data Pump export dump文件。为在目的地数据库上还原这些备份,使用RESTORE命令执行还原操作,然后使用impdp命令导入Data Pump export dump文件。
RMAN自动创建数据库的跨平台备份的场景
当你使用备份集备份整个数据库时,如果满足以下条件,RMAN自动创建除了指定的备份之外的数据库的跨平台备份。
1)满足作为备份集传输整个数据库的先决条件。
2)BACKUP命令不包含任何与FOR TRANSPORT或TO PLATFORM子语句不兼容的子语句。
以下BACKUP命令创建数据库的跨平台的备份。虽然命令不包含FOR TRANSPORT或TO PLATFORM子语句来指示这是跨平台的备份,因为“使用备份集跨平台数据库传输的前提条件”描述的条件都满足,一个数据库的隐式的跨平台备份被创建。
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
BACKUP
SKIP OFFLINE
FILESPERSET 1
FORMAT ‘/tmp/xplat_backups/implicit_full_db_%U’
DATABASE;
}
使用备份集跨平台传输数据的高级步骤
使用备份集跨平台传输数据包括以下高级步骤:
1)在源数据库上,使用BACKUP命令创建要传输到不同平台的数据库,表空间,或数据文件的跨平台备份。备份在源主机上作为备份集创建。
2)传输源主机上创建的备份集到目的地主机。
可以使用操作系统工具传输备份集。例如,如果操作系统是Linux或UNIX,你可以使用cp命令传输备份集。
3)在目的地数据库上,还原从源主机上传输的备份集。使用RESTORE命令还原跨平台的备份。
当使用不一致的表空间备份跨平台传输表空间时,需要如“使用不一致的备份执行跨平台传输表空间”章节中描述的额外的恢复表空间的步骤。
3.1.1.使用备份集跨平台数据传输中使用的基本术语
在使用备份集执行跨平台数据传输之前,理解以下术语是很有用的。
Foreign Data File(外来数据文件)
不属于目的地数据库的数据文件称为外来的数据文件。这些数据文件作为传输到目的地数据库的数据的一部分插入到目的地数据库。在源数据库中,这个数据文件通过原始的数据文件序号来鉴别。
Foreign Tablespace(外来表空间)
外来表空间是一组外来的数据文件,它们组成源数据库中的一个表空间。这些外来数据文件不属于目的地数据库,但被传输到目的地数据库,通过源数据库中的原始表空间名称来鉴别。
Foreign Data File Copy(外来数据文件副本)
外来数据文件副本是一个从跨平台备份中还原的数据文件。它不能直接插入到目的地数据库,因为它是不一致的。你必须应用跨平台增量备份到这个数据文件和在插入它到目的地数据库之前恢复它。
Data Pump Destination(数据泵目的地)
Data Pump目的地是目的地数据库的服务器主机的磁盘上Data Pump export dump文件和Data Pump日志文件存储的位置。
3.1.2.关于为跨平台数据传输在源数据库上备份数据
为创建包含要传输到目的地数据库的数据的备份集,在源数据库上使用BACKUP命令。为指示你正在创建跨平台的备份,BACKUP命令必须包含FOR TRANSPORT或TO PLATFORM子语句。
当你使用FOR TRANSPORT,创建的备份集可以被传输到任何目的地数据库。如果目的地数据库使用与源数据库不同的endian格式,那么在目的地数据库上执行要求的endian格式转换。这种方法的好处是转换操作的处理消耗卸载到目的地数据库。
当你使用TO PLATFORM时,endian格式转换在源数据库上执行。TO PLATFORM子语句指定的目标平台必须是跨平台传输的支持平台。视图V$TRANSPORTABLE_PLATFORM包含支持平台的列表。
你可以创建包含多个备份片的跨平台备份。
当使用FOR TRANSPORT或TO PLATFORM子语句创建跨平台备份时,你不能使用BACKUP命令的某些子语句。查看《Oracle Database Backup and Recovery Reference》关于与TO PLATFORM和FOR TRANSPORT不兼容的子语句的信息。
3.1.3.关于为跨平台表空间传输使用的Data Pump Export Dump文件
当你创建跨平台一致的表空间备份时,备份集包括包含与指定表空间相关的数据的数据文件。一致的表空间备份是当表空间在只读模式时创建的一个或多个表空间的备份。在目的地数据库中还原这个备份之后,表空间必须插入到目的地数据库。为了实现这个目的,除了包含表空间数据的备份集,还需要来自源数据库的这些表空间的元数据。
在源数据库上,在BACKUP命令中使用DATAPUMP子语句创建插入表空间到目标数据库需要的元数据。元数据作为单独的备份集存储在Data Pump export dump文件中。使用这个备份集插入传输的表空间到目标数据库。
你可以通过使用FORMAT选项和DATAPUMP子语句指定包含表空间元数据的备份集如何命名。如果你忽略FORMAT选项,那么在BACKUP命令中指定的格式会用来命名export dump文件。当在BACKUP命令中没有指定FORMAT选项时,使用缺省的格式。
注:当你使用DATAPUMP子语句时,正在传输的表空间必须是只读的。
3.1.4.关于跨平台表数据传输期间在目的地主机上还原数据
在目的地数据库上,你使用RESTORE命令还原数据库,表空间,或包含在由备份集组成的跨平台备份中的数据文件。当你执行跨平台还原操作时,你必须使用RESTORE命令的foreignFileSpec子语句。
当你还原跨平台备份时,你必须指定以下信息:
1)包含在源数据库上备份的数据的备份集。
使用foreignFileSpec子语句的BACKUPSET选项来指定数据必须从其还原的跨平台备份集的名称。如果跨平台备份包含多个备份集,为每个备份集使用不同的BACKUPSET子语句。为还原表空间,你必须使用BACKUPSET子语句指定包含表空间数据的备份集和使用foreignFileSpec子语句的DUMP FILE选项指定包含表空间元数据的备份集。
在恢复期间不支持使用多个备份集。你不能应用多个备份集到一组外来的数据文件。
2)如它们在源数据库中使用的数据文件序号或表空间名称。
如果你在恢复数据文件或表空间,你可以恢复包含在跨平台备份中的特定的表空间或数据文件。
3)还原的数据文件必须存储的位置。
使用FORMAT子语句指定用来存储还原的数据文件的位置和名称。
如果你不提供目的地,那么必须在目标平台设置DB_FILE_CREATE_DEST初始化参数。RMAN使用新的Oracle管理文件(OMF)名称还原数据文件到这个参数指定的位置。
4)源平台的名称(只有当在目的地数据库上执行转换时)
使用FROM PLATFORM指定创建备份集的源平台的名称。平台名称必须精确匹配创建备份集时指定的名称。如果平台的名称存在差异,还原操作会失败。
3.1.5.关于从跨平台备份中选择要还原的对象
当从跨平台备份中还原数据时,你可以还原跨平台备份中包含的所有数据或只还原某些对象。
还原包含在跨平台备份中的所有数据
为还原整个数据库,在RESTORE命令中使用FOREIGN DATABASE子语句。这个子语句只有当从整个数据库备份集中还原和当源平台与目的地平台使用相同的endian格式时才能使用。你可以可选地使用FORMAT子语句指定用来命名还原文件的模式。
为还原在跨平台备份中包含的所有数据文件,在RESTORE命令中使用ALL FOREIGN DATAFILES子语句。
还原包含在跨平台备份中的部分数据
可以还原包含在跨平台备份中的某些数据文件或表空间。为了只还原某些数据文件,在RESTORE命令中使用FOREIGN DATAFILE子语句。当还原数据时,指定数据文件在源数据库中的绝对文件序号。为了只还原包含在跨平台备份中的某些表空间,在RESTORE命令中使用FOREIGN TABLESPACE子语句。作为子语句的一部分指定必须被还原的表空间的名称。
3.1.6.关于在目的地数据库上还原对象的名称和位置
当你还原跨平台备份时,在RESTORE命令中使用以下一个选项指定数据文件的名称和要被还原到的位置:
1)使用TO NEW选项与ALL FOREIGN DATAFILES子语句一起还原数据文件到通过DB_FILE_CREATE_DEST参数指定的位置。缺省情况下,RMAN为数据文件使用OMF名称。
2)使用FORMAT选项指定用来命名还原的数据文件的模式。你也可以作为FORMAT说明的一部分为这些文件指定目录。
3.1.7.关于导入跨平台表空间传输期间创建的Data Pump Export Dump文件
当在目的地数据库上还原只读表空间的跨平台备份时,使用foreignFileSpec子语句的DUMP FILE … FROM BACKUPSET选项来还原包含Data Pump export dump文件的备份集。Export dump文件包含插入表空间到目的地数据库要求的元数据。
在RESTORE命令中使用DATAPUMP子语句指定目的地主机上export dump文件要还原到的位置。如果你忽略这个子语句,dump文件被还原到缺省的操作系统特定的位置。
缺省情况下,RMAN在所有要求的外来数据文件被还原之后自动导入export dump文件。你可以通过指定NOIMPORT子语句选择不导入export dump文件。如果你作为还原操作的一部分不导入export dump文件,那么当你想插入表空间到目的地数据库时必须手动导入dump文件。
注:如果export dump文件被自动导入(也就是,没有使用NOIMPORT子语句),那么目的地数据库必须以读写模式打开。
3.2.使用备份集执行数据库跨平台传输
你可以从源平台传输整个数据库到目的地平台。当创建跨平台备份传输数据库时,你可以在源数据库或目的地数据库上转换数据库。在目的地数据库上执行转换的好处是转换操作的处理消耗从源数据库卸载到目的地数据库。
使用备份集跨平台数据库传输的前提要求
在创建跨平台备份来跨平台传输数据库之前,必须满足以下先决条件:
1)源数据库和目的地数据库的spfile中的COMPATIBLE参数必须设置为12.0.0或更高。
2)源数据库必须以只读模式打开
3)DBMS_TDB.CHECK_DB存储过程必须成功运行。
4)源平台和目的地平台必须使用相同的endian格式。
使用备份集从一个平台传输整个数据库到另外一个平台的步骤:
1)确保满足执行跨平台数据库传输的前提条件。
2)启动SQL*Plus,使用管理员权限连接到源数据库prod_source。
% sqlplus sys@prod_source as SYSDBA
3)在视图V$TRANSPORTABLE_PLATFORM中查询目的地平台的名称。
为传输整个数据库,源平台和目的地平台的endian格式必须相同。
4)选择命名输出文件的方法。
使用BACKUP命令的FORMAT子语句指定输出文件的名称。
例如,以下FORMAT子语句指定必须使用以transport_开头的唯一的名称存储在目录/oradata/backups/special下的输出文件。
FORMAT ‘/oradata/backups/special/transport_%U’
5)启动RMAN和作为TARGET连接到源数据库。
源数据库是包含需要传输到不同平台的数据的数据库。
% RMAN
RMAN> CONNECT TARGET “sbu@prod_source AS SYSBACKUP”;
6) 将数据库置于只读模式。
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
7)在BACKUP命令中使用FOR TRANSPORT或TO PLATFORM子语句备份源数据库。使用这些子语句中的一个来创建使用备份集的跨平台备份。
以下示例创建整个数据库的跨平台备份。这个备份可以在任何使用与源数据库相同的endian格式的支持的平台上还原。源平台是Sun Solaris x86 64-bit。因为使用了FOR TRANSPORT子语句,转换是在目的地数据库上执行。跨平台数据库备份存储在源主机上的/tmp/xplat_backups目录中的db_trans.bck。
BACKUP
FOR TRANSPORT
FORMAT ‘/tmp/xplat_backups/db_trans.bck’
DATABASE;
8)从源数据库断开。
9)将通过BACKUP命令创建的备份集移动到目的地主机。
使用操作系统特定的工具从源主机传输创建的备份集到目的地主机。例如,如果源和目的地主机的操作系统是Linux或UNIX,使用cp命令移动文件。
10)作为TARGET连接到数据库必须传输到的目的地数据库。
% RMAN
RMAN> CONNECT TARGET “sbu@prod_dest AS SYSBACKUP”;
11)确保目的地数据库在NOMOUNT状态。
12)通过使用RESTORE命令和FOREIGN DATABASE子语句还原传输自源数据库的备份集。
以下示例还原在步骤7中创建的跨平台数据库备份。目的地数据库使用与源数据库相同的endian格式。FROM PLATFROM子语句指定创建备份的平台的名称。需要这个子语句在目的地转换备份。包含跨平台数据库备份的备份集存储在目的地主机上的/tmp/xplat_restores目录中。TO NEW选项指定还原的外来数据文件在目的地数据库中必须使用OMF指定的名称。确保设置了DB_CREATE_FILE_DEST初始化参数。
RESTORE
FROM PLATFORM ‘Solaris Operating System (x86-64)’
FOREIGN DATABASE TO NEW
FROM BACKUPSET ‘/tmp/xplat_restores/db_trans.bck’;
3.3.使用备份集执行只读表空间跨平台传输
使用BACKUP命令和FOR TRANSPORT或TO PLATFORM子语句创建可以被用来从一个平台传输只读表空间到另外一个平台的备份集。当传输只读表空间时,你必须也导出这些表空间的元数据。需要元数据来插入表空间到目的地数据库。当跨平台传输表空间时,源和目的地平台可以使用不同的endian格式。
你可以还原包含在跨平台备份中的所有数据文件或表空间或只还原一部分。在还原这些对象之后,你可以指定还原的数据文件的名称和位置。
使用备份集执行跨平台表空间传输的前提条件
在创建可以用来传输表空间到不同平台的跨平台备份之前,必须满足以下前提条件:
1)源数据库和目的地数据库的spfile中的COMPATIBLE参数设置为12.0.0或更高
2)要传输的表空间是自包含的。
执行DBMS_TTS.TRANSPORT_SET_CHECK存储过程检查依赖关系。如果TRANSPORT_SET_VIOLATIONS视图包含指定表空间相应的行,那么你必须在创建跨平台备份之前解决依赖。
3)要传输的表空间处于只读模式,除非在BACKUP命令中使用了ALLOW INCONSISTENT子语句。
使用备份集传输只读表空间到不同平台的步骤:
1)确保满足传输表空间到另外一个平台的先决条件。
2)作为TARGET连接到需要传输表空间的源数据库。
$ RMAN
RMAN> CONNECT TARGET “sbu@prod_source AS SYSBACKUP”;
3)在视图V$TRANSPORTABLE_PLATFORM中查询目的地平台的名称。
4)将要被传输的表空间置于只读模式。
ALTER TABLESPACE example READ ONLY;
5)选择命名输出文件的方法。
使用BACKUP命令的FORMAT子语句指定命名输出文件的模式。
6)如果在传输的表空间是TDE加密的表空间,那么在备份集中存储它之前指定用来wrap万能钥匙(master key)的密码。
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;
7)在源数据库上使用BACKUP命令和TO PLATFORM或FOR TRANSPORT子语句备份表空间。使用DATAPUMP子语句指示必须创建表空间的export dump文件。Export dump文件创建在它自己的备份片中。
以下示例创建表空间projects和tasks可以在Solaris[tm] OE(64-bit)上恢复的跨平台备份。备份存储在目录/tmp/xplat_backups中的备份集trans_ts.bck中。包含插入表空间到目的地数据库需要的元数据的Data Pump export dump文件存储在/tmp/xplat_backup目录中的trans_ts_dmp.bck中。
RMAN > BACKUP
TO PLATFORM ‘Solaris[tm] OE (64-bit)’
FORMAT ‘/tmp/xplat_backups/trans_ts.bck’
DATAPUMP FORMAT ‘/tmp/xplat_backups/trans_ts_dmp.bck’
TABLESPACE projects, tasks;
因为使用了TO PLATFORM子语句,在源数据库上执行转换到目的地数据库的endian格式。
注:当你使用DATAPUMP子语句,确保目标数据库是打开的。
8)从源数据库断开。
9)将通过BACKUP命令创建的备份集和Data Pump export dump文件移动到目的地主机。
使用操作系统特定的工具从源主机传输创建的备份集到目的地主机。例如,如果源和目的地主机的操作系统是Linux或UNIX,使用cp命令移动文件。
10)作为TARGET连接到表空间必须传输到的目的地数据库。
% RMAN
RMAN> CONNECT TARGET “sbu@prod_dest AS SYSBACKUP”;
11)如果在传输的表空间是TDE加密的表空间,那么提供在源数据库上用来wrap万能钥匙(master key)的密码。
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;
12)使用RESTORE命令还原传输自源数据库的备份集。使用DUMP FILE子语句导入包含表空间元数据的export dump文件和插入表空间到目的地数据库。
以下示例从在步骤7中创建的跨平台数据库备份中还原projects和tasks表空间。备份集存储在目的地主机上的/tmp/xplat_restores目录中的trans_ts.bck。包含插入这些表空间到目的地数据库需要的元数据的Data Pump export dump文件存储在/tmp/xplat_restores目录中的trans_ts_dump.bck中。
RMAN> RESTORE
FOREIGN TABLESPACE projects, tasks TO NEW
FROM BACKUPSET ‘/tmp/xplat_restores/trans_ts.bck’
DUMP FILE FROM BACKUPSET ‘/tmp/xplat_restores/trans_ts_dmp.bck’;
4.使用不一致的备份跨平台传输表空间
25.4.1.使用不一致的备份跨平台传输表空间概述
RMAN让你可以跨平台传输不一致的表空间备份。不一致的表空间备份是当表空间处于读写模式时创建的一个或多个表空间的备份。术语不一致指的是备份中的数据文件包含在文件检查点之后所做的更改。在跨平台不一致备份操作产生的外来的数据文件不能直接插入到目的地数据库。它们必须在目的地数据库上可以被打开之前是一致的。你通过应用当表空间置于只读模式时创建的跨平台增量备份到这些外来的数据文件来让外来的数据文件成为一致。这个备份必须同时包含插入传输的表空间到目的地数据库需要的元数据的export dump文件。
不一致的表空间备份让你减少应用程序的停机时间。当表空间在线和对用户可用时,你在源数据库上创建跨平台的不一致备份。第一个备份必须是级别0的增量备份。随后,创建更小的包含自最近级别1备份以来对表空间做的更改的级别1的增量备份。这些级别0和级别1的增量备份可以在目的地数据库上还原和应用,即使在源数据库上正在创建其它级别1的增量备份。你不需要在目的地数据库上开始应用先前创建的级别1的备份之前等待直到在源数据库上创建了所有级别1的增量备份。因为当这些增量备份正在创建时表空间是仍然在线的,在这个阶段不存在应用程序停机时间。最终的级别1的增量备份是在表空间置于只读模式时创建的。应用程序停机时间在这时开始。最后的备份必须包括插入表空间到目的地数据库需要的元数据。
在目的地数据库上,你首先还原级别0的增量备份来创建一组外来数据文件。下一步,应用当表空间处于读写模式时创建的级别1的增量备份到这些还原的外来数据文件。按照它们创建的顺序应用这些备份。在大部分情况中,目标数据库追上上一个级别1的增量备份,在最终的表空间置于只读模式时在源数据库上创建的增量备份之前。最后一步是还原最终的当表空间置于只读模式时创建的级别1增量备份来让外来的数据文件成为一致的。这个备份包含插入表空间到目的地数据库需要的表空间元数据。
4.2.使用不一致的备份执行跨平台传输表空间
关于在源数据库上创建不一致和增量备份
在BACKUP或CONVERT命令中使用ALLOW INCONSISTENT子语句创建一个或多个表空间的跨平台不一致的备份。当不一致的备份创建时正在传输的表空间处于读写模式。为了创建增量备份,在BACKUP命令中使用INCREMENTAL LEVEL 1子语句。
第一个不一致的备份是级别0的增量备份。接下来,你可以创建多个跨平台级别1的增量备份。最终的跨平台增量备份必须是一个当表空间只读时创建的一致的备份。当你创建这个最终的增量备份时,在BACKUP命令中使用DUMP FILE子语句来创建包含表空间元数据的dump文件。
当使用CONVERT命令时,你必须使用Data Pump Export工具明确创建包含表空间元数据的export dump文件。
注:ALLOW INCONSISTENT子语句不能用来创建整个数据库的跨平台备份。
关于在目的地数据库上还原和恢复不一致的备份
首先在目的地数据库上还原当表空间置于读写模式时做的跨平台级别0增量备份。这个操作还原备份和创建外来数据文件副本。这些外来的数据文件是不一致的,因为当备份创建时表空间没有置于只读模式。为了让这些外来的数据文件一致的和达到一致的检查点SCN,按创建的顺序应用增量备份。最后一个增量备份必须是当表空间处于只读模式时创建的跨平台增量备份。下一步,插入表空间到目的地数据库,你还原和导入包含传输表空间的元数据的dump文件。
应用跨平台增量备份到还原的数据文件的要求
为成功应用跨平台增量表空间备份到一组还原的外来数据文件,必须满足以下条件:
1)对于包含在跨平台增量备份中的每个数据文件,start SCN必须比外来的数据文件副本当前的检查点SCN低。
2)通过还原操作创建的外来的数据文件副本必须没有更改过。
例如,如果外来的数据文件副本已经被插入目的地数据库,设置为读写,然后设置为只读,那么RMAN认为这个文件已经被更改过。
4.2.1.传输不一致的表空间到不同平台的步骤
本章节描述使用备份集或映像副本执行跨平台传输不一致的表空间的高级步骤。
使用备份集传输不一致的表空间的前提条件请查看前面章节中“使用备份集执行跨平台表空间传输的前提条件”。使用映像副本(CONVERT命令)传输不一致的表空间的前提条件在《Oracle Database Backup and Recovery Reference》中描述。
传输不一致的表空间到不同平台的步骤:
1.在源数据库上创建传输表空间需要的文件
1)如果要传输的表空间是TDE加密的表空间,那么在存储它在备份集以前指定用来wrap万能钥匙(master key)的密码。
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;
2)创建必须被传输到不同平台的表空间的跨平台级别0的不一致备份。表空间处于读写模式。在BACKUP命令中使用ALLOW INCONSISTENT和INCREMENTAL LEVEL 0子语句来指示备份是一个或多个表空间的不一致的备份。
3)创建必须被传输到另外一个平台的表空间的跨平台级别1的增量备份。表空间处于读写模式。
继第一个级别0的不一致备份之后,当表空间在读写模式时你可以创建任何数量的级别1的增量备份。使用ALLOW INCONSISTENT和INCREMENTAL LEVEL 1子语句创建这些增量备份。当表空间在读写模式时执行频繁的增量备份是有利的,因为这减少了需要使用最终的当表空间在只读时做的增量备份应用到目的地数据库的更改数据的数量。
4)表空间在只读模式时创建表空间的跨平台级别1的增量备份。
这是最终的增量备份,它必须包括dump文件,该文件包含插入传输表空间到目的地数据库需要的元数据。使用BACKUP命令的INCREMENTAL LEVEL 1子语句创建级别1的增量备份。
当你使用BACKUP命令执行跨平台传输时,使用DATAPUMP子语句随同增量备份一起创建Data Pump export dump文件。Dump文件创建在不同的备份集中。当你使用映像副本创建跨平台增量备份时,你必须通过使用Data Pump Export工具明确创建包含表空间元数据的dump文件。
2.使用FTP,操作系统拷贝命令,或某些其它机制移动源数据库中创建的备份集,数据文件和dump文件到目的地主机。
3.在目的地主机上还原表空间和插入它们到目的地数据库。
1)如果要传输的表空间是TDE加密的表空间,那么提供源数据库上用wrap万能钥匙(master key)的密码。
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;
2)还原跨平台级别0的不一致的备份。
这个还原操作在目的地数据库上创建一组外来的数据文件。这些外来的数据文件是不一致的,它们在被插入到目的地数据库之前需要恢复。
使用RESTORE命令还原跨平台级别0不一致的备份。当你还原由备份集构成的跨平台不一致的备份时,使用FROM BACKUPSET子语句来指定包含级别0的不一致备份的备份集的名称。
3)应用当表空间在读写模式中制作的跨平台级别1的增量备份到还原的外来的数据文件。
如果你创建多个跨平台级别1的增量备份,这些增量备份必须按它们创建的顺序应用。使用RECOVER命令来应用增量备份。RECOVER命令的FOREIGN DATAFILECOPY子语句必须列出增量备份必须应用到的每个数据文件。使用FROM BACKUPSET子语句指定包含要恢复的数据的备份集的名称。
4)应用当表空间处于只读模式中制作的跨平台级别1的增量备份到还原的外来的数据文件。
使用RECOVER命令来应用增量备份。RECOVER命令的FOREIGN DATAFILECOPY子语句必须列出增量备份必须应用到的每个数据文件。使用FROM BACKUPSET子语句指定包含要恢复的数据的备份集的名称。
5)还原包含表空间元数据的备份集。
使用RESTORE命令还原跨平台增量备份期间创建的包含dump文件的备份集。当备份创建时表空间处于只读模式。你可以使用DUMP FILE子语句在目的地数据库上指定dump文件的名称和DATAPUMP DESTINATION子语句指定dump文件还原的目录。如果忽略这些子语句,RMAN使用配置的缺省值。当使用备份集传输数据时,使用FROM BACKUPSET子语句指定包含dump文件的备份集的名称。
6)导入包含表空间元数据的dump文件到目的地数据库。
通过使用Data Pump Import工具导入增量备份期间创建的dump文件到目的地数据库。
4.2.2.使用备份集执行跨平台不一致的表空间传输示例
本示例从Sun Solaris平台上的源数据库传输不一致的表空间my_tbs到Linux x86 64-bit平台的目的地数据库。
以下步骤使用备份集跨平台传输不一致的表空间my_tbs:
1)连接到源数据库。
RMAN> CONNECT TARGET “sbu@prod_source AS SYSBACKUP”
2)确保满足传输表空间到另外一个平台的前提条件。
3)当表空间在读写模式时,创建表空间my_tbs的跨平台级别0不一致的备份。备份存储在目录/tmp/xplat_backups下名为备份集my_tbs_incon.bck中。
BACKUP
FOR TRANSPORT
ALLOW INCONSISTENT
INCREMENTAL LEVEL 0
TABLESPACE my_tbs FORMAT ‘/tmp/xplat_backups/my_tbs_incon.bck’;
4)创建包含表空间my_tbs在步骤3中的备份创建之后所做的更改的跨平台级别1的增量备份。表空间仍然处于读写模式。
BACKUP
TFOR TRANSPORT
TALLOW INCONSISTENT
TINCREMENTAL LEVEL 1
TTABLESPACE my_tbs FORMAT ‘/tmp/xplat_backups/my_tbs_incon1.bck’;
为最小化应用程序停机时间,当源数据库仍在读写模式时在步骤3和4中创建的级别0和级别1的增量备份可以在目的地数据库上还原和应用。当目的地数据库追上最近的级别1的增量备份,你可以将表空间置于只读模式,创建最终的增量备份。
5)将表空间my_tbs置于只读模式。
ALTER TABLESPACE my_tbs READ ONLY;
6)创建表空间my_tbs的最终的跨平台级别1的增量备份。这个备份包含在步骤4中创建的备份之后对数据库做的更改。它必须包括export dump文件,它包含表空间元数据。
BACKUP
FOR TRANSPORT
INCREMENTAL LEVEL 1
TABLESPACE my_tbs
FORMAT ‘/tmp/xplat_backups/my_tbs_incr.bck’
DATAPUMP FORMAT ‘/tmp/xplat_backups/my_tbs_incr_dp.bck’;
7)从源主机移动步骤3,4和6中生成的备份集和export dump文件到目的地主机上期望的目录中。
8)连接到目的地数据库。
RMAN> CONNECT TARGET “sbu@prod_dest AS SYSBACKUP”;
9)还原步骤3中创建的跨平台级别0的不一致备份。
使用FOREIGN DATAFILE子语句指定必须被还原的数据文件。FROM PLATFROM子语句指定创建备份的平台的名称。需要这个子语句在目的地数据库上转换备份。
在这个示例中,序号为6,7,20和10的数据文件被还原到对应数据文件的FORMAT子语句中指定的名称。数据文件序号必须是在源数据库上使用的序号。你可以从步骤3中创建的不一致备份的RMAN输出中获取数据文件的序号。
RESTORE
FROM PLATFORM ‘Solaris[tm] OE (64-bit)’
FOREIGN DATAFILE
6 FORMAT ‘/tmp/aux/mytbs_6.df’,
7 FORMAT ‘/tmp/aux/mytbs_7.df’,
20 FORMAT ‘/tmp/aux/mytbs_20.df’,
10 FORMAT ‘/tmp/aux/mytbs_10.df’
FROM BACKUPSET ‘/tmp/xplat_restores/my_tbs_incon.bck’;
10)通过应用在步骤4中创建的第一个跨平台级别1的增量备份来恢复步骤9中获得的外来的数据文件。
RECOVER
FROM PLATFORM ‘Solaris[tm] OE (64-bit)’
FOREIGN DATAFILECOPY ‘/tmp/aux/mytbs_6.df’,‘/tmp/aux/mytbs_7.df’,‘/tmp/aux/
mytbs_20.df’,‘/tmp/aux/mytbs_10.df’
FROM BACKUPSET ‘/tmp/xplat_restores/my_tbs_incon1.bck’;
11)通过应用在步骤6中创建的最终的跨平台级别1的增量备份来恢复步骤9中获得的外来的数据文件。这个备份在表空间处于只读模式时创建。
RECOVER
FROM PLATFORM ‘Solaris[tm] OE (64-bit)’
FOREIGN DATAFILECOPY ‘/tmp/aux/mytbs_6.df’,‘/tmp/aux/mytbs_7.df’,‘/tmp/aux/
mytbs_20.df’,‘/tmp/aux/mytbs_10.df’
FROM BACKUPSET ‘/tmp/xplat_restores/my_tbs_incr.bck’;
12)还原包含export dump文件的备份集。Dump文件包含需要插入表空间到目的地数据库的表空间元数据。
RESTORE
FROM PLATFORM ‘Solaris[tm] OE (64-bit)’
DUMP FILE ‘my_tbs_restore_md.dmp’
DATAPUMP DESTINATION ‘/tmp/dump’
FROM BACKUPSET ‘/tmp/xplat_restores/my_tbs_incr_dp.bck’;
13)插入表空间到目的地数据库。使用Data Pump import工具导入包含表空间元数据的dump文件到目的地数据库。
# impdp directory=dp_dir dumpfile=backup_tts_RDBMS_13462.dmp
transport_datafiles=‘/tmp/aux/mytbs_6.df’,‘/tmp/aux/mytbs_7.df’,‘/tmp/aux/
mytbs_20.df’,‘/tmp/aux/mytbs_10.df’ nologfile=Y
5.通过网络执行跨平台数据文件传输
RMAN可以连接到源数据库,以备份集格式创建需要的数据文件备份,传输它们到目的地,然后在目标数据库上恢复备份。通过与RESTORE FOREIGN DATAFILE命令一起使用FROM SERVICE子语句执行这个任务。
你需要通过增加要求的条目到tnsnames.ora和listener.ora文件来建立源数据库和目的地数据库之间的连接。源和目的地数据库的COMPATIBLE初始化参数必须设置为12.2。
1)打开RMAN,作为TARGET连接目的地数据库(数据文件必须被还原的数据库)。
2)通过使用源数据库上对应的数据文件还原需要的数据文件。
FROM SERVICE子语句指定源数据库的服务名称。
以下语句使用来自服务名称为source_db的源数据库的数据文件还原数据文件21和22。TO NEW子语句指示为特定表空间还原的数据文件必须使用与源数据库上不同的新名称。
RESTORE
FOREIGN DATAFILE 21,22 TO NEW
FROM SERVICE ‘source_db’;
3)恢复在步骤2中还原的外来的数据文件。
以下语句使用服务名称是source_db的源数据库中的数据文件恢复通过FOREIGN DATAFILECOPY子语句指定的外来的数据文件。
RECOVER
FOREIGN DATAFILECOPY ‘/u01/oracle/oradata/db1_tbs21.dbf’,‘/u01/
oracle/oradata/db1_tbs22.db’
FROM SERVICE ‘source_db’;
来源:《Oracle Database Backup and Recovery User’s Guide,19c》