Domanda

Questo si blocca in Php (5.2.6-Win32 + Oracle10g) è un bug o sto facendo qualcosa di fondamentalmente sbagliato?

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: non so se questo è un bug o no, immagino che lo sia. Tuttavia, poiché non sono riuscito a trovare una segnalazione di bug per questo dopo una rapida ricerca. Potrei fare qualcosa di sbagliato, quindi ho pensato di chiedere prima qui e per i posteri nel caso in cui qualcun altro avesse un problema simile.

È stato utile?

Soluzione

Ci sono altre attività nel database contemporaneamente? Se sì, sospetterei deadlock. Alcune transazioni DML senza commit potrebbero bloccare alcune righe del MY_TABLE .

Se non hai bisogno della funzionalità di rollback, considera l'utilizzo di TRUNCATE anziché DELETE .

Altri suggerimenti

Un DELETE senza un WHERE (molto probabilmente) eseguirà una scansione completa della tabella. Ciò significa che legge ogni blocco sotto il "segno di massima", ovvero ogni blocco che sia mai stato utilizzato dalla tabella. Quindi, se la tabella era, una volta, molto grande, allora può richiedere molto tempo per eliminare solo una manciata di record. [Perché non "sa" ci sono solo quattro record fino a quando non legge tutto quello spazio.]

Un troncato non lo fa. Sposta semplicemente il segno di altura del tavolo in modo che eventuali blocchi in uso diventino rapidamente inutilizzati.

Abbastanza improbabile che si blocchi da quando PDO sembra essere in uso un bel po ', anche se quanto con Oracle, non lo so.

Un'eliminazione di da my_table potrebbe richiedere del tempo a seconda del numero di record presenti. Quanto hai aspettato prima di decidere che era stato sospeso e quanti record c'erano nella tabella?

Se c'è una transazione in esecuzione sulla stessa tabella, potrebbe bloccare DELETE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top