程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> [轉]Oracle 12c多租戶特性詳解:PDB 的創建、克隆與維護,12cpdb

[轉]Oracle 12c多租戶特性詳解:PDB 的創建、克隆與維護,12cpdb

編輯:Oracle教程

[轉]Oracle 12c多租戶特性詳解:PDB 的創建、克隆與維護,12cpdb


轉自:http://chuansong.me/n/443660447865

 

PDB 的創建和訪問

在使用 dbca 建庫時,創建數據庫之前,可以保存一下創建腳本,分析其具體執行過程。以自定義方式創建名稱為julia的數據庫為例,其主要腳本 julia.sql 中包含如下腳本調用:

 

 

在第一個腳本 CreateDB.sql 中的末尾部分包含了 Pluggable Database 的變化,這段命令啟用了插接式數據庫,並且初始化了種子 PDB,存儲目錄位於數據庫目錄下的 pdbseed 子目錄。

 

注意以下語句,種子數據庫的文件都來自於當前創建的 CDB 數據庫,這些文件被復制到 PDBSEED 目錄下,這也是創建 PDB 的第一種方式:

 

 

當然我們也可以通過模板方式創建 PDBSEED,此時文件將來自於軟件包中的 pdbseed.tar.gz 壓縮包。相應的,創建腳本也會有所不同,在模板方式下增加了一個 plugDatabase.sql 腳本,包含以下主要內容:

 

 

腳本中的 null 目錄最終會被替換為實際目錄,其執行過程就是解壓縮拷貝文件。

 

在使用自定義方式創建數據庫時,觀察腳本的執行過程,可以看到種子數據庫的 SYSTEM 和 SYSAUX 表空間初始大小完全一致:

 

 

以下查詢顯示當前的 PDB$SEED 種子數據庫以只讀方式打開:

 

 

接下來以這個種子數據庫為模版,創建第一個 PDB,首先設置一個創建目錄:

 

 

然後通過如下命令創建 PDB:

 

 

查詢一下,顯示當前新創建的數據庫狀態為 Mount:

 

 

使用如下語句打開 PDB:

 

 

當打開 PDB 之後,在日志中可以看到如下一行:

 

 

數據庫在 PDB 打開後,自動增加一個服務名,注冊到監聽器,然後就可以接受外部的連接請求了。

 

在測試環境中,配置了以下本地網絡服務名:

 

 

接下來就可以通過如下方式連接到 PDB 數據庫,可以查看歸屬於 PDB 的數據文件:

 

 

也可以查詢數據庫中的用戶,可以看到 EYGLE 用戶已經被建立:

 

 

接下來就可以通過 EYGLE 這個 PDB 數據庫用戶連接訪問這個數據庫,通過如下方式連接:

 

 

也可以通過 SYS 用戶連接 PDB,如下使用 EZCONNECT 方式連接到數據庫,查詢 v$datafile 視圖,可以看到當前 PDB 有三個數據文件,其中 UNDO 表空間共享的全局數據文件,其余兩個為 SYSTEM 和 SYSAUX 表空間文件:

 

 

查詢 v$tempfile 視圖,可以看到 PDB 的獨立臨時文件:

 

 

控制文件屬於共享范疇,在 PDB 級別查詢可見:

 

 

在 DBA 等高級權限的用戶下,可以通過 ALTER 命令進行會話級別的容器切換,訪問不同容器下的對象:

 

 

注意,如果 PDB 的服務名沒有自動添加,可以通過手工配置實現:

 

 

在完成測試之後,通過以下命令可以刪除一個 PDB:

 

 

由現有 PDB 創建新的 PDB

 

除了通過種子 PDB 創建新的空 PDB 之外,還可以通過一個現有的用戶PDB克隆創建新的 PDB 數據庫。以下詳細記錄一個 PDB 的創建與訪問過程。

 

創建 PDB 的源需要置於只讀模式:

 

 

隨後可以打開這個新創建的 PDB:

 

 

檢查數據庫的告警日志文件,可以看到,新創建的數據庫,其服務名已經被自動添加到數據庫的服務名配置中:

 

 

