[oracle_br] RES: [oracle_fasttrack] Automatização geração de relatórios

2011-05-12 Por tôpico Sergio Tavares Coutinho
Olá Cristiano,

 

Recomendo que você altere o seu script SQL de forma a deixar o mesmo
parecido com o abaixo:

 

REM Script Teste:usr_criacao.sql

spool /home/oracle/usr_criacao.txt

SELECT u.name,
D.ACCOUNT_STATUS,
D.LOCK_DATE,
TO_CHAR (u.ctime, 'dd/mm/ hh24:mi:ss') AS Criao,
TO_CHAR (u.ptime, 'dd/mm/ hh24:mi:ss') AS Modificacao
FROM sys.user$ u, dba_users d
WHERE u.name = d.username AND u.ctime = D.CREATED
AND d.created BETWEEN TO_DATE ('01/01/2009', 'dd/mm/yy')
AND TO_DATE ('31/12/2009', 'dd/mm/yy')
ORDER BY d.created;

/



spool off

 

EXIT;



É bastante provável que o script não esteja sendo executado devido à falta
do PONTO E VIRGULA e da BARRA. Sem eles, o SQL*PLUS entende que você não
terminou de “digitar” o comando SELECT, e este seria o motivo de não
execução. 

 

Coloque um EXIT ao final do registro para que o SQL*PLUS encerre normalmente
a sessão aberta.

 

Boa sorte,

 

Sergio

 

De: oracle_fasttr...@yahoogrupos.com.br
[mailto:oracle_fasttr...@yahoogrupos.com.br] Em nome de Cristiano
Vasconcelos
Enviada em: quinta-feira, 12 de maio de 2011 09:03
Para: GPOracle; Grupo OraOracle; José Laurindo Chiappa; Lista de Usuários
Oracle; Mosán Santos; Oracle in Brazil; Oracle Tools; oracle_br_docs;
oracle_fasttrack; Uncleoracle
Assunto: [oracle_fasttrack] Automatização geração de relatórios

 

  

Caros amigos,

CENÁRIO:
S.O. - Enterprise Linux Enterprise Linux AS release 4 (October Update 7)
Linux servidor.dominio.istancia.local 2.6.9-78.0.0.0.1.ELsmp #1
SMP Fri Jul 25 16:04:35 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

DB - Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

CASO:
Estou precisando automatizar geração diariá de informações em arquivo texto,
onde na nomenclatura do arquivo gerado tenha nomearq_ddmmyy:hhmm.txt. Este
arquivo após ser gerado é copiado do servidor da DB para uma outra máquina e
jogado em uma área de ftp. Pois bem, este procedimento atualmente está sendo
feito manualmente, então gostaria de saber como poderia ser feito
automaticamente em determinada hora do dia sem que seja preciso intervir.

Estou em duvida de como proceder em relação a automatização da cópia a ser
realizada pelo servidor e principalmente em relação a geração do arquivo
.TXT no oracle: O procedimento pode ser feito pelo Scheduler Job do
oracle, ou poderá ser feito pela Cron do S.O. Linux disparando um shell de
conexão com SQL*Plus chamando um SCRIPT com a estrutura de SELECT a qual
gerará as informações necessárias ???.

Caso alguns dos amigos possuam essa estrutura, favor repassá-la com
instruções.

Em sugestão dadas por alguns colaboradores dos grupos, implementei a rotina
abaixo descrita na cron do linux:

##
# CRONTAB
#
# Data: 12/05/2011
##
#
53 08 12 5 4 /bin/su - oracle -c sqlplus usuario/senha
@/home/oracle/usr_criacao.sql  /var/tmp/usr_criacao.log1

Onde 15 significa: aos 15 minustos
Onde 14 significa: às 14 horas
Onde 11 significa: dia 11 do mês
Onde 5 significa: Mês 5
Onde 3 significa: Quarta-feira
Onde oracle -c significa: rodar a linha de comando após conectar usuário
oracle

