多租戶最佳實踐和已知問題 (文件 ID 2047555.1)

mosdoc發表於2016-12-03

適用於:

Oracle Database - Enterprise Edition - 版本 12.1.0.1 到 12.1.0.1 [發行版 12.1]
本文件所含資訊適用於所有平臺

用途

關於多租戶選項的最佳實踐以及一些常見問題。

詳細資訊

 1. 連線 Container 或者 Pluggable 例項時的 tnsnames

對於 pluggable 資料庫來說,應當配置 tnsnames.ora,比如在 tnsnames.ora 中新增一個 tns 條目:

PDB_OMF_1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = MFarag-OEL)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = pdb_omf_1)
    )
  )

 另外也可以採用如下的簡單連線語法:

 

SYS@mfarag-oel/PDB_OMF_1>CONN A/A@mfarag-oel/PDB_OMF_1
Connected.
A@mfarag-oel/PDB_OMF_1>conn xx/xx@mfarag-oel/XX
Connected.
XX@mfarag-oel/XX>

 

在 $ORACLE_HOME/sqlplus/admin 目錄下的 glogin.sql 指令碼里新增如下的條目:

 

set sqlprompt "_USER'@'_CONNECT_IDENTIFIER'>'"

 

2. 當 Container 是可插拔的情況下,總是採用 OMF(Oracle Managed Files)來管理 pluggable 資料庫:

SYS@CDB>create pluggable database pdbomf admin user a identified by a ;

 

 CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1 FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');

 

請注意如果您沒有使用 OMF,那麼需要設定 FILE_NAME_CONVERT(filename_pattern,replacement_filename_pattern),如果您沒有設定這些引數,那麼資料庫將首先採用 OMF 來生成檔名,如果您沒有采用 OMF,那麼資料庫會使用PDB_FILE_NAME_CONVERT 初始化引數來生成檔名,如果該引數也沒有設定,那麼會發生錯誤。


 

SYS@CDB>select CON_ID,DBID,GUID,NAME,OPEN_MODE
    from V_$CONTAINERS ;

    CON_ID       DBID GUID
---------- ---------- --------------------------------
NAME                           OPEN_MODE
------------------------------ ----------
         1 1949193435 DD7C48AA5A4504A2E04325AAE80A403C
CDB$ROOT                       READ WRITE

         2 4075234582 EC25D0EC10347332E043CC8DAB0A7AE1
PDB$SEED                       READ ONLY

         3 3255612964 EC25E0FB670B76A8E043CC8DAB0A08D8
PDB                            READ WRITE


    CON_ID       DBID GUID
---------- ---------- --------------------------------
NAME                           OPEN_MODE
------------------------------ ----------
         4 3244820336 EC276A999A790163E043CC8DAB0AD357
PDBOMF                         MOUNTED

.
.
SYS@CDB>alter session set container=pdbomf ;

Session altered.

SYS@CDB>alter pluggable database open ;

Pluggable database altered.

 

 

3. 在需要修改 Pluggable 資料庫的名字時,需要將其啟動到 Restricted 模式

 

SYS@CDB>conn sys@pdb_omf_1 as sysdba
Enter password:                      
Connected.                           
       
SYS@pdb_omf_1>alter pluggable database close ;


SYS@pdb_omf_1>alter pluggable database open restricted;


SYS@pdb_omf_1>alter pluggable database pdbomf rename  global_name to pdb_omf_1 ;

 

 4. 插拔資料庫:

SYS@CDB1>alter pluggable database y close immediate ;

SYS@CDB1>alter pluggable database y unplug into '/home/oracle/XDESC.xml' ;

SYS@CDB1>drop pluggable database y ;

SYS@CDB1>create pluggable database y using '/home/oracle/XDESC.xml' nocopy ;

  

 5. 一步啟動 Pluggable 資料庫:

 

SYS@CDB>select CON_ID,GUID,NAME,OPEN_MODE
    from V$containers;                  

    CON_ID GUID                             NAME
---------- -------------------------------- ------------------------------
OPEN_MODE                                                                 
----------                                                                
         1 DD7C48AA5A4504A2E04325AAE80A403C CDB$ROOT                      
READ WRITE                                                                

         2 EC25D0EC10347332E043CC8DAB0A7AE1 PDB$SEED
