Re: [oracle_br] Privilégio insuficiente

2012-07-12 Por tôpico Alessandro Lúcio Cordeiro da Silva
O usuario Dono da procedure deve ter o privilegio direto, não pode ser dado via 
role. Tipo não adianta dar permissão de DBA, pois apesar de estar implicito que 
esta role tem permissão de Criar tabela, mas dentro da procedure o usurio dono 
da procedure deve ter a permissão Create Table.

 
Alessandro Lúcio Cordeiro da Silva 
    Analista de Sistema
þ http://alecordeirosilva.blogspot.com/
O tic-tac do relógio me lembra de algo muito importante que esta acontecendo: 
estamos vivos.
    "Joana de Souza Schmitz Croxato"
 



 De: raffaell.ti77 
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Quinta-feira, 12 de Julho de 2012 17:20
Assunto: [oracle_br] Privilégio insuficiente
 

  
Pessoal, estou com um probleminha, a procedure abaixo é criada com sucesso, sem 
erros de compilação. Na execução da procedure me dá um erro de insuficiente 
privilégio. O usuário que estou executando tem privilégio de sysdba. Com o 
mesmo usuário peguei o CREATE TABLE e rodei por fora, e a tabela foi criada com 
sucesso, gostaria de saber alguma sugestão de vocês.

Obs: O ususario cobranca recebeu todos os grants possíveis

create or replace
PROCEDURE cobranca.SP_GERAR_RES_PENDENCIA
IS
BEGIN

EXECUTE IMMEDIATE ('CREATE TABLE cobranca.quadra_temp AS (select c.qdra_id 
qdra_id, i.imov_idcategoriaprincipal catg_id, count(distinct c.imov_id) 
quantidade
from faturamento.conta c
inner join cadastro.imovel i
on i.imov_id = c.imov_id
inner join cadastro.sistema_parametros sp
on 1=1
where((c.cnta_amreferenciacontabil <=
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END)
and c.dcst_idatual in ( 0,1,2) )
or ( c.cnta_amreferenciacontabil >
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END) and c.dcst_idatual in (3,4,5,8) )
and ( c.dcst_idanterior is null
or ( c.cnta_amreferenciaconta <= (CASE WHEN 
(substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12'')) ELSE sp.parm_amreferenciafaturamento - 1 END) and 
c.dcst_idanterior not in (1,2) )))
GROUP BY c.qdra_id, i.imov_idcategoriaprincipal)');

END; 


 

