2023年12月13日发(作者:)

oraclepdb是什么意思,浅谈Oracle数据库12cPDB技术

PDB大致功能描述:

创建:

用create pluggable database的命令,

用file_name_convert的方式拷贝seed pdb的文件到对应的新pdb的路径下。拷贝的是最基本system和sysaux表空间,

将新建的pdb从mount的状态打开到read write的状态。

建立pdb用户的默认表空间。

拔出:

a)用dbca进行拔出有2种生成结果,一种是生成打包文件,一种是生成.xml文件和.DFB文件。

a .1)打包方式:

操作的时候,先close pdb,然后在$ORACLE_HOMEassistantsdbcatemplates,生成一个xml文件描述pdb原来文件的路径和scn等信

息;

将pdb的数据文件复制到$ORACLE_HOMEassistantsdbcatemplates路径下;

生成一个pdb_描述本次pdb unplug的相关文件。

将上述3种类型的文件打包成一个gz包。

在cdb中,以drop pluggable database的方式,删除pdb的信息和在物理上删除pdb的数据文件。

a.2)生成.xml和.DFB文件的方式

也是类似,只是不打包成一个gz包,且pdb的多个数据文件也被整合在一个.DFB文件中。最后也删除cdb中关于此pdb的信息。

插入:

如果用dbca,原来打包成gz包的来做plug就非常方便,只要选中gz包,直接plug即可。如果原来是分开文件的方式,也只需根据xml文件

和.DFB文件,先restore数据文件,再create pluggable database using xml文件。

克隆:

将pdb至于read only模式,然后利用create pluggable database xxx from xxx…命令进行可克隆。注该方法需要将原pdb至于read

only模式。可以常用在测试环境用克隆另外一个类似的环境。

PDB手工操作:

a)创建

SQL> CREATE PLUGGABLE DATABASE mypdb1 ADMIN USER pdbadmin IDENTIFIED BY Orac1e_1981 ROLES=(CONNECT)

2 file_name_convert=

(‘E:ORA12CAPPORACLEUSERORADATAORA12CPDBSEED’,’E:ORA12CAPPORACLEUSERORADATAORA12Cmypdb1′);

Pluggable database created.

SQL>

SQL> alter pluggable database mypdb1 open;

Pluggable database altered.

SQL>

b)拔出:

SQL> ALTER PLUGGABLE DATABASE mypdb1 CLOSE;

Pluggable database altered.

SQL>

SQL> alter pluggable database MYPDB1 unplug into ‘E:ora12capporacleuserproduct12.1.0dbhome_1assistantsdbcatemplate

Pluggable database altered.

SQL>

SQL> host cp -R E:ora12capporacleuseroradataora12cmypdb1 E:ora12capporacleuseroradataora12cmypdb1_bak

SQL> DROP PLUGGABLE DATABASE mypdb1 including datafiles;

Pluggable database dropped.

c)插入:

SQL> –注:不需要拷贝回去temp tablespace的文件。不然在下一个create pluggable database的时候会报错ORA-01119。

SQL> host cp E:ora12capporacleuseroradataora12cmypdb1_bak*.DBF E:ora12capporacleuseroradataora12cmypdb1

SQL>

SQL> create pluggable database b_pdb1 using ‘E:ora12capporacleuserproduct12.1.0dbhome_1assistantsdbcatemplatesora1

Pluggable database created.

SQL>

SQL> alter pluggable database b_pdb1 open;

Pluggable database altered.

SQL>

d)克隆:

SQL> select dbid,name,open_mode from v$pdbs;

DBID NAME OPEN_MODE

———- —————————— ———-

4039091088 PDB$SEED READ ONLY

2213957720 B_PDB1 READ WRITE

4261134367 MYPDB2 READ WRITE

SQL>

SQL>

SQL>

SQL> alter pluggable database mypdb2 close;

Pluggable database altered.

SQL> alter pluggable database mypdb2 open read only;

Pluggable database > create pluggable database b_pdb2

2 from MYPDB2

3 file_name_convert =

(‘E:ora12capporacleuseroradataora12cmypdb2′,’E:ora12capporacleuseroradataora12cb_pdb2’);

Pluggable database created.

SQL> select dbid,name,open_mode from v$pdbs;

DBID NAME OPEN_MODE

———- —————————— ———-

4039091088 PDB$SEED READ ONLY

2213957720 B_PDB1 READ WRITE