Conteudo do Script:

REM Script Teste:usr_criacao.sql

spool /home/oracle/usr_criacao.txt

SELECT u.name,
D.ACCOUNT_STATUS,
D.LOCK_DATE,
TO_CHAR (u.ctime, 'dd/mm/ hh24:mi:ss') AS Criao,
TO_CHAR (u.ptime, 'dd/mm/ hh24:mi:ss') AS Modificacao
FROM sys.user$ u, dba_users d
WHERE u.name = d.username AND u.ctime = D.CREATED
AND d.created BETWEEN TO_DATE ('01/01/2009', 'dd/mm/yy')
AND TO_DATE ('31/12/2009', 'dd/mm/yy')
ORDER BY d.created

spool off

-- Saída de Log´s: ---

CENÁRIO 01

Log da rotina quando gerada pela Crontab:

# cat usr_criacao.log1

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:53:01 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL Desconectado de Oracle Database 10g Release 10.2.0.3.0 - 64bit
Production

CENÁRIO 02

Rotina gerada sem ser pela Crontab, linha de comando executada no prompt
do sistema:

# /bin/su - oracle -c sqlplus usuario/senha @/home/oracle/usr_criacao.sql
 /var/tmp/usr_criacao.log

Log da rotina quando gerada sem ser pela Crontab:

# cat usr_criacao.log

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:24:42 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL SQL

PERGUNTA ?

Diante dos dois cenários acima expostos, gostaria de saber o por que da não
geração das informações por parte do script, ONDE ESTÁ O ERRO, por que no
CENÁRIO 01 após a conexão ao sqlplus o script não é gerado e sim
desconectado do banco ???. Por que no CENÁRIO 02 é gerada essa saída
SQL SQL ficando a sessão ativa, como se estivesse gerando algo sem na
verdade gerar nada, tendo que ser derrubada para findar.

Aos amigos com maior experiência na plataforma, peço 

[oracle_br] RES: [oracle_fasttrack] Automatização geração de relatórios

2011-05-12 Por tôpico Sergio Tavares Coutinho
 

 

De: Sergio Tavares Coutinho [mailto:sergio.couti...@estadao.com.br] 
Enviada em: quinta-feira, 12 de maio de 2011 12:21
Para: 'oracle_fasttr...@yahoogrupos.com.br'; 'GPOracle'; 'Grupo OraOracle';
'José Laurindo Chiappa'; 'Lista de Usuários Oracle'; 'Mosán Santos'; 'Oracle
in Brazil'; 'Oracle Tools'; 'oracle_br_docs'; 'Uncleoracle'
Assunto: RES: [oracle_fasttrack] Automatização geração de relatórios

 

Olá Cristiano,

 

Recomendo que você altere o seu script SQL de forma a deixar o mesmo
parecido com o abaixo:

 

REM Script Teste:usr_criacao.sql

spool /home/oracle/usr_criacao.txt

SELECT u.name,
D.ACCOUNT_STATUS,
D.LOCK_DATE,
TO_CHAR (u.ctime, 'dd/mm/ hh24:mi:ss') AS Criao,
TO_CHAR (u.ptime, 'dd/mm/ hh24:mi:ss') AS Modificacao
FROM sys.user$ u, dba_users d
WHERE u.name = d.username AND u.ctime = D.CREATED
AND d.created BETWEEN TO_DATE ('01/01/2009', 'dd/mm/yy')
AND TO_DATE ('31/12/2009', 'dd/mm/yy')
ORDER BY d.created;

/

spool off

 

EXIT;

É bastante provável que o script não esteja sendo executado devido à falta
do PONTO E VIRGULA e da BARRA. Sem eles, o SQL*PLUS entende que você não
terminou de “digitar” o comando SELECT, e este seria o motivo de não
execução. 

 

Coloque um EXIT ao final do registro para que o SQL*PLUS encerre normalmente
a sessão aberta.

 

Boa sorte,

 

Sergio

 

