Oracle 外部表抛出错误(有时)

Oracle 外部表抛出错误(有时),oracle,oracle11g,runtime-error,external-tables,Oracle,Oracle11g,Runtime Error,External Tables,我在Oracle11g中创建了一个外部表 有时会抛出文件未找到的错误。该文件位于oracle外部表目录中,并具有对该文件夹/文件提供的所有权限 奇怪的是,错误并非每次都出现。外部表上的select大部分时间都有效。但有时会出现这种错误。这取决于甲骨文的心情P 已完成: 我已经向目录提供了所有拨款 我已提供chmod 777(rwx)访问这些文件的权限 我在每次运行(*.log、*.dsc和*.bad)后归档元数据文件 错误: ORA-29913:执行ODCIEXTTABLEOPEN调用时出错

我在Oracle11g中创建了一个外部表

有时会抛出文件未找到的错误。该文件位于oracle外部表目录中,并具有对该文件夹/文件提供的所有权限

奇怪的是,错误并非每次都出现。外部表上的select大部分时间都有效。但有时会出现这种错误。这取决于甲骨文的心情P

已完成:

  • 我已经向目录提供了所有拨款
  • 我已提供chmod 777(rwx)访问这些文件的权限
  • 我在每次运行(*.log、*.dsc和*.bad)后归档元数据文件
错误:

ORA-29913:执行ODCIEXTTABLEOPEN调用时出错

ORA-29400:数据盒带错误

KUP-04040:未找到XFB\U EXT\U TAB\U数据中的文件DIM\u OWNING\u CENTER\u FEED.dat

表脚本:

CREATE TABLE SCHEMA_NAME.DIM_OWNING_CENTER_EXT
  (
    S_OWNING_CENTER_ID VARCHAR2 (50),
    OWNING_CENTER      VARCHAR2 (52),
    ED_START_DATE      DATE
  )
  ORGANIZATION EXTERNAL
  (
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY XFB_EXT_TAB_DATA 
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      SKIP 2
      LOAD WHEN (
        S_OWNING_CENTER_ID != 'FILETRAILER'
      )
      FIELDS TERMINATED BY '|^'
      MISSING FIELD VALUES ARE NULL (
        S_OWNING_CENTER_ID CHAR (50), 
        OWNING_CENTER CHAR (52), 
        ED_START_DATE DATE 'DD-MON-YYYY HH24:MI:SS'
      )
    ) 
    LOCATION ('DIM_OWNING_CENTER_FEED.dat')
  )
  PARALLEL 8 REJECT LIMIT UNLIMITED;
这取决于甲骨文的心情

否,这取决于您恰好连接到哪个实例,以及运行该实例的节点上是否存在
DIM\u OWNING\u CENTER\u FEED.dat
文件。如果您只在其中一个节点上创建了它,那么它有时会工作,有时会出错。通过查询
v$instance
,您可以检查您在哪个实例上,无论它何时工作,何时不工作

如果出于某种原因,您只想在一个节点上维护文件(并处理日志等),那么您必须修改脚本以连接到该特定实例。但是,如果该实例由于某种原因(修补或其他原因)出现故障,它无论如何都会失败。当然,这也是RAC的重点


另一种方法是让两个节点呈现相同的物理文件,例如通过NFS将相同的实际文件系统/路径装载到两个节点上
XFB\u EXT\u TAB\u DATA
目录对象指向的任何位置。或者,您可以在运行时使用预处理器脚本从某个共享位置复制文件,但这有其自身的复杂性。

您使用的是独立数据库还是RAC?如果是RAC,文件是否存在于每个节点的文件系统目录中?RAC DB。问题是它大部分时间都有效。但有时它会抛出上述错误。此错误主要发生在从unix脚本调用我的包时。对,文件是否存在于两个节点上的文件系统中?如果没有,那么它是否工作或出错将取决于您的脚本恰好连接到哪个实例。Thans Alex提供了详细信息。我正在与我的DBA团队核实,这似乎就是问题所在。希望现在能解决。谢谢你的帮助。