4261134367 MYPDB2 READ ONLY

2540280635 B_PDB2 MOUNTED

SQL> alter pluggable database B_PDB2 open;

Pluggable database altered.

SQL>

常用检查语句:

SQL> SELECT sys_context(‘userenv’,’con_name’) MY_CONTAINER FROM dual;

MY_CONTAINER

——————–

CDB$ROOT

SQL>

SQL> SHOW con_name

CON_NAME

——————————

CDB$ROOT

SQL>

SQL> SELECT

2 ‘DB_NAME: ‘ ||sys_context(‘userenv’, ‘db_name’)||

3 ‘ / CDB?: ‘ ||(select cdb from v$database)||

4 ‘ / AUTH_ID: ‘ ||sys_context(‘userenv’, ‘authenticated_identity’)||

5 ‘ / USER: ‘ ||sys_context(‘userenv’, ‘current_user’)||

6 ‘ / CONTAINER: ‘||nvl(sys_Context(‘userenv’, ‘con_Name’), ‘NON-CDB’)

7 as “DB DETAILS”

8 FROM DUAL;DB DETAILS—————————————————————————————————-DB_NAME: ora12c / CDB?: YES / AUTH_ID: HE-PCjijihe / USER: SYS / CONTAINER: CDB$ROOTSQL>SQL> alter session set container=MYPDB2;Session > SELECT2 ‘DB_NAME: ‘ ||sys_context(‘userenv’, ‘db_name’)||3 ‘ / CDB?: ‘ ||(select cdb from v$database)||4 ‘ / AUTH_ID: ‘ ||sys_context(‘userenv’, ‘authenticated_identity’)||5 ‘ / USER: ‘ ||sys_context(‘userenv’, ‘current_user’)||6 ‘ / CONTAINER: ‘||nvl(sys_Context(‘userenv’, ‘con_Name’), ‘NON-CDB’)7 as “DB DETAILS”8 FROM DUAL;DB DETAILS————————————————————————————————DB_NAME: ora12c / CDB?: YES / AUTH_ID: HE-PCjijihe / USER: SYS / CONTAINER: MYPDB2SQL>SQL> select , _mode, nvl(cted, ‘n/a’) “RESTRICTED”, 2 from v$PDBs v inner join dba_pdbs d3 using (GUID)4 order by _scn5 /NAME OPEN_MODE RESTRICTED STATUS—————————— ———- ————— ————-PDB$SEED READ ONLY NO NORMALMYPDB1 READ WRITE NO NORMALMYPDB2 READ WRITE NO NORMALSQL> alter pluggable database mypdb1 close;Pluggable database > select , _mode, nvl(cted, ‘n/a’) “RESTRICTED”, 2 from v$PDBs v inner join dba_pdbs d3 using (GUID)4 order by _scn5 /

NAME OPEN_MODE RESTRICTED STATUS

—————————— ———- ————— ————-

PDB$SEED READ ONLY NO NORMAL

MYPDB1 MOUNTED n/a NORMAL

MYPDB2 READ WRITE NO NORMAL

SQL> alter pluggable database mypdb1 open restricted;

Pluggable database altered.

SQL> select , _mode, nvl(cted, ‘n/a’) “RESTRICTED”,

2 from v$PDBs v inner join dba_pdbs d

3 using (GUID)

4 order by _scn

5 /

NAME OPEN_MODE RESTRICTED STATUS

—————————— ———- ————— ————-

PDB$SEED READ ONLY NO NORMAL

MYPDB1 READ WRITE YES NORMAL

MYPDB2 READ WRITE NO NORMAL

SQL>

评:感觉PDB不像什么革命性的技术,只是将数据库至于mount模式后,拷贝数据文件,做成一个备份,然后将此备份plug和unplug。这

样的技术,感觉跨平台的迁移不太理想。

另外,由于一个cdb中可以挂多个pdb,资源的分配使用就变得非常重要了,在12c中,估计原来几乎不常用的Resource Manager plan

会逐步用起来。

关于redo,由于redo是可以多个pdb共享,因此cdb的管理者可以通过logmnr的方式去挖对应pdb的日志,从dump出来的redo log来

看,redo log中含有container id(CON_ID,0为cdb,1为cdb$root, 2为pdb seed,3以上为pdb),pdbid和pxid,至少这些信息可以用

于区分不同pdb中的事务。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号

复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget

官方微博

TechTarget中国