本篇文章给大家分享的是有关Oracle 12c中怎么利用Non-CDB创建PDB,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

可以移动Non-CDB来变为一个PDB。可以使用以下方式来完成这个任务:
.通过克隆Non-CDB来创建PDB。从Oracle 12.1.0.2开始,可以通过克隆Non-CDB来创建PDB。这种方法是创建PDB最简单的一种方法,但它需要从Non-CDB中把文件复制到新目录中。

.使用dbms_pdb包来生成XML元数据文件,XML元数据文件用来描述Non-CDB的数据文件可以用来将其附加到CDB中。这种方法比克隆Non-CDB要执行更多的步骤,但它能让你不用移动Non-CDB的文件来创建PDB。为了使用这种技术 ,Non-CDB必须是Oracle 12C的Non-CDB。如果当前的Non-CDB使用Oracle 12C之前的版本,那么你必须将Non-CDB升级到Oracle 12C。

.使用Oracle Data Pump导出/导入
可以使用Data Pump从Non-CDB中导出数据然后导入到PDB中。当你执行导入时,在用户名后要指定PDB的连接标识符。例如,如果PDB的连接标识符为hrpdb,那么在执行导入进执行以下命令:
imdp username@hrpdb ....如果Non-CDB的版本为11.2.0.3或之后的版本,那么可以使用完全传输导出/导入来移动数据。当将版本为11.2.0.3或之后的11g版本的Non-CDB迁移到Oracle 12C,那么在导出时需要将version参数设置为12.0.0.0.0或更高版本。如果Non-CDB的版本为11.2.0.3之前的版本,那么可以使用传输表空间来移动数据或者执行完全数据库导出\导入。

.使用goldengate复制
可以使用goldengate从Non-CDB中复制数据到PDB中。

对Non-CDB执行dbms_pdb包
可以使用dbms_pdb包来为Non-CDB生成XML元数据文件来将其附加到CDB中。使用dbms_pdb包移动Non-CDB为PDB的操作如下:
1.如果CDB不存在先创建CDB

2.确保Non-CDB处于事务一致状态并将它置于只读状态

[oracle@jytest1~]$exportORACLE_SID=orcl1[oracle@jytest1~]$sqlplus/assysdbaSQL*Plus:Release12.2.0.1.0ProductiononThuSep700:38:312017Copyright(c)1982,2016,Oracle.Allrightsreserved.Connectedtoanidleinstance.SQL>startupmountORACLEinstancestarted.TotalSystemGlobalArea4294967296bytesFixedSize8628936bytesVariableSize2583692600bytesDatabaseBuffers1694498816bytesRedoBuffers8146944bytesDatabasemounted.SQL>alterdatabaseopenreadonly;Databasealtered.[oracle@jytest2~]$exportORACLE_SID=orcl2[oracle@jytest2~]$sqlplus/assysdbaSQL*Plus:Release12.2.0.1.0ProductiononThuSep700:38:312017Copyright(c)1982,2016,Oracle.Allrightsreserved.Connectedtoanidleinstance.SQL>startupmountORACLEinstancestarted.TotalSystemGlobalArea4294967296bytesFixedSize8628936bytesVariableSize2583692600bytesDatabaseBuffers1694498816bytesRedoBuffers8146944bytesDatabasemounted.SQL>alterdatabaseopenreadonly;Databasealtered.

3.连接到Non-CDB,并执行dbms_pdb.describe过程来创建描述Non-CDB的XML元数据文件。执行该过程的用户必须有sysdba权限。

SQL>execdbms_pdb.describe(pdb_descr_file=>'/cdb_pdb/orcl.xml');PL/SQLproceduresuccessfullycompleted.[oracle@jytest2cdb_pdb]$ls-lrttotal8-rw-r--r--1oracleasmadmin6963Sep700:18orcl.xml

4.执行dbms_pdb.check_plug_compatibility过程来判断是否Non-CDB与目标CDB兼容。当执行这个过程时设置以下参数:
-pdb_descr_file:设置XML元数据文件的完整路径。
-pdb_name:指定新PDB名字,如果这个参数被忽略,那么将使用XML元数据文件中的PDB名字。

SQL>setserveroutputon1declare2compatibleconstantvarchar2(3):=3casedbms_pdb.check_plug_compatibility(4pdb_descr_file=>'/cdb_pdb/orcl.xml',5pdb_name=>'orclpdb')6whentruethen'yes'7else'no'8end;9begin10dbms_output.put_line(compatible);11end;12/yesPL/SQLproceduresuccessfullycompleted.

如果输出为yes,那么Non-CDB是兼容的,并且可以继续下一步操作。如果输出为no,那么Non-CDB与目标CDB不兼容,并且可以检查pdb_plug_in_violations视图来检查为什么不兼容。所有的违反条目在继续操作之前必须被修复。例如,任何版本或补丁不匹配可以通过执行升级或打补丁来解决。在修复这个违反条目后,再次执行dbms_pdb.check_plug_compatibility来确保Non-CDB与目标CDB兼容。

5.关闭Non-CDB

[grid@jytest1~]$srvctlstopdatabase-dborcl

6.插入Non-CDB

SQL>createpluggabledatabaseorclpdbusing'/cdb_pdb/orcl.xml'2copy3file_name_convert=('+DATA/orcl/datafile/','+data/jy/orclpdb/','+DATA/orcl/tempfile/','+data/jy/orclpdb/');Pluggabledatabasecreated.SQL>selectname,open_modefromv$pdbs;NAMEOPEN_MODE------------------------------------------------------------------------------------------------------------------------------------------PDB$SEEDREADONLYJYPDBREADWRITEORCLPDBMOUNTEDASMCMD[+data/jy/orclpdb]>ls-ltTypeRedundStripedTimeSysNameDATAFILEUNPROTCOARSESEP0700:00:00Nusertbs01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/USERTBS.278.954031319DATAFILEUNPROTCOARSESEP0700:00:00Nusers01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/USERS.302.954031321DATAFILEUNPROTCOARSESEP0700:00:00Nundotbs01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/UNDOTBS1.273.954031321TEMPFILEUNPROTCOARSESEP0700:00:00Ntemp01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/TEMPFILE/TEMPTS1.315.954031465DATAFILEUNPROTCOARSESEP0700:00:00Nsystem01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/SYSTEM.303.954031321DATAFILEUNPROTCOARSESEP0700:00:00Nsysaux01.dbf=>+DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/SYSAUX.295.954031321

如果这里没有任何错误,那么现在不打开新PDB。

7.执行$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本,这个脚本必须在第一次打开新PDB之前执行。如果PDB不是由Non-CDB创建而来,那么就不需要执行这个脚本。为了执行noncdb_to_pdb.sql脚本,完成以下操作:
a.访问PDB,当前用户必须有sysdba权限,并且权限必须是公共或本地授予给PDB。最好使用as sysdba进行连接。

b.执行noncdb_to_pdb.sql脚本:

SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

8.以读写模式打开新PDB

SQL>alterpluggabledatabaseorclpdbopenreadwrite;Pluggabledatabasealtered.SQL>selectname,open_modefromv$pdbs;NAMEOPEN_MODE------------------------------------------------------------------------------------------------------------------------------------------PDB$SEEDREADONLYJYPDBREADWRITEORCLPDBREADWRITE

以上就是Oracle 12c中怎么利用Non-CDB创建PDB,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。