oracle 12c pluggable database,oracle12c新特點之可插拔數據庫(Pluggable Database,PDB)

1.    12c PDB新特點的優勢

1)    可以把多個PDB集成進一個平台。

2)    可以快速提供一個新的PDB或一個已有PDB的克隆。

3)    通過拔插技術,可以快速把存在的數據庫重新部署到一個新平台上。

4)    多個PDB數據庫補丁或升級一次完成。

5)    通過把單個PDB拔插到較高版本的不同CDB,可以補丁或升級一個PDB。

6)    從同一個CDB中眾多PDB中分離出某個PDB的內容。

7)    分離這些PDB應用管理員的責任。

2.    12c PDB新特點的功能

1)    在一個CDB中,你可以擁有很多PDB。

2)    PDB和12.1之前版本的普通數據庫是向后兼容的。

3)    PDB對應用是透明的——你不需要改變客戶端代碼或數據庫對象。

4)    RAC中每個實例作為一個整體打開CDB(因此CDB和其中的PDB數據庫版本都是相同的)。

5)    會話僅僅看到它自己連接的那個PDB。

6)    你可以從一個CDB拔出一個PDB,然后插入另一個CDB。

7)    你可以在同一個CDB或不同CDB間克隆PDB。

8)    資源管理器隨着PDB的功能得以擴展。

9)    通過SQL語句實現了實體PDB的操作(創建,拔出,插入,克隆,清除,設置打開模式)。

10)  當連接到所謂的“根”(root)時,CDB管理員來執行這些操作。

11)  所有的PDB能被一次備份,但可以分別單獨恢復。

3.    12c PDB的詳解

1)    每個PDB有自己的私有數據字典用於用戶創建的數據庫對象;另一方面,CDB作為一個整體也包含Oracle提供系統的數據字典,其中,每個數據字典定義自己的命名空間。換句話說,有全局數據字典(CDB級)和本地數據字典(PDB級)。

2)    有新的分開的數據字典架構,該架構允許一個PDB被快速從一個CDB拔出並插入一個不同的CDB。

3)    每個PDB只能看到Oracle提供系統的只讀定義。

4)    有全局數據庫參數,也有本地數據庫參數。PDB參數僅僅屬於特定的PDB,並且拔出后,PDB參數也將保持不變。

5)    數據庫用戶可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用戶一開始就在兩級DB中存在。如果你在CDB中創建了一個新用戶,那么你在PDB中也能看到這個用戶。在PDB中創建的用戶只能在該PDB中使用。

6)    臨時表空間可以是全局或本地的。

7)    Redo日志和Undo表空間都是全局的(CDB級)。

8)    Data Guard在CDB級作為一個整體發揮作用;RMAN調度的備份也作為一個整體在CDB級完成;任何時候,你可以只備份一個PDB。

9)    應用連接PDB時,不需做代碼修改;系統管理員可以連接CDB;連接串中的服務名確定目標PDB。

10)  PDB允許更加清晰的聲明定義一個應用;一個PDB對同一個CDB里的其他PDB一無所知;每個PDB是個密閉的容器。這保證了新層面DB的獨立和安全。

4.    連接到一個PDB

創建一個PDB時,一個服務也會被創建在該PDB內,並且,該服務被作為初始化容器。你可以通過下列語句顯示目前的容器:

selectSys_Context('Userenv', 'Con_Name') "current container" from dual;

在12.1 SQL*Plus提示符下,你能用SHOW con_name來顯式目前的容器。

在創建PDB時,也會啟動服務。雖然服務的元數據被記錄在PDB中,但名字和PDB名字是一樣的。會話將被一個不能改變目前容器的用戶創建。

客戶端應用代碼通常被設計成在代碼外面確定連接描述信息。例如:代碼也許使用TNS別名,允許在不改變代碼的情況下改變連接串。

當然,在一個PDB中可以有多個服務。每個將表示它被定義為PDB初始目前容器。可以用常規方法創建、維護、清除PDB中另外的服務,但一定不要清除PDB中默認的服務。建立初始容器是一個PDB的會話的唯一方法是確定一個服務。

下面的例子中,看如何用容易的語法連接到Orale12c中被叫做“cdb1”的CDB,並且連接到其中一個PDB:

