PDB克隆迁移转换

测试环境

源 10.8.98.150 19c 

目标 10.8.98.103  19c



noncdb 迁移转成pdb见

http://blog.itpub.net/70004783/viewspace-2854421/



1、本地克隆pdb

1.1环境检查

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO

1.2 通过PDB$SEED创建新的pdb

SQL> CREATE PLUGGABLE DATABASE PDB1 ADMIN USER PDB1ADMIN IDENTIFIED BY PASS ROLES=(CONNECT) FILE_NAME_CONVERT=('/u01/app/oracle/oradata/PROD/pdbseed/','/u01/app/oracle/oradata/PROD/pdb1/');
Pluggable database created.

 1.3通过pdb1克隆创建新的pdb2

SQL> create pluggable database pdb2 from pdb1 file_name_convert=('pdb1','pdb2');
Pluggable database created.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           MOUNTED


#####################################

兼容性参考文档http://blog.itpub.net/70004783/viewspace-2854421/


2、跨服务器克隆pdb(我这边是跨服务器克隆插拔式数据库PDB2)

2.1本地复制异地进行插入方式

2.1.1源环境克隆

源pdb开启到read only模式,  再生成xml文件。

SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 PDB2                           MOUNTED
SQL> alter pluggable database open read only;
Pluggable database altered.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 PDB2                           READ ONLY  NO
SQL>
SQL> begin
  2  dbms_pdb.describe(PDB_DESCR_FILE=>'/home/oracle/pdb2.xml');
  3  end;
  4  /
PL/SQL procedure successfully completed.
SQL>

复制xml以及pdb2文件到目标环境,且目标环境创建相应的目录

目标环境
mkdir -p /u01/app/oracle/oradata/PROD/pdb2/
源环境
scp pdb2.xml 10.8.98.103:/home/oracle/
[oracle@dbserver pdb2]$ pwd
/u01/app/oracle/oradata/PROD/pdb2
[oracle@dbserver pdb2]$ scp * 10.8.98.103:/u01/app/oracle/oradata/PROD/pdb2/
oracle@10.8.98.103's password:
sysaux01.dbf                                                                                                                                          100%  310MB  77.5MB/s   00:04
system01.dbf                                                                                                                                          100%  270MB  90.0MB/s   00:03
temp012022-01-29_11-07-13-474-AM.dbf                                                                                                                  100%   36MB  61.5MB/s   00:00
undotbs01.dbf                                                                                                                                         100%  100MB  57.6MB/s   00:01


目标环境插入pdb2

SQL> create pluggable database pdb2 using '/home/oracle/pdb2.xml' nocopy ;
create pluggable database pdb2 using '/home/oracle/pdb2.xml' nocopy
*
ERROR at line 1:
ORA-27038: created file already exists
ORA-01119: error in creating database file
'/u01/app/oracle/oradata/PROD/pdb2/temp012022-01-29_11-07-13-474-AM.dbf'
SQL>

报错: 这里设置了tempfile reuse,如果不设置oracle会自动尝试创建tempfile,但是此tempfile已经手工拷贝了,就会报错:

所以将

/u01/app/oracle/oradata/PROD/pdb2/temp012022-01-29_11-07-13-474-AM.dbf

文件在目标端删除后,重新目标端插入pdb2

[oracle@dbserver pdb2]$ rm -f temp012022-01-29_11-07-13-474-AM.dbf
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB1                           MOUNTED
         5 NONCDB                         MOUNTED
SQL>
SQL>
SQL> create pluggable database pdb2 using '/home/oracle/pdb2.xml' nocopy ;
Pluggable database created.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB1                           MOUNTED
         5 NONCDB                         MOUNTED
         7 PDB2                           MOUNTED
SQL> alter pluggable database pdb2 open;
Pluggable database altered.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB1                           MOUNTED
         5 NONCDB                         MOUNTED
         7 PDB2                           READ WRITE NO
SQL>


#########################################


3、dblink方式

源端创建用户用于dblink

SQL> alter session set container = pdb3;
Session altered.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         5 PDB3                           READ WRITE NO
SQL>
SQL> create user remote_clone_user identified by remote_clone_user;
User created.
SQL>  grant create session,create pluggable database to remote_clone_user;
Grant succeeded.
SQL>


在目标端创建到非cdb的数据库链接

首先目标端的tnsnames.ora添加本地链接名称给dblink使用,我这里加了tns_150_pdb3,并且测试tnsping OK.

[oracle@dbserver admin]$ tnsping tns_150_pdb3
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 15-FEB-2022 10:49:33
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.98.150)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICA                                                     TED) (SERVICE_NAME = pdb3)))
OK (110 msec)
[oracle@dbserver admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PROD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prod)
    )
  )
tns_150 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.98.150)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prod)
    )
  )
tns_150_pdb3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.98.150)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb3)
    )
  )
LISTENER_PROD =
  (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))



在目标端创建dblink

SQL> create database link pdb3_clone_link connect to remote_clone_user identified by remote_clone_user using 'tns_150_pdb3';
Database link created.

登录测试

SQL> desc user_tables@PDB3_CLONE_LINK;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                NOT NULL VARCHAR2(128)
 TABLESPACE_NAME                                    VARCHAR2(30)
 CLUSTER_NAME                                       VARCHAR2(128)
 IOT_NAME                                           VARCHAR2(128)
 STATUS                                             VARCHAR2(8)
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                                        NUMBER
 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


在目标端执行数据库克隆,记住  先在 目标端创建好对应的目录

SQL> !mkdir -p /u01/app/oracle/oradata/PROD/pdb3_clone/
SQL> create pluggable database pdb3_clone from pdb3@pdb3_clone_link file_name_convert=('/u01/app/oracle/oradata/PROD/pdb3/','/u01/app/oracle/oradata/PROD/pdb3_clone/');
Pluggable database created.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB3_CLONE                     READ WRITE NO
         4 PDB1                           MOUNTED
         5 NONCDB                         MOUNTED
         7 PDB2                           READ WRITE NO





请使用浏览器的分享功能分享到微信等