Pregunta

Esto se bloquea en Php (5.2.6-Win32 + Oracle10g) ¿es un error o estoy haciendo algo fundamentalmente incorrecto?

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: No sé si se trata de un error o no, supongo que sí. Sin embargo, como no pude encontrar un informe de error para esto después de una búsqueda rápida. Puede que esté haciendo algo mal, así que pensé que primero preguntaría aquí, y para la posteridad en caso de que alguien más tenga un problema similar.

¿Fue útil?

Solución

¿Hay otras actividades en la base de datos al mismo tiempo? Si es así, sospecho de los puntos muertos. Algunas transacciones DML no comprometidas pueden estar bloqueando algunas filas del MY_TABLE .

Si no necesita la función de reversión, considere usar TRUNCATE en lugar de DELETE .

Otros consejos

Un BORRAR sin un DÓNDE hará (lo más probable) un análisis completo de la tabla. Eso significa que lee cada bloque debajo de la "marca de límite superior", es decir, cada bloque que la tabla haya utilizado alguna vez. Entonces, si la tabla era, a la vez, muy grande, entonces puede llevar mucho tiempo eliminar solo un puñado de registros. [Debido a que no 'sabe', solo hay cuatro registros hasta que lea todo ese espacio.]

Un truncado no hace esto. Simplemente mueve la marca de límite superior de la tabla para que cualquier bloque que esté en uso no se use rápidamente.

Es bastante improbable que se cuelgue ya que la PDO parece estar bastante en uso, aunque no sé cuánto con Oracle.

Un delete from my_table puede tardar un tiempo dependiendo de cuántos registros hay. ¿Cuánto tiempo esperó antes de decidir que se colgó y cuántos registros había en la tabla?

Si hay una transacción ejecutándose en la misma tabla, podría bloquear tu BORRAR.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top