檢查數據庫監聽器,可以看到 PDB 都已經被監聽器監聽服務:

 

 

在12c 的建庫過程中,引入了 Perl 腳本的調用方式,以下是在創建過程中跟蹤到的腳本調用,在數據庫創建的日志中也可以觀察這種方式:

 

 

這個過程完成之後,會在告警日志文件中記錄如下信息:

 

 

在 tnsnames.ora 文件中,增加相應的配置,就可以通過服務名連接數據庫了,以下是兩個 PDB 的本地網絡服務名配置:

 

 

對於 PDB 的一些更改操作不能在 CDB 級別進行,CDB 級操作會提示不能在 PDB 之外執行,如以下更改 GLOBAL_NAME 的操作:

 

 

連接到 PDB 以 RESTRICTED 模式可以進行這些修改:

 

 

PDB 的使用與維護

 

在 PDB 創建完成之後,可以通過 SYSDBA 連接到 PDB,執行維護操作,這和常規的 Non-CDB 數據庫沒有差別,在 PDB 中,只要具備足夠的權限,可以創建表空間、數據文件、用戶和數據對象等。

 

以下通過 SYS 用戶連接到一個名為 ENMO 的 PDB 數據庫:

 

在 PDB 中執行用戶及表空間創建命令:

 

 

執行用戶管理,分配空間、更改默認表空間等:

 

 

通過指定用戶連接,可以創建數據對象,以下測試以 SCOTT 用戶腳本為例創建:

 

 

查看這些信息:

 

 

這些信息在 CDB 級別的數據庫中是不可見的:

 

 

跨數據庫的數據訪問,需要通過 DB Link 進行,如以下測試范例:

 

 

種子數據庫的隱藏和保護

 

在數據庫創建的最後過程,可以在告警日志中觀察到,數據庫最後調整了文件號的順序,如下日志顯示,原有2號文件和4號文件被刪除,並增加了7號和8號文件:

 

檢查底層 file$ 字典表,確實可以發現文件號2和文件號4 已經被刪除:

 

 

而通過 v$datafile 視圖可以查詢到來自控制文件的信息,2號和4號文件是 PDBSEED 中的兩個文件:

 

 

從數據字典中隱藏了文件號,就徹底屏蔽了對於種子數據庫的操作,該 PDB 就只能以只讀的方式打開。

 

在日志中可以看到,數據庫創建完成之前,pdb$seed 可以被打開和關閉,但是創建完成,刪除文件號之後,則被保護了起來:

 

 

在數據庫啟動過程中,如嘗試 Offline 的操作,就會收到2號文件不存在的提示(雖然在 v$datafile 中可以看到這個文件):

 

 

CDB 與 PDB 的起停管理

 

首先 PDB 的訪問依賴於 CDB,必須啟動 CDB 之後,才能夠對 PDB 進行操作。當 CDB 打開訪問時,PDB 處於 Mount 狀態,需要進一步的操作打開 PDB。下圖描述了在 PDB 的模式下,數據庫的啟動過程和步驟:

接下來通過測試來驗證一下這個過程。以下首先啟動 CDB 到 NOMOUNT 狀態,可以看到 v$pdbs 視圖是不能訪問任何 PDB 信息的:

 

 

當 MOUNT 數據庫之後,PDB 隨之被 MOUNT,以下查詢顯示當前數據庫中包含三個 PDB,一個種子庫,兩個用戶庫:

 

 

在 CDB 打開之前,PDB 不能夠執行 Open 操作:

 

 

當 CDB 打開之後,可以看到種子庫被以只讀方式打開,其他用戶 PDB 數據庫未自動打開:

 

 

可以通過獨立的 PDB 命令,執行數據庫 OPEN 操作,可以通過 ALL 關鍵字同時打開或關閉所有 PDB:

 

 

如果需要在數據庫啟動之後,自動打開全部的 PDB 數據庫,可以創建一個觸發器,用於在數據庫開啟後自動執行數據庫讀寫打開:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved