oracle 12c新特性 可插拔_第1页
oracle 12c新特性 可插拔_第2页
oracle 12c新特性 可插拔_第3页
oracle 12c新特性 可插拔_第4页
oracle 12c新特性 可插拔_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、oracle 12c引入了cdb与pdb的新特性,在oracle 12c数据库引入的多租用户环境(multitenant environment)中,允许一个数据库容器(cdb)承载多个可插拔数据库(pdb)。cdb全称为container database,中文翻译为数据库容器,pdb全称为pluggable database,即可插拔数据库。在oracle 12c之前,实例与数据库是一对一或多对一关系(rac):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入oracle 12c后,实例与数据库可以是一对多的关系。下面是官方文档关于c

2、db与pdb的关系图。其实大家如果对sql server比较熟悉的话,这种cdb与pdb是不是感觉和sql server的单实例多数据库架构是一回事呢。像pdb$seed可以看成是master、msdb等系统数据库,pdbs可以看成用户创建的数据库。而可插拔的概念与sql server中的用户数据库的分离、附加其实就是那么一回事。看来oracle也“抄袭”了一把sql server的概念,只是改头换面的包装了一番。cdb组件(components of a cdb)一个cdb数据库容器包含了下面一些组件:root组件root又叫cdb$root, 存储着oracle提供的元数据和common

3、user,元数据的一个例子是oracle提供的pl/sql包的源代码,common user 是指在每个容器中都存在的用户。seed组件 seed又叫pdb$seed,这个是你创建pdbs数据库的模板,你不能在seed中添加或修改一个对象。一个cdb中有且只能有一个seed. 这个感念,个人感觉非常类似sql server中的model数据库。pdbs cdb中可以有一个或多个pdbs,pdbs向后兼容,可以像以前在数据库中那样操作pdbs,这里指大多数常规操作。这些组件中的每一个都可以被称为一个容器。因此,root(根)是一个容器,seed(种子)是一个容器,每个pdb是一个容器。每个容器在

4、cdb中都有一个独一无二的的id和名称。1)连接到cdb数据库连接到cdb数据库容器非常简单,跟以前连接数据库是一样的oracleget-orasvr02 $ sqlplus / as sysdbasql*plus: release 12.1.0.1.0 production on sun oct 20 23:41:36 2013copyright (c) 1982, 2013, oracle. all rights reserved.connected to an idle instance.sqloracleget-orasvr02 $ sqlplus sys/password as sy

5、sdbasql*plus: release 12.1.0.1.0 production on sun oct 20 23:43:17 2013copyright (c) 1982, 2013, oracle. all rights reserved.connected to an idle instance.2)查看数据库是否为cdbsql select name, decode(cdb, yes, multitenant option enabled, regular 12c database: ) multitenant option , open_mode, con_id from v$

6、database;name multitenant option open_mode con_id- - - -epps multitenant option enabled read write 0yes表示该数据库是cdb,如果是no表示是no-cdb(普通数据库)3)查看当前容器(container)3.1sql show con_namecon_name-cdb$rootsql3.2sql select sys_context(userenv, con_name) container db from dual;container db-cdb$rootsql4)查看cdb容器中的pdb

7、s信息查看cdb中有多少个pluggable databasesql select con_id, dbid, guid, name , open_mode from v$pdbs; con_id dbid guid name open_mode- - - - - 2 4071321146 e89e8da2866e3157e043de07a8c09238 pdb$seed read only 3 1930201447 e89e9418b882350ce043de07a8c092b6 pdbepps mountedsql5)启动pdb数据库方式1:sql alter pluggable data

8、base pdbepps open;pluggable database altered.sql select con_id, dbid, guid, name , open_mode from v$pdbs; con_id dbid guid name open_mode- - - - - 2 4071321146 e89e8da2866e3157e043de07a8c09238 pdb$seed read only 3 1930201447 e89e9418b882350ce043de07a8c092b6 pdbepps read write方式2:sql alter session se

9、t container=pdbepps;session altered.sql startuppluggable database opened.sql6)关闭pdb数据库sql alter pluggable database pdbepps close;pluggable database altered.sql select con_id, dbid, guid, name , open_mode from v$pdbs; con_id dbid guid name open_mode- - - - - 2 4071321146 e89e8da2866e3157e043de07a8c09

10、238 pdb$seed read only 3 1930201447 e89e9418b882350ce043de07a8c092b6 pdbepps mountedsql7)在容器间切换sql alter session set container=pdbepps;session altered.sql show con_name;con_name-pdbeppssqlsql alter session set container=cdb$root;session altered.sql show con_name;con_name-cdb$rootsqloracle 12c加入了一个非常

