19c ADG环境中主库PDB调整参数自动同步到备库
• 概念描述
• 测试验证
• 知识总结
• 参考文档
概念描述
19c 主库PDB中设置PDB级参数会自动同步到备库中。pdb级的参数存在pdb_spfile$中,通过redo同步会将pdb_spfile$中的信息同步到备库。
本文以SGA_TARGET为例进行验证。
Oracle中SGA_TARGET 指定所有SGA 组件的总大小,19c中可以在CDB和PDB级设置该参数。
测试验证
1、检查SGA_TARGET参数
在根容器cdb$root中检查
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
当前是在根容器中。
检查cdb环境中sga_target参数
SQL>select p.name,s.NAME,s.ISSES_MODIFIABLE,s.ISSYS_MODIFIABLE,s.ISPDB_MODIFIABLE,s.CON_ID from
v$system_parameter s,v$pdbs p
where s.name='sga_target'
and s.con_id=p.con_id;
NAME NAME ISSES ISSYS_MOD ISPDB CON_ID
-------------------- -------------------- ----- --------- ----- ----------
PDB$SEED sga_target FALSE IMMEDIATE TRUE 2
HRPDB sga_target FALSE IMMEDIATE TRUE 3
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------
sga_target big integer 2352M
该环境cdb中sga_target总大小为2352m,sga_target参数支持在PDB中设置。
2、在主库pdb中设置sga_target
切换到hrpdb中
SQL> alter session set container=hrpdb;
Session altered.
修改前pdb中sga_target是默认值为0
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 0
SQL>
SQL> alter system set sga_target=1G;
System altered.
SQL>
3、主库中查询sga_target
SQL> set linesize 120
column pdb_name format a10
column name format a30
column value$ format a30
select ps.db_uniq_name,
ps.pdb_uid,
p.name as pdb_name,
ps.name,
ps.value$
from pdb_spfile$ ps
join v$pdbs p on ps.pdb_uid = p.con_uid
order by 1, 2, 3;
DB_UNIQ_NAME PDB_UID PDB_NAME NAME VALUE$
------------------------------ ---------- ---------- ------------------------------ ------------------------------
* 3293159541 HRPDB sga_target 1073741824
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 1G
SQL>
在主库PDB中sga_target已经是1G。
4、备库中查询sga_target
SQL> set linesize 120
column pdb_name format a10
column name format a30
column value$ format a30
select ps.db_uniq_name,
ps.pdb_uid,
p.name as pdb_name,
ps.name,
ps.value$
from pdb_spfile$ ps
join v$pdbs p on ps.pdb_uid = p.con_uid
order by 1, 2, 3;
DB_UNIQ_NAME PDB_UID PDB_NAME NAME VALUE$
------------------------------ ---------- ---------- ------------------------------ ------------------------------
* 3293159541 HRPDB sga_target 1073741824
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 1G
SQL>
在备库PDB中sga_target已经是1G,主库pdb级调整的sga_target已成功同步到备库。
另外,在生产环境中,有些主备环境的配置不一样,比如备库的CPU和内存等资源比主库低,这样的场景能否使用主库pdb修改sga_target同步到备库呢?
答案是可以。
1、可以通过隐藏参数让主库PDB级修改的sga_target参数同步到备库不应用到PDB中
SQL> alter system set “_parameter_spfile_sync”=false;
2、主库调整的sga_target超过了备库的内存大小,备库pdb会自动使用sga_max_size的值
主库PDB中
SQL> alter system set sga_target=2g;
备库PDB中
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 1G
sga_min_size big integer 0
sga_target big integer 1G
unified_audit_sga_queue_size integer 1048576
SQL>
12c以后PDB的参数存在哪里?
SQL> select owner,table_name,tablespace_name,con_id from cdb_tables where table_name='PDB_SPFILE$'; OWNER TABLE_NAME TABLESPACE_NAME CON_ID -------------------- --------------- ------------------------------ ---------- SYS PDB_SPFILE$ SYSTEM 1 SYS PDB_SPFILE$ SYSTEM 3
知识总结
12c以后PDB的参数存在哪里?
在Oracle 12c开启,引入了容器的概念将Oracle提供的对象和用户数据(包括元数据)分离到不同的容器中,可将其视为水平分区。存放数据字典的每个容器中有一个SYSTEM表空间。存储放PDB参数的有一个数据字典,
12c以后PDB参数保存在了PDB_SPFILE$ 中,每个PDB或容器中都有PDB_SPFILE$ 字典。