其他相关文章Redhat7。x从11。2。0。4升级到18。0。0(DBUA)从11。2。0。4升级到18。0。0nonCDB(手动)Linux从12cnonCDB升级到18。0。0nonCDB(手动)Linux从12cnonCDB升级到18。0。0nonCDB(手动)说明 本节只介绍CDB升级到CDB模式,对于nonCDB模式参考前面的升级方法即可。而对于CDB升级到CDB模式,步骤没有区别。只是在已upgrade方式打开数据库时,PDB也需要以upgrade方式打开:ALTERPLUGGABLEDATABASEALLOPENUPGRADE。源库准备工作 1)数据库版本 数据库版本是12。2。0。1,支持直接升级到18c。SQLselectfromvversionwhererownum1;BANNERCONIDOracleDatabase12cEnterpriseEditionRelease12。2。0。1。064bitProduction0 2)是否是CDB 为nonCDB模式SQLselectname,NAMECDBCNDBANO 3)全库备份 升级前建议进行备份,以防万一。rmantargetnocatalogRUN{ALLOCATECHANNELchannameTYPEDISK;BACKUPDATABASEFORMATdbbackupdirectoryUTAGBACKUPCURRENTCONTROLFILETO} 4)执行检查脚本 这里不再具体说明,请参考其他升级文章:从11。2。0。4升级到18。0。0nonCDB(手动)。 5)开启归档和闪回 查看是否开启闪回和归档SQLselectlogmode,LOGMODEFLASHBACKONARCHIVELOGYES 没有则手动开启归档和闪回。 6)(可选)如果是RAC,则修改CLUSTERDATABASE为FALSEALTERSYSTEMSETCLUSTERDATABASEFALSESCOPESPFILE; 7)关闭数据库shutdownimmediate目标库准备工作安装数据库软件并创建CDB 这里可以不创建其他的PDB,如下通过DBCA建库: cdu01apporacleproduct18。1。0db1bin 。dbca 选择创建数据库 高级模式 选择单实例 创建CDB,但是不创建PDB 启用归档和快速恢复区 用之前的监听 字符集要和源库相同 这里不配置EM 输入密码 创建数据库 创建数据库的概要信息,检查一下 创建数据库 首先将源库升级到18c 具体步骤参考上一节12c升级到18c即可将nonCDB插入到CDB中源库:将数据库以readonly打开SQLshutdownimmediateDatabaseclosed。Databasedismounted。ORACLEinstanceshutdown。SQLstartupmountORACLEinstancestarted。TotalSystemGlobalArea1560281088bytesFixedSize8621088bytesVariableSize1006633952bytesDatabaseBuffers536870912bytesRedoBuffers8155136bytesDatabasemounted。SQLDatabasealtered。创建PDB所需的XML文件SQLexecDBMSPDB。DESCRIBE(homeoraclecndbapdb。xml);PLSQLproceduresuccessfullycompleted。关闭数据库SQLshutdownimmediateDatabaseclosed。Databasedismounted。ORACLEinstanceshutdown。目标库 连接到18c的CDB中,然后通过XML文件将nonCDB插入到CDB中。检测兼容性DECLAREcompatibleCONSTANTVARCHAR2(3):CASEDBMSPDB。CHECKPLUGCOMPATIBILITY(pdbdescrfilehomeoraclecndbapdb。xml,pdbnamecndbapdb)WHENTRUETHENYESELSENOEND;BEGINDBMSOUTPUT。PUTLINE(compatible);END;NO可以看到不兼容,通过视图PDBPLUGINVIOLATIONS查看具体原因查看不兼容的具体原因setlinesize150colnamefora10colcausefora25coltimefora30colmessagefora35selecttype,time,name,cause,status,messagefromPDBPLUGINVIOLATIONSwherestatus!RESOLVEDorderbyname,错误信息如下 意思是数据库的相关组件版本不同,而在18c数据库中没有这些组件。DatabaseoptionXOQmismatch:PDBinstalledversion18。0。0。0。0。CDBinstalledversionNULL。解决方法源库上执行 有两种解决方法:1。将源库上的相关组件移除(18c中没有的组件)。2。重建带有这些组件的CDB(MOS2001512。1) Oracle推荐使用方法1,参考MOS(ID2318035。1)查看所有组件 红色部分是需要移除的组件。 CDB:SQLcolCOMPNAMEfora30SQLselectcompname,version,COMPNAMEVERSIONSTATUSOracleDatabaseCatalogViews18。0。0。0。0VALIDOracleDatabasePackagesandTtpes18。0。0。0。0VALIDOracleRealApplicationClusters18。0。0。0。0OPTIONOFFOracleXMLDatabase18。0。0。0。0VALID nonCDB:SQLcolCOMPNAMEfora30SQLselectcompname,version,COMPNAMEVERSIONSTATUSOracleDatabaseCatalogViews18。0。0。0。0VALIDOracleDatabasePackagesandTtpes18。0。0。0。0VALIDJServerJAVAVirtualMachine18。0。0。0。0VALIDOracleXDK18。0。0。0。0VALIDOracleDatabaseJavaPackages18。0。0。0。0VALIDOLAPAnalyticWorkspace18。0。0。0。0VALIDOracleRealApplicationClusters18。0。0。0。0OPTIONOFFOracleXMLDatabase18。0。0。0。0VALIDOracleWorkspaceManager18。0。0。0。0VALIDOracleText18。0。0。0。0VALIDOracleMultimedia18。0。0。0。0VALIDSpatial18。0。0。0。0VALIDOracleOLAPAPI18。0。0。0。0VALIDOracleLabelSecurity18。0。0。0。0VALIDOracleDatabaseVault18。0。0。0。0VALID15rowsselected。以移除OracleDatabaseVault为例查看是否启用了DVSQLcolPARAMETERfora20SQLcolvaluefora10SQLselectfromvoptionwhereparameterOracleDatabaseVPARAMETERVALUECONIDOracleDatabaseVaultFALSE0如果启用了DB,则关闭数据库,监听,EMcdORACLEHOMErdbmslibmakefinsrdbms。mkdvoffioracle打开数据,并禁用DV触发器connassysdbaaltertriggerdvsys。altertriggerdvsys。禁用回收站,然后移除DB组件 禁用回收站shutdownimmediatestartup 执行脚本dvremov。sqlSQL?rdbmsadmindvremov。sql如果之前启用了DV,最后还要删除相关用户和启用回收站dropuserDVOWNERdropuserDVACCTMGRshutdownimmediatestartup验证DB组件是否被移除SQLselectcompname,version,statusfromdbaregistrywherecompnameOracleDatabaseVnorowsselected 当在源库上已经把所有目标CDB上没有的组件移除后,重新创建XML文件,然后再次检查兼容性即可通过。创建CNDBAPDB 因为数据文件位置不变,所以使用NOCOPY并重用原来的临时文件。SQLCREATEPLUGGABLEDATABASEcndbapdbUSINGhomeoraclecndbapdb。xmlNOCOPYTEMPFILEREUSE;Pluggabledatabasecreated。切换到PDB中执行脚本 执行脚本将nonCDB转换为PDB。SQLSQLORACLEHOMErdbmsadminnoncdbtopdb。sql备份PDB 至此就完成了nonCDB升级为CDB,最后一步就是备份数据库,这是升级所有数据库后的必须做的一步。