Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CesarMoraes

DBMS_JOB.RUN / DBlink

Recommended Posts

Ola pessoal,

 

Estou com um problema e não consigo resolver.

 

Criei um dblink com o usuario SYSTEM, depois criei um job com esse dblink. O problema que não consigo executar esse job. Não consigo dar run no job com o usuario SYSTEM e não consigo criar o dblink com o usuar SYS.

 

Preciso saber.

 

Como faço para executar o dbms_job.run com o system? Eu consigo dar submit ou remove, mas não consigo o run.

 

Como criar um dblink com o usuario SYS?

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dblinks eu vejo criados public por um user com grant de dba.

Tem uns detalhes de grant que não me lembro mas posso ver na segunda.

Jobs eu rodo por agendamento, acho .submit, em geral os jobs que eu rodo mandam um email

Com o resumo da execução, ok ou com erro.uma forma de controlar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não achei a forma que fizemos os Grants aqui, mas dei uma pesquisada e vi que tem muita coisa de dblink na Web.

 

O User System não é usuário recomendado para o operacional, melhor criar um user com Grant de DBA.

 

Jobs , este script cria um job que roda as 00h de hoje e depois se agenda para as 0h da próxima segunda

 

 

declare
  x binary_integer;
begin
  dbms_job.submit(x,
                  'PROCEDURE;',
                  TO_DATE('24/06/2013 00:00:00','DD/MM/YYYY HH24:MI:SS'),
                  'trunc(next_day(sysdate,'monday'))');
  dbms_output.put_line(x);
  COMMIT;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Motta desculpe a demora para responder.

 

Então mesmo com outro usuario eu não consigo executar.

 

Eu so consigo executar o dbms_job.run com o usuario SYS.

declare
  x binary_integer;
begin
  dbms_job.submit@TESTE(x, 'BEGIN EXECUTE IMMEDIATE ''CREATE TABLE X (X NUMBER)''; END;');
  DBMS_JOB.RUN@TESTE(X);
  COMMIT;
end;

ORA-12011: a execução de 1 jobs falhou
ORA-06512: em "SYS.DBMS_IJOB", line 651
ORA-06512: em "SYS.DBMS_JOB", line 284
ORA-06512: em line 5
12011. 00000 - "execution of %s jobs failed"
*Cause: An error was caught in dbms_ijob.run from one or more jobs
which were due to be run.
*Action: Look at the alert log for details on which jobs failed and why.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que um JOB para dar um create table ?!

 

Achou alguma coisa no Alert Log ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui resolver esse problema utilizando dbms_sql. Porém surgiram outro problemas.

 

O que eu pretendo fazer é o seguinte, rodar as procedures em qq servidor. Por exemplo eu tenho uma procedure que verifica a utilização de tablespace de um determinado schema.

 

Quando eu for rodar essa procedure no meu servidor eu vou passar os parametros schema e sid (que vai ser a base remota).

 

Porém eu estou tendo problema na variavel sid, pois a procedure não é compilada.



O JOB era pq eu precisava fazer uma DDL remota e li em algum forum pra utilizar o JOB.

 

Percebi que não é legal e usei a DBMS_SQL agora. Mas estou com problema na hora de passar o database link como variavel.

 

Motta, voce recomenda outra maneira de executar DDL e DML remota?

Compartilhar este post


Link para o post
Compartilhar em outros sites

CesarMoraes, não faço idiea, nunca fiz nada parecido com isto.

 

Para fazer isto vc tem permissão que permitem criar e executar Sp´s, logo o rpoblema seria apenas rodar, não ?

 

Precisando fazer isto de tempos em tempos dispare as Sp´s por job e grave arquivos de execução ou mande um email.

 

Conexões deste tipo são perigosas pois abrem portas dos Bd´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Motta, eu tenho N servidores para gerenciar. Então resolvi (não sei se foi uma ideia muito boa) fazer uma proc que faz limpeza na base, ou seja apaga as tabelas de log. So que eu não quero colocar 1 proc em cada servidor, quero criar 1 em um servidor central e de la ele rodar nos N sevidores.

 

O porque disso. Se eu precisar mudar a procedure não preciso muda-la em N servidores.

 

Queria centralizar essas proc de processos operacionais em um unico servidor.

 

Sera que to viajando muito? rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites


Crie uma tabela que terá a procedure e seu código no servidor base

Crie uma procedure que de cada servidor filho faça :

Leia o nome , código da procedure a ser realizda (create or replace xxx)

Submeta este código ao compilador via exec immediate

Se criado ok

execute a sp via exec immediate

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.