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

ORACLE 19C pdb 修改参数

原创 ZXM 2022-03-03
2602

实验环境

数据库角色操作系统数据库版本主机名数据库唯一名
主库Oracle linux 7.8oracle 19.3node2rac单节点ora19cdg
备库Oracle linux 7.8oracle 19.3node1rac单节点ora19c

创建实验用例

查看主库 cdb db_create_file_dest 参数

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA

查看备库 cdb db_create_file_dest 参数

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA

创建pdb,并修改db_create_file_dest(pdb默认继承cdb的参数,除非在pdb级别进行修改)

SQL> create pluggable database zky admin user admin identified by admin;

Pluggable database created.

SQL> alter pluggable database zky open instances=all;

Pluggable database altered.

SQL> alter session set container=zky;

Session altered.

SQL> alter system set db_create_file_dest='+FRA' sid='*';

System altered.

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA

pdb中的参数

pdb没有init.ora file 或者是 spfile,只有cdb有,pdb 的参数存放在数据字典里面,在表pdb_spfile$里。

但是在pdb里面的pdb_spfile$是空的,只有当pdb拔出时才会将参数复制到pdb的pdb_spfile$里面。

当pdb被删除时pdb_spfile$,存放在cdb中的pdb_spfile$里关于pdb 的参数信息将会删除

SQL> show con_name

CON_NAME
------------------------------
TEST
SQL> select * from pdb_spfile$;

no rows selected

SQL> alter session set container=cdb$root;

Session altered.

SQL> select a.name,a.dbid,b.pdb_uid,b.name,b.value$ from v$pdbs a ,pdb_spfile$ b where a.dbid = b.pdb_uid and a.name = 'TEST';

NAME DBID PDB_UID NAME VALUE$
-------------------- ---------- ---------- -------------------- --------------------
TEST 3516706060 3516706060 db_securefile 'PREFERRED'
TEST 3516706060 3516706060 db_create_file_dest '+TEST'

当然并不是所有的参数都可以在pdb进行修改,要确定可以为 PDB 修改哪些参数,V$SYSTEM_PARAMETER 或 V$PARAMETER 视图中的 ISPDB_MODIFIABLE 列必须为 TRUE。

select name, value from v$parameter where ISPDB_MODIFIABLE = 'TRUE';

想看查看pdb的当前值

首先连接到pdb中
使用 show parameter
可以查询 V$SYSTEM_PARAMETER 或 V$PARAMETER
V$SPPARAMETER视图也可以用来显示PDB的SPFILE参数。

当pdb是mount状态时,在pdb中指定的参数不会生效,将继承cdb的参数

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA
SQL> shutdown immediate
Pluggable Database closed.
SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA
SQL> show con_name

CON_NAME
------------------------------
ZKY
SQL> alter session set container=cdb$root;

Session altered.

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA
SQL> show con_Name

CON_NAME
------------------------------
CDB$ROOT

RAC中修改pdb的参数

如果您想为RAC实例设置相同参数的不同值,您需要添加SID子句,就像您在正常的非多租户DB中所做的那样,惟一的区别是所提供的SID是多租户DB的SID

ALTER SESSION SET CONTAINER = PDBP1;
alter system set open_cursors=150 comment='setting open_cursors to RAC instance 1 from PDBP1' scope=spfile sid='CBD_PRD1';
alter system set open_cursors=250 comment='setting open_cursors to RAC instance 2 from PDBP1' scope=spfile sid='CBD_PRD2';

standby database 修改参数

由于pdb的参数时存在数据字典里的,所以不能直接修改备库中的pdb参数,因为备库是以只读的状态下打开的。

因此我们可以在主库修改,通过备库的日志应用来完成对备库的参数修改。

主库和备库同时进行修改(MRP进程正常运行)

在主库
SQL> alter session set container=zky;

Session altered.

SQL> alter system set db_create_file_dest='+FRA' sid='*';

System altered.

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA
备库
SQL> alter session set container=zky;

Session altered.

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA
此时发现参数并没有改变,需要重启一下pdb
SQL> alter session set container=zky;

Session altered.

SQL> shutdown immediate
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA
通过生成pdb的pfile文件来查看
主库
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node2 ~]$ cat zky.ora
*.db_create_file_dest='+FRA'
*.db_securefile='PREFERRED'
[oracle@node2 ~]$
备库
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node1 ~]$ cat zky.ora
*.db_create_file_dest='+FRA'
*.db_securefile='PREFERRED'
[oracle@node1 ~]$

只备库修改

从12.1.0.2开始,有一个语法增强,可以使用DB_UNIQUE_NAME子句执行ALTER SYSTEM SET语句。

