Nenhum resultado encontrado

Sua pesquisa não corresponde a nenhum resultado.

Sugerimos que você tente o seguinte para ajudar a encontrar o que procura:

  • Verifique a ortografia da sua pesquisa por palavra-chave.
  • Use sinônimos para a palavra-chave digitada; por exemplo, tente “aplicativo” em vez de “software.”
  • Tente uma das pesquisas populares mostradas abaixo.
  • Inicie uma nova pesquisa.
Perguntas Frequentes

Pluggable Database (PDB) Character sets, IORM e Configurações de memória em um ambiente Multi-Tenant usando Oracle 12c R2 (12.2.0.1.0)

Por Y V Ravi Kumar , Rodrigo Mufalani Oracle ACE e Konstantin Kerekovski,
Publicado en Junho 2017

Revisado por Marcelo Pivovar

Introdução:

Haviam algumas poucas limitações no Oracle 12c R1 nos PDBs que prejudicavam a adoção da funcionalidade Multi-Tenant no Oracle 12c. O Oracle 12c R2 fez inúmeras melhorias na arquitetura Multi-Tenant afim de garantir a facilidade e permitir uma maior adoção dessa tecnologia Multi-Tenant.

No Oracle 12c R1, seus PDBs herdariam o character set do Container database (CDB) que estivessemplugados, talqual, umavez que um PDB foicriado com um character set específico, elesomentepoderiaserplugadoem um CDB com um character set similar. O que não é mais o caso! Agora, no Oracle 12c R2, CDBs podem conter PDBS com diferentes character sets! Haviam também outros problemas no Oracle 12c R1 quanto ao gerenciamento da utilização recursos do servidor entre os PDBs.

Não havia maneira de limitar a quando de I/O ou a quantidade de SGA que um PDB poderia usar dentro de um Container database. Isso causava problemas onde um único PDB, muitoativo, poderia monopolizar a banda de I/O e poluir o buffer cache descartando blocos de PDBs menos ativos. No Oracle 12c R2, isso é um problema do passado.

Configuração do ambiente

Host:

  
Host        IP                Release
tstldb101   192.168.0.61      OEL release 6.8 (Santiago)
tstldb102   192.168.0.62      OEL release 6.8 (Santiago)  
 
 

Software:

  
 Oracle Home               Path
12.2.0.2.0 RDBMS Home     /u01/app/oracle/product/12.2.0/dbhome_1
12.2.0.2.0 GRID Home      /u01/app/12.2.0/grid  

 
 

Database:

  
Container DB       Pluggable DB      Character Set 
PRODCDB            PRODPDB           AL32UTF8
BATCHCDB           BATCHPDB          NEE8ISO8859P4

 
 

Character Sets

´

Enquanto o seu CBD usa AL32UTF16 (o novo character set padrão no DBCA), você estará habilitado a plugar/clonar/realocar PDBs de um outro (non-standard)character set neste CDB. Apesar da Oracle ter feito melhorias massivas nos character sets, você não poderá criar um PDB de um outro (non-standard) character set em um CDB diretamente. Isso porque todos os PDBs criados pegam o character set do PDB PDB$SEED, que herda o charset do CDB.

Então, para este exemplo, iremos ter dois CBDs com character sets diferentes. Irei mostrar para você como podemos clonar um PDB do BATCHCDB no PRODCDB e não incorrer em problemas para mostrar os dados.

Container Database (PRODCDB) – AL32UTF16 Character set

Container Database (BATCHCDB) - NEE8ISO8859P4 Character Set (EasternEuropean)

Vamos supor que temos uma tabela chamada TEST_TABLE no databaseBATCHPDB. Iremos inserir alguns textos em Búlgaro nesta tabela para ter certeza que tudo está OK com nosso database com character set do leste europeu.

  
SQL> col parameter format a20
SQL> col value format a20
SQL> select con_id,  parameter,value
from containers(nls_database_parameters) 
where parameter = 'NLS_CHARACTERSET';

CON_ID      PARAMETER               VALUE
----------  --------------------    ---------------
1           NLS_CHARACTERSET        NEE8ISO8859P4
3           NLS_CHARACTERSET        NEE8ISO8859P4

SQL> col name format a20
SQL> select con_id, name from v$containers;

CON_ID      NAME
----------  -----------------
1           CDB$ROOT
2           PDB$SEED
3           BATCHPDB

SQL> alter session set container=BATCHPDB;

Session altered.

SQL>desctest_table;
 Name                          Null?    Type
 ----------------------------- -------- --------------
 MESSAGE                                 VARCHAR2(50)
 
 

