Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.1OracleDatabase12cMultitenantAdministrationCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.3Agenda多租户架构服务和连接数据字典结构CDB中的安全管理一个CDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.4Agenda多租户架构服务和连接数据字典结构CDB中的安全管理一个CDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.5多租户架构多租户数据库(CDB)的组件PluggableDatabases(PDBs)PDBsRootCDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.6多租户架构的优势减少资本支出和运营成本,增加灵活性,容易采用每个应用程序独立的PDB应用无需改变快速供应(通过克隆)可移植性(通过可插拔)共享内存和后台进程每个服务器的更多应用程序在CDB级别执行的通用操作将多个数据库作为一个(升级,HA,备份)适当的时候进行细粒度控制Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.7多租户架构–动态PDBs共享共同的SGA和后台进程PDB只能看到他们连接到的前台会话Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.800.511.522.53CRMHCMERPBIGBPluggableDatabaseMEMORY00.511.522.53CRMHCMERPBIDWGBPluggableDatabaseMEMORY多租户可扩展性添加PDB只有很少的内存的增加00.511.522.53CRMHCMERPGBPluggableDatabaseMEMORYCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.9多租户架构多租户架构目前最多可以支持252个PDB单个PDB的使用感觉和操作与非CDB相同对连接的客户端用户而言,无法分清使用的是PDB还是非CDBDatabaseLinkCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.10多租户架构一个容器数据库(CDB)包含下列容器:–Root:root容器,命名为CDB$ROOT,存储Oracle提供的元数据和公共用户–Seed(PDB$SEED):seed容器,命名为PDB$SEED,是一个可以你可以使用它来创建新的PDBs的模板–PDBs:一个PDB对终端用户与应用程序看来与non-CDB完全相同每个CDB只包含一个root,一个seedPDB和零个或者多个用户创建的PDBsCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.11容器数据库架构Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.12PDBs中的文件每个PDB都有自己的一套包括SYSTEM和SYSAUX在内的表空间PDBs共享UNDO,REDO和控制文件默认每个CDB都有自己一个TEMP表空间,但是每个PDB可以创建自己的TEMP表空间Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.13Agenda多租户架构服务和连接数据字典结构CDB中的安全管理一个CDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.14在一个CDB中的services客户端必须使用services连接到PDBs“current”容器是用户连接到的容器在CDB创建的时候,一个与CDB同名的service会自动创建–也被注册到侦听器在一个PDB创建的时候,一个与该PDB同名的service会自动创建并在CDB内启动–配置侦听器以对该service进行侦听–此service不能被用户/管理员管理Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.15在一个CDB中的servicesCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.16HRg1wc为什么使用service?在单实例环境中,默认的service可能已经足够CDB的默认服务在启动CDB的时候会自动启动.这是一个管理service.PDB默认service对于已经在已启动的CDB中挂载的PDB的连接是可用的.如果应用程序使用默认service进行连接,则该service一旦在侦听器中进行注册即可连接到该service.rudolphcdb1sqlplususer/pwd@MySCAN/crmsvcCRMPDBDefaultserviceHRPDBCRMSVCCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.17HRg1wc为什么使用service?在移动PDBs时,默认的service是不够的PDBs提供位置独立性(plug/unplug/clone),但存在于一个环境在环境之间移动PDB,可能需要对PDB的名字进行改变.使用service为你的应用程序提供一个“拨入账号”.如果你的PDB移动到其它位置,你可以对该“拨入账号”进行保留.–这就要求service名称的唯一性rudolphcdb1CRMPDBHRPDBCRMSVCcupidcdb1NewHRPDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.18在一个CDB中的service不要为应用程序使用默认的PDBservice–作为一种最佳实践,创建一个新的、用户自定义的service你可以使用如下方式为一个PDB创建,修改,或者删除一个:–如果正在使用OracleRestart对一个单实例数据库进行管理,或者正在使用OracleClusterware对OracleRAC数据库进行管理使用ServerControl实用工具(SRVCTL)–否则,使用DBMS_SERVICE在一个CDB中的每个数据库service的名字必须是唯一的–此外,使用同一侦听器进行侦听的所有CDBs中的数据库service的名称也必须是唯一的Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.19连接到CDBs和PDBs连接到CDBRootcontainer(CDB$ROOT),使用:–ServiceName(简单连接命名方法或者TNS名称的别名)简单连接:@host:port/service–E.g.sqlplusSYS/oracle@localhost:1521/cdb1ASSYSDBA–OS认证E.g.sqlplus/ASSYSDBA连接到PDB,使用:–ServiceName,使用简单连接或者TNS名称别名Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.20连接到CDBs和PDBs两个新的、有用的命令确认你当前连接到的容器:SHOWCON_ID:获取当前连接的容器的ContainerID–1forRoot(CDB$ROOT)–3orgreaterforusercreatedPDBsSHOWCON_NAME:获取容器名称–CDB$ROOT(forRoot)Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.21Agenda多租户架构服务和连接数据字典结构CDB中的安全管理一个CDBCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.22公共数据字典12.1之前:Oracle和用户元数据随着时间的推移混合DatabaseCreatedDataDictionaryUserDataMetaDataMatureDatabaseDataDictionaryUserDataMetaDataTables,Code,DataaddedDataDictionaryUserDataMetaDataCopyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.23OBJ$TAB$SOURCE$…Oracle数据和用户数据OBJ$TAB$SOURCE$…EMPDEPT…OBJ$TAB$SOURCE$…多租户修复:水平的-分区的数据字典仅保留Oracle系统定义Oracle和客户元数据混在一起Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.24水平分区的数据字典OBJ$TAB$SOURCE$…EMPDEPT…OBJ$TAB$SOURCE$…Oracle提供的对象,例如views,PL/SQL,等使用objectlinks被所有PDBs共享PDB使用元数据链访问字典对象的元数据在数据库内的虚拟化Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.25容器数据对象容器数据对象是包含与多个容器以及可能是作为一个整体的CDB相关的数据的表或者视图有机制来限制数据对于一个或多个容器的特定的公共用户可见容器的数据对象的例子是Oracle提供的视图的名称以V$和CDB_开头Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.26CDB_xxx在多租户数据库中跨所有PDBs的所有对象USER_xxx由当前用户拥有的对象ALL_xxx由当前用户访问的对象DBA_xxx在一个容器或一个可插拔数据库中的所有对象数据字典视图–CDB_pdbs:在CDB中的所有PDB–CDB_tablespaces:在CDB中的所有表空间–CDB_users:在CDB中的所有用户(包括公共的和本地的)DBA字典视图提供在PDB内的信息:SQLSELECTview_nameFROMdba_viewsWHEREview_namelike'CDB%';SQLSELECTtable_nameFROMdictWHEREtable_namelike'DBA%';Copyright©2013,Oracleand/oritsaffiliates.Allrightsreserved.27性能视图当从一个PDB中查询的时候,查询v$视图将只显示与PDB相关或以CDB作为整体的信息当从ROOT中查询时,v$视图和CDB_视图可以返回多个容器的行–由这些视图返回的行有一个额外的con_id列–这些视图被称为container_data视图–对正在发布查询的公共用户的container_data设置将决定哪些行进行聚合和可见Copyright©2013,Oracleand/oritsaffiliates