多租戶:防止意外建立可插拔資料庫(PDB)- Lone-PDB
Oracle 12c之前的資料庫都是非CDB,從Oracle 12.1.0.2開始,不推薦使用非CDB體系結構,而是使用多租戶架構。在多租戶架構中,使用單個可插拔資料庫(PDB)(也稱為單租戶或lone-PDB),可以不必支付多租戶選項相關費用。 在標準版中,你不能無意中建立其他PDB;但在企業版中,你可能需要購買一些額外的許可證。 本文給出了一個例子,說明如何避免在Lone-PDB例項中建立多個使用者定義的PDB。
1.意外建立PDB
2.MAX_PDBS 引數(12.2 以上)
3.防止意外建立PDB
4.事故後清理
意外建立PDB
在檢查當前例項時,我們可以看到已經存在使用者定義的PDB。
SELECT con_id, name FROM v$pdbs;
CON_ID NAME
---------- --------------------------
2 PDB$SEED
3 PDB1
SQL>
企業版中沒有任何內容阻止您建立額外使用者定義的可插拔資料庫,即使您沒有多租戶選項。
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1 FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');
ALTER PLUGGABLE DATABASE pdb2 OPEN;
SELECT con_id, name FROM v$pdbs;
CON_ID NAME
---------- -------------------------
2 PDB$SEED
3 PDB1
4 PDB2
SQL>
完成此操作後,資料庫將在DBA_FEATURE_USAGE_STATISTICS檢視中報告“detected usage”。 這需要一段時間才能看到,我們將強制一個示例來檢查它。
-- Force usage sample.
EXEC DBMS_FEATURE_USAGE_INTERNAL.exec_db_usage_sampling(SYSDATE);
COLUMN name FORMAT A40
COLUMN detected_usages FORMAT 999999999999
SELECT name,
detected_usages,
aux_count,
last_usage_date
FROM dba_feature_usage_statistics
WHERE name = 'Oracle Pluggable Databases'
ORDER BY name;
NAME DETECTED_USAGES AUX_COUNT LAST_USAG
------------------------------------- --------------- ---------- ---------
Oracle Pluggable Databases 16 2 04-OCT-16
SQL>
我在一個測試例項上這樣做,所以它已經檢測到功能的使用幾次。 這裡要注意的重要一點是AUX_COUNT列,它指示當前執行的使用者定義的PDB的數量。 使用多租戶架構會導致檢測到的使用情況,而不考慮PDB的數量,因此單獨這一點並不表示是否需要購買多租戶選項。 如果此功能的AUX_COUNT列大於1,您需要購買選項!
讓我們刪除剛剛建立的PDB。
ALTER PLUGGABLE DATABASE pdb2 CLOSE;
DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;
現在功能使用會發生什麼?
-- Force usage sample.
EXEC DBMS_FEATURE_USAGE_INTERNAL.exec_db_usage_sampling(SYSDATE);
COLUMN name FORMAT A40
COLUMN detected_usages FORMAT 999999999999
SELECT name,
detected_usages,
aux_count,
last_usage_date
FROM dba_feature_usage_statistics
WHERE name = 'Oracle Pluggable Databases'
ORDER BY name;
NAME DETECTED_USAGES AUX_COUNT LAST_USAG
------------------------------------- --------------- ---------- ---------
Oracle Pluggable Databases 17 1 04-OCT-16
SQL>
請注意,AUX_COUNT列現在的值為“1”。
MAX_PDBS 引數 (12.2 以上)
Oracle 12c R2包括一個新初始化引數MAX_PDBS,它允許您設定使用者定義的PDB數量的上限。如果您使用的是12c R2以後,請使用此引數,而不是後面描述的觸發器方法。
SQL> ALTER SYSTEM SET max_pdbs=1;
System altered.
SQL> CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1;
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1
*
ERROR at line 1:
ORA-65010: maximum number of pluggable databases created
SQL>
防止意外建立PDB
在12c R2之前,我們可以使用系統觸發器防止意外建立PDB。 對資料庫上的任何“CREATE”DDL觸發以下觸發器,其中ORA_DICT_OBJ_TYPE系統定義的事件屬性設定為“PLUGGABLE DATABASE”。 它檢查並檢視已有多少使用者定義的PDB。 如果使用者定義的PDB的數量超過允許的最大值(1),那麼我們引發一個錯誤。
CONN / AS SYSDBA
CREATE OR REPLACE TRIGGER max_1_pdb_trg
BEFORE CREATE ON DATABASE
WHEN (ora_dict_obj_type = 'PLUGGABLE DATABASE')
DECLARE
l_max_pdbs PLS_INTEGER := 1;
l_count PLS_INTEGER;
BEGIN
SELECT COUNT(*)
INTO l_count
FROM v$pdbs
WHERE con_id > 2;
IF l_count >= l_max_pdbs THEN
RAISE_APPLICATION_ERROR(-20001, 'More than 1 PDB requires the Multitenant option.' );
END IF;
END;
/
在觸發器就位後,我們嘗試建立另一個可插拔資料庫。
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: More than 1 PDB requires the Multitenant option.
ORA-06512: at line 12
SQL>
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: #454545} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545; min-height: 14.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} span.s1 {font: 12.0px 'Helvetica Neue'} span.s2 {font: 12.0px '.PingFang SC'}
如預期的,阻止建立第二使用者定義的PDB。
事幫後的清理
你需要做的是刪除額外的PDB。 在這一點上,我不知道是否有其他機制來跟蹤在例項中建立的PDB的最大數量,所以我不知道在例項中是否有遺留的錯誤記錄。
有知道更多的內容可以留言給我。:)
如果你在容器資料庫中意外建立了多個使用者定義的PDB,並且你對潛在的許可違規情有獨鍾,您可能需要執行以下操作。
1.建立一個沒有PDB的新CDB例項。
2.使用前面提到的觸發器保護新的CDB例項。
3.從原始CDB拔出感興趣的PDB。
4.將PDB插入新的乾淨CDB。
5.丟棄原始CDB例項。
由於新的CDB從未有多於一個PDB,因此該例項不應該秘密跟蹤任何違反許可證的行為。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-2130191/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kettl連線oracle12c 可插拔資料庫pdbOracle資料庫
- Part III PDB建立概述-Oracle多租戶管理員指南Oracle
- 1.3.2.2.1. 插拔方式建立PDB
- 【BUILD_ORACLE】在Oracle cloud資料庫“插拔”PDB的方法UIOracleCloud資料庫
- 技術解讀資料庫如何實現“多租戶”?資料庫
- Oracle 12c系列(一)|多租戶容器資料庫Oracle資料庫
- 如何使用Spring Boot和Flyway建立不同資料庫的多租戶應用? - reflectoring.ioSpring Boot資料庫
- MaxCompute多租戶資料安全體系
- 1.2.2. 多租戶對於資料庫整合的好處資料庫
- 資料庫租戶能力大調研資料庫
- 多租戶
- Part II 建立和配置多租戶環境
- 12C多租戶關於CDB、PDB的常用SQL語句SQL
- 探索 Python/Django 支援分散式多租戶資料庫,如 Postgres+CitusPythonDjango分散式資料庫
- 2.10.1 在non-CDB(非多租戶)環境中克隆資料庫資料庫
- Oracle 20C 多租戶_1.2 資料庫與例項介紹Oracle資料庫
- PDB插拔操作手冊
- 大資料體系下的多租戶管理方案大資料
- 【kingsql分享】Oracle 18c可插拔資料庫艦隊新玩法SQLOracle資料庫
- 多租戶:在Oracle12.2中 從Non-CDB遷移到PDB,從PDB遷移另一個CDB中Oracle
- 多租戶解析與Demo
- Django-Multitenant,分散式多租戶資料庫專案實戰(Python/Django+Postgres+Citus)DjangoNaN分散式資料庫Python
- Part II 建立和配置CDB-Oracle多租戶管理員指南Oracle
- Part II 配置和管理多租戶環境概述-Oracle多租戶管理員指南Oracle
- 如何理解多租戶架構?架構
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- Oracle 12c 多租戶專題|CDB後設資料內幕Oracle
- 圖解:什麼是多租戶?圖解
- 3.3.2 多租戶環境的工具
- 多租戶商城系統解說
- Part I CDB中表空間和資料庫檔案的概述05-Oracle多租戶管理員指南資料庫Oracle
- 工作日誌,多租戶模式下的資料備份和遷移模式
- Oracle 建立PDB-Plugging In an Unplugged PDBOracle
- 建立資料庫資料庫
- Oracle多租戶架構優勢分析Oracle架構
- 多租戶軟體開發架構架構
- Part I Multitenant Architecture (多租戶結構)NaN
- 實現saas多租戶方案比較
- 3.3.1 多租戶環境的任務