11、有新意的功能“可插拔数据库”特性,实现了数据库(pdb)在“容器”(cdb)上的拔功能,既能提高系统资源的利用率,也简化大面积数据库的管理和迁移工作。下面我们体验一下可插拔数据库的cdb和pdb的操作:基本信息:根容器(cdb):cup可插拔数据库(pdb):tea启动根容器:oracleeric $export oracle_sid=cuporacleeric $sqlplus / as sysdbasql*plus: release 12.1.0.2.0 production on wed jan 21 16:00:06 2015copyright (c) 1982, 2014, orac

12、le. all rights reserved.connected to an idle instance.sqlstartup -不会直接启动所有可插拔数据库,如需启动所有可插拔数据库,执行命令:alter pluggable database all openoracle instance started.total system global area 767557632 bytesfixed size 2929112 bytesvariable size 574623272 bytesdatabase buffers 184549376 bytesredo buffers 545587

13、2 bytesdatabase mounted.database opened.停止根容器:sqlshutdown immediate database closed.database dismounted.oracle instance shut down.查看是否创建了cdb,如果有显示名字:sqlselect name,cdb from v$database;name cdb- -cup yessqlshow parameter service;name type value- - -service_names string cup查看容器名字,其中有3个容器:根容器、种子容器和自己创建

14、的容器:sqlselect con_id,name from v$containers; con_id name- - 1 cdb$root -根容器 2 pdb$seed -种子容器,只可读 3 tea -自己创建的可插拔数据库sqlselect file_name from dba_data_files; file_name-/oracle/app/oradata/cup/datafile/o1_mf_system_bch07kvz_.dbf/oracle/app/oradata/cup/datafile/o1_mf_sysaux_bch020oo_.dbf/oracle/app/orad

15、ata/cup/datafile/o1_mf_undotbs1_bch0d2on_.dbf/oracle/app/oradata/cup/datafile/o1_mf_users_bch0d15n_.dbfsqlselect file_name from cdb_data_files;file_name-/oracle/app/oradata/cup/datafile/o1_mf_system_bch07kvz_.dbf/oracle/app/oradata/cup/datafile/o1_mf_sysaux_bch020oo_.dbf/oracle/app/oradata/cup/dataf

16、ile/o1_mf_undotbs1_bch0d2on_.dbf/oracle/app/oradata/cup/datafile/o1_mf_users_bch0d15n_.dbf创建公共用户:sqlcreate user c#eric identified by gao;user created.sqlconn c#eric/gao error:ora-01045: user c#eric lacks create session privilege; logon denied -没有权限,我们可以单独给其赋予权限,也可以给其指定角色。warning: you are no longer c

17、onnected to oracle.sqlconn / as sysdbaconnected.sqlgrant dba to c#eric container=all; -给其dba角色,角色范围覆盖所有的容器grant succeeded.sqlconn c#eric/gaoconnected. -连接成功切换容器:首先启动自己创建的容器数据库:sqlalter pluggable database tea open; -首先启动pdb数据库sqlalter session set container = tea;session altered.sqlshow con_name -查看当前

18、所在的容器名con_name-tea关闭可插拔数据库:sqlalter pluggable database tea close immediate;pluggable database altered.以下几个场景适合于使用pluggable database:1. 在产品系统中的某些应用实际仅使用十分少量的硬件资源。但是如果存在大量这样的应用,则还是需要构造大量的数据库实例并为这些小规模的数据库分配存储空间2. 对于那些并不十分复杂或重要,需要全职dba花费大量时间管理的数据库3. 为了更好地利用硬件和dba资源,用户有必要将大量的部门级应用整合到少数几个oracle rdbms数据库中以

19、便部署和管理pluggable database 可拔插数据库允许dba整合大量的小的部门级数据库到一个更庞大的数据库中。pluggable database 带来的好处在一个集中化的平台上操作多个数据库将有效降低成本:1. 更少的实例损耗2. 更低的存储成本减少对dba资源的使用,以及便于维护安全性: 无需应用修改 更快和简便的配置 节省了打patch和升级的时间 分离了以下责任: 不同应用的管理员 应用程序管理员和dba 应用用户 提供isolation 保证与非cdb 完整的向后兼容性 完整的rac操作使用 与oracle enterprise manager和resource mana

20、ger整合在一起 可以集中化管理多个数据库 备份和灾难恢复 补丁和升级12c pluggable database container database可插拔数据库特性专题2013/07/13bymaclean liu4条评论oracle database 12c中带来一种全新的架构,允许用户在一个独立的oracle数据库中拥有多个pluggable可拔插的数据库。这种pluggable 可拔插数据库的出现是为了对应 用户目前使用rdbms数据库的现状,即有一些用户拥有大量的部门级应用构建于oracle rdbms数据库之上。以下几个场景适合于使用pluggable database:1. 在

