oracle12c cdb修改,ORACLE 12C 新特性CDB及PDB

本文详细介绍了Oracle 12C中引入的CDB(Container Database)和PDB(Pluggable Database)概念。内容涵盖CDB与PDB的结构、环境切换方法、参数设置差异、视图信息查询、物理结构解析以及备份策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORACLE 12C新特性CDB及PDB一.CDB及PDB结构

CDB及PDB关系图

CDB和PDB是ORACLE 12C一个很亮的新特性,由于他们的引入导致传统的ORACLE数据库管理理念不少发生了改变。在ORACLE12C数据库引入多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,即数据库容器,PDB全称为Pluggable Database,即可插拔数据库。一个CDB数据库容器包含了下面一些组件:

l  ROOT组件:

ROOT又叫CDB$ROOT,存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User是指在每个容器中都存在的用户。

l  SEED组件

Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能由一个Seed。

l  PDBS

CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。

这些组件中的每一个都可以被称为一个容器。ROOT(根)是一个容器,Seed(种子是一个容器),每个PDB是一个容器。每个容器在CDB中都有一个独一无二的ID和名称。二.CDB及PDB环境切换

Ø  如何确定是CDB还是PDB环境

SQL> show con_name

CON_NAME

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

CDB$ROOT

如显示CDB$ROOT则代表是CDB环境

SQL> show con_name

CON_NAME

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

PDORCL(PDB名称)

如显示PDB的某个名称,则处于PDB环境

Ø  如何切换CDB或PDB环境

切换至PDB环境

alter session set container=PDB(某个PDB的具体名称);

切换至CDB环境

alter session set container=CDB$ROOT

Ø  查看当前PDB启动状态及启动数据库

SQL> select con_id,dbid,name,open_mode fromv$pdbs;

CON_ID    DBID NAME                          OPEN_MODE

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

2 3918641363 PDB$SEED                          READ ONLY

3 2055325419 PDORCL                        MOUNTED

4 2055325420PDCATE                               MOUNTED

在CDB环境打开PDB数据库[指定某个PDB名称]

SQL> alter pluggable database PDORCL open;

Pluggable database altered.

在CDB环境下查看PDB状态

SQL> select con_id,dbid,name,open_mode fromv$pdbs;

CON_ID    DBID NAME                          OPEN_MODE

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

2 3918641363 PDB$SEED                          READ ONLY

3 2055325419 PDORCL                         READWRITE

关闭PDB数据库

SQL> alter pluggable database PDORCL close;

Pluggable database altered.

在CDB环境下查看PDB状态

SQL> select con_id,dbid,name,open_mode fromv$pdbs;

CON_ID    DBID NAME                          OPEN_MODE

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

2 3918641363 PDB$SEED                          READ ONLY

3 2055325419 PDORCL                         READWRITE

如果打开CDB容器下所有PDB数据库或者关闭CDB容器下所有PDB数据库,执行脚本如下:

SQL> alter pluggable database all open;

Pluggable database altered.

SQL> alter pluggable database all close;

Pluggable database altered.三.CDB及PDB下建立用户区别

查看当前属于CDB环境

SQL> show con_name

CON_NAME

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

CDB$ROOT

CDB环境只能创建公共用户,且用户名必须已C##或c##开头,用户建立后,CDB及PDB环境均有c##开头的用户,但授权不能级联授权,如CDB环境创建了C##SR的用户,在CDB环境授权该用户connect,dba权限,该用户只能在CDB环境下登陆,在PDB环境下登陆需要单独授权,不能级联授权。

SQL> create user sr identifiedby sr;

create user sr identified by sr

*

ERROR at line 1:

ORA-65096: invalid common user orrole name

查看错误原因[格式:!oerr ora错误号]

SQL> !oerr ora 65096

65096, 00000, "invalid commonuser or role name"

// *Cause:  An attempt was made to create a common useror role with a name

//          that was not valid for common usersor roles.  In addition to

//          the usual rules for user and rolenames, common user and role

//          names must start with C## or c## andconsist only of ASCII

//          characters.

// *Action: Specify a valid commonuser or role name.

在CDB环境创建公共用户

SQL> create user c##sridentified by sr;

User created.

如想创建正常的用户,需切换至pdb数据库后再创建,此时用户名不受限制

SQL> alter session setcontainer=pdorcl;

Session altered.

SQL> show con_name

CON_NAME

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

PDORCL

SQL> create user sr identifiedby sr;

User created.四.CDB及PDB环境下修改参数

l  这里可以看到在cdb中修改参数,pdb会继承进去。

CON_NAME

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

CDB$ROOT

查看参数

SQL> show parameter open_cursor

NAME                             TYPE    VALUE

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

open_cursors                        integer       300

修改参数

SQL> alter system setopen_cursors=500 container=all;

System altered.

再次查看参数

SQL> show parameter open_cursor

NAME                                  TYPE     VALUE

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

open_cursors                        integer       500

切换至pdb环境

SQL> alter session setcontainer=pdorcl;

Session altered.

查看参数仍然生效

