oracle12c新特点——可插拔数据库(Pluggable Database,PDB)

1.    12c PDB新特点的优势

1)    可以把多个PDB集成进一个平台。

2)    可以快速提供一个新的PDB或一个已有PDB的克隆。

3)    通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。

4)    多个PDB数据库补丁或升级一次完成。

5)    通过把单个PDB拔插到较高版本的不同CDB,可以补丁或升级一个PDB。

6)    从同一个CDB中众多PDB中分离出某个PDB的内容。

7)    分离这些PDB应用管理员的责任。

2.    12c PDB新特点的功能

1)    在一个CDB中,你可以拥有很多PDB。

2)    PDB和12.1之前版本的普通数据库是向后兼容的。

3)    PDB对应用是透明的——你不需要改变客户端代码或数据库对象。

4)    RAC中每个实例作为一个整体打开CDB(因此CDB和其中的PDB数据库版本都是相同的)。

5)    会话仅仅看到它自己连接的那个PDB。

6)    你可以从一个CDB拔出一个PDB,然后插入另一个CDB。

7)    你可以在同一个CDB或不同CDB间克隆PDB。

8)    资源管理器随着PDB的功能得以扩展。

9)    通过SQL语句实现了实体PDB的操作(创建,拔出,插入,克隆,清除,设置打开模式)。

10)  当连接到所谓的“根”(root)时,CDB管理员来执行这些操作。

11)  所有的PDB能被一次备份,但可以分别单独恢复。

3.    12c PDB的详解

1)    每个PDB有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB作为一个整体也包含Oracle提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。

2)    有新的分开的数据字典架构,该架构允许一个PDB被快速从一个CDB拔出并插入一个不同的CDB。

3)    每个PDB只能看到Oracle提供系统的只读定义。

4)    有全局数据库参数,也有本地数据库参数。PDB参数仅仅属于特定的PDB,并且拔出后,PDB参数也将保持不变。

5)    数据库用户可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用户一开始就在两级DB中存在。如果你在CDB中创建了一个新用户,那么你在PDB中也能看到这个用户。在PDB中创建的用户只能在该PDB中使用。

6)    临时表空间可以是全局或本地的。

7)    Redo日志和Undo表空间都是全局的(CDB级)。

8)    Data Guard在CDB级作为一个整体发挥作用;RMAN调度的备份也作为一个整体在CDB级完成;任何时候,你可以只备份一个PDB。

9)    应用连接PDB时,不需做代码修改;系统管理员可以连接CDB;连接串中的服务名确定目标PDB。

10)  PDB允许更加清晰的声明定义一个应用;一个PDB对同一个CDB里的其他PDB一无所知;每个PDB是个密闭的容器。这保证了新层面DB的独立和安全。

4.    连接到一个PDB

创建一个PDB时,一个服务也会被创建在该PDB内,并且,该服务被作为初始化容器。你可以通过下列语句显示目前的容器:

selectSys_Context(‘Userenv‘, ‘Con_Name‘) "current container" from dual;

在12.1 SQL*Plus提示符下,你能用SHOW con_name来显式目前的容器。

在创建PDB时,也会启动服务。虽然服务的元数据被记录在PDB中,但名字和PDB名字是一样的。会话将被一个不能改变目前容器的用户创建。

客户端应用代码通常被设计成在代码外面确定连接描述信息。例如:代码也许使用TNS别名,允许在不改变代码的情况下改变连接串。

当然,在一个PDB中可以有多个服务。每个将表示它被定义为PDB初始目前容器。可以用常规方法创建、维护、清除PDB中另外的服务,但一定不要清除PDB中默认的服务。建立初始容器是一个PDB的会话的唯一方法是确定一个服务。

下面的例子中,看如何用容易的语法连接到Orale12c中被叫做“cdb1”的CDB,并且连接到其中一个PDB:

sqlplusSys/[email protected]:1521/cdb1 AS SYSDBA

CONNECTScott/[email protected]:1521/My_PDB

5.    创建并打开一个新的Oracle12c可插拔数据库(PDB)

现在,我们将要创建并打开一个名叫my_pdb新的可插拔数据库(PDB)。每个CDB都有一个叫做 PDB$Seed 的标准的PDB模板。我们实际是通过克隆该模板来创建一个新PDB。看下面例子:

