2012-03-22 8 views
5

Tengo este extraño problema desde ayer. He intentado varias opciones y realmente reinstalé ORACLE y el DB mismo.Oracle - Zombie Table

Aquí está el problema: Tengo esta tabla que es comprarme una clase de zombi. Aquí están los síntomas:

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='MYTABLE' 

Devuelve un registro, lo que significa que la tabla existe.

SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE' 

Devuelve todas las columnas de MYTABLE. Hasta ahora todo bien, la mesa existe.

SELECT * FROM MYTABLE 

devoluciones ORA-00942: la tabla o vista no existe. En este punto estoy bastante confundido: la tabla parece existir en los USERTABLES pero no puedo SELECCIONAR sobre ella?

CREATE TABLE MYTABLE (Foo NUMBER) TABLESPACE MYTABLESPACE 

Devuelve: ORA-00604: Se produjo un error en el nivel de SQL recursivo 1 ORA-00001: restricción única (SYS.I_OBJ2) violaron

No entiendo este error. Pero lo mejor aún está por venir.

SELECT * FROM MYTABLE 

Sorprendentemente, la consulta anterior (una copia exacta de la tercera consulta) devuelve varios registros ahora! Además, noté que la columna Foo no está presente: la tabla que ahora veo es mi tabla inicial que tenía otras columnas.

DROP TABLE MYTABLE 

ahora tratar de llevar la mesa y me sale el siguiente error:

ORA-00604: Se ha producido el error a nivel de SQL recursivo 1 ORA-00942: la tabla o vista no existe ORA -06512: en la línea 19

SELECT * FROM MYTABLE 

más confundido que nunca, trato de la consulta anterior y, oh sorpresa, la mesa ya no existe.

No entiendo esto: la tabla está en USERTABLES pero no puedo SELECCIONAR sobre ella, sin embargo, si creo una nueva tabla con el mismo nombre, obtengo un error pero ahora puedo SELECCIONAR sobre la versión anterior de esa tabla con varios registros.

¿Alguna idea? Realmente necesito su ayuda :(

EDITAR - he comprobado ahora:.. Soy incapaz de dejar cualquier tabla Puede que sólo sea un nuevo síntoma

Solución

El problema era que la tabla MDSYS.SDO_GEOR_SYSDATA_TABLE faltaba y un desencadenador de evento drop intentaba acceder a ella, generando el error. La solución era restaurar esa tabla.

+0

Suena como que necesita para echar un vistazo a la mesa real - evitar el tema, posiblemente, de sinónimos, etc. Así que cuando se ejecuta la consulta para ver si existe la tabla, ¿con quién estás conectado? ¿Es un usuario regular, o sistema, o qué? Seleccione PROPIETARIO, TABLE_NAME en la primera consulta. Y trate de especificar el nombre completo, como en OWNER.TABLE_NAME para ver si lo que usted PIENSA está sucediendo realmente es lo que está sucediendo. – MJB

+0

¿Estás 100% seguro de que es _exactly_ ''MYTABLE'' y no'' MyTable'' o algo por el estilo? – Ben

+0

@MJB Buen punto, pero ya lo he intentado. USER_TABLES no tiene una columna PROPIETARIO, pero ALL_TABLE tiene. Revisé el PROPIETARIO en ALL_TABLE y estoy conectado usando ese usuario. También intenté especificar el nombre completo, pero no tuve suerte. – jpaires

Respuesta

1

Si tiene privilegios, trate de esta consulta:

SELECT * 
    FROM dba_objects 
WHERE object_name = 'MYTABLE'; 

y ver qué objetos existe con ese nombre. Podría indicarle la dirección correcta.

+0

El resultado de esa consulta arroja dos registros. Hay dos tablas diferentes con ese nombre para dos propietarios diferentes (uno de los cuales es el estoy conectado con, pero no puedo dejar caer la otra mesa tampoco). Esperaba eso (dos mesas con el mismo nombre para diferentes propietarios), no es sorprendente aquí. Más ideas – jpaires

1

usted no calificó los nombres de esquema cuando se trata de seleccionar y soltar. El CURRENT_SCHEMA de su sesión puede ser diferente del usuario de inicio de sesión. Comprueba por tratar

select SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') from dual; 

En lugar de describir lo que era la salida, ¿podría copiar/pegar el resultado completo para nosotros?

Por último, se puede excluir que alguien en mal estado el diccionario? Ya sabes, SYSDBA puede hacer nada ....

+2

Gracias por la ayuda, descubrí el problema. Faltaba la tabla MDSYS.SDO_GEOR_SYSDATA_TABLE y un desencadenador de evento drop estaba intentando acceder a ella. – jpaires

Cuestiones relacionadas