12C之一创建PDB的方法。
noCDB
1 从PDB$SEED创建PDB
CREATE PLUGGABLE DATABASE prodpdb1 ADMIN USER admin
IDENTIFIED BY oracle ROLES=(CONNECT)
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/prod/pdbseed','/u01/app/oracle/oradata/prod/prodpdb1')
/
2 删除pdb
ALTER PLUGGABLE DATABASE pdb2_1 CLOSE IMMEDIATE;
DROP PLUGGABLE DATABASE pdb2_1 INCLUDING DATAFILES;
3 clone现有PDB的方式
现有PDB为orclpdb1,克隆后的PDB为orclpdb2
步骤
alter pluggable database orclpdb1 close;
alter pluggable database orclpdb2 open read only;
创建新PDB的存储目录
cd $ORACLE_BASE/oradata/orcl
mkdir orclpdb1
设置参数
alter system set db_create_file_dest = '/u01/app/oracle/oradata/orcl/orclpdb1';
具体实施克隆
CREATE PLUGGABLE DATABASE orclpdb1 FROM orclpdb;
或者 不使用OMF的方式
现有PDB为orclpdb,克隆后的PDB为orclpdb1
步骤
alter pluggable database prodpdb1 close;
alter pluggable database prodpdb1 open read only;
具体实施克隆
CREATE PLUGGABLE DATABASE prodpdb2 FROM prodpdb1
file_name_convert=('/u01/app/oracle/oradata/prod/prodpdb1','/u01/app/oracle/oradata/prod/prodpdb2')
/
注意:这里的子目录orclpdb1会自动创建
打开两个库
orclpdb:
alter pluggable database orclpdb close immediate;
alter pluggable database orclpdb open;
orclpdb1:
alter pluggable database orclpdb1 open;
4 从非CDB迁移到PDB(或称为插入到PDB)
方法1 :插入PDB
prod-orclpdb1
这种方式会创建XML文件,这个文件用来描述非CDB数据库的表空间和数据文件信息,这个数据文件在CDB中创建orclpdb1时使用
(1)在prod库,只读方式打开数据库
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open read only;
(2)创建XML文件
exec dbms_pdb.describe ('/u01/app/oracle/oradata/prod/xmlprod.xml') ;
验证文件已经创建
SQL> ! ls -l /u01/app/oracle/oradata/prod/xmlprod.xml
-rw-r--r--. 1 oracle oinstall 6605 Sep 20 09:03 /u01/app/oracle/oradata/prod/xmlprod.xml
(3)然后一致性关闭非CDB的prod库
SQL> shutdown immediate;
(4)切换到CDB库orcl,创建pdb库orclpdb1,验证兼容性
SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/u01/app/oracle/oradata/prod/xmlprod.xml')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
(5) 创建PDB数据库,这里使用copy的模式,将数据库prod的文件拷贝到新的目录下,方便管理 ,也可以使用nocopy的方式,将prod库的文件
保持在原处(不建议这种方式)
CREATE PLUGGABLE DATABASE orclpdb1 USING '/u01/app/oracle/oradata/prod/xmlprod.xml'
copy
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/prod/', '/u01/app/oracle/oradata/orcl/orclpdb1/’)
/
(6)切换到新的PDB库orclpdb1,执行切换脚本
SQL>alter session set container=orclpdb1
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
或者直接使用nocopy方式,再切换到orclpdb1执行转换脚本
create pluggable database orclpdb1 using '/u01/app/oracle/oradata/prod/xmlprod.xml' NOCOPY;
alter session set container=orclpdb1
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
(7) 打开PDB库orclpdb1,验证打开模式
ALTER PLUGGABLE DATABASE OPEN;
SELECT name, open_mode FROM v$pdbs;