Pergunta

Isto pendura em PHP (5.2.6-Win32 + Oracle10g) é um bug, ou estou fazendo algo fundamentalmente errado?

try {
    $conn = new PDO($DB,$USER,$PASSWORD);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    //connected
    try {
        $conn->exec("DELETE FROM MY_TABLE");
        echo "done";
...

Nota: Não sei se este é um bug ou não, eu estou supondo que é. No entanto, como eu não poderia encontrar um relatório de bug para isso depois de uma pesquisa rápida. Eu poderia estar fazendo algo errado, então eu percebi que eu ia perguntar aqui primeiro, e para a posteridade no caso de alguém tem um problema semelhante.

Foi útil?

Solução

Existem outras actividades em curso no banco de dados ao mesmo tempo? Se sim, eu impasses suspeitos. Alguns operação DML não confirmada (s) pode estar bloqueando algumas linhas da MY_TABLE.

Se você não precisa de capacidade de reversão, considere o uso TRUNCATE vez de DELETE.

Outras dicas

A Apagar sem um WHERE será (provavelmente) uma varredura completa da tabela. Isso significa que ele lê cada bloco sob o 'ponto alto' - isto é cada bloco que já foi usado pela tabela. Então, se a tabela foi, ao mesmo tempo, muito grande, então ele pode levar muito tempo para apagar apenas um punhado de registros. [Porque não 'conhecer' há apenas quatro registros até que ele lê todo esse espaço.]

A truncar não faz isso. Ele simplesmente move o ponto alto da tabela de modo a que todos os blocos que estavam em uso rapidamente tornar-se não utilizado.

Pretty improvável que ele está pendurado desde DOP parece estar em uso um pouco, embora quanto com a Oracle, eu não sei.

A delete from my_table pode levar algum tempo dependendo de quantos registros existem. Quanto tempo você esperar antes de decidir que era pendurado e quantos registros foram na mesa?

Se houver uma transação em execução na mesma tabela, pode bloquear seu DELETE.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top