delete de 1 linha

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Turma boa noite,

Estou tentando deletar 1 linha de uma tabela e simplesmente não consigo, já tentei até pelo rowid dela e nada. Alguém tem uma pista do que possa está acontecendo?

abraço.
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

é apresentado algum erro???

se não consegue, muito provavelmente não tem permissões pra isso...
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Tenho permissão, não retorna nenhum erro. É uma tabela de muitos insert e delete. Falo de uma tabela de mais de 100 mil registros. Até alguns dias atras funcionava, hoje não dá para deletar nenhuma linha.
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

don't know...

pergunta idiota... mas, está fazendo commit??

não tenho mais idéias..
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Sim estou dando commit. Mas também tem um aplicação que faz inserts e consulta nessa tabela. Me corrija se tiver errado mas o oracle faz bloqueio por linha em instrução DML certo? Se sim existe alguma view dinâmica que exibe essa informação que usuário está locando a linha ou atá a tabela?
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

Sim, o Oracle faz sim. Porém, o select só locka a linha quando está fazendo o select, depois de finalizado já não faz mais. Além disso, o oracle faz um controle de filas muito bem organizado, dessa forma, o seu delete deveria ficar em execução até que o chegasse a vez dele ser executado e só depois você conseguiria dar o commit.

Já tentou fazer um select nesse dado, utilizando for update??

as vezes utilizo pra evitar reescrever código, mas se com o delete não está funcionando, não sei se será útil.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, apenas adicionando mais uma dúvida:

Existe algum trigger de Delete nesta tabela, ou, relacionamento com algum "filho"?
Abraço,
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Desculpe,

Adicionando mais dúvidas à lista:

- Você está usando alguma ferramenta (ex: SQL DEVELOPER) para deletar a linha?
- Se está usando ferramenta, já tentou se conectar no SQL*PLus e executar o comando DELETE,
seguido depois de COMMIT? Ocorre alguma mensagem de erro neste caso?
- Qual a versão do seu banco de dados e qual a plataforma?
- Poderia colocar aqui no forum os comandos SQL completos de DELETE que você tentou executar?
- Esta tabela que você menciona seria uma tabela "normal"? Ela possue algum recurso adicional,
como particionamento, compressão (compressed data)? Ela não seria uma materialized view, certo?

Acho que um simples teste de DELETE em uma sessão de SQL*Plus deveria dar alguma mensagem de erro, travar indefinidamente (se o registro tiver locado) ou ser executado com sucesso. Se o comando não deu erro, deveria te retornar quantas linhas foram afetadas. Se zero linhas foram afetadas, use o WHERE do DELETE para montar um comando de SELECT.

Como os colegas mencionaram, avalie possiveis triggers atuando na tabela ou dependencias (PK-FK) de tabelas "filhas".

Abraços,

Sergio Coutinho
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

boa tarde turma,

Eu estava tentando pelo pl/sql developer via "for update" sem sucesso tentei via linha comando direto.

O DBA tentou pelo sqlplus e sem sucesso, tentou pelo rowid e nennhum sucesso. A mensagem de erro não aparece pois fica travado e nem retorna o cursor para digitar um novo comando

A versão é oragle 10g 10.2.0.5.0 - 64bi, a plataforma e red hat mas não sei a versão.

O comando que uso é:

Selecionar tudo

delete from table where id_pk = 3456 and col_de_apenas_2_valores = 1;
Ela é apenas uma tabela normal, sem view e sem partionamento.

Agora sobre as trigger eu "acho" que não tenha, não sei qual a view ou table que exiba as trigger no banco!
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Cara,

To achando que deu um Deadlock nessa tabela.

Veja no log do banco se existe ora0060 - Deadlock Detected, veja se consegue achar o sid e session e da um kill

Para retirar o deadlock as vezes só baixando o banco mesmo.

Espero ter ajudado.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

É simples,
quando você executar o delete, pegue consultas que mostram os locks do banco, vai mostrar quem está prendendo...

alguém ta lockando...
gleisoncandido
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Dom, 20 Mai 2012 2:29 pm
Contato:

heraldoaraujo tudo bem?
faca o seguinte , rode o update e quando travar , rode essa query abaixo que ira mostrar em qual sessao esta dando o deadlock , espero ter ajudado.

Selecionar tudo

SELECT
username, s.process,s.command,s.program
, s.osuser osuser
, s.sid sid
, s.serial# serial
, l.lmode lmode
, decode(L.LMODE,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Exclusive',
6,'Exclusive','NONE') lmode_desc
, l.type type
, decode(l.type,'BL','Buffer hash table instance lock',
'CF',' Control file schema global enqueue lock',
'CI','Cross-instance function invocation instance lock',
'CS','Control file schema global enqueue lock',
'CU','Cursor bind lock',
'DF','Data file instance lock',
'DL','Direct loader parallel index create',
'DM','Mount/startup db primary/secondary instance lock',
'DR','Distributed recovery process lock',
'DX','Distributed transaction entry lock',
'FI','SGA open-file information lock',
'FS','File set lock',
'HW','Space management operations on a specific segment lock',
'IN','Instance number lock',
'IR','Instance recovery serialization global enqueue lock',
'IS','Instance state lock',
'IV','Library cache invalidation instance lock',
'JQ','Job queue lock',
'KK','Thread kick lock',
'MB','Master buffer hash table instance lock',
'MM','Mount definition gloabal enqueue lock',
'MR','Media recovery lock',
'PF','Password file lock',
'PI','Parallel operation lock',
'PR','Process startup lock',
'PS','Parallel operation lock',
'RE','USE_ROW_ENQUEUE enforcement lock',
'RT','Redo thread global enqueue lock',
'RW','Row wait enqueue lock',
'SC','System commit number instance lock',
'SH','System commit number high water mark enqueue lock',
'SM','SMON lock',
'SN','Sequence number instance lock',
'SQ','Sequence number enqueue lock',
'SS','Sort segment lock',
'ST','Space transaction enqueue lock',
'SV','Sequence number value lock',
'TA','Generic enqueue lock',
'TD','DDL enqueue lock',
'TE','Extend-segment enqueue lock',
'TM','DML enqueue lock',
'TT','Temporary table enqueue lock',
'TX','Transaction enqueue lock',
'UL','User supplied lock',
'UN','User name lock',
'US','Undo segment DDL lock',
'WL','Being-written redo log instance lock',
'WS','Write-atomic-log-switch global enqueue lock') type_desc
, request
, block
FROM
v$lock l
, v$session s
WHERE
s.sid = l.sid
AND
l.type <> 'MR'
AND
s.type <> 'BACKGROUND'
AND
(block = 1 OR request > 0)
ORDER BY
username;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes