Oracle12c多租戶CDB 與 PDB 引數檔案位置探討、查詢 CDB 與 PDB 不同值的引數

張衝andy發表於2017-05-06

一、 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';
[oracle@12c01 ~]$ pwd
/home/oracle
[oracle@12c01 ~]$ ll pdb01.xml 
-rw-r--r--. 1 oracle oinstall 7758 May  7 05:09 pdb01.xml
[oracle@12c01 ~]$ cat pdb01.xml 


  1
  PDB01
  3
  1
  203424000
 
    12.2.0.1.0
    12.2.0.0.0
    12.2.0.0.0
    0.0.0.0.24
    24
    8.0.0.0.0
 
  2550500229
...省略
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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2138598/,如需轉載,請註明出處,否則將追究法律責任。

相關文章