Thursday, May 25, 2017

Clonando PDBs Locais

Como nova da Oracle de Multitenant o Clone de banco de dados é uma feature muito interessante da Oracle que faz parte do pacote de Fast Provisiong, básicamente o clone tem uma origem e um destigo, sendo que a  origem pode ser um PDB de um CDB Local, um PDB de um CDB Remoto ou um Non-CDB.


Pre-requisitos


Básicamente todos os clones de PDBs devem seguir estes pré-requisitos;

  • O CDB deve estar aberto e em read/write;
  • Deve se estar conectado no CDB$ROOT com usuário comum com privilegio de CREATE PLUGGABLE DATABASE;
  • O Nome do PDB deve ser unico em todos os CDBs do mesmo servidor;
  • Compatibilidade de Character set do CDB de Origem com o Destino;

Clonando um PDB Local


O Processo de se criar um PDB Local é bem similar ao processo de se criar um PDB from SEED, o processo é basicamente o mesmo, se copia os arquivos do PDB de origem para o PDB de destino, o novo PDB possui novo DBID, Container_ID, GUID, encarnação e um serviço com o nome do PDB.

Ao termino do Clone o novo PDB estará em mount, deve então ser aberto e realizado um backup da base.



Clonando um PDB sem Clausulas de Controle

Pode ser criado um novo Pluggable Database (PDB) a partir do comando Create Pluggable database com a clausula FROM , istó fará com que se crie um novo PDB com o nome do serviço identico ao nome do PDB, os nomes de usuários serão replicados conforme origem, inclusive os usuários administrativos, o destino dos arquivos dependerão dos parametros de destino (OMF) e conversão configurados no CDB.

Após o clone o PDB ficará montado e com o status de New, deve-se então abri-lo e iniciar um backup do CDB.

PDB de origem pré 12.2 ficará disponivel somente para leitura, DMLs irão falhar com o erro ora-16000.

ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
ORA-06512: at line 5

Exemplo

SQL> select con_id, name, open_mode, total_size from v$containers;
    CON_ID NAME OPEN_MODE  TOTAL_SIZE
---------- -------------------- ---------- ----------
1 CDB$ROOT READ WRITE    0
2 PDB$SEED READ ONLY   838860800
3 INDAIA READ WRITE  896532480
4 ITU READ WRITE 2417754112
5 RIBERAO READ WRITE  905707520
SQL> 
SQL> show parameter db_create_file_dest
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest     string +DATA
SQL> 
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show con_id
CON_ID
------------------------------
1
SQL> 
SQL> CREATE PLUGGABLE DATABASE SAMPA from INDAIA;
Pluggable database created.
Elapsed: 00:01:07.83
SQL> 
SQL> select con_id, name, open_mode, total_size from v$containers;
    CON_ID NAME OPEN_MODE  TOTAL_SIZE
---------- -------------------- ---------- ----------
1 CDB$ROOT READ WRITE    0
2 PDB$SEED READ ONLY   838860800
3 INDAIA READ WRITE  896532480
4 ITU READ WRITE 2417754112
5 RIBERAO READ WRITE  905707520
6 SAMPA MOUNTED    0
6 rows selected.
Elapsed: 00:00:00.02
SQL> alter pluggable database SAMPA open;
Pluggable database altered.
Elapsed: 00:00:15.77
SQL> select con_id, name, open_mode, total_size from v$containers;
    CON_ID NAME OPEN_MODE  TOTAL_SIZE
---------- -------------------- ---------- ----------
1 CDB$ROOT READ WRITE    0
2 PDB$SEED READ ONLY   838860800
3 INDAIA READ WRITE  896532480
4 ITU READ WRITE 2417754112
5 RIBERAO READ WRITE  905707520
6 SAMPA READ WRITE  896532480
6 rows selected.
Elapsed: 00:00:00.02
SQL> 
SQL>  select file_name, con_id from cdb_data_files where con_id=6;
FILE_NAME     CON_ID
-------------------------------------------------------------------------------- ----------
+DATA/CDBSP/5062B61BA5300980E055000000000001/DATAFILE/system.289.944948305  6
+DATA/CDBSP/5062B61BA5300980E055000000000001/DATAFILE/sysaux.288.944948305  6
+DATA/CDBSP/5062B61BA5300980E055000000000001/DATAFILE/users.290.944948307  6
Elapsed: 00:00:00.02
SQL> 

Clausulas e Parametros de Controle para se criar um PDB com SQLPlus


