【问题标题】:Oracle SQL*Loader not honoring skip_index_maintenance parameterOracle SQL*Loader 不遵守 skip_index_maintenance 参数
【发布时间】:2015-03-16 17:45:50
【问题描述】:

Oracle SQL*Loader 似乎不支持 skip_index_maintenance 参数。

我的控制文件:

unrecoverable
load data
infile 'filelist2.dat'
append
into table XML_TABLE
xmltype(XMLDATA)
(
 filename filler char(120),
 XMLDATA  lobfile(filename) terminated by eof
)

通过以下方式调用 SQL*Loader:

sqlldr control=load_xml.ctl direct=true parallel=true skip_index_maintenance=true

结果:

ORA-26002: Table <MYUSERNAME>."SYS_NTEPJTox0TQcLgU+XYHawPLg==" has index defined upon it.

嗯?我认为索引应该被禁用/标记为不可用?这可能是因为该表是在向 Oracle 注册 XSD 时自动生成的吗?

如果我删除“并行”参数:

sqlldr control=load_xml.ctl direct=true skip_index_maintenance=true

然后我得到这些错误:

OCI-21500: internal error code, arguments: [qmxdpStoreColl:1], [], [], [], [], [], [], []
ÌïçUundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUErrors in file :
OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [qmxdpStoreColl:1], [], [], [], [], [], [], []
undefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@6ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUErrors in file :
OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-21500: internal error code, arguments: [qmxdpStoreColl:1], [], [], [], [], [], [], []
)9Ø)9Ø)9Ø)9Øundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextundefined symbol: _etextÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp6ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÍbU

这肯定不正确?

请注意,这是一个“干净”的 Oracle 11G 数据库,其中包含一组基于 XML 模式生成的表。

常规(非直接),SQL*Loader 加载工作正常。插入所有记录

编辑:使用请求的信息更新

首先感谢您的帮助,非常感谢。

