【问题标题】:Why regular oracle table support DML statements,but not the same for External table?为什么普通的 oracle 表支持 DML 语句,而外部表不支持?
【发布时间】:2013-01-27 16:59:51
【问题描述】:

我们知道所有 DML 语句都被 Oracle 正则表 支持,但 外部表 不一样?我在下面尝试过:

SQL> INSERT INTO  xtern_empl_rpt VALUES ('70','Rakshit','Nantu','4587966214','na
tu.rakshit@ge.com','55');
INSERT INTO  xtern_empl_rpt VALUES ('70','Rakshit','Nantu','4587966214','natu.ra
kshit@ge.com','55')
             *
ERROR at line 1:
ORA-30657: operation not supported on external organized table


SQL> update xtern_empl_rpt set FIRST_NAME='Arup' where SSN='896743856';
update xtern_empl_rpt set FIRST_NAME='Arup' where SSN='896743856'
       *
ERROR at line 1:
ORA-30657: operation not supported on external organized table


SQL>

看来外部表不支持这个。但我的问题是 - 这种设计背后的逻辑原因是什么?

【问题讨论】:

    标签: oracle oracle11g external-tables


    【解决方案1】:

    Oracle 中没有用于锁定外部表中的行的机制,也没有我们通过常规堆表获得的并发控制。所以不允许更新。

    使用 Oracle Loader 驱动程序创建的外部表是只读的; Datapump 驱动程序允许我们写入外部表文件,但只能在 CTAS 模式下。

    问题在于永恒表基本上是操作系统文件上的窗口,没有内部表提供的抽象层和控制。基本上,数据库无法锁定 OS 文件中的记录,因为“记录”的概念是数据库,而不是 OS 文件。

    【讨论】:

    • 如果可能的话,你能用代码解释一下吗 - Datapump driver allows us to write to external table files but only in an CTAS mode.
    • 实用程序指南中有一整章介绍了用于外部表的 Datapump 潜水员" docs.oracle.com/cd/E11882_01/server.112/e22490/… 关键是,它没有扩展到 UPDATE。
    • 所以我们可以像as per the design 这样说,虽然我一直在寻找其他类型的答案,但似乎在这里它不会来。无论如何,谢谢。
    【解决方案2】:

    外部表仅用于一件事:数据加载和卸载。它们根本不适合与普通 DML 一起使用,它们也不是真正用于普通的 selects - 这很有效,但是如果您需要在外部表上进行大量选择,那么您正在“做它错了”:将数据加载到适当的表中,计算统计数据并根据需要添加索引。

    让外部表表现得像普通表一样需要为它们实现所有事务机制,这非常复杂,而且不值得,因为这不是它们的目的。

    如果您需要普通表并希望将它们从一个 Oracle 数据库移植到另一个,您也应该使用transportable tablespaces 进行评估。

    【讨论】:

      【解决方案3】:

      外部表的限制是它们只读的一个明显结果;它们是参与 SQL 查询的适配器,可以是任意的记录组织文件(ORACLE_LOADER 类型)或另一个数据库中表的导出副本(ORACLE_DATAPUMP 类型)。

      如前所述,外部表只适用于全表扫描查询;如果需要在繁重的查询中使用索引或修改从文件中导入的外部数据集,可以使用 SQL Loader 工具填充常规表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-23
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多