21、产品系统中的某些应用实际仅使用十分少量的硬件资源。但是如果存在大量这样的应用,则还是需要构造大量的数据库实例并为这些小规模的数据库分配存储空间2. 对于那些并不十分复杂或重要,需要全职dba花费大量时间管理的数据库3. 为了更好地利用硬件和dba资源,用户有必要将大量的部门级应用整合到少数几个oracle rdbms数据库中以便部署和管理pluggable database 可拔插数据库允许dba整合大量的小的部门级数据库到一个更庞大的数据库中。pluggable database 带来的好处在一个集中化的平台上操作多个数据库将有效降低成本:1. 更少的实例损耗2. 更低的存储成本减少对dba

22、资源的使用,以及便于维护安全性: 无需应用修改 更快和简便的配置 节省了打patch和升级的时间 分离了以下责任: 不同应用的管理员 应用程序管理员和dba 应用用户 提供isolation 保证与非cdb 完整的向后兼容性 完整的rac操作使用 与oracle enterprise manager和resource manager整合在一起 可以集中化管理多个数据库 备份和灾难恢复 补丁和升级上图给出了一个container database 并带有4个containers, root(cdb$root)和其他的三个pluggable database。每一个pluggable databa

23、se均拥有自己的独立应用程序,这些pluggable database要么有自己的dba, 要么被container administrator即sys用户管理;sys用户属于root(cdb$root) container 是一个common user。 sys用户还是像之前的版本那样权威,他可以管理root container 和其他所有的pluggable database。一个pluggable database可拔插数据库是 一堆database schemas数据库模式的集合以一个分离的数据库逻辑形象呈现给用户和应用程序。但是在物理级别,container database拥有一个

24、数据库实例以及多个数据文件,和普通的非cdb是一样的。 不管是客户端程序还是数据库对象均无需修改,以适应cdb。用户将很方便地将一个非cdb 插入到一个cdb中, cdb避免了以下的冗余: 后台进程 内存分配 多分数据字典源数据一个cdb将多个应用合并到单一的一个实例中, 这导致 仅使用 一套后台进程,一份sga内存分配和root container中的一份数据字典。当然pdb还将在自己的数据字典中维护部分数据关于cdb 数据字典实际情况的测试:通过下面的实验我们可以得出如下结论:1. 每一个container 维护自己的一套底层数据字典 数据实际存放在c_obj#(c_obj# 的shari

25、ng为none,意味着本质上 pdb还是有自己独立的数据字典的。)这样的cluster中,而tab$、ind$等字典基表则成为metadata link2. _current_edition_obj用作current container的obj视图3. _next_object 和 _default_auditing_options_ 是2个特殊的对象sql col owner for a20sql col table_name for a30sql l 1* select con_id,owner,table_name from cdb_tables where table_name=tab

26、$sql / con_id owner table_name- - - 1 sys tab$ 4 sys tab$ 2 sys tab$ 1* select con_id,owner,segment_name,tablespace_name,header_file,header_block,blocks from cdb_segments where segment_name=c_obj#sql / con_id owner segment_name tablespace_name header_file header_block blocks- - - - - - - 2 sys c_obj

27、# system 5 144 1536 4 sys c_obj# system 13 144 1536 1 sys c_obj# system 1 144 1536sql select name from v$datafile where file# in ( 5,1,13);sql select sharing,count(*) from dba_objects group by sharing;sharing count(*)- -metadata link 84206none 6424object link 147可以看到pdb中大部分的对象其实是metadata link 和objec

28、t link 1* select object_name,object_type,sharing from dba_objects where object_name in (c_obj#,obj$,user$,seg$)sql /object_name object_type sharing- - -c_obj# cluster noneobj$ table metadata linkuser$ table metadata linkseg$ table metadata linkc_obj# 的sharing为none,意味着本质上 pdb还是有自己独立的数据字典的。sharingvarc

29、har2(13) values:metadata link - if the object is metadata-linked or a metadata link to an object in the rootobject link - if the object is object-linked or an object link to an object in the rootnone - if none of the above appliesoraclelocalhost:$ export oracle_sid=macoraclelocalhost:$ sqlplus / as

30、sysdba / 首先检查该db是否为cdb container databasesql select name, cdb, con_id from v$database;name cdb con_id- - -mac yes 0并检查实例名:sql select instance_name, status, con_id from v$instance;select con_id,dbid,name,open_mode,total_size from v$pdbs; con_id dbid name open_mode total_size- - - - - 2 4062078151 pdb

31、$seed read only 283115520 3 1965483069 macp1 read write 288358400 4 1550789943 macp2 mounted 0v$pdbs的数据来源于x$con内部视图而x$con的数据应当主要来源是控制文件controlfile中的pluggable database records部分:面的测试可以证明v$pdbs的数据来源于控制文件,但是 total_size需要open pluggable db后才能获得sql startup mount;oracle instance started.ql select con_id,dbid,name,open_mode,total_size from v$pdbs; con_id dbid name open_mode total_size- - - - - 2 4062078151 pdb$seed mounted 0 3 1965483069 macp1 mounted 0 4 1550789943 macp2 mounted sql alter pluggable database macp1 open;alter plug

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论