暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

19c ADG环境中主库PDB调整参数自动同步到备库

原创 Xiaofei Huangfu 2024-09-14
337

• 概念描述
• 测试验证
• 知识总结
• 参考文档

概念描述

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的参数存在哪里?
image.png
在Oracle 12c开启,引入了容器的概念将Oracle提供的对象和用户数据(包括元数据)分离到不同的容器中,可将其视为水平分区。存放数据字典的每个容器中有一个SYSTEM表空间。存储放PDB参数的有一个数据字典,
12c以后PDB参数保存在了PDB_SPFILE$ 中,每个PDB或容器中都有PDB_SPFILE$ 字典

最后修改时间:2024-11-11 11:36:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论