SQL> show parameter open_cursor

NAME                             TYPE    VALUE

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

open_cursors                        integer       500

l  但是在PDB环境下修改参数,PDB下参数生效,但CDB不会生效[不继承]。如果在pdb中修改会覆盖pdb从cdb中继承的参数含义。

SQL>show con_name

CON_NAME

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

PDORCL

SQL> alter system setopen_cursors=100;

System altered.

SQL> show parameter open_cursors

NAME                             TYPE    VALUE

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

open_cursors                        integer       100

SQL> conn / as sysdba

Connected.

SQL> show parameter open_cursors

NAME                             TYPE    VALUE

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

open_cursors                        integer       500五.CDB及PDB的视图信息

在ORACLE 12C中引入了CDB和PDB的概念,实现了ORACLE数据库的可插拔,在一个CDB数据库中,有多个PDB,而每一个PDB又可以理解为一个独立的传统ORACLE 数据库,那为了能够通过一个sql查询获得整个CDB数据库的信息,ORALCE 引入了CDB_*开头的视图,该视图就是在传统的DBA_*视图基础之上增加了CON_ID,用来区分不同的PDB,从而实现了一个简单sql查询在有足够权限的情况下,可以查询所有PDB中信息

Ø 确定是否是CDB

SQL> SELECT CDB FROM V$DATABASE;

CDB

---------

YES

YES表示该数据库是CDB,如果是NO表示是NO-CDB(普通数据库)

Ø CDB中各容器信息

SQL> COLUMN NAME FORMAT A8

SQL> SELECT NAME, CON_ID, DBID, CON_UID, GUID FROMV$CONTAINERS ORDER BY CON_ID;

NAME            CON_ID   DBID      CON_UID GUID

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

CDB$ROOT        1 1448663787               1        FD9AC20F64D344D7E043B6A9E80A2F2F

PDB$SEED          2 3918641363     3918641363 3AFC7D541B65114AE05342F4A8C0AEE4

PDORCL              3 2055325419     2055325419 3AFC9AE739981448E05342F4A8C0E4F8

SQL> select CON_NAME_TO_ID('PDORCL') FROM DUAL;

CON_NAME_TO_ID('PDORCL')

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

3

SQL> SELECT CON_DBID_TO_ID(2055325419) FROM DUAL;

CON_DBID_TO_ID(2055325419)

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

3

SQL> SELECT CON_UID_TO_ID(2055325419) FROM DUAL;

CON_UID_TO_ID(2055325419)

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

3

Ø 查询在CDB中的PDB数据/临时文件信息

SQL> COLUMN PDB_ID FORMAT 999

SQL> COLUMN PDB_NAME FORMAT A8

SQL> COLUMN FILE_ID FORMAT 9999

SQL>  COLUMNTABLESPACE_NAME FORMAT A10

SQL> COLUMN FILE_NAME FORMAT A45

SQL> SELECT p.PDB_ID, p.PDB_NAME, d.FILE_ID,d.TABLESPACE_NAME, d.FILE_NAME FROM DBA_PDBS p, CDB_DATA_FILES d WHERE p.PDB_ID= d.CON_ID ORDER BY p.PDB_ID;

PDB_ID PDB_NAME FILE_ID TABLESPACE FILE_NAME

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

3 PDORCL            8 SYSTEM       +DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/D

ATAFILE/system.274.920883601

3 PDORCL           10 USERS          +DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/D

ATAFILE/users.277.920883611

3 PDORCL            9 SYSAUX        +DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/D

ATAFILE/sysaux.275.920883601

SQL> COLUMN CON_ID FORMAT 999

SQL> COLUMN FILE_ID FORMAT 9999

SQL> COLUMN TABLESPACE_NAME FORMAT A15

SQL> COLUMN FILE_NAME FORMAT A45

SQL> SELECT CON_ID, FILE_ID, TABLESPACE_NAME,FILE_NAME FROM CDB_TEMP_FILES ORDER BY CON_ID;

CON_ID FILE_ID TABLESPACE_NAME FILE_NAME

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

1         1 TEMP         +DATA/ORCL/TEMPFILE/temp.269.920883057

3         3 TEMP        +DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/T

EMPFILE/temp.276.920883605六.CDB及PDB的物理结构

l  CDB名为ORCL,其内PDB名为PDORCL,数据文件存放于+DATA磁盘组里,已此环境为例:

CDB数据文件位置:+DATA/ORCL/DATAFILE/SYSTEM.256

+DATA/ORCL/DATAFILE/SYSAUX.257

+DATA/ORCL/DATAFILE/USERS.258

+DATA/ORCL/DATAFILE/TEMP.270

+DATA/ORCL/DATAFILE/UNDOTBS1.272

PDB数据文件位置:+DATA/ORCL/UUID1/DATAFILE/SYSTEM.259

+DATA/ORCL/UUID1/DATAFILE/SYSAUX.260

+DATA/ORCL/UUID1/DATAFILE/USERS.261

+DATA/ORCL/UUID1/DATAFILE/TEMP.271