As seguintes clausulas e parametros não são obrigatorios para se criar um novo PDB, porém permitem maior controle e flexibilidade, são elas:




  • Controlando o PATH
    O controle da criação dos arquivos podem ser especificados a nivel de instancia ou comando, o comando precede a instancia, e especificando um caminho inicial (OMF) ou convertando os path de origem, a conversão sempre precede o destino (OMF), seguem as clausulas com menos peso para mais peso:
    • 4 - Parametro PDB_FILE_NAME_CONVERT - Este parametro converte StringA em StringB;
    • 3 - Parameter DB_CREATE_FILE_DEST - Controla o caminho de criação dos Datafiles em OMF;
    • 2 - Clausula CREATE_FILE_DEST (12.1.0.2) - Informa no comando de "Create Pluggable" qual o caminho OMF que deve ser criado o PDB;
    • 1 - Clausula FILE_NAME_CONVERT - Converte a StringA em StringB dos arquivos de origem;

  • Limitando o Tamanho do PDB
    • Clausula MAXSIZE - STORAGE (MAXSIZE), limita o tamanho maximo do PDB, o default é unlimited, se o valor for omitido é considerado como unlimited;

  • Garantir Path
    • PATH_PREFIX - Garante que o caminho especificado, caso não especificado aceita qual path;

  • Controlando o nome dos serviços
    • Para converter os nomes de serviços no momento da criação do PDB utilizar a clausula SERVICE_NAME_CONVERT, a qual converte a StringA em StringB;

  • User Tablespaces (12.1.0.2)
    Permite controlar quais tablespaces de usuários serão criadas/clonadas, podem ser todas, algumas, nenhuma ou ignorar uma ou muitas.
    • Muitas - USER_TABLESPACE = ('TBS1','TBS2','TBS3');
    • Todas - USER_TABLESPACES = ALL;
    • Nenhuma -USER_TABLESPACES=NONE;
    • Excluir - USER_TABLESPACS = ALL EXCEPT('TBS1','TBS2');

  • Logging
    É possivel controlar se o PDB irá gerrar logs ou não com as clausulas LOGGING ou NO LOGGING

  • Standbys
    É possivel controlar se o PDB será replicado ou não para o Standby com a Clausula:
    • Replicado para Todos: STANDBYS=ALL
    • Nenhum: STANDBYS=NONE

  • Clonar PDB Sem Dados de Usuarios (12.1.0.2)
    Especificar a Clausula NO DATA


    Exemplo 2 Clonando Local PDBs

    O Exemplo abaixo clona o PDB Local Indaia para o PDB Sorocaba, limitando o tamanho do PDB a 2GB, o caminho dos arquivos para o +FRA em OMF, e irá excluir a tablespace USERS:

    SQL> select con_id, name, open_mode, total_size/1024/1024 from v$containers;
        CON_ID NAME OPEN_MODE  TOTAL_SIZE/1024/1024
    ---------- -------------------- ---------- --------------------
    1 CDB$ROOT READ WRITE      0
    2 PDB$SEED READ ONLY    800
    3 INDAIA READ WRITE    855
    4 ITU READ WRITE 2305.75
    5 RIBERAO READ WRITE 863.75
    6 SAMPA READ WRITE    855
    6 rows selected.
    Elapsed: 00:00:00.02
     
    SQL> select tablespace_name from cdb_tablespaces where con_id=3;
    TABLESPACE_NAME
    ------------------------------
    SYSTEM
    SYSAUX
    TEMP
    USERS
    Elapsed: 00:00:00.02
    SQL> 
     
    SQL> select con_id, name, open_mode, total_size/1024/1024 from v$containers;
        CON_ID NAME OPEN_MODE  TOTAL_SIZE/1024/1024
    ---------- -------------------- ---------- --------------------
    1 CDB$ROOT READ WRITE      0
    2 PDB$SEED READ ONLY    800
    3 INDAIA READ WRITE    855
    4 ITU READ WRITE 2305.75
    5 RIBERAO READ WRITE 863.75
    6 SAMPA READ WRITE    855
    7 SOROCABA MOUNTED      0
    7 rows selected.
    Elapsed: 00:00:00.07
    SQL>
     
    SQL> alter pluggable database sorocaba open;
    Pluggable database altered.
    Elapsed: 00:00:11.98
    SQL> 
     
    SQL> select con_id, name, open_mode, total_size/1024/1024 from v$containers;
        CON_ID NAME OPEN_MODE  TOTAL_SIZE/1024/1024
    ---------- -------------------- ---------- --------------------
    1 CDB$ROOT READ WRITE      0
    2 PDB$SEED READ ONLY    800
    3 INDAIA READ WRITE    855
    4 ITU READ WRITE 2305.75
    5 RIBERAO READ WRITE 863.75
    6 SAMPA READ WRITE    855
    7 SOROCABA READ WRITE    850
    7 rows selected.
    Elapsed: 00:00:00.03
    SQL> 
     
    SQL> select file_name from cdB_datA_files where con_id=7;
    FILE_NAME
    --------------------------------------------------------------------------------
    +FRA/CDBSP/5062B61BA5310980E055000000000001/DATAFILE/system.397.944949401
    +FRA/CDBSP/5062B61BA5310980E055000000000001/DATAFILE/sysaux.408.944949401
    /u01/app/oracle/product/12.1.0.2/db_1/dbs/MISSING00057
    Elapsed: 00:00:00.12
    SQL> 

    É isso,

    Espero que tenha ajudado, deixe um comentário.

    Diogo

    No comments: