Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Poliva

Bloquear um tabela para fazer insert (PLSQL - Oracle)

Recommended Posts

Bom dia pessoal,

Preciso fazer o seguinte...

- Bloquear um tabela (para garantir que mais nada, nem ninguém possa fazer qualquer tipo de alteração nela)

- Fazer todos os inserts na tabela

- Desbloquear a tabela

O meu grande problema é conseguir executar todos os inserts com a tabela bloqueada. Consegui fazer bloquear a tabela inteira para cada insert, utilizando uma procedure e um a trigger. Mas para um 'pacote' de inserts não tenho ideia de como fazer.

Agradeço a quem puder ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua necessidade não é o contrário??

Tipo, Desbloquear a tabela, inserir o que precisa, e depois bloquear para mais nada ser inserido?

Em mysql, sql server, você teria que pesquisar e estudar os comandos Grant e Revoke, no Oracle não sei como é isso. Mas pesquise por essa linha que vai achar fácil, creio eu.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Sua necessidade não é o contrário??

Tipo, Desbloquear a tabela, inserir o que precisa, e depois bloquear para mais nada ser inserido?

Em mysql, sql server, você teria que pesquisar e estudar os comandos Grant e Revoke, no Oracle não sei como é isso. Mas pesquise por essa linha que vai achar fácil, creio eu.

Não, a minha necessidade é exatamente a que eu cite.

Pois preciso garantir que somente um usuário esteja inserindo dados nesta tabela em determinado momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, dei uma pesquisada rápida, veja se é isso...

GRANT Insert, Update, Delete ON TABELA TO USUARIO01

GRANT Insert, Update, Delete ON TABELA TO USUARIO02

REVOKE Insert ON TABELA TO USUARIO02

Não olhei direito, mas tem algumas cláusulas para especificar todos os privilégios para todas as tabelas, dá uma lida aqui que deve ter informação para que você precisa..

http://www.abstratos.com/guia_referencia_rapida_abstratos.pdf

http://profissionaloracle.com.br/blogs/ronaldo/artigos/concessao-de-privilegio-comando-grant/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá, dei uma pesquisada rápida, veja se é isso...

GRANT Insert, Update, Delete ON TABELA TO USUARIO01

GRANT Insert, Update, Delete ON TABELA TO USUARIO02

REVOKE Insert ON TABELA TO USUARIO02

Não olhei direito, mas tem algumas cláusulas para especificar todos os privilégios para todas as tabelas, dá uma lida aqui que deve ter informação para que você precisa..

http://www.abstratos.com/guia_referencia_rapida_abstratos.pdf

http://profissionaloracle.com.br/blogs/ronaldo/artigos/concessao-de-privilegio-comando-grant/

Muito obrigado,

Esse material que você passou talvez possa me ajudar em algo.

Mas o problema que tenho aqui é um pouco pior. Porque preciso criar uma Procedure que faça tudo que citei de uma vez só.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, com Oracle nunca mexi, só mysql e sql server, mas não deve ser muito complicado isso, seria criar a procedure e colocar uma sequência de Grant e Revokes para sua necessidade, mas como disse, meu conhecimento oracle hoje é zero ^^

Bom, boa sorte ^^

E achar material oracle não é muito fácil hein, oloco........

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olha, com Oracle nunca mexi, só mysql e sql server, mas não deve ser muito complicado isso, seria criar a procedure e colocar uma sequência de Grant e Revokes para sua necessidade, mas como disse, meu conhecimento oracle hoje é zero ^^

Bom, boa sorte ^^

E achar material oracle não é muito fácil hein, oloco........

Valeu!

Realmente não é fácil achar esse material sobre Oracle, eu havia feito de uma forma que bloqueava a tabela para cada insert, mas depois de conversas descobrir que não era dessa forma que queriam, queriam que bloqueasse para um bloco de inserts.

Aí começou o problema porque o pessoal aqui é especialista em Java e o único que já trabalhou com Oracle sou eu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que não entendi, como seria a forma que você bloqueia por insert?

Não vejo uma forma disso sem ser pelos comandos que atribuem privilégios (grant revoke).

Compartilhar este post


Link para o post
Compartilhar em outros sites
Isso que não entendi, como seria a forma que você bloqueia por insert?

Não vejo uma forma disso sem ser pelos comandos que atribuem privilégios (grant revoke).

No Oracle existe um comendo chamado LOCK TABLE que bloqueia a tabela, e eu havia feito uma TRIGGER que executava este comendo sempre que era feito um INSERT na tabela. E este comando desbloqueia a tabela logo que você faz o COMMIT.

Então a cada INSERT eu bloqueava e desbloqueava a tabela, mas querem que eu deixe bloqueado para executar um bloco de INSERTs e não somente enquanto eu executo um INSERT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e será mesmo que isso é possivel? pessoalmente nunca ovi falar de coisas assim.. posso estar totalmente fora da casinha sobre o assunto.. o mysql também tem o lock table, eu usava direto. ainda mais quando criei o sistema de backup.

Compartilhar este post


Link para o post
Compartilhar em outros sites
e será mesmo que isso é possivel? pessoalmente nunca ovi falar de coisas assim.. posso estar totalmente fora da casinha sobre o assunto.. o mysql também tem o lock table, eu usava direto. ainda mais quando criei o sistema de backup.

Também estou com esse dúvida se isso é possível, pois posso utilizar o LOCK TABLE, mas logo depois que terminar de executar o primeiro INSERT e for para o próximo fará o COMMIT do anterior e terminará o LOCK TABLE, teoricamente.

Estou quebrando a cabeça aqui para tentar achar alguma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas, porque fazer o Commit após cada Insert?

Para resolver isso, não é simplesmente fazer o COMMIT após todos os inserts?

Ao meu ver (que não estou enxergando nada como você está fazendo a trigger, procedure, etc), seria apenas pensar assim. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mas, porque fazer o Commit após cada Insert?

Para resolver isso, não é simplesmente fazer o COMMIT após todos os inserts?

Ao meu ver (que não estou enxergando nada como você está fazendo a trigger, procedure, etc), seria apenas pensar assim. ^^

Criei uma procedure porque vão ser um outros sistemas que vai inserir dados nesta tabela, através de um processo batch, ou seja, estou disponibilizando uma forma deste outro sistema inserir em um tabela do meus sistema, passando apenas os parâmetros necessários.

Ou seja nada vai ser feito na mão, vai ser tudo automático, por isso preciso criar todos estes mecanismos de controle.

Por isso toda essa minha dúvida de como implementar...:eek:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×