说明:版本12.2.0.1
12c r1版本中 clone 一份PDB源库需要打开在read only只读模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/write 读写模式也可以 clone 。 local undo mode 也是oracle推崇的模式。
说明: shared undo 与 Local undo 模式切换 可以参考 http://blog.csdn.net/zhang123456456/article/details/71374528
要求:
1、 Archive Log Enabled
2、 Local Undo Enabled
3、 destination CDB must have a public database link to the source CDB,have sufficient privileges to use the database link.
一、 克隆本地pdb
[oracle@12c ~]$ sqlplus / as sysdba
— 检查是否开启 local undo
SQL>
col PROPERTY_NAME for a25;
col PROPERTY_VALUE for a25;
select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name=’LOCAL_UNDO_ENABLED’;
PROPERTY_NAME
PROPERTY_VALUE
————————- ————————-
LOCAL_UNDO_ENABLED
TRUE
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
SQL> show parameter pdb_file_name_convert
NAME
TYPE
VALUE
———————————— ———– ——————————
pdb_file_name_convert
string
— clone pdb 数量为一 , 注意这里 pdb_file_name_convert 参数生效级别设置的是 session , 如有需要,自行设置为全局
SQL> alter session set pdb_file_name_convert=’pdb01′,’pdb02′;
Session altered.
SQL> create pluggable database pdb02 from pdb01;
Pluggable database created.
SQL> alter pluggable database pdb02 open;
Pluggable database created.
SQL> alter pluggable database pdb02 close immediate;
Pluggable database altered.
— clone pdb 数量为多
SQL> alter session set pdb_file_name_convert=’pdb01′,’pdb02,pdb03′;
Session altered.
SQL> create pluggable database pdb03 from pdb01;
Pluggable database created.
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
4 PDB02
MOUNTED
5 PDB03
MOUNTED
SQL> alter pluggable database pdb02 open;
Pluggable database altered.
SQL> alter pluggable database pdb03 open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
4 PDB02
READ WRITE NO
5 PDB03
READ WRITE NO
二、 克隆远程pdb
–源端
SQL> create user c##andy identified by andy container=all;
User created.
SQL> grant dba to c##andy container=all;
Grant succeeded.
— 目标端cdb执行
SQL> create database link clonePdb connect to c##andy identified by andy using ‘(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.219.24.17)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = pdb01)))’;
Database link created.
— 源端
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
— 目标端cdb
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
4 PDB02
READ WRITE NO
5 PDB03
READ WRITE NO
SQL> alter session set pdb_file_name_convert=’pdb01′,’pdb04′;
Session altered.
— 通过 dblink 克隆源端的 pdb
SQL> create pluggable database pdb04 from pdb01@clonePdb;
Pluggable database created.
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
4 PDB02
READ WRITE NO
5 PDB03
READ WRITE NO
6 PDB04
MOUNTED
SQL> alter pluggable database pdb04 open;
alter pluggable database pdb04 open
*
ERROR at line 1:
ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration
SQL> ho oerr ora 14694
14694, 00000, “database must in UPGRADE mode to begin MAX_STRING_SIZE migration”
// *Cause: An attempt was made to update the MAX_STRING_SIZE parameter
// to EXTENDED when the database was not in UPGRADE mode.
//* Action: Restart the database in UPGRADE mode, modify the parameter,
// run the utl32k.sql script in $ORACLE_HOME/rdbms/admin, and
// restart the database in normal mode.
说明: 这个报错的原因是目标端使用了12c的新特性extended data type ,源端没有使用这个新特性,从源端克隆过来的pdb需要扩展 extended data type 新特性与目标端保持一致。有关新特性extended data type ,
参考http://blog.csdn.net/zhang123456456/article/details/71713201
— 新克隆的pdb拓展 extended data type 新特性
SQL> alter session set container=pdb04;
Session altered.
SQL> startup upgrade;
Pluggable Database opened.
SQL> show parameter max_string_size
NAME
TYPE
VALUE
———————————— ———– ——————————
max_string_size
string
EXTENDED
SQL> @$ORACLE_HOME/rdbms/admin/utl32k.sql
SQL> shutdown immediate;
Pluggable Database closed.
SQL> startup;
Pluggable Database opened.
SQL> alter session set container=cdb$root;
Session altered.
SQL> show pdbs
CON_ID CON_NAME
OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED
READ ONLY NO
3 PDB01
READ WRITE NO
4 PDB02
READ WRITE NO
5 PDB03
READ WRITE NO
6 PDB04
READ WRITE NO