这个子句提供了一种在主数据库的PDB中使用SCOPE=SPFILE修改系统参数的方法,但是指定了备用数据库的db_unique_name,在备用数据库中,参数值应该真正生效。这种方法确保DML在主服务器上执行,目的是在备用服务器上生效。

主库
SQL> alter session set container=zky;
Session altered.
SQL> alter system set db_create_file_dest='+TEST' sid='*' db_unique_name='ora19c' scope=spfile;
System altered.
备库
SQL> alter session set container=zky;
Session altered.
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA
SQL> shutdown immediate
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +TEST

通过生成pdb的pfile文件来查看
主库
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node2 ~]$ cat zky.ora
*.db_securefile='PREFERRED'
[oracle@node2 ~]$
备库
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node1 ~]$ cat zky.ora
*.db_securefile='PREFERRED'
*.db_create_file_dest='+TEST'
[oracle@node1 ~]$
可以发现,只有备库的spfile文件里有记录

在内存中修改pdb参数

由于是在内存中修改,不存在修改数据字典的行为,所以可以直接在备库进行修改
alter system set db_create_file_dest='+FRA' sid='*' scope=memory;


取消 PDB 管理参数

alter session set container=zky;
alter system reset db_create_file_dest sid='*';
当执行reset命令时,主库和备库的pdb参数将都会移除,即使在reset时指定了db_unique_name也不起作用
alter system reset db_create_file_dest sid='*' db_unique_name='ora19c';
主库
SQL> alter system set db_create_file_dest='+FRA' sid='*';
System altered.
SQL> show con_name
CON_NAME
------------------------------
ZKY
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA
SQL> !
[oracle@node2 ~]$ exit
exit
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node2 ~]$ cat zky.ora
*.db_create_file_dest='+FRA'
*.db_securefile='PREFERRED'
[oracle@node2 ~]$ exit
exit
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string ora19cdg
SQL> alter system reset db_create_file_dest sid='*' db_unique_name='ora19c' scope=spfile;
System altered.
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node2 ~]$ cat zky.ora
*.db_securefile='PREFERRED'
备库
SQL> alter session set container=zky;
Session altered.
SQL> shutdown immediate
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +FRA
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node1 ~]$ cat zky.ora
*.db_create_file_dest='+FRA'
*.db_securefile='PREFERRED'
[oracle@node1 ~]$ exit
exit
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node1 ~]$ cat zky.ora
*.db_securefile='PREFERRED'

有以下几点需要注意:

1.reset命令执行以后虽然参数被移除了,但是pdb_spfile$基表里的记录不会移除。oracle认为不是一个bug,oracle认为Pdb_spfile $是一个内部字典表,不应该用来查询初始化参数。为了详细说明技术细节,该行存在于pdb_spfile$中,但被标记为DELETED参数。所以行的存在是内部实现,不会影响用户。

当pdb删除时pdb_spfile$里的记录将会一并删除

2.当使用db_unique_name只指定备库参数值时,也就是说主库pdb的参数值没有被赋值(是继承cdb的参数),将无法通过reset进行移除,无论在reset时是否指定db_unique_name。(这一点未找到oracle的官方说明)

主库
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node2 ~]$ cat zky.ora
*.db_securefile='PREFERRED'
[oracle@node2 ~]$ exit
SQL> show con_name

CON_NAME
------------------------------
ZKY
备库
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +TEST
SQL> create pfile='/home/oracle/zky.ora' from spfile;
File created.
SQL> !
[oracle@node1 ~]$ cat zky.ora
*.db_securefile='PREFERRED'
*.db_create_file_dest='+TEST'
[oracle@node1 ~]$ exit
SQL> show con_name
CON_NAME
------------------------------
ZKY
主库
SQL> alter system reset db_create_file_dest sid='*' db_unique_name='ora19c';
alter system reset db_create_file_dest sid='*' db_unique_name='ora19c'
*
ERROR at line 1:
ORA-32010: cannot find entry to delete in SPFILE

SQL> alter system reset db_create_file_dest sid='*';
alter system reset db_create_file_dest sid='*'
*
ERROR at line 1:
ORA-32010: cannot find entry to delete in SPFILE


参考

  • Initialization parameters in a Multitenant database - FAQ and Examples (Doc ID 2101638.1)

  • Initialization parameters in a Multitenant database - Facts and additional information (Doc ID 2101596.1)

  • ALTER SYSTEM RESET DOESN’T UPDATE PARAM VALUE IN PDB_SPFILE$ (Doc ID 2287601.1)

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

评论