sqlplussys/[email protected]:1521/cdb1 as sysdba

create pluggable database My_PDB

admin user App_Admin identified by pass

file_name_convert = (‘/pdbseed/‘, ‘/my_pdb/‘);

“ file_name_convert”子句确定新文件名如何从模板库派生出来,这点和我们知道的rman差不多。在PDB创建期间,Oracle仅拷贝system和sysaux表空间的两个数据 文件,undo,redo等其余数据库文件是CDB全局的文件,并且它们属于特定的叫做CDB$Root的容器。

“admin user”子句是必须的,在扩展格式,给新用户赋予了权限和角色,该用户仅在my_pdb内可以创建新会话。

在创建完可插拔数据库后,新的PDB处于MOUNTED模式。在新PDB中创建一个新会话前,必须先打开它。因此,我们可以用下面的命令打开它:

alter pluggabledatabase My_PDB open;

6.    检查容器数据库(CDB)和可插拔数据库(PDB)文件

select con_id,tablespace_name, file_name

fromcdb_data_files

where file_Namelike ‘%/cdb1/pdbseed/%‘

or file_Namelike ‘%/cdb1/my_pdb/%‘

order by 1, 2;

CON_IDTablespace_Name File_Name

------------------ -------------------------------------------------

2 SYSAUX /home/oracle/oradata/cdb1/pdbseed/sysaux01.dbf

2 SYSTEM /home/oracle/oradata/cdb1/pdbseed/system01.dbf

3 SYSAUX /home/oracle/oradata/cdb1/My_PDB/sysaux01.dbf

3 SYSTEM /home/oracle/oradata/cdb1/My_PDB/system01.dbf

7.    Open all Oracle 12c Pluggable Databases (PDB)

RAC每个实例中的每个CDB中的PDB有它自己的打开模式(Open_Mode )和限制状态(Restricted status)。打开模式的可能值为MOUNTED,READ ONLY,和 READ WRITE;当PDB打开时,限制状态可能的值为YES和NO,否则为null;

启动一个实例(这回打开这个CDB)并不会打开PDB。“alterpluggable database”语句被用来设置PDB的打开模式。在该SQL语句中,可以给一个特定PDB名或用关键字“all”,例如:

alter pluggabledatabase all open;

8.    关闭CDB中所有的Oracle12c可插拔数据库

下列语句关闭CDB中所有的PDB:

alter pluggabledatabase all close;

9.    克隆同一个CDB中一个现有的Oracle12cPDB

下面,我们将克隆同一个CDB中的现有的PDB。为此,在开始克隆前,必须先关闭该PDB,然后以READ ONLY模式打开:

alterpluggable database My_PDB close;

alterpluggable database My_PDB open read only;

createpluggable database My_Clone

fromMy_PDB

file_name_convert= (‘/my_pdb‘, ‘/my_clone‘);

alterpluggable database My_PDB close;

alterpluggable database My_PDB open;

alterpluggable database My_Clone open;

10.  从容器数据库(CDB)中拔出可插拔数据库(PDB)

下面,展示如何从cdb1中拔出my_pdb。“into”关键字后必须跟PDB描述的全路径,被该操作以XML格式产生:

alterpluggable database My_PDB

unpluginto ‘/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml‘;

my_pdb.xml“文件确定数据文件的名字和全路径等信息。这些信息在插入操作时会用到。注意:PDB还是其从中拔出的CDB的一部分,只是现在状态变为了拔出(UNPLUGGED)而已。

拔出操作实际上对数据文件做了一些改变,以便记录PDB被正确成功的拔出。因为它还是CDB得一部分,你能给它做一个RMAN备份。这提供了一个归档拔出日志的方便方法。

一旦你备份了它,你就可以把它从字典库里移走——但是,当然,为了今后的插入操作,你必须保留这些数据文件。

droppluggable database My_PDB keep datafiles;

11.  Oracle 12c可插拔数据库——拔插和克隆操作

11.1.  把My_PDB插入cdb2

1)    连接到目标容器数据库,这里是目录/home/oracle/oradata/cdb2下的cdb2

