Pesquisar

Quem sou eu

Minha foto
Formado em Tecnologia de Processamento de Dados pela FESP-Paraná. Pós-graduado em Administração em Informática e Administração de Banco de Dados pela FESP-Paraná. Certificação ORACLE/OCA e DB2 9 Family Fundamentals.

sábado, 10 de abril de 2010

Automatizando IMPORT de Bases

Olá Pessoal!

No primeiro post que fiz em Abril/2010, comentei sobre a implementação de um processo "automatizado" de IMPORT de bases de dados. Porém, não detalhei o processo.

Então, para dividir o conhecimento com vocês, resolvi descrever em detalhes o processo.

A receita é simples. Basicamente, consiste das seguintes tarefas:

  1. Bloquear a conta do usuário/esquema;
  2. Desconectar sessões ativas/inativas do usuário;
  3. Dropar o usuário;
  4. Importar os dados.

Detalhando:

Lembrando que, o processo foi desenvolvido utilizando comandos do sistema operacional Windows e scripts para serem executados via SQLPLUS (DBA que é DBA utiliza SQLPLUS ... hehehe).

- Bloquear a conta do usuário a ser carregado E desconectar sessões ativas/inativas do usuário: neste script juntei as atividades de bloqueio da conta do usuário e montagem dinâmica dos KILL SESSIONs das sessões do usuário no BD. O usuário deve ser bloqueado de maneira a evitar novas conexões e suas sessões derrubadas para poder ser dropado. Segue abaixo, um modelo deste script. O script gera log de todas as operações executadas sobre o banco. Aliás, nunca devemos esquecer de gerar log de TUDO, absolutamente TUDO que é executado no BD - é uma boa prática, demonstra profissionalismo e ajuda na identificação de possíveis problemas - mesmo que seja em ambiente de homologação. Resumindo, proteja-se SEMPRE.

killsessionUSUARIO.SQL
SET ECHO OFF
SET HEADING OFF
SET FEEDBACK OFF
CONN sys/****@instancia as sysdba
SPOOL c:\cargas_automaticas\killsessionUSUARIO_2.sql

SELECT 'SPOOL c:\cargas_automaticas\killsessionUSUARIO_2.log' FROM DUAL;
SELECT 'ALTER USER USUARIO ACCOUNT LOCK;' FROM DUAL;
SELECT 'alter system kill session '||chr(39)||sid||','||serial#||chr(39)||';' FROM v$session WHERE username='USUARIO';
SELECT 'SPOOL OFF' FROM DUAL;

SPOOL OFF
SET HEADING ON
SET FEEDBACK ON
SET ECHO ON
@c:\cargas_automaticas\killsessionUSUARIO_2.sql
EXIT

- Dropar o usuário: realizada as operações do passo 1 e 2, as etapas seguintes são dropar o usuário e recriá-lo. Também juntei essas operações em um único script. Segue abaixo o modelo do script para estas tarefas.

recria_USUARIO.sql

SET ECHO on

spool c:\cargas_automaticas\recria_USUARIO.log
conn sys/****@instancia as sysdba
drop user USUARIO cascade;
create user USUARIO identified by senha
default tablespace TBS_USUARIO temporary tablespace TBS_TEMP account unlock;
alter user USUARIO quota unlimited on TBS_USUARIO;

grant create session, alter session, create cluster,
create sequence, create synonym, create table, create view, create indextype,
create procedure,create trigger,create type to USUARIO;

SPOOL off
SET ECHO off
EXIT

- Importar os dados para o usuário: concluída toda a preparação do usuário para receber o conteúdo do DUMP o próximo passo é executar a importação propriamente dita. Para executar as atividades automaticamente, desenvolvi um script que executa todos os passos acima citados concluindo com o comando IMPORT. Abaixo, o script final.

import_USUARIO.cmd

ECHO ********************************

ECHO * Importando INSTANCIA.USUARIO
ECHO ********************************
ECHO *
ECHO * Finalizando sessoes de USUARIO ... Aguarde ...
ECHO *
sqlplus /nolog @c:\cargas_automaticas\killsessionUSUARIO.sql
ECHO *
ECHO *
ECHO * Aguardando 10 minutos para que as conexões terminem antes de dropar o usuário
ECHO *
sleep 600
ECHO *
ECHO * Recriando usuario USUARIO ...
ECHO *
sqlplus /nolog @c:\cargas_automaticas\recria_USUARIO.sql
ECHO *
ECHO * Importando base de dados USUARIO ...
ECHO *
imp sys/****@instancia file=c:\cargas_automaticas\arquivo.dmp fromuser=usuario touser=usuario log=c:\cargas_automaticas\import_usuario.cmd recalculate_statistics=Y
ECHO *
ECHO ********************************

Para minimizar os riscos de alguma sessão conectada ao usuário e conseguir eliminar o usuário/esquema, implementei o comando SLEEP do WINDOWS para "congelar' a sessão do sistema operacional durante 10 minutos. Lembrando que, o aplicativo SLEEP.EXE é instalado com o pacote RESOURCE KIT do WINDOWS.

Até a próxima.

Nenhum comentário:

Postar um comentário