Iremos primeiramente precisar configurar nossa variável de ambiente NLS_LANG, no shell.

  
[oracle@tstldb101 ~]$ export NLS_LANG=Bulgarian_America.NEE8ISO8859P4  

 
 

Uma vez que nós logamos no database, podemos trocar nosso container para o PDB e e inserir os dados, e depois consultar os mesmos para ter que certeza que os dados são mostrador corretamente.

  
SQL>  alter session set container=BATCHPDB;

Session altered.

SQL> insert into test_table values ('българскитекст');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test_table;

MESSAGE
--------------------------------------------------
българскитекст  
 
 

Para os propósitos deste teste, iremos clonar o BATCHPDB que está com o character set NEE8ISO8859P4 para o CDB PRODCDB que possui o character set AL32UTF8 e ter certeza que ainda podemos inserir e selecionar caractéres do alfabeto cirílico búlgaro do leste europeu.

Clonando o Pluggable Database (PDB)

Configurando o BATCHPDB para o clone

Primeiro, precisamos criar um usuário comum com a role de SYSOPER no BATCHCDB.

  
[oracle@tstldb101 ~]$ . oraenv
ORACLE_SID = [batchcdb1] ? batchcdb1
The Oracle base remains unchanged with value /u01/app/oracle

[oracle@tstldb101 ~]$sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Mar 18 20:43:38 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> create user c##clonining_user identified by "database_123" container =all;
User created.

SQL> grant connect to c##clonining_user container =all;
Grant succeeded.

SQL> grant sysoper to c##clonining_user container =all;
Grant succeeded.

 
 

Depois, iremos garantir que há uma entrada de TNS para se conectar ao BATCHPDB remotamente.

  
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

PRODCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prodcdb.world)
    )
  )
 BATCHCDB =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = batchcdb.world)     )   )

PRODPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prodpdb.world)
    )
  )

[oracle@tstldb101 ~]$ssh tstldb102 cat /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/tnsnames.ora
# tnsnames.ora.tstldb102 Network Configuration File: /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/
tnsnames.ora.tstldb102
# Generated by Oracle configuration tools.

PRODCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prodcdb.world)
    )
  )
 BATCHCDB =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = batchcdb.world)     )   )

PRODPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tstldb01-scan.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prodpdb.world)
    )
  )
 
 

Então iremos logar no nosso CDB destino, PRODCDB e criar um database link apontando para o BATCHCDB e então poderemos clonar o PDB BATCHPDB.

  
[oracle@tstldb101 ~]$ . oraenv
ORACLE_SID = [batchcdb1] ? prodcdb1
The Oracle base remains unchanged with value /u01/app/
oracle

[oracle@tstldb101 ~]$sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Mar 18 
20:46:28 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 
64bit Production

SQL> create public database link eastern_europe connect 
to c##clonining_user identified by "database_123" using 
'BATCHCDB';

Database link created.

SQL> select 'x' from dual@eastern_europe;

'
-
X

SQL> select con_id,name from v$containers;

CON_ID  NAME
----------  -------------------------
1     CDB$ROOT
2     PDB$SEED
3     PRODPDB
4     TESTDB
5     WAREHOUSEPDB

SQL> create pluggable database BATCHPDB from 
batchpdb@eastern_europe;
Pluggable database created.
SQL> select con_id,name from v$containers;

SQL> alter pluggable database batchpdb open instances=all;
Pluggable database altered.

SQL> select con_id,  parameter,value from containers
(nls_database_parameters) where parameter = 'NLS_CHARACTERSET';

CON_ID      PARAMETER               VALUE
----------  ----------------------  ------------------------
1           NLS_CHARACTERSET         AL32UTF8
6           NLS_CHARACTERSET         NEE8ISO8859P4

SQL> select con_id,name from v$containers;

CON_ID      NAME
----------  ---------------------------
1           CDB$ROOT
2           PDB$SEED
3           PRODPDB
4           TESTDB
5           WAREHOUSEPDB
6           BATCHPDB

6 rows selected. 
 
 

Agora, podemos configurar nossa variável de ambiente NLS_LANG, no shell, para consultar o BATCHPDB e checar se ainda podemos ver a tabela com os caractéres do alfabeto cirílico búlgaro.

  
[oracle@tstldb101 ~]$ export NLS_LANG=Bulgarian_Bulgaria.NEE8ISO8859P4
[oracle@tstldb101 ~]$sqlplus / as sysdba

SQL> select name from v$database;

NAME
----------------
PRODCDB

SQL> alter session set container = BATCHPDB;
Session altered.

SQL> select * from test_table;

MESSAGE
-----------------------
българскитекст

