签到成功

知道了

CNDBA社区CNDBA社区

Oracle TTS异构平台传输表空间[RAC(18.4) PDB --> 单实例(19.10) 迁移] 操作示例

2021-02-06 00:13 182 0 原创 Oracle 19c
作者: Dave

在上篇我们看了单实例和RAC之间的TTS 操作示例,如下:

Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392https://www.cndba.cn/dave/article/4396

Oracle 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,单实例https://www.cndba.cn/dave/article/4396

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导出:https://www.cndba.cn/dave/article/4396

[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 源端处理

异构平台的字节顺序转换在源端和目标端都可以进行,上篇我们我们也采用了源端处理的方法。 https://www.cndba.cn/dave/article/4396

Oracle 11g 单实例 TTS(异构平台传输表空间) 操作示例
https://www.cndba.cn/dave/article/4392

这两种方法就是对应的命令不同:

1)CONVERT TABLESPACE:用于在源库转换指定表空间的数据文件 。
2)CONVERT DATAFILE: 用于在目标库转换数据文件到目标平台 。

这2种方式的最主要的区别是转换字节顺序的空间是在哪一段处理。 因为转换后新生成的数据文件占用空间很大。 可以根据实际情况来进行处理。

但是我们这里涉及到ASM 磁盘组的数据处理问题。 这里有三种方法可以进行:

这里有两种方法可以进行:https://www.cndba.cn/dave/article/4396

(1)利用RMAN的backup as copy方式,将数据文件原封不动的拷贝到文件系统中;
(2)在11g开始,ASM命令行工具asmcmd提供了cp命令,支持ASM和文件系统之间的拷贝操作,然后就变成了文件系统对文件系统的处理。
(3)直接采用源端处理的方式convert tablespace从ASM 磁盘组中取出并转换字节顺序。https://www.cndba.cn/dave/article/4396

前两种方法只是将数据文件从ASM 磁盘组中取出,之后还是需要进行字节顺序转换的,第三种方法就是一步到位。

5.1 源端直接处理转换

注意这里连的是PDB:https://www.cndba.cn/dave/article/4396

[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:https://www.cndba.cn/dave/article/4396

[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]$

导入成功。

https://www.cndba.cn/dave/article/4396
https://www.cndba.cn/dave/article/4396

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上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Dave

Dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 1832
    原创
  • 2
    翻译
  • 417
    转载
  • 119
    评论
  • 访问:3164521次
  • 积分:2888
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by ZhiXinTech · 皖ICP备19020168号·

        QQ交流群