[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Como replicar uma base de dados mas sem replicar os deletes e os drop

2012-07-12 Por tôpico J. Laurindo Chiappa
  Eu estava pensando no assunto, também, e o que me deixou pensando por mais 
tempo foi o trecho aonde o colega que fez a pergunta diz que NÂO quer replicar 
os DELETEs e DROPs (obviamente replicando os INSERTs) : ele não disse mas 
IMAGINO que a intenção dele é ter um ambiente de Homologação, ie, um com os 
dados reais da produção E que aonde fosse possível re-executar qquer transação 
feita na Produção nos dados Inseridos, tipo : na segunda-feira o usuário 
inseriu X novos produtos no cadastro, na terça-feira foram feitas N vendas e 
geradas NFs , aí na 4a feira o usuário pediu um relatório de vendas e deu qquer 
problema de performance , erro lógico, whatever, aí na 5a feira o colega 
quereria ter esses INSERTs todos presentes na base homo para poder REPRODUZIR a 
transação/processamento feito pelo usuário na 4a feira, é isso que entendi 
Se eu estou correto, uma única Replicação no fim de semana ABSOLUTAMENTE 
não atende, aí realmente seria ou o Goldengate OU o Streams : o ponto aqui é 
que com essas duas dá para vc escolher o que acontece com DELETEs, no caso dele 
ignorar ... 

É claro, porém, que não é difícil pensar em casos limítrofes, que 
poderiam exigir tratamento especial, tipo :  usuário deleta registro com uma 
chave X e depois re-insere registro com essa mesma chave X mas com atributo 
diferente , e há especificação de ON DELETE CASCADE - como ficaria a 
integridade nesse caso, o DELETE é essencial para que o ambiente replicado 
aceite o INSERT do novo registro com a mesma chave   Então Acho que teria 
que haver também Customização nessa solução pra ele...

 []s
 
   Chiappa

--- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." 
 escreveu
>
> Acredito que o GoldenGate seria uma ferramenta ótima pra isso...
> 
> Sem utilizar ferramenta externa eu também iria sugerir PL/SQL  e dblink!
> 
> Nem precisaria ser por trigger... pois ele disse que quer replicar uma vez
> por semana...
> Poderia usar o MERGE nesse caso, em scripts rodando 1 vez por semana, e o
> MERGE
> atualizando os novos dados (inserts e updates).
> 
> Provavelmente deve haver outras soluções mais adequadas... essa que citei é
> bem
> simples, talvez até um pouco "tosca", e só resolveria a replicação dos
> dados, não resolveria
> replicação de objetos criados/alterados.
> 
> 
> 
> 
> 2012/7/11 Duilio Bruniera 
> 
> > **
> >
> >
> > Olha amigão, não sei se alguem no grupo sabe algo melhor que isso , mais na
> > minha cabeça a única coisa que voce pode fazer é colocar triggers no seu
> > banco de produção, para gravar via dblink no seu outro banco. Mas isso
> > seria
> > uma solução muito tosca e dependendo do seu ambiente talves inviavel.
> >
> > De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em
> > nome de cassulcamilojacinto
> > Enviada em: quarta-feira, 11 de julho de 2012 17:15
> > Para: oracle_br@yahoogrupos.com.br
> > Assunto: [oracle_br] Como replicar uma base de dados mas sem replicar os
> > deletes e os drop
> >
> >
> > Tenho uma base de dados producao e tenho outra que foi feita do backup da
> > de
> > producao como replicar 1 vez por semana ou sempre o conteúdo de produção
> > para a replica mas sem replicar os deletes e drop
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >  
> >
> 
> 
> 
> -- 
> Att,
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Re: paradas estranhas banco produção

2012-07-12 Por tôpico J. Laurindo Chiappa
   É verdade que, por natureza, a Virtualização com hardware simulado (em 
oposição à virtualização hard, que simplesmente divide/isola o hardware real, 
como existe em alguns unix-like) pode incorrer por si só em problemas (por 
exemplo, ao utilizar um driver lógico ao invés de acesso físico direto ao 
hardware SCSI real), E também há a questão da dificuldade de monitorar o 
hardware real (pois em caso de super-utlização de um recurso no SO host ele 
normalmente simplesmente Enfileira (coloca em queue/espera) as requisiões dos 
SOs guest, o SO NÂO registra 100% de uso, só o que aparece para ele é 
degradação do tempo de resposta da CPU ou do I/O, mas não dá para dizer de 
bate-pronto que seja esse o principal fator, ou mesmo que isso seja um fator 
atuante
 Eu diria pra vc seguir as Recomendações gerais já dadas na outra resposta, que 
se aplicam também á ambientes virtualizados, E especificamente sobre a 
Virtualização, seguir (aonde vc pense que não conflitam) as Recomendações do 
fornecedor da solução de virtualização - por exemplo, o paper 
http://www.vmware.com/files/pdf/partners/oracle/Oracle_Databases_on_VMware_-_Best_Practices_Guide.pdf
 fala sobre o assunto um pouco
 
  []s
  
Chiappa


--- Em oracle_br@yahoogrupos.com.br, Paulo Couto  escreveu
>
> Tem outro detalhe que esqueci de mencionar, está maquina é um VM, vocês tem 
> algum comentário sobre oraclem em cima de VMWARE ?
>  
> Att,
>  
> 
> 
>  De: ederson2001br 
> Para: oracle_br@yahoogrupos.com.br 
> Enviadas: Quinta-feira, 12 de Julho de 2012 14:35
> Assunto: [oracle_br] Re: paradas estranhas banco produção
>   
>  
>    
>  
> Alô Paulo,
> 
> Bem, com esta informação da versão completa do SO, muda muita coisa no que 
> falei.
> 
> -Não tem dúvidas quanto à capacidade de gerenciamento da quantidade física de 
> memória, mas continua a dúvida se a quantidade de memória é suficiente, uma 
> vez que a SGA está em 3Gb, o Windows gasta mais uma parte e é preciso saber a 
> quantidade de conexões de usuários ao servidor, para calcular o gasto de 
> memória com conexões: se está usando SWAP, a memória física estará 
> insuficiente para a configuração atual.
> -Um detalhe que o Chiappa notou, me passou despercebido: a mensagem de  
> DataGuard não disponível na versão.
> -Dê uma olhada do EventView do Windows, para ver as mensagens do SO no 
> momento da queda do banco. Pegue o horário do startup do banco no Alert e 
> veja no EventView as mensagens registradas instantes ANTES do banco cair, 
> sempre acrescenta informações novas.
> 
> Ederson Elias
> DBA Oracle
> http://br.linkedin.com/pub/ederson-elias/24/8b/8b0
> 
> --- Em mailto:oracle_br%40yahoogrupos.com.br, Paulo Couto  
> escreveu
> >
> > Ederson, me expressei mal, na verdade no listener do oracle ele carrega 
> > umas librarys de um sistema de GIS, mas o sistema mesmo fica em outro serv. 
> > Sem a atualização as librarys não funcionavam.
> >  
> > O windows é enterprise está com sp2.
> >  
> >  
> > Obrigado pelas dicas, vamos olhar com atenção.
> >  
> >  
> > Abs,
> 
>
>  
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




Re: [oracle_br] Como replicar uma base de dados mas sem replicar os deletes e os drop

2012-07-12 Por tôpico Fernando Franquini 'capin'
Milton,

a sua sugestão é o que pensei também sem possuir qualquer ferramenta,
rodando a noite somente ela agendada via job ou schedule.

Fugir de Trigger sempre que possivel, ainda mais que precisa de algo
semanal.

2012/7/11 Milton Bastos Henriquis Jr. 

> Acredito que o GoldenGate seria uma ferramenta ótima pra isso...
>
> Sem utilizar ferramenta externa eu também iria sugerir PL/SQL  e dblink!
>
> Nem precisaria ser por trigger... pois ele disse que quer replicar uma vez
> por semana...
> Poderia usar o MERGE nesse caso, em scripts rodando 1 vez por semana, e o
> MERGE
> atualizando os novos dados (inserts e updates).
>
> Provavelmente deve haver outras soluções mais adequadas... essa que citei é
> bem
> simples, talvez até um pouco "tosca", e só resolveria a replicação dos
> dados, não resolveria
> replicação de objetos criados/alterados.
>
>
>
>
> 2012/7/11 Duilio Bruniera 
>
> > **
> >
> >
> > Olha amigão, não sei se alguem no grupo sabe algo melhor que isso , mais
> na
> > minha cabeça a única coisa que voce pode fazer é colocar triggers no seu
> > banco de produção, para gravar via dblink no seu outro banco. Mas isso
> > seria
> > uma solução muito tosca e dependendo do seu ambiente talves inviavel.
> >
> > De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br]
> Em
> > nome de cassulcamilojacinto
> > Enviada em: quarta-feira, 11 de julho de 2012 17:15
> > Para: oracle_br@yahoogrupos.com.br
> > Assunto: [oracle_br] Como replicar uma base de dados mas sem replicar os
> > deletes e os drop
> >
> >
> > Tenho uma base de dados producao e tenho outra que foi feita do backup da
> > de
> > producao como replicar 1 vez por semana ou sempre o conteúdo de produção
> > para a replica mas sem replicar os deletes e drop
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
>
> --
> Att,
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> 
>
>
> --
> >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> inteira responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
>
> --
> >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO!
> VISITE: http://www.oraclebr.com.br/
> 
> Links do Yahoo! Grupos
>
>
>


-- 
Fernando Franquini - Capin
Graduado Bacharel em Ciencias da Computação - UFSC
Analista de Sistemas e de Banco de Dados / DBA
Contatos: 048.9902.4047  - Florianópolis - SC - Brasil

http://certificacaobd.com.br/
http://br.linkedin.com/in/capin
http://wf5.com.br/


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] execute immediate