SQL> insert into test_table values ('Другтекст');
1 row created.

SQL> commit;
Commit complete.

SQL> select * from test_table;

MESSAGE
--------------------------------------------------
българскитекст
Другтекст
 
 

Neste exemplo, pudemos mostrar que podemos misturar diferentes character sets em um mesmo CDB, algo que anteriormente não era possível.

Gerenciamento de Recursos de I/O dos PDBs (PDB I/O Resource Manager)

No Oracle 12cR2, agora temos a capacidade de limitar a quantidade e I/O que um PDB pode realizar em um CDB. Isso pode ser feito tanto via MAX_IOPS (para o máximo de operações de I/O por Segundo) ou MAX_MBPS (para o máximo de Megabytes por Segundo).

Essas configurações podem ser definidas em um PDB. Depois que um PDB atingir o limite máximo que especificou para um dos parâmetros, requisições de I/O irão afunilar e irão esperar pelo evento resmgr: I/O rate limit.É importante ter em mente que alguns processos em background são isentos desse estrangulamento, como o DB Writer process. Então, apesar de configurar esse parâmetro, você pode notar uma ligeira variação ou casos que seus PDBs parecem estar excedendo estes limites de I/O. Se a configuração for feita no CDB$ROOT container, todos os PDB’s irão herdar essas configurações.

Essas configurações NÃO PODEM ser usada em EXADATA. Irá receber erros se tentar configurar esses parametros em um EXADATA.

Configurando MAX_MBPS no CDB$ROOT

  
[oracle@tstldb101 ~]$sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Mar 18 
21:06:58 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 
64bit Production

SQL> select name from v$containers;

NAME
----------------------------
CDB$ROOT
PDB$SEED
PRODPDB
TESTDB
WAREHOUSEPDB
BATCHPDB

6 rows selected.

SQL> show parameter max_mbps

NAME                      TYPE        VALUE
------------------------- ----------- -------------------
max_mbps                   integer     0

SQL> alter system set max_mbps=200 scope=BOTH sid='*';
System altered.

SQL> show parameter max_mbps

NAME                       TYPE        VALUE
-------------------------- ----------- ------------------
max_mbps                    integer     200

SQL> alter session set container = BATCHPDB;
Session altered.

SQL> show parameter max_mbps

NAME                        TYPE        VALUE
--------------------------- ----------- -----------------
max_mbps                    integer     200 
 
 

Configurando MAX_MBPS diferentes para containers

Aqui irei mostrar como você pode configurar MAX_MBPS no BATCHPDB pluggable database que difere da configuração de MAX_MPBS no CDB$ROOT.

  
[oracle@tstldb101 ~]$sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Mar 18 
21:08:14 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 
64bit Production

SQL> alter session set container = BATCHPDB;
Session altered.

SQL> alter system set max_mbps=50 scope=BOTH sid='*';
System altered.





SQL> show parameter max_mbps

NAME                                  TYPE          VALUE
------------------------------------  -----------   -------------
max_mbps  integer       50



SQL> select name from v$containers;

NAME
---------------------------------
BATCHPDB

SQL> alter session set container=CDB$ROOT;
Session altered.

SQL> show parameter max_mbps

NAME                                  TYPE          VALUE
------------------------------------  -----------   -----------
max_mbps  integer       200

 
 

Configuração de memória em um PDB

No 12c R2, O Oracle agora tem uma funcionalidade que permite que configuremos o máximo e o mínimo de memória por PDB. Em versões anteriores do Oracle database, não era possível configurar um limite de alocação mínima de memória. Agora, temos a capacidade de garantir que uma pré-determinada quantidade de memória sempre será reservada a um PDB. Com essas opções, se foram dias onde um único PDB poderia monopolizar completamente a shared pool!

O novo parâmetro é o SGA_MIN_SIZE. Há poucas coisas para se ter em mente quando usamos este parâmetro. A soma de todos valores dos SGA_MIN_SIZE dos PDBs não podem exceder 50% do valor definido para SGA_TARGET no container CDB$ROOT. Ou irá receber um erro.

Vamos ver como isso funciona. Iremos trabalhar com o container database PRODCDB.

  
oracle@tstldb101 ~]$sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sat Mar 18 21:26:06 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production  

 
 
 

Primeiro, vamos ver quanta memória temos para trabalhar, checando o SGA_TARGET no container CDB$ROOT.

  

SQL> show parameter sga_target

NAME                                 TYPE         VALUE
------------------------------------ -----------    -------------
sga_target                           big integer  2G
 
 

