




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OracleCertifiedProfessionalTrainingOracleCertifiedProfessionalTrainingOCPTECHNOLOGYCode:1Z0-063Multitenant课程前提:需11g版本内容作为支持前言(版本理解)官方文档引用系列\hOracleDatabaseRelease19c:DatabaseAdministrator'sGuide\hOracleDatabaseRelease19c:BackupandRecoveryReference\hOracleDatabaseRelease19c:BackupandRecoveryUser'sGuide\hOracleDatabaseRelease19c:DatabaseConcepts\hOracleDatabaseRelease19c:DatabaseNewFeaturesGuide\hOracleDatabaseRelease19c:MultitenantAdministrator'sGuide\hOracleDatabaseRelease12c:DatabaseAdministrator'sGuide(PartVIManaginga\hMultitenantEnvironment)\hOracleDatabaseRelease12c:BackupandRecoveryReference\hOracleDatabaseRelease12c:BackupandRecoveryUser'sGuide\hOracleDatabaseRelease12c:DatabaseConcepts第1 章企业管理器介绍EMDCEnterpriseManagerDatabaseControl针对12c之前的单实例数据库,可采用emca–configdbcontroldb–reposrecreate命令进行手工创建。EMDEEnterpriseManagerDatabaseExpressEnterpriseManager(EM)DatabaseExpress是一个轻量级管理工具。该工具可为单个OracleDB(或数据库集群)提供基于Web的现成管理解决方案,包括性能监视、配置管理、管理、诊断和优化。EMDatabaseExpress的目标是公开随数据库安装提供的主要EnterpriseManager数据库功能,其开发成本较低并且在数据库中占用的空间很少。EMDatabaseExpress占用的空间很少,只有50-100MB。它使用最低限度的CPU和内存开销在数据库内运行,因为数据库仅运行SQL调用,而在浏览器中执行UI呈现。EMExpressUI使用基于Web的控制台与XMLDB中提供的内置Web服务器进行通信。处理来自控制台的请求时,是EMExpressservlet在处理这些请求,包括验证、会话管理、压缩和高速缓存。该servlet处理报告的请求并返回由Web浏览器呈现的XML页面。通常每个页面只有一个请求,以减少与数据库之间的往返次数。针对12c之后的单实例数据库。配置级别可在CDB也可以在PDB为CDB配置EMDatabaseExpressDISPATCHERS参数SQL>showparameterdispatch使用DBMS_XDB_CONFIG.setHTTPsPortSQL>execdbms_xdb_config.sethttpsport(5500);URLDatabaseExpresshttps://localhost:5500/em注意:浏览器需要有Flash插件。\h/OracleDatabase12c,EMDatabaseControlDatabaseExpress取代。DatabaseExpressDatabaseConfigurationAssistantDBCA)中通过一EMGC可以监控多台服务器和数据库,12c开始推荐使用EMCC。EMCCEnterpriseManagerCloudControl设计的主要目标EnterpriseManagerCloudControl包括以下功能:(AWR)AWR报告ExadataExalogicExadataExalogic系统的完整生命周期管理MyOracleSupportApplicationTesting数据库管理:提供对OracleDBFusionMiddlewareFusionApplications的管理CloudControl组件EnterpriseManagerCloudControl包括四个主要组件,如下所示:OracleManagementRepository(OMR)OracleManagementService(OMS)OracleManagementAgent(OMA或代理)CloudControlConsoleOracleManagementAgentOracleManagementServiceOMSOracleManagementRepositoryOMSOMSOMSCloudControlConsoleWebCloudControl.2CloudControl控制EnterpriseManagerCloudControl框架中的每个组件都具有自己的实用程序,可以使用RAC数据库需要使用ServerControl命令;对于单个实例,可以选择SQL*Plus或ServerControl。如果安装了OracleRestart,并向OLR注册了数据库,则可以使用ServerControl。要启动和停止监听程序,请使用ServerControl实用程序或lsnrctl命令。示例:srvctlstopdatabase-dorcl-oimmediatesrvctlstartdatabase-dorcl-oopen.3CloudControl启动要启动整个EnterpriseManagerCloudControl框架,请执行以下步骤:$ORACLE_HOME/bin/lsnrctlstart$ORACLE_HOME/bin/sqlplus/assysdbaSQL>startup启动OM包括OHS和WeLgc:$OMS_HOME/bin/emctlstartoms(在OM/:$AGENT_HOME/bin/emctlstartagent$AGENT_HOME/bin/emctlstartagent注:如果资料档案库具有RAC实例,请使用SRVCTL命令。1.4.4CloudControl停止要停止整个要停止整个EnterpriseManagerCloudControl框架,请执行以下步骤:$AGENT_HOME/bin/emctlstopagent(在OM/:$AGENT_HOME/bin/emctlstopagent停止OM包括OHS和WeLgc:$OMS_HOME/bin/emctlstopoms$ORACLE_HOME/bin/sqlplus/assysdbaSQL>shutdownimmediate注:如果资料档案库具有RAC实例,请使用SRVCTL命令。第2 章容器数据库体系结构基本概念容器数据库CDB与非容器数据库Non-CDB(术语“非CDB”将用作12.1之前版本的数据库的一种简称)CDB:ContainerDatabase容器数据库Non-CDB:非CDB数据库(特指旧的数据库12c版本之前的数据库)PDB:PluggableDatabase可插入、插接式的(拔插数据库)目前体系的不足Oracle11gCDB体系结构12.112.1GA的OracleSGA您需要将应用程序升级到新版本时,必须升级每个数据库,这会花费DBA很多时间。新体系结构的变化CDBDBASYSSYS将非CDB插入CDB可避免以下冗余:后台进程内存分配Oracle元数据将多个应用程序归为一组的程、一个SGAPDB共有的,而每个PDBCDB幻灯片中的图显示了具有四个容器的CDB:根、种子和两个PDB。这两个应用程序使用单个实例并单独进行维护。在物理级别,CDB与非CDB一样有一个数据库实例和多个数据库文件。重做日志文件是整个CDBPDB识。CDB中的所有PDB都共享的ARCHIVELOG控制文件是整个CDBPDB12.2版本之前每个实例仅有一个(12.2版本开始,UNDO可PDB中)根或PDBPDBPDB中本地用户或公用用户使用的临时表空间。SYSTEM表空间(据)SYSAUXPDBPDBCON_ID新体系的优点配置注意事项在OracleDatabase12c中,一个实例将与整个CDB关联。如果同一个服务器上有多个数据库,则每个非CDB或CDB具有单独的相异实例。实例不能在非CDB和CDB之间共享。在OracleDatabase12c中,有三个可能的配置选项:多租户配置:通常每个CDB有多个PDBPDBOracle多租户选项CDBOracleDatabase11gContainer容器V$CONTAINERS中有两种类型的容器:根容器:在创建CDB它是必需的OracleOracle(PDB):PDB:PDB$SEEDPDB12.2版本之前CDB中(253PDB,12.2版本之后限制一个CDB中(包括种子)可以有4098个PDB(SQL>showparametermax_pdbs)限制一个1024个服务(:表空间()方案//已创建//总之,CDB是一个包含根的OracleDB,并最终包含多个可插入数据库。。CDB中仅有一个种子PDB。种子PDB是用于创建新PDB的系统提供的模板。B.13个P(28个子。V$CONTAINERS视图显示包括根在内的所有容器。第3 章用户权限角色公共用户和本地用户本地用户非 CDB中的用户射到PDB中本地用。在PDBPDBPDB。PDB,在该PDBPDB他PDB的应用程序。而且,不能在根中定义任何本地用户。公用用户rootCDBPDB中复制的用户。CDB的每个PDBPDBPDB、启动CDB或在授予正确权限时打开PDB。公共和本地权限角色本地角色非CDB中的角色映射到PDB中的本地角色。本地角色在PDB自己的数据字典中定义,所以在该PDB之外不知道该角色,并且只能在其PDB内使用该角色。公用角色次创建将在所有PDB本地与公用权限CONTAINER=CURRENT子句在本地授予权限或者使用CDB数据字典视图为支持CDBCDB_xxxDBA_xxxCDB_xxxCon_IDPDBCDB_xxxCDB_xxx视CDB_xxx来自根以及当前所有打开的上的相应DBA_xxx视图的结果的集合PDBCDB_xxxCDB_USERSDBA_USERS(PDBCDB_USERS或DBA_USERSPDB第4 章创建容器数据库和可插入数据库创建容器数据库步骤使用DBCA或SQL*Plus创建新CDB所需的步骤相同。(非CDB或CDB)init.ora第三步是使用命令和新子句ENABLEPLUGGABLE指定数,从而创建CDBSYSTEM(其中包括Oracle)以及针对的SYSAUX(用于SYSAUX和SYSTEM表空间SEEDFILE_NAME_CONVERTPDBOracleManagedFilescatcdb.sqlSQL*PLUS管理员手册中关于手工创建数据库章节管理员手册中关于手工创建数据库章节:/en/database/oracle/oracle-database/19/admin/creating-and-configuring-an-oracle-database.html#GUID-18B03451-5C74-4B53-A892-656C3E8A2556CreatingaDatabasewiththeCREATEDATABASEStatement多租户管理员手册中关于手工创建数据库章节:/en/database/oracle/oracle-database/19/multi/creating-and-configuring-a-cdb.html#GUID-54C5126C-427A-4BFE-81BF-950FB1A062D5Completesteps1-8inthe“CreatingaDatabasewiththeDATABASEStatement”topicinOracleDatabaseAdministrator’sGuide.UsetheCREATEDATABASEstatementtocreateanewCDB.Runthecatcdb.sqlSQLscript.EnterthefollowinginSQL*Plustorunthescript:@?/rdbms/admin/catcdb.sqlWhenpromptedbythescript,enterthelogfiledirectoryforparameter1andthelogfilenameforparameter2.Forfollowingexampleenters/tmpforthefirstpromptandcreate_cdb.logforthesecondprompt:SQL>hostperl-I&&rdbms_admin&&rdbms_admin_catcdb--logDirectory&&1--logFilename&&2Entervaluefor1:Entervaluefor2:create_cdb.logWhenpromptedbythescript,enteranyotherrequiredinformation.Forexample,thescriptspromptsforadministratorpasswordsandthetemporarytablespacename:EnternewpasswordforSYS:********EnternewpasswordforSYSTEM:********Entertemporarytablespacename:TEMPAftercatcdb.sqlcompletes,performsteps12-inthe“CreatingaDatabasewiththeCREATEDATABASEStatement”topicinOracleDatabaseGuide. -割割割 实验:具体例子CDB创建密码文件cd$ORACLE_HOME/dbs/orapwdfile=orapwNEWCDBformat=12entries=10创建静态参数文件cd$ORACLE_HOME/dbs/viminitNEWCDB.ora 内容- db_name=NEWCDBdb_block_size=8192control_files='/u01/app/oracle/oradata/NEWCDB/control01.ctl'db_create_file_dest='/u01/app/oracle/oradata/NEWCDB'enable_pluggable_database=TRUE注意:静态参数文件里面定义的路径,记得提前在OS系统创建,否则执行语句报错。mkdir/u01/app/oracle/oradata/NEWCDBmkdir/u01/app/oracle/oradata/NEWCDB/pdbseednomountexportORACLE_SID=NEWCDBsqlplus/assysdbastartupnomountpfile='$ORACLE_HOME/dbs/initNEWCDB.ora'执行建库语句CREATEDATABASENEWCDBUSERSYSIDENTIFIEDBYoracleUSERSYSTEMIDENTIFIEDBYoracleLOGFILEGROUP1('/u01/app/oracle/oradata/NEWCDB/redo01a.log','/u01/app/oracle/oradata/NEWCDB/redo01b.log')SIZE100MBLOCKSIZE512,GROUP2('/u01/app/oracle/oradata/NEWCDB/redo02a.log','/u01/app/oracle/oradata/NEWCDB/redo02b.log')SIZE100MBLOCKSIZE512,GROUP3('/u01/app/oracle/oradata/NEWCDB/redo03a.log','/u01/app/oracle/oradata/NEWCDB/redo03b.log')SIZE100MBLOCKSIZE512MAXLOGHISTORY1MAXLOGFILES16MAXLOGMEMBERS3MAXDATAFILES1024CHARACTERSETAL32UTF8NATIONALCHARACTERSETAL16UTF16EXTENTMANAGEMENTLOCALDATAFILE'/u01/app/oracle/oradata/NEWCDB/system01.dbf'SIZE700MREUSEAUTOEXTENDONNEXT10240KMAXSIZEUNLIMITEDSYSAUX'/u01/app/oracle/oradata/NEWCDB/sysaux01.dbf'SIZE550MREUSEONNEXT10240KMAXSIZEUNLIMITEDdeftbs'/u01/app/oracle/oradata/NEWCDB/deftbs01.dbf'SIZE500MREUSEONMAXSIZEUNLIMITEDDEFAULTTEMPORARYTABLESPACEtempts1TEMPFILE'/u01/app/oracle/oradata/NEWCDB/temp01.dbf'SIZE20MREUSEAUTOEXTENDONNEXT640KMAXSIZEUNLIMITEDUNDOundotbs1'/u01/app/oracle/oradata/NEWCDB/undotbs01.dbf'SIZE200MREUSEONNEXT5120KMAXSIZEUNLIMITEDENABLEPLUGGABLESEEDFILE_NAME_CONVERT=SYSTEMSIZE125MONNEXT10MMAXSIZEUNLIMITEDSYSAUXSIZE100MUSER_DATATABLESPACEusertbsDATAFILE'/u01/app/oracle/oradata/NEWCDB/pdbseed/usertbs01.dbf'SIZE200MREUSEAUTOEXTENDONMAXSIZEUNLIMITED;执行脚本这时候直接执行脚本会报错,提前把问题处理好:exportORACLE_SID=NEWCDBexportPATH=.:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:${PATH}find$ORACLE_HOME-nameUtil.pmvim$ORACLE_HOME/rdbms/admin/catcdb.pl------------把utilqw改为Utilqw------------useTerm::ReadKey;#tonotechopassworduseGetopt::Long;useCwd;useFile::Spec;useData::Dumper;useUtilqw(trim,splitToArray);usecatconqw(catconSqlplus);cd/u01/app/oracle/product/12.2.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/sqlplus/assysdba@$ORACLE_HOME/rdbms/admin/catcdb.sqlSQL>hostperl-I&&rdbms_admin&&rdbms_admin_catcdb--logDirectory&&1--logFilename&&2Entervaluefor1:/tmpEntervaluefor2:abc.logEnternewpasswordforSYS:oracleEnternewpasswordforSYSTEM:oracleEntertemporarytablespacename:TEMP…………..catcon:ALLcatcon-relatedoutputwillbewrittento[/tmp/utlrp_catcon_18009.lst]catcon:See[/tmp/utlrp*.log]filesforoutputgeneratedbyscriptscatcon:See[/tmp/utlrp_*.lst]filesforspoolfiles,ifanycatcon.pl:completedsuccessfullyDBCADBCACreateAsContainerDatabase(。选中“eaeaaaeithaltigtin(”复选acedM(”复选新子句SEEDFILE_NAME_CONVERT与传统非与传统非CDBCREATEDATABASE语句相比,该语句有哪些新特性?如果您希望数据库为容器数据库,所需的第一个重要子句是ENABLEPLUGGABLEDATABASE,而声明种子数据文件目录的一种方法是使用SEEDFILE_NAME_CONVERT子句。FILE_NAME_CONVERT指定复制到目标种子目录的根数据文件的源目录。根目录/u01/app/oradata/CDB1和种子目录/u01/app/oradata/CDB1/seed必须存在。ENABLEPLUGGABLEOracleManagedFiles如果不使用明确的数据文件名,则使用OracleManagedFiles(OMF):SYSTEM、UNDO和录值设置实例参数。实例参数如果不使用SEEDFILE_NAME_CONVERT子句,则需要使用新实例参数:PDB_FILE_NAME_CONVERT)()/u01/app/oradata/CDB1和/u01/app/oradata/seed目录必须存在。预配新的可插入数据库在CDB中预配新PDB的方法有多种。从种子(即PDB$SEEDPDB)创建新PDBPDBCDB作为PDBCDBCDB个CDBCDBCDBCDB的好方法,这让您有机会比较新PDB和原始非CDB的性能,或者至少等到您认为PDB可以正常工作为止。从同一CDB的一个PDBPDBPDBPDBCDB的另一个PDB克隆一个PDB将移走的PDBCDBPDBOraclePDBOracleDBPDB,然CDB,而不是将CDBPDB$SEEDPDB用种子创建新PDB几乎可以即时完成。此操作会将数据文件从READONLY种子PDB复制到在CREATEPLUGGABLEDATABASE语句中定义的目标目录。还会创建表空间,例如用于存储完整目录(其中包括指向Oracle提供的对象的元数据)的SYSTEM,用于本地辅助数据的SYSAUX,用于临时数据的TEMP。会创建存在于种子PDB中的默认方案和公用用户,继续拥有所有超级用户权限的SYSPDBSYSTEMPDB_DBAPDBSYSPDB_DBAPDBAPDB此外,还会为PDB创建新的默认服务。使用位置子句从种子创建新PDB的步骤如下所示:以拥有PLUGGABLE执行PLUGGABLE从种子创建新PDB的步骤如下所示:以拥有PLUGGABLE执行PLUGGABLE语句。ADMINUSERCONNECT和空PDB_DBA角色定义在PDB中创建的PDBA用户。如果使用ManagedFiles(OMF)PDB的数据文件的目标目录。子句为PDBCDB如果不使用OMF,FILE_NAME_CONVERTPDB3. PDBCDB_PDBS视图显示PDB列表,CDB_TABLESPACES视图显示新PDB的表空间列表(M、X。以任何PDB中都存在的SYS用户或以admin1用户身份连接到PDB。实验:具体例子使用FILE_NAME_CONVERT参数mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod1createpluggabledatabasepdbprod1adminuserhenryidentifiedbyhenryroles=(connect)file_name_convert=('/u01/app/oracle/oradata/CDBOCP/pdbseed','/u01/app/oracle/oradata/CDBOCP/pdbprod1');使用CREATE_FILE_DEST参数mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod2createpluggabledatabasepdbprod2adminuserhenryidentifiedbyhenryroles=(connect)create_file_dest='/u01/app/oracle/oradata/CDBOCP/pdbprod2';不使用位置子句如果使用OMF或PDB_FILE_NAME_CONVERT,首先以SYS身份连接到CDB的根。使用OMF时,在init.oraPDB的数据文件的目标目录。不使用OMFPDB_FILE_NAME_CONVERTPDB/CDBS/CDB1/pdb1和/CDBS/CDB1/pdb2目录都必须存在。然后,使用cdb_pdbs视图验证新PDB及其表空间是否存在:SQL>SELECT*FROMcdb_pdbs;SQL>SELECT*FROMcdb_tablespaces;实验:具体例子使用DB_CREATE_FILE_DEST参数先定义DB_CREATE_FILE_DEST参数,指定其具体路径。mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod3atlersystemsetdb_create_file_dest='/u01/app/oracle/oradata/CDBOCP/pdbprod3'createpluggabledatabasepdbprod3adminuserhenryidentifiedbyhenryroles=(connect);使用PDB_FILE_NAME_CONVERT参数先定义PDB_FILE_NAME_CONVERT参数,指定其具体路径。mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod4altersystemsetpdb_file_name_convert='/u01/app/oracle/oradata/CDBOCP/pdbseed','/u01/app/oracle/oradata/CDBOCP/pdbprod4';createpluggabledatabasepdbprod4adminuserhenryidentifiedbyhenryroles=(connect);CDB有三种方法可以将非CDB数据库插入CDB。无论使用哪种方法,您都必须让非CDB进入事务处理一致状态,并在受限模式下将其打开。(TTS)/(TDB),在使用可DBMS_PDBCDBXMLCDB作为PDB插入CDB。此方法的前提条件是,非CDB必须为Oracle12cDB。GoldenGateDBMS_PDB如果不使用DBMS_PDB程序包,则使用导出/导入通常比使用GoldenGate复制更简单,但使用导出/导入时,从非CDB切换到PDB期间所需的停机时间可能更长。如果选择使用导出/导入并且将整个非CDB移动到CDB,可传输数据库(TDB)通常是最佳选择。如果选择将部分非CDB导出并导入CDB,可传输表空间(TTS)则是最佳选DBCADBCACDB:PROD5在用DBMS_PDB程序包的方法从OracleDatabase12c非CDB创建移走的PDB。然后,将移走的PDB作为新PDB插入CDB。在非CDB上运行DBMS_PDB.DESCRIBE过程Th成一个XML文件,描述未来的PDB。您可以使用XML文件和非CDB数据文件,按照插入移走的PDB的方式插入此移走的PDB。具体步骤如下所示:连接到非CDBORCLCDBORCL执行DBMS_PDB.DESCRIBEThXMLXMLXMLPDB。连接到目标ORCLPDB2插入移走的PDB过程将其插入CDBUSING'XMLfile.xml'PLUGGABLE。ORCLXMLPDB2$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlPDBSYSTEM表空间里不需要的元数据。此脚本必须在首次打开PDB之前运行。仅在插入非CDB时才需要运行此脚本。7. 打开PDB2PDB2中。实验:具体例子CDBXML.oraenvPROD5sqlplus/assysdbashutdownimmediate;startupmount;alterdatabaseopenreadonly;execdbms_pdb.describe('/tmp/PROD5.xml');CDBPDB插入.oraenvCDBOCPsqlplus/assysdbashowpdbs!mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod5altersystemsetdb_create_file_dest='/u01/app/oracle/oradata/CDBOCP/pdbprod5';createpluggabledatabasepdbprod5using'/tmp/PROD5.xml';执行脚本并清尾工作sqlplussys/oracle@pdbprod5assysdba@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlalterpluggabledatabasepdbprod5openreadwrite;execdbms_service.delete_service('PROD5XDB');alterpluggabledatabasepdbprod5close;alterpluggabledatabasepdbprod5open;CDBPROD5.PROD5sqlplus/assysdbashutdownimmediate;startupPDBPDB此方法从CDB复制PDB并将其插入CDB。源PDB可以位于本地CDB或远程CDB中。在同一CDB中克隆PDB的步骤如下所示:PDB3dir'(OMF)PDB_FILE_NAME_CONVERT='P',P'非MR_F_DT子句。以拥有PLUGGABLECDBPDBPLUGGABLECLOSE克隆PDB后使用命令ALTERPLUGGABLEDATABASEpdb1READONLY。使用命令PLUGGABLE从pdb1PDBpdb3。然后,使用PLUGGABLEPDBpdb3。PDBpdb1。如果不使用OMF,则使用CREATEPLUGGABLEDATABASE命令和FILE_NAME_CONVERT=('pdb1dir','pdb3dir')子句定义要从PDB1复制的源文件的目录和PDB3的新文件的目标目录。实验:具体例子隆本地PDB和下面的克隆非CDB或远程PDB方法流程一样,具体细节请注意两点:1.创建DBLINK;2.注意FROM子句的变化FROMNON$CDB@dblink;CDBPDBOCM12c考题:转换Non-CDB为PDB(将某个非CDB数据库作为PDB插入到CDB里面)此方法复制非此方法复制非CDB或远程PDB并将副本插入CDB。将非CDB或远程PDB克隆到CDB中的步骤如下所示:将非CDBPDB以拥有PLUGGABLECDB的根。数据库链接PLUGGABLECDBPDB。PLUGGABLE命令克隆非CDB如果克隆远程名代替NON$CDBPDBCDB$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本。然后,使用PLUGGABLEPDB。CDBPDB。实验:具体例子实验步骤:CDB.oraenvPROD5sqlplus/assysdbashutdownimmediate;startupmount;alterdatabaseopenreadonly;CDBDBLinkcreatedatabaselinkmemedaconnecttosystemidentifiedbyoracleusing'PROD5';注意:关键字USING后面使用的连接字符串,必须在tnsnames.ora里面配置。CDB!mkdir/u01/app/oracle/oradata/CDBOCP/pdbprod5altersystemsetdb_create_file_dest='/u01/app/oracle/oradata/CDBOCP/pdbprod5';createpluggabledatabasepdbprod5fromNON$CDB@prod5;注意:这里我们提前把路径给定义出来了,如果不想提前定义db_create_file_dest路径,可以直接在语句里面使用create_file_dest参数指定。例如:createpluggabledatabasepdbprod5fromNON$CDB@prod5create_file_dest='/u01/app/oracle/oradata/CDBOCP/pdbprod5';PDBPROD5跑脚本sqlplussys/oracle@pdbprod5assysdba@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlPDBPROD5alterpluggabledatabasepdbprod5openreadwrite;PDBCDB您可以通过移走/插入方法在CDB中创建PDB。移走PDB可以解除PDB与CDB的关联关系。当您想将PDB移动到不同的CDB时,或者当您不再想让PDB可用时,您可以移走PDB。第一步是将PDB1从CDB1移走。第二步是将PDB1插入CDB2。要将PDB1从CDB1CDB1PDBPLUGGABLE及UNPLUGXML文PDB从CDBCDBPDBPDB。将PDB1插入CDB2之前,您可以选择使用DBMS_PDB.CHECK_PLUG_COMPATIBILITY函数检查移走的PDB是否与CDB2兼容。要将PDB1插入CDB2,请以公用用户的身份连接到CDB2根并使用CREATEPLUGGABLEDATABASEpdb1USING'xmlfile1.xml'。最后一步是打开PDB。实验:具体例子环境:将CDBOCP下面的PDBPROD2,移到NEWCDB下面。CDBOCPPDBPROD2alterpluggabledatabasepdbprod2close;UNPLUGINTO命令alterpluggabledatabasepdbprod2unpluginto'/u01/app/oracle/backup/pdbprod2.xml';PDBPROD2droppluggabledatabasepdbprod2;注意:默认删除是保留物理路径数据文件的。具体删除操作请移至4.2.5小节。NEWCDB[oracle@henry~]$.oraenvORACLE_SID=[CDBOCP]?NEWCDBTheOraclebaseremainsunchangedwithvalue/u01/app/oracle[oracle@henry~]$sqlplus/assysdbaSQL>createpluggabledatabasepdb2using'/u01/app/oracle/backup/pdbprod2.xml'nocopy;Pluggabledatabasecreated.SQL>showpdbsCON_IDCON_NAME OPENMODE RESTRICTED - - PDB$SEED READWRITEYESPDB2 MOUNTEDPDB2(CDBOCPPDBPROD2)SQL>alterpluggabledatabasepdb2open;Pluggabledatabasealtered.注意创建语句:可以和原来数据库名一致,也可以自定义createpluggabledatabasepdb2using'/u01/app/oracle/backup/pdbprod2.xml'nocopy;PDB当您不再需要PDB中的数据时,您可以删除PDB。您也可以将其移走,然后将其删除,同时指定KEEPDATAFILES,以便在删除PDB后保留与PDB相关的数据文件。KEEPDATAFILES为默认行为。将移走的PDB插入另一个CDB时,保留数据文件可能有用。删除PDB时,如果指定INCLUDINGDATAFILES,控制文件中列出的所有数据文件均会删除。是否使用子句INCLUDINGPLUGGABLE语句都会修改控制文件,消除所有对所删除PDB的引用具体实验例子可参考4.2.4小节删除PDB语句数据库迁移至CDB中两种方法可以将非容器两种方法可以将非容器11g数据库移植到12cCDB。第一种方法包括两个步骤:将11g12c非CDB。将12c非CDBCDBDBMS_PDB.DESCRIBETh成XMLPDB插入CDB。第二种方法也包括两个步骤:在CDB中从种子PDB预创建PDBPDB中建立Database12c字典。使用导出/11gCDBPDB中。第5 章管理容器数据库和可插入数据库连接到CDB或PDB要连接到OSORACLE_SID设置为CDB实例名并使用命令CONNECT/ASSYSDBA,则会以授予系统权限的公用SYS用户的身份连接至根,以管理和维护所有PDB。如果使用服务名,则可以使用EasyConnect语法或tnsnames.ora中的别名。使用EasyConnect时,输入以下连接字符串:SQL>CONNECTusername@hostname:portnumber/service_name使用tnsnames.ora文件时,输入以下连接字符串:SQL>CONNECTusername@net_service_namePDB或tnsnames.oratnsnames.ora中的net_service_name创建服务如果数据库不是由OracleRestart或OracleClusterware管理,可以使用DBMS_SERVICE程序包为每个PDB创建或修改服务。在这种情况下,PDB属性设置为当前执行操作的PDB。SQL>CONNECTsystem@salespdbSQL>EXECDBMS_SERVICE.CREATE_SERVICE('salesrep','salesrep')SQL>EXECDBMS_SERVICE.START_SERVICE('salesrep')CDBPDB11gEZconnecttnsnames.ora配置字符串。连接工具可以是SQL*PLUSPL/SQLDEVELOPER、SQLDEVELOPERCDBSqlplussys/oracle@x.x.x.x/newcdb注意:采用EZCONNECTIP(1521)name,ServicenamelsnrctlstatusOracleNet062体系结构第三章:OracleNet网络这章狠狠狠重要!)。如果在本机客户端配置了如果在本机客户端配置了tnsnames.ora,也可以通过字符串连接方式:Sqlplussys/oracle@newcdbassysdbaPDBCDBPDB~~~EZCDBOCP里面的PDB1通过通过tnsnames.ora连接Sqlplussys/oraccle@aaaassysdbaCDBCDBPDB[oracle@henry~]$sqlplus/sysdba(CDB$ROOT)PDB2altersessionsetcontainer=pdb2;查看当前所在容器:PDBCDBconn/sysdbaaltersessionsetcontainer=cdb$root;或直接conn/assysdbaPDBPDBPDB之间如何切换CDBPDB,还是PDBPDB字为:CDB$ROOT,种子容器的名字为:PDB$SEED,从con_id=3开始,都为用户自定义的容器。从CDB根容器切换到PDB2:altersessionsetcontainer=pdb2;从PDB2切换到PDB$SEED:altersessionsetcontainer=pdb$seed;从PDB$SEED切换到根容器:服务名实验CDB:NEWCDBPDB2hehedaPDB中SQL>altersessionsetcontainer=pdb2;Sessionaltered.添加新服务名SQL>execDBMS_SERVICE.CREATE_SERVICE('heheda','heheda');PL/SQLproceduresuccessfullycompleted.SQL>execDBMS_SERVICE.start_service('heheda');PL/SQLproceduresuccessfullycompleted.查看监听服务状态[oracle@henry~]$lsnrctlstatus测试通过服务名连接测试通过服务名连接PDB2sqlplussys/oracle@00/hehedaassysdbaCDB容器数据库启动流程、关闭模式和之前版本流程一致:在CDB(根容器)里面可以直接执行行startupup;startupnomount;startupmount;alterdatabasemount;atlerdatabseopen;shutdownimmediate;shutdownnormal;shutdowntransactional;shutdownabort;在非在非RAC环境中,CDB用一个实例运行。此实例的启动方式与非CDB数据库的实例启动方式完全相同,都使用STARTUPNOMOUNT语句。您需要以SYSDBA的身份连接到CDB的根,才能启动实例。可使用V$PDBS视图查看PDB的打开模式。身份连接到CDB的根,才能启动实例。可使用V$PDBS视图查看PDB的打开模式。载命令相同,都使用STARTUPMOUNT语句。同样,您需要以SYSDBA的身份连接到CDB的根,才能执行此操作。CDB装载时根也会装载,这意味着控制文件已打开,PDB已装载。可使用V$PDBS视图中的open_mode列验证所有PDB都已装载。CDBCDBPDBPDB在STARTUPDATABASEPDB。V$PDBSopen_modePDBPDB。CDBPDB当PDB关闭时,这意味仅PDB的数据文件会关闭。PDB要打开一个PDB或打开部分或全部PDB,请以SYSOPER或SYSDBA的身份连接到根,然后发出ALTERPLUGGABLEDATABASE…OPEN语句,以指定一个或多个PDB名称或指定ALLEXCEPT或ALL。此操作将打开所打开PDB的数据文件,使其可供用户使用。可使用V$PDBS视图中的open_mode列验证所有PDB都处于READWRITE打开模式,但仍然处于READONLY打开模式的种子除外。您也可以在以SYSDBA身份连接的PDB中打开PDB。在这种情况下,不必命名要打开的PDB。如果是位于CDB根下面,可以指定具体的PDB进行启动:PDB启动alterpluggabledatabasepdbprod1open;PDB启动alterpluggabledatabaseallopen;PDBPDBalterpluggabledatabaseallexceptpdbprod1open;如果本身位于某个如果本身位于某个PDB里面,启动方式和CDB一致:注意:PDB关闭后的状态为MOUNT,因为控制文件是整个CDB共享的。要关闭一个要关闭一个PDB或关闭部分或全部PDB,请以SYSOPER或SYSDBA的身份连接到根,然后发出ALTERPLUGGABLEDATABASECLOSE语句,以指定一个或多个PDB名称或指定ALLEXCEPT或ALL。如果使用CLOSEIMMEDIATE子句,所选PDB中的事务处理将回退,且会话将断开。如果省略IMMEDIATE子句,语句将挂起,直到所有会话全部断开为止。PDBPDBPDBPDB。连接到PDB时,语句SHUTDOWNIMMEDIATE等同于ALTERPLUGGABLEDATABASECLOSE。它将关闭PDB。注:尽管SHUTDOWNIMMEDIATE会发出传统消息ORACLEinstanceshutdown,但这并不意味着实例已关闭。请将其理解成PDB已关闭。如果PDB已关闭,则消息将清楚地说明具体情况:SQL>shutdownimmediateORA-65020:Pluggabledatabasealreadyclosed如果是位于CDB根下面,可以指定具体的PDB进行PDB关闭alterpluggabledatabasepdbprod1close;CLOSEIMMEDIATEPDB中的事务处理将回退,且会话将断开IMMEDIATEPDB关闭alterpluggabledatabaseallclose;5.3.4关闭除某个PDB以外的所有PDBatlerpluggabledatabaseallexceptpdbprod1close;PDBCDB一致:PDB打开模式重新启动重新启动CDB实例后,默认情况下,PDB会一直保持在装载模式下。如果您希望PDB在CDBALTERPLUGGABLEDATABASESTATE子句PDBSAVESTATE子PDB的最后打开状态。PDBCDBPDBSAVESTATE要恢复默认行DISCARDSTATE子句。Alterpluggabledatabaseallsavestate;Startupforce;Alterpluggabledatabasealldiscardstate;Startupforce;PDB您可以更改每个您可以更改每个PDB的模式,执行特定管理操作。第一个示例在RESTRICTEDREADWRITE模式下打开PDB。此模式仅允许拥有RESTRICTEDSESSION权限的用户进行连接。而且,此模式允许PDB的本地管理员管理文件移动、备份以及阻止会话访问数据。可使用V$PDBS视图验证PDB是否处于RESTRICTEDREADWRITE打开模式。第二个示例在READONLY模式下打开所有PDB。连接到PDB的所有会话都只能执行只读事务处理。要更改打开模式,请首先关闭PDB。您可以将同一打开模式应用于全部或部分PDB。您不必更改PDB的模式就可以修改每个PDB的设置。您必须在PDB中连接,才能更改设置。第一个示例使用DATAFILE子句使数据文件联机。PDBpdb1_tbs。PDBtemp_tbs第四个示例将属于PDB的所有表空间的存储限制设为2GB。PDBpdbAPP1PDB而且此操作只能在受限模式下执行。参数值更改的影响CDBSPFILE您可以在PDB中为参数设置不同的值,前提是V$PARAMETER中的列ISPDB_MODIFIABLE为TRUE。这些值全部在PDB作用域内设置,在PDB关闭再打开后以及在CDB实例关闭又启动后都会相应地保留。执行克隆和移走/插入操作后,也会保留。其他初始化参数只能针对根设置。SQL>selectPDB_UID,NAME,VALUE$frompdb_spfile$;PDB_UIDNAMEVALUE$3100074415optimizer_use_sql_plan_baselinesFALSE2862146267optimizer_use_sql_plan_baselinesFALSE2862146267ddl_lock_timeout10打开后,更改的值会保留。V$SYSTEM_PARAMETER打开后,更改的值会保留。V$SYSTEM_PARAMETER视图中的新列CON_ID显示每个容器(即根、pdb1和pdb2)中的DDL_LOCK_TIMEOUT值。第6 章管理CDB和PDB中表空间和用户在本例中,pdb2中为DDL_LOCK_TIMEOUT参数设置了不同的值。PDB关闭再在非CDB中,所有表空间都属于一个数据库。在CDB中,一组表空间属于根容器,并且每个PDB都有一组其自己的表空间。在根容器的表空间中创建公共对象并存储其数据。公共对象在PDB中通过链接可见。CREATEDATABASE命令中存在新的子句。使用DBCA创建数据库时,可通过USER_DATATABLESPACE指定USERS以外的默认表空间。该表空间也将用于XDB选项。12.1版本中UNDO表空间对于所有PDB是公用的,即每个CDB实例只有一个活动UNDO表空间,称之为共享UNDO。12.2版本中UNDO表空间可以应用到每个PDB中,也就是每个PDB也可以有自己的UNDO表空间,称之为本地UNDO。CDBPDB中的永久表空间您对您对CREATETABLESPACE命令应该十分熟悉。该命令的行为在CDB中已更改为:在执行该命令的容器中创建表空间。通过PDB将数据文件分隔成不同的目录可帮助确定哪些文件属于哪个PDB,但这不是必需的。根中不应存在任何应用程序数据。所有应用程序数据都应位于PDB中。尽管可以在根和PDB中执行相同的表空间操作,但所有对象都应存储在PDB中。为具有适当权限的用户连接到根容器,并发出DATABASE该操作不会更PDB的默认永久表空间。PDBPDBPLUGGABLEDATABASE连接到PDB后,ALTERDATABASE和ALTERPLUGGABLEDATABASE命令执行对PDB的相同修改。允许使用ALTERDATABASE命令,以实现向后兼容。CDBPDB中的临时表空间根或根或PDB只能有一个默认临时表空间或表空间组。与非CDB一样,每个容器可以容纳可向其分配用户的其他临时表空间。每个PDB可以具有供该PDB中本地用户或公用用户使用的临时表空间。移走PDBPDBCDB中创建临时表空间或临时表空间组:sqlplussys/oracle@CDBOCPsysdbacreatetemporarytablespacecdb_xxxtempfile'/u01/app/oracle/oradata/CDBOCP/temp02.dbf'size100m;createtemporarytablespacecdb_xxxtempfile'/u01/app/oracle/oradata/CDBOCP/temp02.dbf'size100mtablespacegroupxxx_cdbgrp;在PDB中创建临时表空间或临时表空间组:sqlpplussys/oracle@PDB1assysdbacreatetemporarytablespacepdb_xxxtempfile'/u01/app/oracle/oradata/CDBOCP/PDB1/temp02.dbf'size100m;createtemporarytablespacepdb_xxxtempfile'/u01/app/oracle/oradata/CDBOCP/PDB1/temp02.dbf'size100mtablespacegroupxxx_pdbgrp;根的默认临时表空间在根容器级别进行设置。可能存在多个临时表空间,根的默认临时表空间在根容器级别进行设置。可能存在多个临时表空间,但仅有一个可以是默认临时表空间。可以为每个PDB(或表空间组。PDB表空间,但每个PDB仅有一个默认临时表空间。创建用户时,可以指定该用户要使用的临时表空间。如果未指定临时表空间,则使用PDB的默认表空间。公共用户和本地用户SQL>SQL>createuserc##jimidentifiedbyjimcontainer=all;存在且仅存在于一个PDBPDB公用用户的名称不能与所有PDB用用户是在根和每个现有和将来的PDB用户。本地用户不能创建公用用户。具有适当权限的公用用户可以使用CONTAINER=ALL子句创建公用用户。要创建公用用户,公用用户必须针对所有PDB具有SETCONTAINER权限。公用用户可以连接到特定的PDB,并且可以利用PDB中的适当权限通过CONTAINER=CURRENT子句创建本地用户。注:如果PDB已关闭,则该PDB的公用用户和本地用户将不可见,因为元数据是从PDBSYSTEM表空间检索的。在在PDB中具有CREATEUSER和SETCONTAINER权限的公用用户可以在该PDB中创建本地用户。所创建的用户类型由CONTAINER子句确定。C##PDB如果省略容器子句,则默认值取决于上下文。如果公用用户连接到根容器,则默认值为CONTAINER=ALL。如果公用用户连接到PDB,则默认值为ONTAINER=CURRENT。创建公用用户时,在CREATE命令中指定的任何表空间、表空间组或概要文件必须存在于每个PDB中。如果未指定上述任何一项,系统将使用PDB的默认TABLESPACE、TEMPORARYTABLESPACE和PROFILE。注:DROPUSER和ALTERUSER命令与非CDB中的命令相同。公共角色和本地角色创建的创建的跨所有容器的角色是公用角色。在本幻灯片中的示例中,使用CONTAINER=ALL子句以全局方式创建c##r1角色。在所有容器中复制CREATE操作。因此,会在每个容器中创建同一角色c##r1。在特定的PDB中创建的角色是本地角色。在本幻灯片中的示例中,在本地创建了l_role1角色。不在所有容器中复制CREATE操作。因此,仅在PDB_SALES容器中创建l_role1角色。所用的语法和权限与非CDB中的语法和权限相同。如果用户对所有PDB都具有CREATEROLE和SETCONTAINER权限,则该用户可以创建公用角色。如果公用用户对该PDB具有CREATEROLE和SETCONTAINER权限,则该公用用户可以创建本地角色。CONTAINER子句确定角色是公用角色还是本地角色。公用角色必须以C##字符开头。例如,使用公用权限CREATESESSION创建公用角色C##R1。将C##R1角色授予公用用户C##TEST时,该用户可以连接到任何PDB。但是,将C##R1角色授予在PDB_HR中定义的lu_PDB1时,该本地用户只能连接到PDB_HR。公共权限和本地权限PDB公用用户和本地用户可以行使在其连接的PDB上下文中授予的公用权限和本地权限。(OCM12c创建用户user1PDB)创建用户user2PDB1role1PDB)role2PDB1授予用户user1CDB(PDB)授予用户user2在PDB1role1PDB)createtableuser1。role2PDB1createviewuser2。SQL>createuserc##user1identifiedbyuser1container=all;SQL>altersessionsetcontainer=pdb1;SQL>createuseruser2identifiedbyuser2;SQL>conn/assysdbaSQL>createrolec##role1container=all;SQL>altersessionsetcontainer=pdb1;SQL>createrolerole2;SQL>conn/assysdbaSQL>grantcreatesessiontoc##user1container=all;SQL>connsys/oracle@pdb1assysdbaSQL>grantcreatesessiontouser2;SQL>conn/assysdbaSQL>grantcreatetabletoc##role1container=all;SQL>grantc##role1toc##user1;SQL>connsys/oracle@pdb1assysdbaSQL>grantcreateviewtorole2;SQL>grantrole2touser2;请问:能否将公共角色c##role1授权给本地用户user2?SQL>grantc##role1touser2;第7 章CDB和PDB的备份与恢复RMAN可以使用RecoveryManager(RMAN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版电子制造劳务派遣公司员工服务合同范本
- 二零二五年度智慧城市建设项目科研技术服务合同
- 二零二五年度农业贷款互保合同与担保合同
- 2025版厂区绿色植被养护及维护合同
- 车辆转让使用协议书(资料10篇)
- 2025版个人与个人签订的智能家居家居装修设计与期限合同
- 二零二五版财产保全担保与风险评估执行合同
- 二零二五年度公共广播系统智能语音识别与分析合同
- 二零二五年度知识产权许可定金合同签订与法律适用
- 二零二五年度网络短视频临时演员合作协议
- GB/T 13402-2010大直径钢制管法兰
- 催化裂化装置工艺流程及设备简图
- 小讲课阑尾炎(课件)
- 工程争创钱江杯质量控制手段
- 开利30HXC螺杆冷水机组操作规程
- 古诗五代史伶官传序翻译赏析
- 贝伐珠单抗联合 FOLFIRI 化疗方案治疗晚期结直肠癌患者的效果
- DB37-T 705-2020 水生生物增殖放流技术规范 许氏平鲉-(高清版)
- 格林巴利综合征(课件)
- vf100使用手册单三相
- (双减背景下)提高学生自主学习能力的课题研究结题总结报告(结题报告)
评论
0/150
提交评论