外部表抛出错误(有时)

时间:2019-01-14 10:21:52

标签: oracle oracle11g runtime-error external-tables

我已经在Oracle 11g中创建了一个外部表。

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

奇怪的是,错误不会每次都出现。大多数情况下,外部表上的select起作用。但是有时会弹出此错误。这取决于Oracle的心情。 :P

已经完成:

  • 我已经向目录提供了所有赠款。
  • 我已为chmod 777(rwx)提供了对文件的访问权限。
  • 每次运行(* .log,*。dsc和* .bad)后,我都会存档元数据文件。

错误:

  

ORA-29913:执行ODCIEXTTABLEOPEN标注时出错

     

ORA-29400:数据盒带错误

     

KUP-04040:找不到XFB_EXT_TAB_DATA中的文件DIM_OWNING_CENTER_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;

1 个答案:

答案 0 :(得分:1)

  

这取决于甲骨文的心情。

否,这取决于您碰巧要连接到哪个实例,以及运行该实例的节点上是否存在DIM_OWNING_CENTER_FEED.dat文件。如果仅在节点之一上创建它,则它有时会工作,有时会出错。您可以通过查询v$instance来检查您所在的实例,无论它何时可用,何时不可用。

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

一种替代方法是使两个节点都呈现相同的物理文件,例如,通过在两个节点上将XFB_EXT_TAB_DATA目录对象指向的相同NFS挂载相同的实际文件系统/路径。或者,您可以使用预处理程序脚本在运行时从某个共享位置复制文件,但这有其自身的复杂性。