Com a mudança de estrutura Multitenant, precisamos nos atentar em relação à alteração de parâmetros dentro dos bancos de dados. Talvez o pontapé inicial seria checar se o parâmetro em questão não é habilitado para modificação a nível de PDB (non-PDB-modifiable). Para isso, podemos usar a consulta abaixo como exemplo, em relação à FRA:
SQL> SELECT NAME,CDB FROM V$DATABASE;
NAME CDB
--------- ---
TALAMO YES
SQL> col value format a15
SQL> SELECT VALUE, ISPDB_MODIFIABLE FROM V$SYSTEM_PARAMETER WHERE NAME='db_recovery_file_dest_size';
VALUE ISPDB
--------------- -----
734003200 FALSE
A coluna ISPDB com valor FALSE nos indica que uma alteração só é permitada no CBD root. Mesmo assim, fazendo o teste de prova:
SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
Session altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=2G;
ALTER SYSTEM SET db_recovery_file_dest_size=2G
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database
Fazendo alteração do CDB root:
SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
Session altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=1G;
System altered.
SQL> SELECT VALUE FROM V$SYSTEM_PARAMETER WHERE NAME='db_recovery_file_dest_size';
VALUE
---------------
1073741824
Realizando o teste em uma parâmetro que pode ser alterado a nível de PDB:
SQL> COL VALUE FORMAT A15
SQL> SELECT VALUE, ISPDB_MODIFIABLE FROM V$SYSTEM_PARAMETER WHERE NAME='ddl_lock_timeout';
VALUE ISPDB
--------------- -----
0 TRUE
Efetivamente realizando a alteração:
SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
Session altered.
SQL> ALTER SYSTEM SET ddl_lock_timeout=20;
System altered.
SQL> SHO PARAMETER ddl_lock_timeout;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 20
Observando que o valor do parâmetro é o default em um outro PDB:
SQL> ALTER SESSION SET CONTAINER=HIPOFISE2;
Session altered.
SQL> SHOW PARAMETER ddl_lock_timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 0
Caso alteremos o parâmetro do CDB root, será que os PDBs herdam o valor? Não. Cada container tem o seu valor independente:
SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
Session altered.
SQL> SHO PARAMETER ddl_lock_timeout;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 0
SQL> ALTER SYSTEM SET ddl_lock_timeout=30;
System altered.
SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
Session altered.
SQL> SHO PARAMETER ddl_lock_timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 20
Caso precisemos que todos os containers herdem o mesmo valor, podemos usar o exemplo abaixo:
SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
Session altered.
SQL> ALTER SYSTEM SET ddl_lock_timeout=666 CONTAINER=ALL;
System altered.
SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
Session altered.
SQL> SHO PARAMETER ddl_lock_timeout;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 666
Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.