基于版本:19c (12.2.0.3) AskScuti
创建方法:克隆远程Non-CDB(从 Non-CDB 中进行远程克隆)。将 非CDB数据库PROD1 远程克隆为 CDB1 中的 PDB7
对应路径:Creating a PDB --> Cloning --> Remotely --> From a Non-CDB
在容器数据库CDB里面如何创建PDB,官方文档给出了一张创建PDB技术选项图,图片如下:
内容总览
1. 概述
2. 源数据库PROD1设置只读
3. 编辑TNSNAMES.ora
4. 创建DBLINK
5. 远程克隆PROD1
6. 执行noncdb_to_pdb.sql脚本
7. 打开PDB7
1. 概述
克隆远程Non-CDB的意思是指:被克隆的源数据库为非CDB数据库(12c之前版本称之为 Non-CDB),通过DBLink方式进行克隆。
2. 源数据库PROD1设置只读
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started. Total System Global Area 1241513488 bytes
Fixed Size 8896016 bytes
Variable Size 318767104 bytes
Database Buffers 905969664 bytes
Redo Buffers 7880704 bytes
Database mounted.
SQL> alter database open read only; Database altered.
3. 编辑TNSNAMES.ora
PROD1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.14)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD1)
)
)
4. 创建DBLINK
SQL> create database link link_prod1 connect to system identified by oracle using 'PROD1'; Database link created.
5. 远程克隆PROD1
SQL> create pluggable database pdb7 from NON$CDB@link_prod1 create_file_dest='/u01/app/oracle/oradata/CDB1/pdb7'; Pluggable database created.
如果报错如下:
SQL> create pluggable database pdb7 from NON$CDB@link_prod1 create_file_dest='/u01/app/oracle/oradata/CDB1/pdb7';
create pluggable database pdb7 from NON$CDB@link_prod1 create_file_dest='/u01/app/oracle/oradata/CDB1/pdb7'
*
ERROR at line 1:
ORA-17628: Oracle error 1031 returned by remote Oracle server
ORA-01031: insufficient privileges
到源数据库里面针对PROD1数据库,授权SYSTEM用户 create pluggable database 权限即可。
SQL> shutdown immediate;
SQL> startup;
SQL> select * from dba_sys_privs where GRANTEE='SYSTEM'; GRANTE PRIVILEGE ADM COM INH
------ ------------------------ --- --- ---
SYSTEM GLOBAL QUERY REWRITE NO YES YES
SYSTEM CREATE TABLE NO YES YES
SYSTEM DEQUEUE ANY QUEUE YES YES YES
SYSTEM ENQUEUE ANY QUEUE YES YES YES
SYSTEM SELECT ANY TABLE NO YES YES
SYSTEM MANAGE ANY QUEUE YES YES YES
SYSTEM UNLIMITED TABLESPACE NO YES YES
SYSTEM CREATE MATERIALIZED VIEW NO YES YES SQL> grant create pluggable database to system; Grant succeeded. SQL> select * from dba_sys_privs where GRANTEE='SYSTEM'; GRANTE PRIVILEGE ADM COM INH
------ ------------------------- --- --- ---
SYSTEM CREATE PLUGGABLE DATABASE NO NO NO
SYSTEM GLOBAL QUERY REWRITE NO YES YES
SYSTEM CREATE TABLE NO YES YES
SYSTEM DEQUEUE ANY QUEUE YES YES YES
SYSTEM ENQUEUE ANY QUEUE YES YES YES
SYSTEM SELECT ANY TABLE NO YES YES
SYSTEM MANAGE ANY QUEUE YES YES YES
SYSTEM UNLIMITED TABLESPACE NO YES YES
SYSTEM CREATE MATERIALIZED VIEW NO YES YES SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open read only; Database altered.
6. 执行noncdb_to_pdb.sql脚本
SQL> alter session set container=pdb7; SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
7. 打开PDB7
SQL> alter pluggable database pdb7 open; Pluggable database altered.