OracleDB入门7:使用TTS迁移non-CDB表空间成CDB架构

源库

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

目的库

SQL> select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0
PL/SQL Release 12.1.0.2.0 - Production                                                    0
CORE    12.1.0.2.0      Production                                                                0
TNS for Linux: Version 12.1.0.2.0 - Production                                            0
NLSRTL Version 12.1.0.2.0 - Production                                                    0
SQL> select cdb from v$database;

CDB
---
YES

步骤

3.1 (源库)导出元数据

grant read,write on directory FILE_PATH to TEST;
grant exp_full_database to TEST;
alter tablespace TESTDATA read only;
alter tablespace TESTINDEX read only;


expdp TEST/TEST dumpfile=TEST_metadata.dmp directory=FILE_PATH transport_tablespaces= TESTDATA,TESTINDEX logfile=TEST_export.log;

3.2 (目标库)创建PDB等

  • 在CDB数据库中创建一个PDB
$sqlplus / as sysdba;
SQL> create pluggable database PDBSYD admin user PDBSYD identified by Passwod123456 roles=(connect) file_name_convert=('/data/T24CDB/T24CDB/pdbseed','/data/T24CDB/T24CDB/PDBSYD');
  • 打开PDB
SQL> alter pluggable database PDBSYD open;
  • 切换到PDB会话
SQL> alter session set container= PDBSYD;
  • 创建PDB的私有用户
SQL> create user SYDADMIN identified by SYDADMIN;
  • 授权SYDADMIN对directory对象的权限
SQL> grant DBA_PATH to SYDADMIN;
SQL> grant exp_full_database to SYDADMIN;

3.3 (目标库)配置链接到PDB的tns串

vim tnsnames.ora

PDBSYD =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 99.13.213.50)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = PDBSYD)
   )
)
  • 用tnsping 测试链接串
$ tnsping PDBSYD
  • 测试SYDADMIN用户直接登录到PDB
[oracle@oceansvn01 12chome1]<20190801 16:06:28>$ sqlplus SYDADMIN/SYDADMIN@pdbsyd

SQL*Plus: Release 12.1.0.2.0 Production on Thu Aug 1 16:06:30 2019
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Last Successful login time: Thu Aug 01 2019 15:57:55 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name;

CON_NAME
------------------------------
PDBSYD
SQL>

3.3 拷贝源库的元数据与表空间文件

可使用scp、ftp等工具拷贝源库导出的元数据和表空间文件,并正确设置文件属性(chown),此处从略。

3.4 (目标库)直接导入到PDB

$ impdp SYDADMIN/SYDADMIN@pdbsyd dumpfile=CMBASOC1_metadata_01.dmp directory=DBA_PATH logfile=CMBASOC_import1.log transport_datafiles=/data/T24CDB/T24CDB/PDBSYD/cmbasoc1_index.dbf,/data/T24CDB/T24CDB/PDBSYD/cmbasoc1_data.dbf;

结尾

  • 把源库的表空间设置为read write
alter tablespace TESTDATA read write;
alter tablespace TESTINDEX read write;

总结

         CDB架构作为ORACLE官方主推的特性,可想而知官方对12c以前non-CDB架构的支持力度将越来越低。因而,将生产数据库从non-CDB架构迁移成高版本的CDB架构将是近几年DBA的主要工作之一。

     前博讲诉了通过DB LINK方式直接将非non-CDB架构数据库整体迁移成CDB架构,但其有诸多弊端,如迁移后non-CDB数据库揉成一个PDB,其中包括non-CDB架构中的SYSTEM/SYSAUX/USER等多个表空间文件,占用大量磁盘空间,且据说noncdb_to_pdb.sql容易失败。

     本文从另外一个维度讲诉non-CDB到CDB的迁移,将迁移精确到表空间,大大的节省了时间和空间,且支持跨DB版本迁移。

猜你喜欢

转载自blog.csdn.net/zhaogang1993/article/details/98160233