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

来源:http://www.cnblogs.com/summerlong/archive/2016/08/25/5807704.html
-Advertisement-
Play Games

轉自:http://chuansong.me/n/443660447865 PDB 的創建和訪問 在使用 dbca 建庫時,創建資料庫之前,可以保存一下創建腳本,分析其具體執行過程。以自定義方式創建名稱為julia的資料庫為例,其主要腳本 julia.sql 中包含如下腳本調用: 在第一個腳本 Cr ...


轉自: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 資料庫,可以創建一個觸發器,用於在資料庫開啟後自動執行資料庫讀寫打開:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.在java代碼中 (SplashActivity繼承AppCompatActivity時無效) 2.在manifest.xml中改Theme 3.先在style.xml中自定義style 再在manifest.xml中引用 ...
  • Android Weekly issue #219, 筆記. ...
  • 一:首先查看一下關於UIButton的定義 UIButton是繼承於UIControl,並且也遵循NSCoding的協議; 知識點1:關於UIControlState的Enum值 知識點2:contentHorizontalAlignment;可以設置UIButton文字的對齊方式,contentH ...
  • 改變顏色 [_hotProductsTableView setSeparatorColor : kSeparatorColor]; -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if ([_hotProductsTable ...
  • 最近在Android手機開發中使用了ORM框架Sugar1.4,節省了大量代碼,同時也遇到不少麻煩,記錄如下: 1. 使用group by將查詢結果轉換為POJO對象 在Sugar1.4中,可以使用如下代碼將查詢結果轉換為POJO對象。 該方法會調用SugarRecord類的inflate方法,如下 ...
  • 表大小 慢的sql select a.city, a.agent_id, a.username, a.real_name, phone, zgy_name, login_count, user_count, count(distinct b.invest_id) user_invested, sum ...
  • 項目裡面需要對mongodb的性能進行測試,看了下網上很多做法都是使用YCSB進行測試,因此開始學習使用YCSB。 參考資料: 1 安裝 基於參考文檔(https://github.com/brianfrankcooper/YCSB/tree/master/mongodb )安裝java,mvn,y ...
  • 久等了,近期公司比較忙,學習的時間都沒有啊,到今日才有時間呢!!!好了,下麵就跟著筆者開始配置Hadoop集群吧。 hosts文件和SSH免密碼登錄配置好了之後,現在進入Hadoop安裝目錄,修改一些配置文件,修改配置還是相對簡單的,一下是需要修改的文件內容(當然這裡只是學習時的配置,更加深入的配置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...