sqlplusSys/Sys@localhost:1521/cdb1 AS SYSDBA

CONNECTScott/tiger@localhost:1521/My_PDB

5.    創建並打開一個新的Oracle12c可插拔數據庫(PDB)

現在,我們將要創建並打開一個名叫my_pdb新的可插拔數據庫(PDB)。每個CDB都有一個叫做 PDB$Seed 的標准的PDB模板。我們實際是通過克隆該模板來創建一個新PDB。看下面例子:

sqlplussys/pass@localhost:1521/cdb1 as sysdba

create pluggable database My_PDB

admin user App_Admin identified by pass

file_name_convert = ('/pdbseed/', '/my_pdb/');

“ file_name_convert”子句確定新文件名如何從模板庫派生出來,這點和我們知道的rman差不多。在PDB創建期間,Oracle僅拷貝system和sysaux表空間的兩個數據 文件,undo,redo等其余數據庫文件是CDB全局的文件,並且它們屬於特定的叫做CDB$Root的容器。

“admin user”子句是必須的,在擴展格式,給新用戶賦予了權限和角色,該用戶僅在my_pdb內可以創建新會話。

在創建完可插拔數據庫后,新的PDB處於MOUNTED模式。在新PDB中創建一個新會話前,必須先打開它。因此,我們可以用下面的命令打開它:

alter pluggabledatabase My_PDB open;

6.    檢查容器數據庫(CDB)和可插拔數據庫(PDB)文件

select con_id,tablespace_name, file_name

fromcdb_data_files

where file_Namelike '%/cdb1/pdbseed/%'

or file_Namelike '%/cdb1/my_pdb/%'

order by 1, 2;

CON_IDTablespace_Name File_Name

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

2 SYSAUX /home/oracle/oradata/cdb1/pdbseed/sysaux01.dbf

2 SYSTEM /home/oracle/oradata/cdb1/pdbseed/system01.dbf

3 SYSAUX /home/oracle/oradata/cdb1/My_PDB/sysaux01.dbf

3 SYSTEM /home/oracle/oradata/cdb1/My_PDB/system01.dbf

7.    Open all Oracle 12c Pluggable Databases (PDB)

RAC每個實例中的每個CDB中的PDB有它自己的打開模式(Open_Mode )和限制狀態(Restricted status)。打開模式的可能值為MOUNTED,READ ONLY,和 READ WRITE;當PDB打開時,限制狀態可能的值為YES和NO,否則為null;

啟動一個實例(這回打開這個CDB)並不會打開PDB。“alterpluggable database”語句被用來設置PDB的打開模式。在該SQL語句中,可以給一個特定PDB名或用關鍵字“all”,例如:

alter pluggabledatabase all open;

8.    關閉CDB中所有的Oracle12c可插拔數據庫

下列語句關閉CDB中所有的PDB:

alter pluggabledatabase all close;

9.    克隆同一個CDB中一個現有的Oracle12cPDB

下面,我們將克隆同一個CDB中的現有的PDB。為此,在開始克隆前,必須先關閉該PDB,然后以READ ONLY模式打開:

alterpluggable database My_PDB close;

alterpluggable database My_PDB open read only;

createpluggable database My_Clone

fromMy_PDB

file_name_convert= ('/my_pdb', '/my_clone');

alterpluggable database My_PDB close;

alterpluggable database My_PDB open;

alterpluggable database My_Clone open;

10.  從容器數據庫(CDB)中拔出可插拔數據庫(PDB)

下面,展示如何從cdb1中拔出my_pdb。“into”關鍵字后必須跟PDB描述的全路徑,被該操作以XML格式產生:

alterpluggable database My_PDB

unpluginto '/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml';

“my_pdb.xml“文件確定數據文件的名字和全路徑等信息。這些信息在插入操作時會用到。注意:PDB還是其從中拔出的CDB的一部分,只是現在狀態變為了拔出(UNPLUGGED)而已。

拔出操作實際上對數據文件做了一些改變,以便記錄PDB被正確成功的拔出。因為它還是CDB得一部分,你能給它做一個RMAN備份。這提供了一個歸檔拔出日志的方便方法。

