De lá pra cá, daqui pra lá… rsrs vamos nessa???Olá amigos, seguidores, fãs, alunos (novo…rsrs), enfim… Hello World!!!
Bom dia, boa tarde, boa noite!!!!
Primeiramente gostaria de agradecer a todos que já aderiram o projeto DBA. Com certeza ele já é um sucesso.
Gostaria também de falar para você que ainda não aderiu, que ainda há tempo. NÃO deixe passar a oportunidade. Como eu falo a missão é ser um Projeto de Formação incrível com um investimento incomparável. Basta comparar…
Por isso participe, curta, assine o canal (dados estarão abaixo no post.
Ok!! Vamos trabalhar???
Como sempre nosso assunto de hoje é algo que pode ser útil, embora sendo uma dica simples muito poderá contribuir no dia a dia.
O que vamos conversar hoje é sobre transporte de dados. O famoso Transportable Tablespace.
Bem, em primeiro lugar o que vem a ser isso?? Qual a ferramenta para isso? Quando posso e devo utilizar??
Ok! Ok! Muitas perguntas, vamos às respostas:
O que vem a ser isso?
Transportable tablespace é uma forma simples e relativamente rápida de você transportar um grande volume de dados de forma rápida e segura entre instâncias de bancos de dados.
Eu diria que a palavra chave está na palavra “rápida”. Realmente este é o maior intuito na minha opinião.
Qual a ferramenta para isso?
O grande barato deste transporte é que ele não precisa de nenhuma outra ferramenta a mais para isso. Hummm, nesse momento você que conhece o preço de ferramentas “extras” da Oracle pode respirar aliviado. Para isso utilizamos o nosso velho conhecido DATAPUMP.
Quando posso e devo utilizar?
Bem, aqui está uma pergunta bem pertinente e para responder ela vou explicar algumas coisas com exemplos (adoro exemplos).
Imagine que você precisa movimentar um grupo de dados de um ambiente Oracle (instância) para outra.
Neste momento duas coisas são importantes (mais importantes):
1- Tamanho dos dados;
2- Quanto tempo tenho para isso.
Imaginemos que tenho em meu ambiente dois servidores com sistema operacional AIX (adoro AIX … s2) e quero enviar um volume de dados entre eles, porém você percebe que o volume é grande e você não tem muito tempo para isso.
Pronto! Está definido um cenário que pode ser ideal para utilizar nossa dica de hoje.
Veremos como funciona…
1- Primeiros passos são executados no servidor de origem. A primeira coisa a fazer é colocar o tablespace que você deseja transportar em modo read only:
ALTER TABLESPACE tablespace_name READ ONLY;
2- Com o datapump proceder o export (exportação dos dados):
expdp system/oracle DIRECTORY=orcl_dir DUMPFILE=nome_exp.dmp TRANSPORT_TABLESPACES=tablespace_name
Uma pausa e vamos às explicações:
export (expdp) orcl_dir é o nome do Oracle Directory, diretório onde o datapump lê e escreve os dados, DUMPFILE é o nome do arquivo que será gravado no diretório Oracle, e por fim o nome do tablespace a ser transportado.
Explicações dadas e feito isso está pronta a primeira etapa que é criar o arquivo de dump (cópia).
Nesta etapa eu acho algo interessante é a atuação da ferramenta. Nesta cópia ele leva os metadados do tablespace, ou seja, o processo é bem mais rápido que o export convencional, pois não traz um monte de dados.
Para terminar deverá fazer uma cópia do datafile e do dump gerado acima para o novo ambiente e procedido o import dos metadados no “outro lado” (onde vai receber os dados).
Vamos lá…
3- Agora precisamos copiar para o servidor de destino dois itens: arquivo dump e o datafile do tablespace.
A forma de cópia pode ser o comando scp do AIX mesmo.
Abaixo exemplo para cópia do datafile.
scp nome_datafile.dbf oracle@host_destino:/endereco_datafile/
Lembrando que o arquivo de dump deverá ser criado em um local reconhecido como Directory do Oracle. (na dúvida faz um select * from dba_directories)
Ok, feito isso, podemos liberar o servidor de origem. Vamos liberar o tablespace que estava read only:
ALTER TABLESPACE tablespace_name READ WRITE;
4- No servidor de destino devemos criar todos os schemas que por ventura existam como owner dos objetos que estarão no tablespace que está sendo transportado e depois proceder a importação:
impdp system/oracle DIRECTORY=nome_dir DUMPFILE=nome_exp.dmp logfile=imp.log transport_datafiles=/endereco_datafile/nome_datafile.dbf
Vamos a algumas explicações rápidas. Dumpfile é o nome do export gerado lá na origem, e nome do datafile é o que foi copiado.
Feito isso deverá estar tudo OK.
Ahhh!!!! Em tempo uma dica interessante:
Quer verificar se o tablespace pode ser transportado ou se há alguma violação, por exemplo de constraints?
Faça:
CONN / AS SYSDBA EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => 'TABLESPACE_NAME', incl_constraints => TRUE);
SELECT * FROM transport_set_violations; no rows selected SQL>
Legal não é mesmo?? Rápido, simples e indolor… Hehehe.
Agora como falei acima os canais de ligação entre a gente:
Grande abraço! Fiquem com Deus e é claro FOCO NA META!!!