PDB$SEED数据文件位置: +DATA/ORCL/UUID2/DATAFILE/SYSTEM.272

+DATA/ORCL/UUID2/DATAFILE/SYSAUX.273

+DATA/ORCL/UUID2/DATAFILE/pdbseed_temp012016-08-26

参数文件位置: +DATA/ORCL/PARAMETERFILE/spfile.273.920883461

公共表空间及文件独有表空间及文件

CDB&PDBUNDOTBS1(回滚表空间)

LOGFILE(日志文件)

参数文件(spfile)

控制文件(control)

CDBsystem,sysaux,users,temp表空间及数据文件

PDBsystem,sysaux,users,temp表空间及数据文件

PDB$SEEDsystem,sysaux,temp表空间及数据文件

l  独有的表空间及文件:

1)       CDB有单独的system,sysaux,users,temp表空间及对应的数据文件;

2)       PDB有单独的system,sysaux,users,temp表空间及对应的数据文件;

3)       PDB$SEED有单独的system,sysaux,temp[已pdbseed_temp开头命名]表空间及对应的数据文件;

l  共有的表空间及文件:

1)       CDB与PDB共同拥有UNDO表空间及对应数据文件

2)       CDB与PDB 共同拥有日志文件

3)       参数文件是共有的,参数文件范例如下:

orcl.__data_transfer_cache_size=0

orcl.__db_cache_size=587202560

orcl.__java_pool_size=16777216

orcl.__large_pool_size=33554432

orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment

orcl.__pga_aggregate_target=553648128

orcl.__sga_target=1056964608

orcl.__shared_io_pool_size=50331648

orcl.__shared_pool_size=352321536

orcl.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.audit_trail='db'

*.compatible='12.1.0.2.0'

*.control_files='+DATA/ORCL/CONTROLFILE/current.262.920883051','+DATA/ORCL/CONTROLFILE/current.261.920883051'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=4560m

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP)(SERVICE=orclXDB)'

*.enable_pluggable_database=true

*.memory_target=1526m

*.open_cursors=300

*.processes=300

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

4)       控制文件是共有的,控制文件范例如下:[示例包含重建控制文件脚本]

STARTUP NOMOUNT

CREATECONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'+DATA/ORCL/ONLINELOG/group_1.263.920883053',

'+DATA/ORCL/ONLINELOG/group_1.264.920883053'

) SIZE 50M BLOCKSIZE 512,

GROUP 2 (

'+DATA/ORCL/ONLINELOG/group_2.265.920883053',

'+DATA/ORCL/ONLINELOG/group_2.266.920883053'

) SIZE 50M BLOCKSIZE 512,

GROUP 3 (

'+DATA/ORCL/ONLINELOG/group_3.267.920883055',

'+DATA/ORCL/ONLINELOG/group_3.268.920883055'

) SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

'+DATA/ORCL/DATAFILE/system.258.920882955',

'+DATA/ORCL/DATAFILE/sysaux.257.920882909',

'+DATA/ORCL/DATAFILE/undotbs1.260.920883011',

'+DATA/ORCL/FD9AC20F64D244D7E043B6A9E80A2F2F/DATAFILE/system.271.920883059',

'+DATA/ORCL/DATAFILE/users.259.920883011','+DATA/ORCL/FD9AC20F64D244D7E043B6A9E80A2F2F/DATAFILE/sysaux.270.920883059',

'+DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/DATAFILE/system.274.920883601', '+DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/DATAFILE/sysaux.275.920883601','+DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/DATAFILE/users.277.920883611'

CHARACTER SET ZHS16GBK

;

RECOVER DATABASE

ALTER DATABASE OPEN;

ALTER PLUGGABLE DATABASE ALL OPEN;

ALTER TABLESPACE TEMP ADDTEMPFILE '+DATA/ORCL/TEMPFILE/temp.269.920883057'

SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER SESSION SET CONTAINER = PDB$SEED;

ALTER TABLESPACE TEMP ADDTEMPFILE'+DATA/ORCL/FD9AC20F64D244D7E043B6A9E80A2F2F/DATAFILE/pdbseed_temp012016-08-26_08-51-37-am.dbf'SIZE 104857600  REUSE AUTOEXTEND ON NEXT655360  MAXSIZE 32767M;

ALTER SESSION SET CONTAINER = PDORCL;

ALTER TABLESPACE TEMP ADDTEMPFILE'+DATA/ORCL/3AFC9AE739981448E05342F4A8C0E4F8/TEMPFILE/temp.276.920883605' SIZE20971520  REUSE AUTOEXTEND ON NEXT655360  MAXSIZE 32767M;

ALTER SESSION SET CONTAINER = CDB$ROOT;七.CDB及PDB环境的备份

这种环境在RMAN环境执行backupdatabase的备份,会备份以下三种4种文件

1)        cdb下表空间的数据文件的备份集

2)       PDB下表空间的数据文件的备份集

3)       PDB$SEED下表空间的数据文件的备份集

4)       参数文件及控制文件的备份集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值