Oracle catldr.sql 多个错误

Oracle catldr.sql multiple errors

我正在为 "Direct" SQL*Loader 操作准备新的 Oracle 11g 安装。根据此处的文档:

http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_modes.htm#i1007669

要为直接路径加载准备数据库,您必须 运行 安装脚本 catldr.sql 以创建必要的视图。对于您计划直接加载到的每个数据库,您只需要 运行 此脚本一次。

所以我执行以下 sql 脚本:

$ORACLE_HOME/rdbms/admin/catldr.sql

问题是,当我 运行 这个脚本时,我遇到了多个错误。例如。 (还有很多,关于循环同义词的东西):

grant select on gv_$loadistat to public
                *
ERROR at line 1:
ORA-04063: view "SUKLTI.GV_$LOADISTAT" has errors


create or replace view v_$loadpstat as select * from v$loadpstat
                       *
ERROR at line 1:
ORA-01731: circular view definition encountered



Synonym created.

grant select on v_$loadpstat to public
                *
ERROR at line 1:
ORA-04063: view "SUKLTI.V_$LOADPSTAT" has errors


create or replace view v_$loadistat as select * from v$loadistat
                       *
ERROR at line 1:
ORA-01731: circular view definition encountered



Synonym created.

grant select on v_$loadistat to public
                *
ERROR at line 1:
ORA-04063: view "SUKLTI.V_$LOADISTAT" has errors


                                   from x$kzsro
                                        *
ERROR at line 15:
ORA-00942: table or view does not exist

然后当我尝试 运行 SQL*Loader 和 "direct=true" 时,我收到以下错误:

ORA-26014: unexpected error on column SYS_NTEOzTt73hE9LgU+XYHax0tQ==.DUMMYCOL NAME
 while retrieving virtual column status
ORA-01775: looping chain of synonyms

请注意,这是一个全新的 Oracle 安装,其中注册了一些 XML 模式(8) 并且在模式后面生成了表。

有什么想法吗?

catldr.sql 脚本说:

Rem NAME
Rem    catldr.sql
Rem  FUNCTION
Rem    Views for the direct path of the loader
Rem  NOTES
Rem    This script must be run while connected as SYS or INTERNAL.

从错误消息来看,您似乎 运行 是普通用户 SUKLTI,而不是 SYS。您链接到的文档还声明每个数据库应该 运行 一次 - 而不是每个最终用户一次。

它应该是 运行 在数据库创建期间无论如何,通过 catalog.sql 脚本,所以我很惊讶你需要手动 运行 它;并且一些错误表明它创建的对象确实已经存在。通过重新 运行 处理它,因为 SYS 看起来不应该受到伤害。

可以通过查询查看创建了哪些对象:

select object_type, object_name
from all_objects
where created > time_just_before_you_ran_the_script

您可能需要将 public 同义词与 all_synonyms 视图交叉引用以检查 table 所有者,并删除它从 SUKLTI 模式创建的任何对象以及那些新的 public 同义词。 (但不要从 SYS 架构中删除任何内容...)

然后您可能需要重新运行 catldr.sqlSYS 以重新创建指向正确 SYS 对象的同义词。

@AlexPoole

你完全正确。脚本必须是 运行 作为 SYS。

因为这是 "test db" 我们将其拆解并 运行 在数据库重新创建时将脚本作为 SYS。

一切正常!

感谢回复