Oracle12c中的多宿主選項允許一個容器數據庫(CDB)容納多個獨立的可插拔數據庫(PDB)。本文將展示如何配置實例參數和修改容器數據庫(CDB)及可插拔數據庫(PDB)。
1. 配置CDB中的實例參數(ALTER SYSTEM)
配置CDB實例參數和配置非CDB實例參數沒什么不一樣。ALTER SYSTEM命令用來設置初始化參數,而有些數據庫配置修改需要用ALTER DATABASE命令。
作為一個特權用戶登錄且連接到根容器時,任何ALTER SYSTEM命令默認都將作用於該根容器。這意味着如下兩個命令在這種情況下是一樣的。
ALTER SYSTEM SET parameter_name=value;
ALTER SYSTEM SET parameter_name=value CONTAINER=CURRENT;
除了默認操作,在根容器中改變初始化參數能用如下語法來作用到所有容器。
ALTER SYSTEM SET parameter_name=value CONTAINER=ALL;
通過使用CONTAINER=ALL,指示PDBs繼承根容器的確定參數。除非通過本地參數來覆蓋同樣的參數設置,隨后根容器該確定參數的任何修改都會被PDBs繼承。
通過在PDBs中發布本地ALTER SYSTEM命令,可以覆蓋一些參數設置。
2. 在PDB中配置實例參數(ALTER SYSTEM)
在前面,我們提到了可以在根容器中使用帶CONTAINER=ALL子句的ALTER SYSTEM命令來設置該根容器中所有PDBs的實例參數。即使當這些參數設置被繼承時,也能通過PDB中的本地ALTER SYSTEM命令來覆蓋這些設置。僅有一部分初始化參數能在PDB中修改,這些參數能通過如下查詢獲取。
COLUMN name FORMAT A35
COLUMN value FORMAT A35
SELECT name, value
FROM v$system_parameter
WHERE ispdb_modifiable = 'TRUE'
ORDER BY name;
為了修改本地PDB設置,需要確信已連接到了PDB的特權用戶,或通過通用用戶連接到該PDB。如前所述,如果沒用CONTAINER子句,則修改當前容器的設置。因此,下面的ALTER SYSTEM 命令作用等價。
CONN / AS SYSDBA
ALTER SESSION SET CONTAINER = pdb1;
ALTER SYSTEM SET parameter_name=value;
ALTER SYSTEM SET parameter_name=value CONTAINER=CURRENT;
3. 修改CDB(ALTER DATABASE)
從CDB的角度,ALTER DATABASE命令和非CDB數據庫類似。你只需知道正在做的修改的作用范圍。有些應用於CDB的ALTER DATABASE命令將會影響CDB中的所有PDBs。而其他則只作用於CDB自己。
4. 修改PDB(ALTER PLUGGABLE DATABASE)
通過連接到相關容器和ALTER PLUGGABLE DATABASE命令,可以修改PBD。但為了向后兼容,ALTER DATABASE命令能進行大部分修改。毫無疑問,這些修改只是CDB或非CDB的一部分。
記住,為了修改PDB,你必須通過指向PDB的服務名直接連接到特權用戶,或先連接到根容器,然后,切換到PDB容器。下面展示一些可用於PDB的修改。
CONN / AS SYSDBA
ALTER SESSION SET CONTAINER = pdb1;
-- PDB的默認版本
ALTER PLUGGABLE DATABASE DEFAULT EDITION = ora$base;
-- PDB的默認表空間類型
ALTER PLUGGABLE DATABASE SET DEFAULT BIGFILE TABLESPACE;
ALTER PLUGGABLE DATABASE SET DEFAULT SMALLFILE TABLESPACE;
-- PDB的默認表空間
ALTER PLUGGABLE DATABASE DEFAULT TABLESPACE users;
ALTER PLUGGABLE DATABASE DEFAULT TEMPORARY TABLESPACE temp;
-- 改變全局名。這也會改變容器名和注冊到監聽的默認服務名
ALTER PLUGGABLE DATABASE OPEN RESTRICTED FORCE;
ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO pdb1a.localdomain;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE OPEN;
-- PDB的時區
ALTER PLUGGABLE DATABASE SET TIME_ZONE='GMT';
-- 使PDB數據文件離線/在線及做存儲修改
ALTER PLUGGABLE DATABASE DATAFILE '/u01/app/oracle/oradata/cdb1/pdb1/pdb1_users01.dbf' OFFLINE;
ALTER PLUGGABLE DATABASE DATAFILE '/u01/app/oracle/oradata/cdb1/pdb1/pdb1_users01.dbf' ONLINE;
ALTER PLUGGABLE DATABASE DATAFILE '/u01/app/oracle/oradata/cdb1/pdb1/pdb1_users01.dbf'
RESIZE 1G AUTOEXTEND ON NEXT 1M;
-- PDB的補充日志
ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER PLUGGABLE DATABASE DROP SUPPLEMENTAL LOG DATA;
此外,有機制可以控制PDB最大大小和可用共享臨時空間的大小。
-- 限制PDB的總存儲空間(數據文件和本地臨時文件).
ALTER PLUGGABLE DATABASE STORAGE (MAXSIZE 5G);
-- 限制可用共享臨時文件的大小
ALTER PLUGGABLE DATABASE STORAGE (MAX_SHARED_TEMP_SIZE 2G);
--組合以上兩者
ALTER PLUGGABLE DATABASE STORAGE (MAXSIZE 5G MAX_SHARED_TEMP_SIZE 2G);
--移除限制
ALTER PLUGGABLE DATABASE STORAGE UNLIMITED;