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