Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


segunda-feira, 4 de agosto de 2014

Oracle Multitenant: Alterando parâmetros de inicialização do Container Database (CDB) e Pluggable Databases (PDBs) no Oracle 12c

Por Eduardo Legatti

Olá,

Nos artigos de Fevereiro/2014, Março/2014 e Abril/2014 e abordei sobre a arquitetura Multitenant do Oracle 12c no que se refere aos conceitos básicos de administração e de backups dos containers (CDBs) e dos bancos de dados plugáveis (PDBs). Neste artigo irei demonstrar de forma prática a alteração dos parâmetros da instância container (CDB) e dos bancos de dados plugáveis (PDBs).

Para começar, é importante frisar que só existe um arquivo de inicialização SPFILE para a instância CDB. Isso quer dizer que não existe um arquivo de inicialização SPFILE separado para os bancos de dados plugáveis (PDBs). Neste caso, todos os bancos de dados PDBs herdam os valores dos parâmetros do banco de dados CDB. Alguns parâmetros dos bancos de dados PDBs podem ser alterados, outros não. o valor da coluna ISPDB_MODIFIABLE da view V$SYSTEM_PARAMETER irá nos informar se o parâmetro em questão poderá ser modificado. Segue a demonstração abaixo.
 
C:\>set ORACLE_SID=CDB01

C:\>sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Seg Ago 4 09:43:13 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Conectado a:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name;

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

SQL> select a.con_id,a.name,a.dbid,
  2         b.status,a.open_mode,a.total_size
  3    from v$pdbs a, dba_pdbs b
  4   where a.con_id=b.pdb_id;

    CON_ID NAME                    DBID STATUS        OPEN_MODE  TOTAL_SIZE
---------- ----------------- ---------- ------------- ---------- ----------
         2 PDB$SEED          4076210644 NORMAL        READ ONLY   283115520
         3 PDB01             3898013363 NORMAL        READ WRITE  288358400
         4 PDB02             3947824578 NORMAL        READ WRITE  283115520
         5 PDB03             4001514065 NORMAL        READ WRITE  288358400

SQL> show parameter spfile;

NAME      TYPE        VALUE
--------- ----------- --------------------------------------------------------------
spfile    string      C:\ORACLE\APP\PRODUCT\12.1.0\DBHOME_1\DATABASE\SPFILECDB01.ORA

Acima podemos verificar que a instância CDB foi aberta com o parâmetro de inicialização SPFILECDB01.ORA e que 3 bancos de dados PDBs estão abertos. Abaixo irei alterar o parâmetro "open_cursors" banco de dados de container CDB$ROOT.
 
SQL> alter system set open_cursors=210;

Sistema alterado.

O comando ALTER SYSTEM acima modificou o parâmetro "open_cursors" tanto em memória quanto no arquivo SPFILE. No Oracle 12c foi incluído uma nova cláusula no comando ALTER SYSTEM que indica se a alteração realizada no parâmetro deverá afetar apenas o banco de dados de container atual (CURRENT) ou em todos os containers (ALL). Se o mesmo não for especificado, então o padrão será CURRENT.
 
SQL> show parameter open_cursors;

NAME                            TYPE        VALUE
------------------------------- ----------- ---------------------------
open_cursors                    integer     210

SQL> select name,value,display_value,ispdb_modifiable
  2    from v$system_parameter
  3   where name = 'open_cursors';

NAME            VALUE      DISPLAY_VA ISPDB
--------------- ---------- ---------- -----
open_cursors    210        210        TRUE

Acima podemos verificar que o parâmetro "open_cursors" foi alterado no banco de dados de container CDB$ROOT e que o mesmo pode ser modificado também nos bancos de dados plugáveis. Irei realizar abaixo a alteração no banco de dados plugável PDB01.
 
SQL> alter session set container = PDB01;

Sessão alterada.

SQL> show con_name;

CON_NAME
------------------------------
PDB01

SQL> alter system set open_cursors=220;

Sistema alterado.

SQL> select name,value,display_value,ispdb_modifiable
  2    from v$system_parameter
  3   where name = 'open_cursors';

NAME            VALUE      DISPLAY_VA ISPDB
--------------- ---------- ---------- -----
open_cursors    220        220        TRUE

Após a alteração do parâmetro no banco de dados plugável PDB01, irei conectar novamente no container CDB$ROOT e consultar a view V$SYSTEM_PARAMETER.
 
SQL> alter session set container = CDB$ROOT;

Sessão alterada.

SQL> select name,value,display_value,con_id,ispdb_modifiable
  2    from v$system_parameter
  3   where name = 'open_cursors';

NAME           VALUE      DISPLAY_VA     CON_ID ISPDB
-------------- ---------- ---------- ---------- -----
open_cursors   210        210                 0 TRUE
open_cursors   220        220                 3 TRUE

O resultado acima demonstra que é possível consultar os valores dos parâmetros dos banco de dados plugáveis que tiveram seus valores alterados à partir do container CDB$ROOT. Vale a pena salientar que o banco de dados plugável precisa estar aberto para que a consulta retorne os valores dos parâmetros. Bom, após a alteração do parâmetro "open_cursors" tanto no container CDB quanto no banco de dados PDB01, segue abaixo o conteúdo o SPFILE após o mesmo ser convertido para PFILE.
 
C:\>type INITcdb01.ORA

cdb01.__data_transfer_cache_size=0
cdb01.__db_cache_size=729808896
cdb01.__java_pool_size=4194304
cdb01.__large_pool_size=12582912
cdb01.__oracle_base='C:\oracle\app'
cdb01.__pga_aggregate_target=314572800
cdb01.__sga_target=1073741824
cdb01.__shared_io_pool_size=50331648
cdb01.__shared_pool_size=264241152
cdb01.__streams_pool_size=0
*.audit_file_dest='C:\oracle\app\admin\CDB01\adump'
*.audit_trail='db'
*.compatible='12.1.0.0.0'
*.control_files='C:\oracle\CDB01\control01.ctl','C:\oracle\CDB01\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='CDB01'
*.db_recovery_file_dest_size=53687091200
*.db_recovery_file_dest='C:\oracle\app\fast_recovery_area'
*.diagnostic_dest='C:\oracle\app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=CDB01XDB)'
*.enable_pluggable_database=true
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=210
*.pga_aggregate_target=300m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1024m
*.undo_tablespace='UNDOTBS1'

Verificando o resultado acima é possível perceber que apenas o valor do parâmetro "open_cursors" do container CDB01 se encontra armazenado no SPFILE. Portanto, é possível concluir que os valores dos parâmetros dos bancos de dados PDBs não ficam armazenados no arquivo de inicialização SPFILE e sim nas tabelas de dicionário de dados do banco de dados de container CDB$ROOT como demonstrado pela consulta SQL abaixo. Com ela é possível obter os valores do parâmetros de inicialização dos bancos de dados plugáveis consultando a tabela de dicionário de dados PDB_SPFILE$:
 
SQL> select a.name,value$,con_id 
  2    from pdb_spfile$ a 
  3    join v$pdbs b on (a.pdb_uid=b.con_uid);

NAME                 VALUE$         CON_ID
-------------------- ---------- ----------
open_cursors         220                 3
 



Nenhum comentário:

Postagens populares