在Oracle 11gR2(v11.2.0.4.0)中
我有一张简单的表格;
CREATE TABLE "CLAIMS_PATIENT"
( "CLAIMS_PATIENT_ID" NUMBER NOT NULL ENABLE,
"NAME_LASTNAME" VARCHAR2(60 BYTE),
"NAME_FIRSTNAME" VARCHAR2(35 BYTE),
"NAME_MIDDLENAME" VARCHAR2(25 BYTE),
"ADDR_LINE" VARCHAR2(55 BYTE),
"ADDR_CITY" VARCHAR2(30 BYTE),
"ADDR_STATE" VARCHAR2(3 BYTE),
"ADDR_ZIP" VARCHAR2(15 BYTE),
"GENDER" VARCHAR2(1 BYTE),
"DOB" DATE,
"SSN" VARCHAR2(9 BYTE),
"MATCH_PID" NUMBER,
"MATCH_SCORE" NUMBER DEFAULT -1,
"MATCH_DATE" DATE,
"PACS_STATUS" VARCHAR2(1 BYTE) DEFAULT NULL,
CONSTRAINT "CLAIMS_PATIENT_PK" PRIMARY KEY ("CLAIMS_PATIENT_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MYDATA" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "CLAIMS" ;
我填写了一些数据。使用存储过程。现在当我尝试在桌子上做任何选择时;
select * from claims_patient;
select count(*) from claims_patient;
select ssn from claims_patient;
在分号前的最后一个字符处返回ora-00904错误。我使用来自live db的ddl在我的测试数据库上创建了这个表为空,其中一切都在游泳。我尝试过使用sqldeveloper和sqlplus。
此时我怀疑在我的测试环境中崩溃并损坏了表格,但我从未在Oracle中看到过腐败的表格,自1995年以来我一直在使用它。
在我擦拭桌子然后重新开始之前,我该怎么做才能揭示这个问题的根本原因?在这一点上,我很好奇,如果我在生产中看到它,知道问题是什么可能是有用的。
根据要求,结果;
select table_name, dump(table_name) from user_tables where table_name like 'CLAIM%ENT';
is;
Typ=1 Len=14: 67,76,65,73,77,83,95,80,65,84,73,69,78,84
答案 0 :(得分:3)
好吧,我确实找到了答案。 'Twas在一个不太可能的地方。其中一个我没有包含DDL的索引是一个基于函数的索引。该功能在一夜之间无法访问(授予撤销)。
因此,如果有人找到这个线程并且有一个带有基于函数的索引的表,那么函数(在构建表和索引之后)变得不可访问,删除,执行权限改变,或者其他什么,你可能得到一个ora- 00904尝试访问表中的任何数据时。
如果Oracle要定义一个更具体的错误,指出你的答案的大致方向,那肯定会很好。