Agora, iremos trocar para o BACHPDB e configurar a SGA mínima.

  
SQL> alter session set container = BATCHPDB;
Session altered.

SQL> alter system set sga_min_size=40M scope=BOTH sid='*';
System altered.

SQL> select name from v$containers;

NAME
-------------------------------------------------------
BATCHPDB

SQL> show parameter sga_min_size

NAME                      TYPE        VALUE
------------------------- ----------- ------------------------------
sga_min_size              big integer 40M
 
 

Vamos voltar ao CDB$ROOT e certificar a mudança em nada afetou a ele.

  
SQL> alter session set container=CDB$ROOT;
Session altered.

SQL> show parameter sga_min_size

NAME                       TYPE        VALUE
-------------------------- ----------- ------------------------------
sga_min_size               big integer 0
 
 

Para o nosso teste final, vamos provocar um problema configurando, erradamente, o SGA_MIN_SIZE do BATCHPDB, com um valor que exceda 50% do valor de SGA_TARGET no noCDB$ROOT que é (2GB).

  
SQL> alter session set container = BATCHPDB;
Session altered.

SQL> alter system set sga_min_size=1200M scope=BOTH sid='*';
alter system set sga_min_size=1200M scope=BOTH sid='*'
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-56748: invalid value 1258291200 for parameter sga_min_size; 
must be smaller than 50% of parameter sga_target of the root container
 
 

Perfeito! O Oracle nos impediu de causar problemas com configurações equivocadas de memória.

Conclusão

Neste artigo, discutimos 3 novas funcionalidades, PDB I/O Resource Manager, PDB Minimum SGA sizing e a capacidade de ter diferentes character sets em PDBs dentro de um mesmo CDB. Com essas novas funcionalidades em mão, será muito mais fácil consolidar bancos de dados de diferentes character sets e muito mais seguro ter múltiplos PDBs de intensa utilização dentro de um único CDB configurando um mínimo de memória a ser utilizado por um PDB, isso garante que ele sempre terá certa quantidade de memória alocada para o PDB.

Y V Ravi Kumar é um Oracle ACE e Oracle Certified Master (OCM) com 18 anos de experiênciaeminstituiçõesfinanceiras, serviçosfinanceiros e seguros (BFSI) e atuouemdiversospapeiscomo Senior Database Architect e Production DBA. Eletambém é OCP em Oracle 8i, 9i, 10g, 11g & 12c e Certificadoem Golden Gate, RAC, Performance Tuning & Oracle Exadata. Ele continua motivandomuitos DBAs e ajudandoa Oracle Community publicandosuasdicas /ideias/sugestões/soluçõesemseu blog. Eleescreveu 40+ artigos OTN sobre Oracle Exadata, Oracle RAC e Oracle GoldenGate para a OTN emEspanhol, OTN emPortuguês e OTN eminglês e 19 artigos para a TOAD World, 2 Artigos para o UKOUG, 3 Artigos para OTech Magazine e 2 Artigos para a Redgate. Ele é membro do All India Oracle User Group (AIOUG) e frequente Oracle speaker in @NYOUG, @OTN, AIOUG, Sangam e IOUG. Eledesenha, projeta e implementa Core Banking System (CBS) Databases para o Central Banks emdoispaíses – India e Mahe, Seychelles. Ele é Co-Founder do OraWorld (www.oraworld.com). Leia maissobre o seuperfilnaLaserSoft

Rodrigo Mufalani é um DBA Sr. com mais de 10 anos de experiência, começou com o Oracle 8i, mas teve a oportunidade de dar suporte a Oracle 7.3.4 em diante. É especialista em banco de dados Oracle com foco principal em Performance & Tuning e RAC. É palestrante em eventos de Oracle como: OTN LAD TOUR e outros. Atualmente trabalha como consultor diversas empresas no segmento de variados ramos como: Educação, Saúde, Tecnologia, Seguros e etc. Foi o terceiro Oracle ACE a ser nomeado no Brasil e é OCP DBA nas versões 10g e 11g. Atualmente trabalha na Mufalani. Twitter @mufalani / blog www.mufalani.com.br/blog

Konstantin Kerekovskié um profissional Oracle com mais de 6 anos de experiência no ramo de serviços financeiros. Ele é membro doIndependent Oracle UserGroup (IOUG) e do Suncoast Oracle UserGroup (SOUG). Ele tem trabalhado comoSenior e LíderDatabase Administrator com suporte ao ramo de serviços financeiros. Ele é palestrante do IOUG Collaborate 2017 e do SOUG meetings em Tampa Bay. Ele é um expert em Oracle Real Application Cluster, ASM, Goldengatee Oracle 11g e 12c.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.