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:
Postar um comentário