Sto avendo questo strano problema da ieri. Ho provato diverse opzioni e ho effettivamente reinstallato ORACLE e il DB stesso.Oracle - Zombie Table
Ecco il problema: ho questo tavolo che è un po 'di zombi. Ecco i sintomi:
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='MYTABLE'
Restituisce un record, ovvero la tabella esiste.
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE'
Restituisce tutte le colonne di MYTABLE. Fin qui tutto bene, il tavolo esiste.
SELECT * FROM MYTABLE
ritorni ORA-00942: tabella o vista non esiste. A questo punto sono abbastanza confuso: il tavolo sembra esistere su USERTABLES ma non posso selezionarlo sopra?
CREATE TABLE MYTABLE (Foo NUMBER) TABLESPACE MYTABLESPACE
Returns: ORA-00604: è verificato un errore a livello di SQL ricorsivo 1 ORA-00001: vincolo univoco (SYS.I_OBJ2) violato
Non capisco questo errore. Ma il meglio deve ancora venire.
SELECT * FROM MYTABLE
Sorprendentemente, la query precedente (una copia esatta della terza query) restituisce diversi record ora! Inoltre, ho notato che la colonna Foo non è presente: la tabella che ora vedo è la mia tabella iniziale che aveva altre colonne.
DROP TABLE MYTABLE
Ora tenta di eliminare la tabella e ottenere i seguenti errori:
ORA-00604: Errore a livello SQL ricorsivo 1 ORA-00942: tabella o visualizzazione non esiste più ORA -06.512: alla linea 19
SELECT * FROM MYTABLE
più confuso che mai, cerco la domanda di cui sopra e, sorpresa sorpresa, la tabella non esiste più.
Non lo sottolineo: la tabella è su USERTABLES ma non posso selezionare su di esso, tuttavia, se creo una nuova tabella con lo stesso nome, ottengo un errore ma ora posso selezionare la versione precedente di quella tabella con diversi record.
Qualche idea? Ho davvero bisogno del vostro aiuto :(
EDIT - ho controllato ora:.. Io sono in grado di eliminare qualsiasi tabella Questo potrebbe essere solo un nuovo sintomo
Soluzione
Il problema era la tabella MDSYS.SDO_GEOR_SYSDATA_TABLE era mancante e un trigger di evento drop stava tentando di accedervi, generando l'errore. La soluzione stava ripristinando quella tabella.
Sembra che tu debba dare un'occhiata alla tabella reale - evitare il possibile problema del sinonimo, ecc. Quindi quando si esegue la query per vedere se la tabella esiste, chi sei connesso come? È un utente normale, o un sistema, o cosa? Seleziona OWNER, TABLE_NAME nella prima query. E prova a specificare il nome completo, come in OWNER.TABLE_NAME per vedere se ciò che pensi che stia accadendo è davvero ciò che sta accadendo. – MJB
Sei sicuro al 100% che sia _exact_ "MYTABLE" e non "MyTable" o qualcosa del genere. – Ben
@ MJB Un buon punto, ma l'ho già provato. USER_TABLES non ha una colonna OWNER, ma ALL_TABLE ha. Ho controllato il PROPRIETARIO su ALL_TABLE e sono connesso usando quell'utente. Ho anche provato a specificare il nome completo ma senza fortuna. – jpaires