Oracle 12C 多种方式创建PDB

1、从PDB$SEED创建新PDB

SQL> create pluggable database PDB3 admin user pdb3admin identified by oracle 
file_name_convert=('/u01/oradata/cdb1/pdbseed','/u01/oradata/cdb1/pdb3') ;

2、克隆本地PDB

SQL> show pdbs
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
	 4 PDB2 			  MOUNTED
	 6 PDB3 			  MOUNTED
SQL> alter pluggable database pdb1 close;
插接式数据库已变更。
SQL> alter pluggable database pdb1 open read only;
插接式数据库已变更。
SQL> create pluggable database pdb4 from pdb1 file_name_convert=('/u01/oradata/cdb1/pdb1','/u01/oradata/cdb1/pdb4') ;
插接式数据库已创建。
SQL> 

  

3、克隆远程 PDB
该操作有一些限制。源和目标 CDB 平台必须满足以下要求:它们必须安装有相同的 endian 格式和兼容的数据库项,并使用相同的字符集和国家字符集。

Check the CHARACTERSET of remote and local CDB

col parameter for a30
col value for a30
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
or parameter='NLS_LANGUAGE' or parameter='NLS_NCHAR_CHARACTERSET';

Check the remote CDB is in local undo mode and archivelog mode.

COLUMN property_name FORMAT A30
COLUMN property_value FORMAT A30

SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
LOCAL_UNDO_ENABLED TRUE

SELECT log_mode
FROM v$database;

LOG_MODE
------------
ARCHIVELOG

SQL>

whitch of two is not be provided ,need to turn the remote database into read-only mode.

on remote source CDB:

SQL> alter session set container=pdb2;
Session altered.
SQL> show pdbs
CON_ID CON_NAME	OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 PDB2 READ WRITE NO

SQL> create user pdbclone identified by welcome123;
SQL> grant create session,create pluggable database to pdbclone;
SQL> alter pluggable database pdb2 close;
SQL> alter pluggable database pdb2 open read only;
SQL> show pdbs;

CON_ID CON_NAME	OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 PDB2 READ ONLY NO

on local destination CDB:

SQL> create database link clone_link connect to pdbclone identified by welcome123 using '192.168.56.33:1521/pdb2';
SQL> create pluggable database pdblk from PDB2@clone_link file_name_convert=('/u01/oradata/cdb1/pdb2','/u01/oradata/cdb1/pdblk') ;
插接式数据库已创建。
SQL> ! ls /u01/oradata/cdb1/pdblk
sysaux01.dbf system01.dbf temp01.dbf	undotbs01.dbf users01.dbf
SQL>

on remote source CDB ,Switch the source PDB back to read/write

SQL> alter pluggable database pdb2 close;
Pluggable database altered.
SQL> alter pluggable database pdb2 open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME	OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 PDB2 READ WRITE NO

4、克隆远程 Non-CDB
该操作有一些限制。源和目标 CDB 平台必须满足以下要求:它们必须安装有相同的 endian 格式和兼容的数据库项,并使用相同的字符集和国家字符集。
Check the CHARACTERSET of remote Non-CDB and local CDB

col parameter for a30
col value for a30
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
or parameter='NLS_LANGUAGE' or parameter='NLS_NCHAR_CHARACTERSET';

Check the remote Non-CDB is in archivelog mode.If not need to turn the remote database into read-only mode.

SQL> SELECT log_mode
FROM v$database;
LOG_MODE
------------
ARCHIVELOG
SQL> create user nocdbclone identified by welcome123;
SQL> grant create session,create pluggable database to nocdbclone;
SQL> startup mount;
SQL> alter database open read only;
Database altered.

Create a new PDB in the local database by cloning the remote non-CDB. 

SQL>create database link clone_link connect to nocdbclone identified by welcome123 using '192.168.56.33:1521/ora12c';
SQL> CREATE PLUGGABLE DATABASE nocdbtopdb FROM NON$CDB@clone_link file_name_convert=('/u01/oradata/ora12c','/u01/oradata/cdb1/nocdbtopdb') ; 
插接式数据库已创建。
SQL> !ls /u01/oradata/cdb1/nocdbtopdb
sysaux01.dbf system01.dbf temp01.dbf	undotbs01.dbf users01.dbf
SQL> show pdbs
CON_ID CON_NAME	OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED	READ ONLY NO
3 PDB1 READ ONLY NO
4 PDB2 MOUNTED
5 PDB4 MOUNTED
6 PDB3 MOUNTED
7 PDBLK	MOUNTED
8 NOCDBTOPDB	MOUNTED
SQL> ALTER SESSION SET CONTAINER=NOCDBTOPDB;

会话已更改。
SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
SQL> ALTER PLUGGABLE DATABASE nocdbtopdb open;

插接式数据库已变更。

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
8 NOCDBTOPDB READ WRITE NO

5、Unplugging PDB & Plug Unplugging PDB

SQL> alter session set container=pdb1; 
SQL> select name from v$datafile;
SQL> alter session set container=CDB$ROOT;
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter pluggable database PDB1 close immediate;
SQL> alter pluggable database PDB1 unplug into '/tmp/PDB1.xml';
SQL> drop pluggable database PDB1 keep datafiles;

SQL> set serveroutput on
DECLARE
l_result BOOLEAN;
BEGIN
l_result := DBMS_PDB.check_plug_compatibility(pdb_descr_file => '/tmp/PDB1.xml',pdb_name => 'PDB10');
IF l_result THEN
DBMS_OUTPUT.PUT_LINE('Yes');
ELSE
DBMS_OUTPUT.PUT_LINE('No');
END IF;
END;
/
#这里的 PDB 可以同名也可以不同名
SQL> create pluggable database PDB10 using '/tmp/PDB1.xml' nocopy ;
SQL> alter pluggable database pdb10 open;

6、其他
  The local and remote databases must have the same endianness.
  The local and remote databases must either have the same options installed, or the remote database must have a subset of those present on the local database.
  If the character set of the local CDB is AL32UTF8, the remote database can be any character set. If the local CDB does not use AL32UTF8, the character sets of the remote and local databases much match.
  If the remote database uses Transparent Data Encryption (TDE) the local CDB must be configured appropriately before attempting the clone. If not you will be left with a new PDB that will only open in restricted mode.
  Bug 19174942 is marked as fixed in 12.2. I can't confirm this, so just in case I'll leave this here, but it should no longer be the case. The default tablespaces for each common user in the remote PDB *must* exist in local CDB. If this is not true, create the missing tablespaces in the root container of the local PDB. If you don't do this your new PDB will only be able to open in restricted mode (Bug 19174942).
  When cloning from a non-CDB, both the the local and remote databases must using version 12.1.0.2 or higher.

Related articles.
https://oracle-base.com/articles/12c/multitenant-hot-clone-remote-pdb-or-non-cdb-12cr2#cloning-remote-pdb

posted @ 2019-07-24 13:26  JcLevy  阅读(6971)  评论(0编辑  收藏  举报