Oracle TTS异构平台传输表空间[RAC(18.4) PDB --> 单实例(19.10) 迁移] 操作示例
在上篇我们看了单实例和RAC之间的TTS 操作示例,如下:
Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392Oracle TTS异构平台传输表空间 [单实例(11.2.0.4) —> RAC(18.4) PDB迁移] 操作示例
https://www.cndba.cn/dave/article/4394
传输表空间的的使用限制也需要注意:
Oracle 传输表空间(TTS) 的限制与局限性
https://www.cndba.cn/dave/article/4390
本篇我们来演示下跨版本的RAC到单实例迁移。
源端:Linux 18.4,RAC PDB
目标端:Linux,19.10,单实例
1 源端环境说明
[oracle@www.cndba.cn1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Fri Feb 5 19:58:13 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
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> show con_name
CON_NAME
------------------------------
DAVE
SQL>
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 a90
SQL> select file_id, tablespace_name,file_name from dba_data_files;
FILE_ID TABLESPACE_NAME FILE_NAME
---------- --------------- ------------------------------------------------------------------------------------------
10 SYSTEM +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/system.284.986019665
11 SYSAUX +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/sysaux.285.986019665
12 UNDOTBS1 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/undotbs1.283.986019665
13 UNDO_2 +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/undo_2.287.986019895
14 USERS +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/users.288.986019901
15 CNDBA +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf
16 CNDBA +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf
7 rows selected.
我们这里将CNDBA 表空间从18.4的RAC平台迁移到19.10 的单实例。
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 directory dpump_dir as '/tmp/cndba';
Directory created.
SQL> grant read,write on directory dpump_dir to system;
Grant succeeded.
SQL>
因为我们这里是PDB 的环境,所以直接从PDB导出:
[oracle@www.cndba.cn1 cndba]$ expdp dave/dave@192.168.1.100:1521/DAVE directory=dpump_dir DUMPFILE=cndba.dmp TRANSPORT_TABLESPACES=CNDBA TRANSPORT_FULL_CHECK=Y EXCLUDE=TABLE_STATISTICS, INDEX_STATISTICS
Export: Release 18.0.0.0.0 - Production on Fri Feb 5 23:45:32 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
Starting "DAVE"."SYS_EXPORT_TRANSPORTABLE_01": dave/********@192.168.1.100:1521/DAVE directory=dpump_dir DUMPFILE=cndba.dmp TRANSPORT_TABLESPACES=CNDBA TRANSPORT_FULL_CHECK=Y EXCLUDE=TABLE_STATISTICS, INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Master table "DAVE"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for DAVE.SYS_EXPORT_TRANSPORTABLE_01 is:
/tmp/cndba/cndba.dmp
******************************************************************************
Datafiles required for transportable tablespace CNDBA:
+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf
+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf
Job "DAVE"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Fri Feb 5 23:47:09 2021 elapsed 0 00:01:31
[oracle@www.cndba.cn1 cndba]$
5 源端处理
异构平台的字节顺序转换在源端和目标端都可以进行,上篇我们我们也采用了源端处理的方法。
Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392
这两种方法就是对应的命令不同:
1)CONVERT TABLESPACE:用于在源库转换指定表空间的数据文件 。
2)CONVERT DATAFILE: 用于在目标库转换数据文件到目标平台 。
这2种方式的最主要的区别是转换字节顺序的空间是在哪一段处理。 因为转换后新生成的数据文件占用空间很大。 可以根据实际情况来进行处理。
但是我们这里涉及到ASM 磁盘组的数据处理问题。 这里有三种方法可以进行:
这里有两种方法可以进行:
(1)利用RMAN的backup as copy方式,将数据文件原封不动的拷贝到文件系统中;
(2)在11g开始,ASM命令行工具asmcmd提供了cp命令,支持ASM和文件系统之间的拷贝操作,然后就变成了文件系统对文件系统的处理。
(3)直接采用源端处理的方式convert tablespace从ASM 磁盘组中取出并转换字节顺序。
前两种方法只是将数据文件从ASM 磁盘组中取出,之后还是需要进行字节顺序转换的,第三种方法就是一步到位。
5.1 源端直接处理转换
注意这里连的是PDB:
[oracle@www.cndba.cn1 cndba]$ rman target sys/oracle@www.cndba.cn
Recovery Manager: Release 18.0.0.0.0 - Production on Fri Feb 5 23:48:25 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:DAVE (DBID=2933474528)
RMAN> convert tablespace CNDBA to platform="Linux x86 64-bit" FORMAT '/tmp/cndba/dave_%s.dbf';
Starting conversion at source at 2021:02:0523:48:47
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=311 instance=cndba1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input datafile file number=00015 name=+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf
converted datafile=/tmp/cndba/dave_11.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile conversion
input datafile file number=00016 name=+DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf
converted datafile=/tmp/cndba/dave_12.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Finished conversion at source at 2021:02:0523:48:55
RMAN>
将转换后的数据文件,直接转移到单实例对应的数据目录。注意,这里一定要复制到对应PDB 对应的文件目录,否则会报如下错误:
Oracle 19c TTS ORA-19721: Cannot find data file with absolute file number 错误说明
https://www.cndba.cn/dave/article/4395
[root@www.cndba.cn dave]# pwd
/u01/app/oracle/oradata/CNDBA/dave
[root@www.cndba.cn dave]# ll
total 1213112
-rw-r----- 1 oracle oinstall 20979712 Feb 5 23:00 dave01.dbf
-rw-r--r-- 1 oracle oinstall 20979712 Feb 5 23:51 dave_11.dbf
-rw-r--r-- 1 oracle oinstall 20979712 Feb 5 23:51 dave_12.dbf
-rw-r-----. 1 oracle oinstall 513810432 Feb 5 23:54 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 440410112 Feb 5 23:53 system01.dbf
-rw-r-----. 1 oracle oinstall 57679872 Feb 5 23:44 temp01.dbf
-rw-r-----. 1 oracle oinstall 104865792 Feb 5 23:53 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 116662272 Feb 5 23:32 users01.dbf
[root@www.cndba.cn dave]#
5.2 采用从ASM 磁盘组中取出数据文件再传到目标端处理
这里直接使用asmcmd命令将数据文件从磁盘取出。
[grid@www.cndba.cn1 ~]$ asmcmd
ASMCMD> ls
DATA/
MGMT/
OCR/
ASMCMD> cd +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE
ASMCMD> ls
SYSAUX.285.986019665
SYSTEM.284.986019665
UNDOTBS1.283.986019665
UNDO_2.287.986019895
USERS.288.986019901
dave5.dbf
dave6.dbf
ASMCMD> cp dave5.dbf /tmp/cndba/
ASMCMD-9463: operation failed due to lack of write permissions
这里权限不足,因为我们cndba 是oracle用户的,这里是grid用户操作的,给cndba目录赋权:
[root@www.cndba.cn1 tmp]# chmod 777 cndba/
然后操作正常:
ASMCMD> cp dave5.dbf /tmp/cndba
copying +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave5.dbf -> /tmp/cndba/dave5.dbf
ASMCMD> cp dave6.dbf /tmp/cndba
copying +DATA/CNDBA/7514123CD7C84168E0536401A8C03846/DATAFILE/dave6.dbf -> /tmp/cndba/dave6.dbf
ASMCMD>
[root@www.cndba.cn1 cndba]# pwd
/tmp/cndba
[root@www.cndba.cn1 cndba]# ll
total 41156
-rw-r----- 1 oracle asmadmin 180224 Feb 5 21:52 cndba.dmp
-rw-r----- 1 grid oinstall 20979712 Feb 5 22:16 dave5.dbf
-rw-r----- 1 grid oinstall 20979712 Feb 5 22:16 dave6.dbf
-rw-r--r-- 1 oracle asmadmin 1266 Feb 5 21:52 export.log
[root@www.cndba.cn1 cndba]#
然后传到目标端,在进行处理。目标端处理的过程参考之前的博客,这里不再描述:
Oracle TTS异构平台传输表空间 [单实例(11.2.0.4) —> RAC(18.4) PDB迁移] 操作示例
https://www.cndba.cn/dave/article/4394
如果不是ASM 到 ASM 的方式,比如我们这里的ASM 到文件系统, 还是建议直接采用源端处理的方式,因为这种方式可以节省转换的空间。
如果是ASM 到ASM 的方式,只能采用先抽取文件,在传输目标来处理。
6目标端导入元数据
我们目标端也是19c的PDB 环境,将源端的dump 文件复制过来后,导入的19c的PDB中。
在目标端创建用户,表空间不用创建,如果用户不同需要在impdp时使用REMAP_SCHEMA=(source:target)。
因为我们这里是19c 的环境,我们直接导入的PDB环境中。
[oracle@www.cndba.cn ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Feb 5 22:52:00 2021
Version 19.10.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.10.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
4 USTC MOUNTED
SQL> alter session set container=dave;
Session altered.
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.cn ~]$ pwd
/home/oracle
[oracle@www.cndba.cn ~]$ ls /tmp/cndba
cndba.dmp
[oracle@www.cndba.cn ~]$
[oracle@www.cndba.cn cndba]$ impdp dave/dave@192.168.74.202:1521/DAVE directory=dpump_dir DUMPFILE=cndba.dmp EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS transport_datafiles='/u01/app/oracle/oradata/CNDBA/dave/dave_11.dbf','/u01/app/oracle/oradata/CNDBA/dave/dave_12.dbf'
Import: Release 19.0.0.0.0 - Production on Fri Feb 5 23:57:46 2021
Version 19.10.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "DAVE"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "DAVE"."SYS_IMPORT_TRANSPORTABLE_01": dave/********@192.168.74.202:1521/DAVE directory=dpump_dir DUMPFILE=cndba.dmp EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS transport_datafiles=/u01/app/oracle/oradata/CNDBA/dave/dave_11.dbf,/u01/app/oracle/oradata/CNDBA/dave/dave_12.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 23:57:52 2021 elapsed 0 00:00:05
[oracle@www.cndba.cn cndba]$
导入成功。
7将目标端表空间设置为读写并验证数据
SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL> col tablespace_name for a15
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
CNDBA READ ONLY
6 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
USERS ONLINE
CNDBA ONLINE
6 rows selected.
SQL> col file_name for a85
SQL> set lines 160
SQL> select file_id,tablespace_name,file_name from dba_data_files;
FILE_ID TABLESPACE_NAME FILE_NAME
---------- --------------- -------------------------------------------------------------------------------------
9 SYSTEM /u01/app/oracle/oradata/CNDBA/dave/system01.dbf
10 SYSAUX /u01/app/oracle/oradata/CNDBA/dave/sysaux01.dbf
11 UNDOTBS1 /u01/app/oracle/oradata/CNDBA/dave/undotbs01.dbf
12 USERS /u01/app/oracle/oradata/CNDBA/dave/users01.dbf
20 CNDBA /u01/app/oracle/oradata/CNDBA/dave/dave_12.dbf
21 CNDBA /u01/app/oracle/oradata/CNDBA/dave/dave_11.dbf
6 rows selected.
SQL> select count(1) from dave.dave;
COUNT(1)
----------
173925
SQL> select banner from v$version;
BANNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL>
至此,采用TTS的方式,将Oracle 18.4 RAC 集群表空间迁移到Oracle 19.10 的单实例PDB上。
版权声明:本文为博主原创文章,未经博主允许不得转载。