我回到 Oracle 示例来尝试和简化。所以 XSD 是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0"
    xdb:storeVarrayAsTable="true">
    <xs:element name="PurchaseOrder" type="PurchaseOrderType"
        xdb:defaultTable="PURCHASEORDER" />
    <xs:complexType name="PurchaseOrderType" xdb:SQLType="PURCHASEORDER_T">
        <xs:sequence>
            <xs:element name="Reference" type="ReferenceType"
                minOccurs="1" xdb:SQLName="REFERENCE" />
            <xs:element name="Actions" type="ActionsType" xdb:SQLName="ACTIONS" />
            <xs:element name="Reject" type="RejectionType" minOccurs="0"
                xdb:SQLName="REJECTION" />
            <xs:element name="Requestor" type="RequestorType"
                xdb:SQLName="REQUESTOR" />
            <xs:element name="User" type="UserType" minOccurs="1"
                xdb:SQLName="USERID" />
            <xs:element name="CostCenter" type="CostCenterType"
                xdb:SQLName="COST_CENTER" />
            <xs:element name="ShippingInstructions" type="ShippingInstructionsType"
                xdb:SQLName="SHIPPING_INSTRUCTIONS" />
            <xs:element name="SpecialInstructions" type="SpecialInstructionsType"
                xdb:SQLName="SPECIAL_INSTRUCTIONS" />
            <xs:element name="LineItems" type="LineItemsType"
                xdb:SQLName="LINEITEMS" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LineItemsType" xdb:SQLType="LINEITEMS_T">
        <xs:sequence>
            <xs:element name="LineItem" type="LineItemType" maxOccurs="unbounded"
                xdb:SQLName="LINEITEM" xdb:SQLCollType="LINEITEM_V" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LineItemType" xdb:SQLType="LINEITEM_T">
        <xs:sequence>
            <xs:element name="Description" type="DescriptionType"
                xdb:SQLName="DESCRIPTION" />
            <xs:element name="Part" type="PartType" xdb:SQLName="PART" />
        </xs:sequence>
        <xs:attribute name="ItemNumber" type="xs:integer"
            xdb:SQLName="ITEMNUMBER" xdb:SQLType="NUMBER" />
    </xs:complexType>
    <xs:complexType name="PartType" xdb:SQLType="PART_T">
        <xs:attribute name="Id" xdb:SQLName="PART_NUMBER"
            xdb:SQLType="VARCHAR2">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:minLength value="10" />
                    <xs:maxLength value="14" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="Quantity" type="moneyType"
            xdb:SQLName="QUANTITY" />
        <xs:attribute name="UnitPrice" type="quantityType"
            xdb:SQLName="UNITPRICE" />
    </xs:complexType>
    <xs:simpleType name="ReferenceType">
        <xs:restriction base="xs:string">
            <xs:minLength value="18" />
            <xs:maxLength value="30" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="ActionsType" xdb:SQLType="ACTIONS_T">
        <xs:sequence>
            <xs:element name="Action" maxOccurs="4" xdb:SQLName="ACTION"
                xdb:SQLCollType="ACTION_V">
                <xs:complexType xdb:SQLType="ACTION_T">
                    <xs:sequence>
                        <xs:element name="User" type="UserType" xdb:SQLName="ACTIONED_BY" />
                        <xs:element name="Date" type="DateType" minOccurs="0"
                            xdb:SQLName="DATE_ACTIONED" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="RejectionType" xdb:SQLType="REJECTION_T">
        <xs:all>
            <xs:element name="User" type="UserType" minOccurs="0"
                xdb:SQLName="REJECTED_BY" />
            <xs:element name="Date" type="DateType" minOccurs="0"
                xdb:SQLName="DATE_REJECTED" />
            <xs:element name="Comments" type="CommentsType" minOccurs="0"
                xdb:SQLName="REASON_REJECTED" />
        </xs:all>
    </xs:complexType>
    <xs:complexType name="ShippingInstructionsType"
        xdb:SQLType="SHIPPING_INSTRUCTIONS_T">
        <xs:sequence>
            <xs:element name="name" type="NameType" minOccurs="0"
                xdb:SQLName="SHIP_TO_NAME" />
            <xs:element name="address" type="AddressType" minOccurs="0"
                xdb:SQLName="SHIP_TO_ADDRESS" />
            <xs:element name="telephone" type="TelephoneType"
                minOccurs="0" xdb:SQLName="SHIP_TO_PHONE" />
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="moneyType">
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="2" />
            <xs:totalDigits value="12" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="quantityType">
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="4" />
            <xs:totalDigits value="8" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="UserType">
        <xs:restriction base="xs:string">
            <xs:minLength value="0" />
            <xs:maxLength value="10" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="RequestorType">
        <xs:restriction base="xs:string">
            <xs:minLength value="0" />
            <xs:maxLength value="128" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="CostCenterType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="4" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="VendorType">
        <xs:restriction base="xs:string">
            <xs:minLength value="0" />
            <xs:maxLength value="20" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="PurchaseOrderNumberType">
        <xs:restriction base="xs:integer" />
    </xs:simpleType>
    <xs:simpleType name="SpecialInstructionsType">
        <xs:restriction base="xs:string">
            <xs:minLength value="0" />
            <xs:maxLength value="2048" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="NameType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="20" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AddressType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="256" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="TelephoneType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="24" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="DateType">
        <xs:restriction base="xs:date" />
    </xs:simpleType>
    <xs:simpleType name="CommentsType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="2048" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="DescriptionType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="256" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

注册架构和创建数据库对象:

create or replace directory XSD as '/path/to/xsd'

BEGIN
  DBMS_XMLSCHEMA.registerSchema(
    'http://www.oracle.com/PurchaseOrder.xsd',
    bfilename('XSD','PurchaseOrder.xsd'),
    TRUE,
    TRUE,
    FALSE,
    TRUE);
END;

这将创建数据库表和对象。

当我尝试在直接模式下使用 SQL*Loader(常规工作正常)时:

