Oracle TTS异构平台传输表空间 [单实例(11.2.0.4) --> RAC(18.4) PDB迁移] 操作示例
在上篇我们看了单实例之间的TTS 操作示例,如下:
Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392
传输表空间的的使用限制也需要注意:
Oracle 传输表空间(TTS) 的限制与局限性
https://www.cndba.cn/dave/article/4390
简单的说传输表空间有如下限制:
1)源和目标数据库必须使用相同的字符集和国家字符集;
2)目标数据库不能已经包含同名的表空间;
3)目标数据库中必须已经存在传输表空间中对象的用户
4)传输表空间必须是自包含的,否则需要相关的表空间一起传输,比如:表在一个表空间,而索引在另外一个表空间,这两个表空间必须一起传输.
5)传输表空间无法处理同义词、用户、权限
本篇我们来演示下跨版本的单实例迁移到高版本的RAC。
源端:windows,11.2.0.4, 单实例
目标端:Linux,18.4, RAC集群
1 源端环境说明
PS C:/WINDOWS/system32> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期五 2月 5 18:10:26 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name,dbid from v$database;
NAME DBID
------------------ ----------
CNDBA 328181787
SQL> col file_name for a50
SQL> set lines 120
SQL> col tablespace_name for a20
SQL> select file_id,file_name,tablespace_name from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- --------------------
4 D:/APP/ZHIXIN/ORADATA/CNDBA/USERS01.DBF USERS
3 D:/APP/ZHIXIN/ORADATA/CNDBA/UNDOTBS01.DBF UNDOTBS1
2 D:/APP/ZHIXIN/ORADATA/CNDBA/SYSAUX01.DBF SYSAUX
1 D:/APP/ZHIXIN/ORADATA/CNDBA/SYSTEM01.DBF SYSTEM
5 D:/APP/ZHIXIN/ORADATA/CNDBA/EXAMPLE01.DBF EXAMPLE
6 D:/APP/ZHIXIN/ORADATA/CNDBA/DAVE6.DBF CNDBA
7 D:/APP/ZHIXIN/ORADATA/CNDBA/DAVE5.DBF CNDBA
已选择7行。
SQL> select count(1) from cndba.dave;
COUNT(1)
----------
173925
SQL>
我们这里将CNDBA 表空间迁移到RAC平台。
2 查看平台 endian format (byte ordering)和字符集
SQL> set pages 200
SQL> COLUMN PLATFORM_NAME FORMAT A40
SQL> SELECT * 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
20 rows selected.
--也可以直接查询当前平台:
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- ----------------------------
Linux x86 64-bit Little
SQL> select userenv('LANGUAGE') FROM DUAL;
USERENV('LANGUAGE')
--------------------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
Linux 和Windows 都是Little,Unix 都是Big。
3 检查表空间自包含
在执行传输之前必须确保这一步通过,否则无法正常进行传输表空间。
SQL> execute sys.dbms_tts.transport_set_check('CNDBA', true);
PL/SQL procedure successfully completed.
SQL> select * from sys.transport_set_violations;
no rows selected
4 导出元数据
在执行导出之前,必须先将表空间设置为只读模式:
SQL> alter tablespace cndba read only;
Tablespace altered.
使用expdp/impdp 进行元数据的导出导入,这里要注意点,对于海量数据(T+级别),导出导入时在处理统计信息时可能需要数小时的时间,所以在处理海量数据时建议直接排除统计信息:EXCLUDE=TABLE_STATISTICS, INDEX_STATISTICS。
SQL> CREATE OR REPLACE DIRECTORY dpump_dir AS 'G:/tmp';
目录已创建。
SQL> GRANT READ,WRITE ON DIRECTORY dpump_dir TO system;
授权成功。
SQL>
PS C:/Users/zhixin> expdp system/oracle DUMPFILE=cndba.dmp DIRECTORY = dpump_dir TRANSPORT_TABLESPACES= CNDBA TRANSPORT_FULL_CHECK=Y EXCLUDE=TABLE_STATISTICS, INDEX_STATISTICS
Export: Release 11.2.0.4.0 - Production on 星期五 2月 5 18:23:17 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** DUMPFILE=cndba.dmp directory=dpump_dir transport_tablespaces= TRANSPORT_FULL_CHECK=Y EXCLUDE=TABLE_STATISTICS INDEX_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
G:/TMP/CNDBA.DMP
******************************************************************************
可传输表空间 CNDBA 所需的数据文件:
D:/APP/ZHIXIN/ORADATA/CNDBA/DAVE5.DBF
D:/APP/ZHIXIN/ORADATA/CNDBA/DAVE6.DBF
作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 星期五 2月 5 18:23:53 2021 elapsed 0 00:00:36 成功完成
PS C:/Users/zhixin>
5 传输文件
将上部导出的元数据dump 文件和表空间对应的datafile 复制到目标端。 我们这里随便找一个节点即可。 因为RAC 环境要放到ASM磁盘组中,所以数据文件是临时存放的,路径没有要求。我们这里都放到/tmp/cndba目录下。
[oracle@www.cndba.cn1 tmp]$ cd cndba/
[oracle@www.cndba.cn1 cndba]$ pwd
/tmp/cndba
[oracle@www.cndba.cn1 cndba]$ ll
total 41080
-rw-r--r-- 1 oracle oinstall 102400 Feb 5 18:30 CNDBA.DMP
-rw-r--r-- 1 oracle oinstall 20979712 Feb 5 18:52 dave5.dbf
-rw-r--r-- 1 oracle oinstall 20979712 Feb 5 18:52 dave6.dbf
-rw-r--r-- 1 oracle oinstall 1254 Feb 5 18:30 export.log
[oracle@www.cndba.cn1 cndba]$
6 目标端处理
这里还需要注意一点异构平台的字节顺序转换在源端和目标端都可以进行,在上一节中我们是在源端转换好后直接复制到目标使用的。 因为我们这里采用第二种方法,在目标端来进行处理,源端不做处理。
Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392
对应的命令是:
1)CONVERT TABLESPACE:用于在源库转换指定表空间的数据文件 。
2)CONVERT DATAFILE: 用于在目标库转换数据文件到目标平台 。
这2种方式的最主要的区别是转换字节顺序的空间是在哪一段处理。 因为转换后新生成的数据文件占用空间很大。 可以根据实际情况来进行处理。
我们这里在目标端处理。
我们这里是从Windows 迁移到Linux,转换操作如下。
--查询目标端的字节码:
SQL> col platform_name for a50
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
-------------------------------------------------- ----------------------------
Linux x86 64-bit Little
SQL>
我们这里将字节顺序转换和转移到ASM 磁盘组一起处理:
[oracle@www.cndba.cn1 cndba]$ rman target /
Recovery Manager: Release 18.0.0.0.0 - Production on Fri Feb 5 19:03:40 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
PL/SQL package SYS.DBMS_BACKUP_RESTORE version 18.03.01.00 in TARGET database is not current
PL/SQL package SYS.DBMS_RCVMAN version 18.03.01.00 in TARGET database is not current
connected to target database: CNDBA (DBID=250480704)
RMAN>
RMAN> CONVERT DATAFILE '/tmp/cndba/dave5.dbf', '/tmp/cndba/dave6.dbf'
TO PLATFORM="Linux x86 64-bit" FROM PLATFORM="Microsoft Windows x86 64-bit"
DB_FILE_NAME_CONVERT="/tmp/cndba/", "+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/" PARALLELISM=5;
Starting conversion at target at 2021:02:0519:07:27
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
using channel ORA_DISK_5
channel ORA_DISK_1: starting datafile conversion
input file name=/tmp/cndba/dave5.dbf
channel ORA_DISK_2: starting datafile conversion
input file name=/tmp/cndba/dave6.dbf
converted datafile=+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
converted datafile=+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf
channel ORA_DISK_2: datafile conversion complete, elapsed time: 00:00:03
Finished conversion at target at 2021:02:0519:07:31
RMAN>
7 导入元数据
在目标端创建用户,表空间不用创建,如果用户不同需要在impdp时使用REMAP_SCHEMA=(source:target)。
因为我们这里是18c 的环境,我们直接导入的PDB环境中。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
SQL> alter session set container=DAVE;
Session altered.
SQL>
SQL> create user dave identified by dave;
User created.
SQL> grant connect,resource,dba to dave;
Grant succeeded.
SQL> create directory dpump_dir as '/tmp/cndba';
Directory created.
SQL> grant read,write on directory dpump_dir to system;
Grant succeeded.
我们这里用户也不同,需要remap一下:
[oracle@www.cndba.cn1 cndba]$ impdp dave/dave@192.168.1.100:1521/DAVE directory=dpump_dir DUMPFILE=CNDBA.DMP EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS REMAP_SCHEMA=cndba:dave transport_datafiles='+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf','+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf'
Import: Release 18.0.0.0.0 - Production on Fri Feb 5 19:23:07 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Master table "DAVE"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "DAVE"."SYS_IMPORT_TRANSPORTABLE_01": dave/********@192.168.1.100:1521/DAVE directory=dpump_dir DUMPFILE=CNDBA.DMP EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS REMAP_SCHEMA=cndba:dave transport_datafiles=+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf,+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "DAVE"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Fri Feb 5 19:23:24 2021 elapsed 0 00:00:13
[oracle@www.cndba.cn1 cndba]$
8 将目标端表空间设置为读写并验证数据
SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------------------------------------ ------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
UNDO_2 ONLINE
USERS ONLINE
CNDBA READ ONLY
7 rows selected.
SQL> alter tablespace cndba read write;
Tablespace altered.
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------------------------------------ ------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
UNDO_2 ONLINE
USERS ONLINE
CNDBA ONLINE
7 rows selected.
SQL>
SQL> col file_name for a85
SQL> select file_id,file_name,tablespace_name from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
---------- ------------------------------------------------------------------------------------- ---------------
10 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/system.284.986019665 SYSTEM
11 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/sysaux.285.986019665 SYSAUX
12 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/undotbs1.283.986019665 UNDOTBS1
13 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/undo_2.287.986019895 UNDO_2
14 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/users.288.986019901 USERS
15 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf CNDBA
16 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf CNDBA
7 rows selected.
SQL> select count(1) from dave.dave;
COUNT(1)
----------
173925
SQL>
SQL> select banner from v$version;
BANNER
----------------------------------------------------------------------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
SQL>
至此,采用TTS的方式,将Oracle 11.2.0.4 的表空间迁移到Oracle 18.4 的RAC 平台的PDB上。
版权声明:本文为博主原创文章,未经博主允许不得转载。