Ir ao conteúdo
  • Cadastre-se
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).

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×