sqlldr control=load_po.ctl direct=true

我明白了:

ORA-26086: direct path does not support triggers

正如我提到的,Schema 注册过程似乎创建了以下触发器:

create or replace trigger "SUKLTI"."PURCHASEORDER$xd" after delete or update on "SUKLTI"."PURCHASEORDER" for each row BEGIN  IF (deleting) THEN xdb.xdb_pitrig_pkg.pitrig_del('SUKLTI','PURCHASEORDER', :old.sys_nc_oid$, '1100C2917B7B2ADEE053E5D81DAC36D4' ); END IF;   IF (updating) THEN xdb.xdb_pitrig_pkg.pitrig_upd('SUKLTI','PURCHASEORDER', :old.sys_nc_oid$, '1100C2917B7B2ADEE053E5D81DAC36D4', user ); END IF; END;

我在“xdb_pitrig_pkg”上找不到任何文档来了解它的作用。

即使我放下触发器,我仍然会得到:

ORA-26086: direct path does not support triggers

在直接模式下运行加载程序时

编辑 16/03/2015

经过深思熟虑,我决定不将初始数据加载到 Schema 支持的表中。主要原因是性能不是很好。

我决定将我的初始批量 XML 加载到不支持 Schema 的 XMLType 表中。即使不是基于模式,也会检查 XML 的“格式良好”。以这种方式加载速度要快一个数量级,因为我可以在直接模式下并行使用 SQL*Loader,例如

sqlldr control=control.ctl parallel=true direct=true

现在我已将数据加载到这些“暂存”表中,我正在使用“extract()

sys_XMLGen

仅从临时表中提取所需的 XML 并复制到报告表中。为了便于使用,我可能会生成视图以放在报告表的顶部。

无论如何,谢谢你的帮助:)

【问题讨论】:

  • 你在哪个补丁级别?在 11.2.0.3 中,我得到“ORA-31172:无法使用直接路径加载 XMLType 列”。创建表的 DDL 是什么?从生成的表名看,你好像有一个嵌套表?
  • 使用:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production。我有一个 XMLType 表而不是列。我已将 XDB 模式属性添加到我的模式中,以便我可以更好地控制生成的内容。这 似乎 工作,但我得到一个“ORA-26086:直接路径不支持触发器”。当我查看时,我看到 Oracle 何时根据它创建触发器的架构生成对象?!?
  • 这是触发器(不知道它的用途):在删除或更新“SUKLTI”后创建或替换触发器“SUKLTI”。“XML_TABLE$xd”。每行的“XML_TABLE” BEGIN IF (删除)然后 xdb.xdb_pitrig_pkg.pitrig_del('SUKLTI','XML_TABLE', :old.sys_nc_oid$, '1100C2917AF12ADEE053E5D81DAC36D4' );万一;如果(更新)那么 xdb.xdb_pitrig_pkg.pitrig_upd('SUKLTI','XML_TABLE', :old.sys_nc_oid$, '1100C2917AF12ADEE053E5D81DAC36D4', user );万一;结束;
  • 我也无法通过 XMLType 表和 XMLSchema 获得类似的结果。您能否将包括表创建语句和任何其他 DDL 在内的信息作为编辑添加到问题中(而不是作为难以阅读的 cmets)?
  • 用更新的信息更新了原始帖子

标签: oracle oracle11g sql-loader


【解决方案1】:

作为替代方法,您可以使用外部临时表而不是 SQL*Loader;类似:

create table xml_stage (xmldata_clob clob)
organization external (
  type oracle_loader
  default directory XML_DIR
  access parameters (
    fields (filename char(120))
    column transforms (xmldata_clob from lobfile(filename))
  )
  location ('filelist2.dat')
);

insert into purchaseorder select xmltype(xmldata_clob) from xml_stage;

但这意味着将文件列表和服务器上的文件放在 Oracle 可见的目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2022-10-20
    • 2016-08-29
    相关资源
    最近更新 更多