De: oracle_fasttr...@yahoogrupos.com.br
[mailto:oracle_fasttr...@yahoogrupos.com.br] Em nome de Cristiano
Vasconcelos
Enviada em: quinta-feira, 12 de maio de 2011 09:03
Para: GPOracle; Grupo OraOracle; José Laurindo Chiappa; Lista de Usuários
Oracle; Mosán Santos; Oracle in Brazil; Oracle Tools; oracle_br_docs;
oracle_fasttrack; Uncleoracle
Assunto: [oracle_fasttrack] Automatização geração de relatórios

 

  

Caros amigos,

CENÁRIO:
S.O. - Enterprise Linux Enterprise Linux AS release 4 (October Update 7)
Linux servidor.dominio.istancia.local 2.6.9-78.0.0.0.1.ELsmp #1
SMP Fri Jul 25 16:04:35 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

DB - Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

CASO:
Estou precisando automatizar geração diariá de informações em arquivo texto,
onde na nomenclatura do arquivo gerado tenha nomearq_ddmmyy:hhmm.txt. Este
arquivo após ser gerado é copiado do servidor da DB para uma outra máquina e
jogado em uma área de ftp. Pois bem, este procedimento atualmente está sendo
feito manualmente, então gostaria de saber como poderia ser feito
automaticamente em determinada hora do dia sem que seja preciso intervir.

Estou em duvida de como proceder em relação a automatização da cópia a ser
realizada pelo servidor e principalmente em relação a geração do arquivo
.TXT no oracle: O procedimento pode ser feito pelo Scheduler Job do
oracle, ou poderá ser feito pela Cron do S.O. Linux disparando um shell de
conexão com SQL*Plus chamando um SCRIPT com a estrutura de SELECT a qual
gerará as informações necessárias ???.

Caso alguns dos amigos possuam essa estrutura, favor repassá-la com
instruções.

Em sugestão dadas por alguns colaboradores dos grupos, implementei a rotina
abaixo descrita na cron do linux:

##
# CRONTAB
#
# Data: 12/05/2011
##
#
53 08 12 5 4 /bin/su - oracle -c sqlplus usuario/senha
@/home/oracle/usr_criacao.sql  /var/tmp/usr_criacao.log1

Onde 15 significa: aos 15 minustos
Onde 14 significa: às 14 horas
Onde 11 significa: dia 11 do mês
Onde 5 significa: Mês 5
Onde 3 significa: Quarta-feira
Onde oracle -c significa: rodar a linha de comando após conectar usuário
oracle

Conteudo do Script:

REM Script Teste:usr_criacao.sql

spool /home/oracle/usr_criacao.txt

SELECT u.name,
D.ACCOUNT_STATUS,
D.LOCK_DATE,
TO_CHAR (u.ctime, 'dd/mm/ hh24:mi:ss') AS Criao,
TO_CHAR (u.ptime, 'dd/mm/ hh24:mi:ss') AS Modificacao
FROM sys.user$ u, dba_users d
WHERE u.name = d.username AND u.ctime = D.CREATED
AND d.created BETWEEN TO_DATE ('01/01/2009', 'dd/mm/yy')
AND TO_DATE ('31/12/2009', 'dd/mm/yy')
ORDER BY d.created

spool off

-- Saída de Log´s: ---

CENÁRIO 01

Log da rotina quando gerada pela Crontab:

# cat usr_criacao.log1

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:53:01 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL Desconectado de Oracle Database 10g Release 10.2.0.3.0 - 64bit
Production

CENÁRIO 02

Rotina gerada sem ser pela Crontab, linha de comando executada no prompt
do sistema:

# /bin/su - oracle -c sqlplus usuario/senha @/home/oracle/usr_criacao.sql
 /var/tmp/usr_criacao.log

Log da rotina quando gerada sem ser pela Crontab:

# cat usr_criacao.log

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:24:42 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL SQL

PERGUNTA ?

Diante dos dois cenários acima expostos, gostaria de saber o por