READ ONLY                                           

         3 EC2B4C003E221F09E0438636AF0AA57B X
MOUNTED                                      


    CON_ID GUID                             NAME
---------- -------------------------------- ------------------------------
OPEN_MODE                                                                 
----------                                                                
         4 EC276A999A790163E043CC8DAB0AD357 PDB_OMF_1                     
MOUNTED                                                                   


SYS@CDB>alter pluggable database all open ;


SYS@CDB>select CON_ID,GUID,NAME,OPEN_MODE
    from V$containers               
                         

    CON_ID GUID                             NAME
---------- -------------------------------- ------------------------------
OPEN_MODE
----------
         1 DD7C48AA5A4504A2E04325AAE80A403C CDB$ROOT
READ WRITE

         2 EC25D0EC10347332E043CC8DAB0A7AE1 PDB$SEED
READ ONLY

         3 EC2B4C003E221F09E0438636AF0AA57B X
READ WRITE


    CON_ID GUID                             NAME
---------- -------------------------------- ------------------------------
OPEN_MODE
----------
         4 EC276A999A790163E043CC8DAB0AD357 PDB_OMF_1
READ WRITE

 

 注意: 啟動 CDB 時,預設會把所有的 PDB 置為 mount 狀態。

6. 在執行一些指令碼的時候,採用 catcon 這個 perl 指令碼來選擇特定資料庫或者選擇全部 pluggable 和 container 資料庫:

例如: 執行 awrinfo 指令碼來獲取所有資料庫中 sysaux 下 AWR 的使用情況

$cd $ORACLE_HOME/rdbms/admin

$ perl catcon.pl -u SYS -U SYS -d $ORACLE_HOME/rdbms/admin -l '/home/oracle'  -b catblock_output awrinfo.sql

--確認以上指令碼是在所有的資料庫上執行的:

$cd /home/oracle
$ grep -i "CURRENT CONTAINER" *
catblock_output0.log:==== Current Container = CDB$ROOT ====
catblock_output0.log:==== Current Container = PDB$SEED ====
catblock_output1.log:==== Current Container = XX ====
catblock_output2.log:==== Current Container = PDB_OMF_1 ====

  

注意:採用 -c 選項來指定該指令碼在特定的資料庫上執行。

7. 如何使用 non-seed 模板來建立 CDB + Pluggable 資料庫:

 

$ dbca -silent -createDatabase -templateName Custom_DB_.dbt -gdbName FOFO -sid FOFO -createAsContainerDatabase true -numberOfPDBs 1 -pdbName pdb_silent  -sysPassword <password> -systemPassword <password>   -listeners listener
Enter PDBADMIN

 注意:以上命令採用 non-seed Custome_DB_ template 為模板靜默建立名稱為 FOFO 的 CDB 和一個名稱為 pdb_silent 的 PDB。


8. 將"_datafile_write_errors_crash_instance"引數值修改為 FALSE

 

SQL>alter system set "_datafile_write_errors_crash_instance"=FALSE

 

**這樣做的好處是可以在 PDB 由於某些原因丟失資料檔案後,允許 CDB 繼續執行。

注意: 只對 PDB 的非系統資料檔案有效。

 

9. 如何檢查一個引數是否已經在 PDB 中被修改過?

 

SYS@CDB>column PDB_NAME format a20
SYS@CDB>column NAME format a20
SYS@CDB>column VALUE$ format a20
SYS@CDB>select p.PDB_NAME,s.name,s.value$
        from cdb_pdbs p , pdb_spfile$ s
        where p.CON_UID=s.PDB_UID


PDB_NAME               NAME                 VALUE$
-------------------- -------------------- --------------------
XX                    cursor_sharing       'SIMILAR'
YY_NEW                cursor_sharing       'SIMILAR'

 

**注意: 不能透過 alertlog 來檢查 PDB 初始化引數的非預設值。

 

 

參考

NOTE:1575186.1 - Syntax Error Encountered During The Creation Of A Pluggable Database
NOTE:1511619.1 - Oracle Multitenant Option - 12c : Frequently Asked Questions
NOTE:1516202.1 - How to Monitor Process Memory Usage on Pluggable Databases

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

相關文章