对于发布一个似乎在互联网上多次被问到的问题,我表示抱歉,但由于某种原因,我无法完全修复它。我得到一个ORA-01775:当我使用sqlldr时出现同义词错误循环链接错误
我试图使用Oracle的神奇的sqldr
实用程序填充一些表格,但由于某种原因它抛出了ORA-01775错误。
无论我到哪里去Google,人们都会说:“业余爱好者,把你的同义词整理出来”(这是解释),这很好,但我没有任何同义词。
这里,下面没有我的系统上运行:
SQLPLUS user/password
SQL>CREATE TABLE test (name varchar(10), id number);
SQL>exit
然后,我有一个.ctl
文件具有以下内容:
load data
characterset utf16
infile *
append
into table test
(name,
id
)
begindata
"GURRR" 4567
然后我运行此命令:
sqlldr [email protected]/password control=/tmp/controlfiles/test.ctl
结果:
test.log中的SQL*Loader-702: Internal error - ulndotvcol: OCIStmtExecute()
ORA-01775: looping chain of synonyms
部分:
Table TEST, loaded from every logical record.
Insert option in effect for this table: APPEND
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
NAME FIRST 2 CHARACTER
ID NEXT 2 CHARACTER
SQL*Loader-702: Internal error - ulndotvcol: OCIStmtExecute()
ORA-01775: looping chain of synonyms
而且,如果我尝试做一个手动插入:
SQL> insert into test values ('aa', 56);
1 row created.
是没有问题的。
所以,是的,我卡住了!
如果有帮助,我在CentOS上使用Oracle 11g XE。
感谢您的帮助,我很感激。
编辑:
我那种,有点想通了问题的一部分。问题是,在某个地方,可能是在加载失败的时候,Oracle已经给自己带来了腐败的观点和同义词。
受影响的观点是:GV_$LOADISTAT
,GV_$LOADPSTAT
,V_$LOADISTAT
和V_$LOADPSTAT
。我不太确定为什么这些观点已经损坏,但是重新编译它们导致了compiled with errors
错误。查询中使用的同义词本身已损坏,即gv$loadistat
,gv$loadpstat
,v$loadistat
和v$loadpstat
的同义词。
我不确定为什么会发生这种情况,而且我什么都不明白。所以,我决定放弃同义词并重新创建它们。不幸的是,我无法重新创建它们,因为它们指出的观点(这里有一些奇怪的递归......)是腐败的。这些观点是前面提到的GV_$LOADISTAT
和其他观点。换句话说,同义词指向使用这些同义词的视图。谈论一个循环链。
所以...我重新创建公共同义词,但而不是指定的视图GV_$LOADISTAT
,我指定他们为sys.GV_$LOADISTAT
。例如
DROP PUBLIC synonym GV$LOADISTAT;
CREATE PUBLIC synonym GV$LOADISTAT for sys.GV_$LOADISTAT;
于是,我重新创建用户的意见来指出这些公共同义词。
CREATE OR REPLACE FORCE VIEW "USER"."GV_$LOADISTAT" ("INST_ID", "OWNER", "TABNAME", "INDEXNAME", "SUBNAME", "MESSAGE_NUM", "MESSAGE")
AS
SELECT "INST_ID",
"OWNER",
"TABNAME",
"INDEXNAME",
"SUBNAME",
"MESSAGE_NUM",
"MESSAGE"
FROM gv$loadistat;
这似乎修复了意见/同义词。是的,这是一个黑客,但它以某种方式工作。不幸的是,这并不足以运行SQL Loader。我收到了table or view does not exist
错误。
我试着授予我的普通用户更多的权限,但它没有奏效。所以,我放弃了将SQL Loader作为sysdba运行。有效!这不是一件好事,但它是一个仅用于测试目的的开发系统,所以我不在乎。
做任何同义词(也许公众)存在的数据库? – 2012-07-06 21:42:10
我认为存在公共同义词,但没有特定的表格。 – zermy 2012-07-11 15:12:21