sqlplus sys/[email protected]:1521/cdb2 as sysdba

2)    然后,确认将要被插入的PDB和新的主容器数据库是兼容的

exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>‘/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml‘);

如果不兼容,该过程会报错。

3)     现在,插入PDB。using关键字后必须跟上PDB描述的绝对路径,即,先前拔出操作时产生的.XML文件。

create pluggable database My_PDB

using ‘/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml‘

move

file_name_convert = (‘/cdb1/‘, ‘/cdb2/‘);

alter pluggable database My_PDB open;

11.2.  从拔出的PDB克隆创建一个PDB

该例子建议保留一个被拔出的PDB的备份,这会有很多应用场景,例如:

1)    在一个开发部门,允许研发者和测试者快速、重复的提供一个开始;

2)    支持自学;

3)    提供一个交付新应用的方法;

为了演示,假设你已经拔出了MY_PDB1,并把它放在了合适的目录下,并设置为只读。

create pluggable database MY_PDB1 as clone

using

‘/home/oracle/oradata/bk_pdbs/my_pdb1/my_pdb1.xml‘

copy

file_name_convert =

(‘/bk_pdbs/my_pdb1/‘, ‘/cdb1/my_pdb1/‘);

alter pluggable database my_pdb1 open;

as clone”SQL子句确保新的PDB得到一个正确的、全局的唯一标识。然后,你能看到你的GUIDs:

selectPDB_Name, GUID

fromDBA_PDBs

orderby Creation_scn;

注意:PBD被从CBD拔出后以及后来插入另一个CBD,DBA_PDBs.GUID就会一直伴随着它。服务器代码会强制CBD内PDB的唯一性,但并不强制CBD间的唯一性。

11.3.  把一个非CBD库当做PDB插入一个已有的CBD库

这里,我将展示给你如何把12.1前的数据库转变为一个PDB。你共有几个方法做到这点:

1)    可传输表空间/数据泵;

2)    复制;

3)    把原来的非CBD库升级到12c,并把它插入12c CDB;

因为头两个方法曾经都是标准方法,我们这里将只描述最后一个。

注意:不是一个升级步骤就能完成所有任务,它是一个两阶段操作:首先,把你现存的数据库升级为12.1非CDB库;接着,把你的非CDB库插入现存的CDB中——仅仅插入PDB和接着完成一个插入后步骤。

?  第一步,先把12.1前的库升级为12c版本;

?  第二步,连到非CDB库,以便产生表示文件,正如拔出一个PDB部分所示:

shutdownimmediate

startupmount

alterdatabase open read only;

begin

DBMS_PDB.Describe(PDB_Descr_File=> ‘/home/oracle/oradata/noncdb/noncdb.xml’);

end;

/

shutdownimmediate

?  下一步是连接到接收CDB库——cdb2,并用表示文件将非cdb库的数据文件插入。

createpluggable database noncdb_pdb

asclone

using‘/home/oracle/oradata/noncdb/noncdb.xml‘

source_file_name_convert= none

copy

file_name_convert= (‘/noncdb/‘, ‘/cdb2/noncdb_pdb/‘)

storageunlimited;

?  现在打开库,最后完成插入,关闭,再打开,把限制状态设置为YES:

alterpluggable database noncdb_pdb open;

alterpluggable database noncdb_pdb close;

alterpluggable database noncdb_pdb open restricted;

?  最后,运行一个Oracle提供的SQL*Plus脚本来移去现在本地字典中的数据,因为,在新版本中,定义Oracle系统的元数据仅仅在整个CDB中存储一次。

altersession set container = ExNonCDB;

@?/rdbms/admin/noncdb_to_pdb.sql

?  作为最后一步,打开新被接收的先前的非CDB库。

alterpluggable database noncdb_pdb open;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 00:21:08

oracle12c新特点——可插拔数据库(Pluggable Database,PDB)的相关文章

Oracle 12C 新特性 - “可插拔数据库”功能

Oracle 12C加入了一个非常有新意的功能"可插拔数据库"特性,实现了数据库(PDB)在"容器"(CDB)上的拔功能,既能提高系统资源的利用率,也简化大面积数据库的管理和迁移工作. 下面我们体验一下可插拔数据库的CDB和PDB的操作: 基本信息:根容器(CDB):CUP可插拔数据库(PDB):TEA 启动根容器:[[email protected] ~]$ export ORACLE_SID=cup[[email protected] ~]$ sqlplus /

Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)

