1. 程式人生 > >Oracle12c多租戶CDB 與 PDB 參數文件位置探討、查詢 CDB 與 PDB 不同值的參數

Oracle12c多租戶CDB 與 PDB 參數文件位置探討、查詢 CDB 與 PDB 不同值的參數

rod 12c spf 怎麽辦 oracl 相同 lte order unp


一、 Oracle12c多租戶CDB 與 PDB 參數文件位置

CDB的參數文件依然使用12c以前的SPIFLE,pdb的參數文件不會出現在SPFILE中,而是直接從CDB中繼承,如果PDB中有privete Local parameter 會存在 CDB 的 PDB_SPFILE$字典表 中以con_id區別,當PDB UN-Plug時,PDB參數會寫入PDB的XML文件中,當drop pluggable database後,pdb信息和PDB_SPFILE$記錄也會被清除。再當PDB重新Plug-in到CDB時會重新加載回PDB, 但是由於一些PDB特殊參數在plug-in時會被遺棄。

實驗驗證:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string/home/oracle/app/oracle/produc
t/12.2.0/dbhome_1/dbs/spfilean
dycdb.ora
SQL> alter session set container=pdb01;

Session altered.

SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string/home/oracle/app/oracle/produc
t/12.2.0/dbhome_1/dbs/spfilean
dycdb.ora
到這一步驗證了:CDB的參數文件依然使用12c以前的SPIFLE,pdb的參數文件不會出現在SPFILE中,而是直接從CDB中繼承。

SQL> show parameter undo_retention

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer900
SQL> alter system set undo_retention=901;

System altered.

SQL> show parameter undo_reten

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer901

SQL> select pdb_uid,name,value$ from PDB_SPFILE$;

no rows selected
SQL> alter session set container=cdb$root;

Session altered.

SQL> select pdb_uid,name,value$ from PDB_SPFILE$;

PDB_UID NAME VALUE$
---------- ---------------------------------------- -------------------------
2550500229 undo_retention 901

SQL> select con_id,dbid,con_uid,guid from v$pdbs;

CON_ID DBIDCON_UID GUID
---------- ---------- ---------- --------------------------------
2 2683777510 2683777510 4ECF66D93A6233B5E0531019640A6041
3 2550500229 2550500229 4ECF8621E3DA38EEE0531019640AA598

到這一步驗證了:如果PDB中有privete Local parameter 會存在 CDB 的 PDB_SPFILE$字典表 中以con_id區別

SQL>alter pluggable database pdb01 close immediate;
SQL>alter pluggable database pdb01 unplug into ‘/home/oracle/pdb01.xml‘;
[[email protected]

/* */ ~]$ pwd
/home/oracle
[[email protected] ~]$ ll pdb01.xml
-rw-r--r--. 1 oracle oinstall 7758 May 7 05:09 pdb01.xml
[[email protected] ~]$ cat pdb01.xml
<?xml version="1.0" encoding="UTF-8"?>
<PDB>
<xmlversion>1</xmlversion>
<pdbname>PDB01</pdbname>
<cid>3</cid>
<byteorder>1</byteorder>
<vsn>203424000</vsn>
<vsns>
<vsnnum>12.2.0.1.0</vsnnum>
<cdbcompt>12.2.0.0.0</cdbcompt>
<pdbcompt>12.2.0.0.0</pdbcompt>
<vsnlibnum>0.0.0.0.24</vsnlibnum>
<vsnsql>24</vsnsql>
<vsnbsv>8.0.0.0.0</vsnbsv>
</vsns>
<dbid>2550500229</dbid>
...省略
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 MOUNTED
SQL> drop pluggable database pdb01 keep datafiles;

Pluggable database dropped.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
SQL> select pdb_uid,name,value$ from PDB_SPFILE$;

no rows selected
到這一步驗證了:PDB un-plug後pdb parameter and spfile會先進xml文件, 當drop pluggable database後,pdb信息和PDB_SPFILE$記錄也會被清除。

SQL> create pluggable database pdb01 using ‘/home/oracle/pdb01.xml‘ nocopy;

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 MOUNTED
SQL> alter pluggable database pdb01 open;
Pluggable database altered.
SQL> select pdb_uid,name,value$ from PDB_SPFILE$;

PDB_UID NAME VALUE$
---------- ---------------------------------------- -------------------------
1196085469 undo_retention 901

到這一步驗證了:當PDB重新Plug-in到CDB時會重新加載回PDB, 但是由於一些PDB參數特殊原因在plug-in時會被遺棄。這裏因為沒有特殊參數,所以沒有丟失參數。

二、 CDB 與 PDB 不同值的相同參數

多租戶環境下,如果在設定參數時,cdb中設置CONTAINER=ALL,那麽PDB的參數也會繼承這個值,但可以通過ALTER SYSTEM在PDB container中修改 PDB local parameter,將覆蓋(優先)從CDB繼承的參數。有時候,我們有中需求,需要核實對比 PDB 中哪些參數與 CDB 不同。我們該怎麽辦,下面我們一起探討下。

例子: 查詢 名為 pdb01 的PDB 與 CDB 不同值的相同參數有哪些
1. 實驗環境查看
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter undo_reten

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer900
SQL> alter session set container=pdb01;
SQL> show parameter undo_reten

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer901
2. 查詢 PDB 中哪些參數與 CDB 不同
SQL>
set lin 300;
set pages 300;
col pdb_name for a30;
col parameter for a25;
col value$ for a20;
select v.dbid,v.name pdb_name,p.name parameter,p.value$
from pdb_spfile$ p,v$pdbs v
where p.pdb_uid=v.con_uid and v.name=‘PDB01‘ ;
DBID PDB_NAME PARAMETER VALUE$
---------- ------------------------------ ------------------------- -------------
2550500229 PDB01 undo_retention 901

Oracle12c多租戶CDB 與 PDB 參數文件位置探討、查詢 CDB 與 PDB 不同值的參數