Pular para o conteúdo

Como alterar os parâmetros de um CDB e PDB no Oracle Database

Instance Parameters – CDB / PDB

Para alterar os parâmetros de um CDB, basicamente procedemos da mesma forma utilizada anteriormente nos bancos non-CDB. Adicionalmente podemos utilizar a clausula container.

ALTER SYSTEM SET parameter_name=value;

ALTER SYSTEM SET parameter_name=value CONTAINER=CURRENT;

ALTER SYSTEM SET parameter_name=value CONTAINER=ALL;

Vale lembrar que na arquitetura Multitenant, o SPFILE está “ligado” ao CDB.

Os valores dos parâmetros estão associados ao CDB e servem como valores padrão para todos os outros PDBs.

Valor default do parâmetro no CDB:

SQL> show con_name

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

SQL> show parameter ddl_lock

NAME                     TYPE     VALUE
------------------------ -------- -------
ddl_lock_timeout         integer  0

Valor default do parâmetro no PDB:

[oracle@oracle01 ~]$ sqlplus sys@pdb1 as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Nov 26 10:46:50 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Enter password: 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show parameter ddl_lock

NAME                     TYPE     VALUE
------------------------ -------- --------
ddl_lock_timeout         integer  0

Alterando o parâmetro no CDB:

SQL*Plus: Release 12.1.0.1.0 Production on Tue Nov 26 10:48:02 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show con_name

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

SQL> alter system set ddl_lock_timeout=10 CONTAINER=ALL;

System altered.

SQL> show parameter ddl_lock

NAME                     TYPE     VALUE
------------------------ -------- -------
ddl_lock_timeout         integer  10

Podemos verificar que o parâmetro também foi alterado no PDB:

[oracle@oracle01 ~]$ sqlplus sys@pdb1 as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Nov 26 10:50:52 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Enter password: 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show parameter ddl_lock

NAME                     TYPE     VALUE
------------------------ -------- ------
ddl_lock_timeout         integer  10

É possível ter valores de parâmetros diferentes para um PDB. Para isso, consultamos a view V$PARAMETER ou V$SYSTEM_PARAMETER verificando a coluna ISPDB_MODIFIABLE.

SQL> select name,ispdb_modifiable from v$system_parameter
where ispdb_modifiable='TRUE';

SQL> CONNECT sys@pdb1 AS SYSDBA

Connected.

SQL> show con_name

CON_NAME
------------
PDB_TESTE1

SQL> ALTER SYSTEM SET ddl_lock_timeout=20;

System altered.

SQL> show parameter ddl_lock

NAME                     TYPE     VALUE
------------------------ -------- ------
ddl_lock_timeout         integer  20

SQL> select PDB_UID, NAME, VALUE$ from pdb_spfile$;

  PDB_UID NAME               VALUE$
---------- ----------------- -------
3012057083 ddl_lock_timeout  20

SQL> select VALUE, ISPDB_MODIFIABLE, CON_ID
from V$SYSTEM_PARAMETER
where name ='ddl_lock_timeout';  2    3  

VALUE        ISPDB      CON_ID
-----------    ----- ----------
10        TRUE           0
20        TRUE           3

Os parâmetros alterados a nível de PDB:

  • São carregados na memória após o close do PDB
  • São armazenados no dicionário após o close do CDB
  • Se aplica apenas para os parâmetros ISPDB_MODIFIABLE=TRUE

A persistência dos parâmetros no CDB e PDB possuem as mesmas implicações de antes. Os parâmetros estáticos só terão efeito se você reiniciar o banco de dados enquanto parâmetros dinâmicos entrarão em vigor imediatamente.

Além disso, se você desplugar um PDB e depois replugar em outro CDB, os parâmetros alterados serão transferidos também.

Uma observação importante, é que ao utilizar CONTAINER=ALL na alteração do parâmetro no CDB, o valor desse parâmetro também será alterado em todos os PDBs, mesmo que ele já tenha sido alterado no PDB.

ALTER SYSTEM SET parameter_name=value CONTAINER=ALL;

Referências

Abraço

Alex Zaballa

Alex Zaballa

Alex Zaballa, formado em Análise de Sistemas, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Servidores de Aplicação e Sistemas Operacionais; trabalha com Oracle há 15 anos, é ORACLE ACE Director, certificado OCM Database 11G / Cloud e conta com mais de 140 outras certificações em produtos da Oracle. Alex também é um dos fundadores do Grupo de Usuários Oracle de Angola (GUOA), participa do Grupo de Usuários de Tecnologia Oracle Brasil (GUOB) e é membro do time OraWorld.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress