【问题标题】:External table throwing error (sometimes)外部表抛出错误(有时)
【发布时间】:2019-01-14 10:21:51
【问题描述】:

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

它有时会抛出找不到文件的错误。该文件存在于 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;

【问题讨论】:

  • 您使用的是独立数据库还是 RAC?如果是 RAC,文件是否存在于每个节点的文件系统目录中?
  • RAC 数据库。问题是它大部分时间都有效。但有时它会抛出上述错误。此错误主要发生在从 unix 脚本调用我的包时。
  • 对,那么文件是否存在于两个节点的文件系统中?如果不是,那么它是否有效或错误将取决于您的脚本碰巧连接到哪个实例。

标签: oracle oracle11g runtime-error external-tables


【解决方案1】:

这取决于甲骨文的心情。

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

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

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

【讨论】:

  • 感谢 Alex 提供的详细信息。我正在与我的 DBA 团队核实,这似乎是问题所在。希望现在可以解决。感谢您的帮助。
猜你喜欢
  • 2014-06-25
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2016-07-28
  • 2020-06-03
  • 1970-01-01
相关资源
最近更新 更多