2012-07-12 Por tôpico Alessandro Lúcio Cordeiro da Silva
Tire o Ponto e Virgula no final da instrução .


Ao inves disso

GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  );');

Faça
GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  )');
 
Alessandro Lúcio Cordeiro da Silva 
    Analista de Sistema
þ http://alecordeirosilva.blogspot.com/
O tic-tac do relógio me lembra de algo muito importante que esta acontecendo: 
estamos vivos.
    "Joana de Souza Schmitz Croxato"
 



 De: raffaell.ti77 
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Quinta-feira, 12 de Julho de 2012 8:10
Assunto: [oracle_br] execute immediate
 

  
Pessoal, bom tarde.

Estou tendo um problema com um execute immediate dentro um SP.
EU tenho um create table que executando apenas ela por fora, ela é criada sem 
problema algum, mas quando coloco dentro do execute immediate me dá um erro na 
hora de executar a procedure. Segue o exemplo:

CREATE OR REPLACE PROCEDURE teste_immediate IS
BEGIN
EXECUTE IMMEDIATE('CREATE TABLE QUADRA_TEMP AS (select c.qdra_id qdra_id, 
i.imov_idcategoriaprincipal catg_id, count(distinct c.imov_id) quantidade
from faturamento.conta c
inner join cadastro.imovel i
on i.imov_id = c.imov_id
inner join cadastro.sistema_parametros sp
on 1=1
where((c.cnta_amreferenciacontabil <=
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END)
and c.dcst_idatual in ( 0,1,2) )
or ( c.cnta_amreferenciacontabil >
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END) and c.dcst_idatual in (3,4,5,8) )
and ( c.dcst_idanterior is null
or ( c.cnta_amreferenciaconta <= (CASE WHEN 
(substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))  ELSE sp.parm_amreferenciafaturamento - 1 END) and 
c.dcst_idanterior not in (1,2) )))
GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  );');