一旦你備份了它,你就可以把它從字典庫里移走——但是,當然,為了今后的插入操作,你必須保留這些數據文件。

droppluggable database My_PDB keep datafiles;

11.  Oracle 12c可插拔數據庫——拔插和克隆操作

11.1.  把My_PDB插入cdb2

1)    連接到目標容器數據庫,這里是目錄/home/oracle/oradata/cdb2下的cdb2

sqlplus sys/pass@localhost:1521/cdb2 as sysdba

2)    然后,確認將要被插入的PDB和新的主容器數據庫是兼容的

exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml');

如果不兼容,該過程會報錯。

3)     現在,插入PDB。using關鍵字后必須跟上PDB描述的絕對路徑,即,先前拔出操作時產生的.XML文件。

create pluggable database My_PDB

using '/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml'

move

file_name_convert = ('/cdb1/', '/cdb2/');

alter pluggable database My_PDB open;

11.2.  從拔出的PDB克隆創建一個PDB

該例子建議保留一個被拔出的PDB的備份,這會有很多應用場景,例如:

1)    在一個開發部門,允許研發者和測試者快速、重復的提供一個開始;

2)    支持自學;

3)    提供一個交付新應用的方法;

為了演示,假設你已經拔出了MY_PDB1,並把它放在了合適的目錄下,並設置為只讀。

create pluggable database MY_PDB1 as clone

using

'/home/oracle/oradata/bk_pdbs/my_pdb1/my_pdb1.xml'

copy

file_name_convert =

('/bk_pdbs/my_pdb1/', '/cdb1/my_pdb1/');

alter pluggable database my_pdb1 open;

“as clone”SQL子句確保新的PDB得到一個正確的、全局的唯一標識。然后,你能看到你的GUIDs:

selectPDB_Name, GUID

fromDBA_PDBs

orderby Creation_scn;

注意:PBD被從CBD拔出后以及后來插入另一個CBD,DBA_PDBs.GUID就會一直伴隨着它。服務器代碼會強制CBD內PDB的唯一性,但並不強制CBD間的唯一性。

11.3.  把一個非CBD庫當做PDB插入一個已有的CBD庫

這里,我將展示給你如何把12.1前的數據庫轉變為一個PDB。你共有幾個方法做到這點:

1)    可傳輸表空間/數據泵;

2)    復制;

3)    把原來的非CBD庫升級到12c,並把它插入12c CDB;

因為頭兩個方法曾經都是標准方法,我們這里將只描述最后一個。

注意:不是一個升級步驟就能完成所有任務,它是一個兩階段操作:首先,把你現存的數據庫升級為12.1非CDB庫;接着,把你的非CDB庫插入現存的CDB中——僅僅插入PDB和接着完成一個插入后步驟。

Ø  第一步,先把12.1前的庫升級為12c版本;

Ø  第二步,連到非CDB庫,以便產生表示文件,正如拔出一個PDB部分所示:

shutdownimmediate

startupmount

alterdatabase open read only;

begin

DBMS_PDB.Describe(PDB_Descr_File=> ‘/home/oracle/oradata/noncdb/noncdb.xml’);

end;

/

shutdownimmediate

Ø  下一步是連接到接收CDB庫——cdb2,並用表示文件將非cdb庫的數據文件插入。

createpluggable database noncdb_pdb

asclone

using'/home/oracle/oradata/noncdb/noncdb.xml'

source_file_name_convert= none

copy

file_name_convert= ('/noncdb/', '/cdb2/noncdb_pdb/')

storageunlimited;

Ø  現在打開庫,最后完成插入,關閉,再打開,把限制狀態設置為YES:

alterpluggable database noncdb_pdb open;

alterpluggable database noncdb_pdb close;

alterpluggable database noncdb_pdb open restricted;

Ø  最后,運行一個Oracle提供的SQL*Plus腳本來移去現在本地字典中的數據,因為,在新版本中,定義Oracle系統的元數據僅僅在整個CDB中存儲一次。

altersession set container = ExNonCDB;

@?/rdbms/admin/noncdb_to_pdb.sql

Ø  作為最后一步,打開新被接收的先前的非CDB庫。

alterpluggable database noncdb_pdb open;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值