Oracle12c中的多宿主选项允许一个容器数据库(CDB)容纳多个独立的可插拔数据库(PDB).本文将展示如何配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB).1. 配置CDB中的实例参数(ALTER SYSTEM)配置CDB实例参数和配置非CDB实例参数没什么不一样.ALTER SYSTEM命令用来设置初始化参数,而有些数据库配置修改需要用ALTER DATABASE命令.作为一个特权用户登录且连接到根容器时,任何ALTER SYSTEM命令默认都将作用于该根容器.这意味着如下

理解及应用 Oracle 12c 插拔数据库

一.概述 1.Oracle 12c 可插拔数据库体系结构 Oracle 12c 中引入了一个新功能就是Oracle Multitenant,这个功能可以在多租户容器数据库中,创建并维护许多个可插拔数据库.Oracle Multitenant是Oracle企业版中需要额外付费的组件.然而,在所有Oracle版本中都可以在一个可插拔数据库中免费使用它.多租户容器数据库(CDB)是指能够容纳一个或者多个可插拔数据库的数据库.容器是指CDB中的数据文件和元数据的集合.可插拔数据库是指可以通过克隆另一个数

玩转Oracle之12c 可插拔数据库数据泵功能体验

:数据泵可以高效备份.复制.保护和传输大量的数据和源数据.在导入和导出过程中可以做到过滤数据和对象,并且能够在全数据库级.方案级.表级和表空间级实现导入导出. Oracle12c的datapump功能跟以前差不多,在多租户的环境中执行导入\导出以及使用一些更细化的参数的时候,几乎没有区别,依然很好用,效率很高.目前有很多的用户仍然在使用exp/imp工具在执行一些迁移.备份.过滤和转移数据的工作,相比起来,数据泵的效率更高.更易用并且更方便管理,但exp/imp在有些时候可以完成datapump

如何连接oracle 12c可插拔数据库

启动根容器:[oracle@eric ~]$ export ORACLE_SID=cup[oracle@eric ~]$ sqlplus / as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on Wed Jan 21 16:00:06 2015Copyright (c) 1982, 2014, Oracle. All rights reserved.Connected to an idle instance.SQL> startup -----不

详谈Oracle12c新特点容器数据库&可插拔数据库(CDB&PDB)

一般信息 数据字典 CDB_FILE$ DBA_PDBS PDB$SEED CDB_LOCAL_ADMINAUTH$ DBA_PDB_HISTORY PDB_HISTORY$ CDB_PDB_SAVED_STATES DBA_PDB_SAVED_STATES PDB_PLUG_IN_VIOLATIONS CDB_RESOURCE_PLAN$ DBMS_PDB PDB_SPFILE$ CDB_RESOURCE_PLAN_DIRECTIVE$ DBMS_PDB_EXEC_SQL V$CONTAINE

Oracle12c 新概念CDB与PDB 解析

转载自:http://www.cnblogs.com/siyunianhua/p/4004361.html 原文章标题:Oracle 12c创建用户时出现"ORA-65096: invalid common user or role name"的错误 这篇文章主要介绍CDB和PDB的基本管理,资料来源oracle官方. 基本概念: Multitenant Environment:多租户环境 CDB(Container Database):数据库容器 PD(Pluggable Datab

Oracle12C新特性——cdb与pdb

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB).CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库.在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载.而实例与数据库不可

网络游戏中应用可插拔工厂处理消息

嫌翻得不好的去看后面的原文吧 ———————————————————————————————————————————————————————————— 问题 今天的网络多人游戏必须处理大量不同的消息.有标准的消息(创建玩家.删除玩家.聊天等等),也有游戏中特定的消息.所有这些消息都有它们自己的数据项,它们必须能够通过一个连接发送出去并在另一端重新组装.作为网络游戏开发者,你的工作就是梳理一切以便你的游戏能够以一种优雅的方式发送和接收消息. 在C++中最明显的做到这一点方式就是用类来表示不同的消息