END;

O erro gerado é o seguinte:

ORA-00911: caractere inválido
ORA-06512: em "TESTE_IMMEDIATE", line 3
ORA-06512: em line 2

Eu acho que o problema está no caracter com duas aspas simples, exemplo: ''12''.

Como faço para resolver esse probleminha, alguém tem uma sugestão?


 

[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] execute immediate

2012-07-12 Por tôpico Milton Bastos Henriquis Jr.
Uma sugestão é criar uma VIEW deste select, e daí criar a tabela com
"select * from view".



2012/7/12 raffaell.ti77 

> **
>
>
> Pessoal, bom tarde.
>
> Estou tendo um problema com um execute immediate dentro um SP.
> EU tenho um create table que executando apenas ela por fora, ela é criada
> sem problema algum, mas quando coloco dentro do execute immediate me dá um
> erro na hora de executar a procedure. Segue o exemplo:
>
> CREATE OR REPLACE PROCEDURE teste_immediate IS
> BEGIN
> EXECUTE IMMEDIATE('CREATE TABLE QUADRA_TEMP AS (select c.qdra_id qdra_id,
> i.imov_idcategoriaprincipal catg_id, count(distinct c.imov_id) quantidade
> from faturamento.conta c
> inner join cadastro.imovel i
> on i.imov_id = c.imov_id
> inner join cadastro.sistema_parametros sp
> on 1=1
> where((c.cnta_amreferenciacontabil <=
> (CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) =
> ''01'') THEN
> to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento),
> 1, 4)) - 1)) || ''12''))
> ELSE sp.parm_amreferenciafaturamento - 1 END)
> and c.dcst_idatual in ( 0,1,2) )
> or ( c.cnta_amreferenciacontabil >
> (CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) =
> ''01'') THEN
> to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento),
> 1, 4)) - 1)) || ''12''))
> ELSE sp.parm_amreferenciafaturamento - 1 END) and c.dcst_idatual in
> (3,4,5,8) )
> and ( c.dcst_idanterior is null
> or ( c.cnta_amreferenciaconta <= (CASE WHEN
> (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') THEN
> to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento),
> 1, 4)) - 1)) || ''12'')) ELSE sp.parm_amreferenciafaturamento - 1 END) and
> c.dcst_idanterior not in (1,2) )))
> GROUP BY c.qdra_id, i.imov_idcategoriaprincipal );');
>
> END;
>
> O erro gerado é o seguinte:
>
> ORA-00911: caractere inválido
> ORA-06512: em "TESTE_IMMEDIATE", line 3
> ORA-06512: em line 2
>
> Eu acho que o problema está no caracter com duas aspas simples, exemplo:
> ''12''.
>
> Como faço para resolver esse probleminha, alguém tem uma sugestão?
>
>  
>



-- 
Att,


[As partes desta mensagem que não continham texto foram removidas]





--
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  

 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html