2015-03-10 2 views
3

Похоже, что Oracle SQL * Loader не выполняет параметр skip_index_maintenance.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. 

Хух? Я думал, что индексы должны были быть отключены/отмечены как непригодные для использования? Может ли это быть, потому что эта таблица была создана автоматически, когда XSD был зарегистрирован в Oracle?

Кроме того, если я удалить "параллельный" аргумент:

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 * нагрузки загрузчика работают нормально. Все записи вставляются

EDIT: ОБНОВЛЕНО запрашиваемую INFO

Прежде всего спасибо за вашу помощь, его ценят.

Я вернулся к примерам 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 

Как я уже упоминал процесс регистрации схемы, как представляется, создать следующий триггер:

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 

При работе погрузчика в прямом режиме

EDIT 16/03/2015

После долгих раздумий я решил не загружать исходные данные в таблицы, поддерживаемые схемой. Основная причина в том, что производительность была не очень хорошей.

Вместо этого я решил выполнить свою начальную загрузку XML-массива в таблицы XMLType, которые не поддерживаются схемой. Даже если он не основан на схеме, XML будет проверен на «корректность». Загрузка этого способа на порядок выше, поскольку я могу использовать SQL * Loader в прямом режиме с параллельным, например.

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

Теперь, когда у меня есть мои данные загружаются в эти «постановочных» таблицы я использую «extract()»

и

sys_XMLGen 

извлечь только требуемую XML из промежуточных таблиц и копировать в таблицы отчетов. Я мог бы создавать представления, чтобы сидеть поверх таблиц отчетов для удобства использования.

Во всяком случае, ребята, спасибо за помощь :)

+0

На каком уровне вы начинали? В 11.2.0.3 я получаю «ORA-31172: не могу загрузить столбец XMLType, используя прямой путь». Что такое DDL для создания таблицы? Кажется, у вас есть вложенная таблица из имени сгенерированной таблицы? –

+0

Использование: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production. У меня таблица XMLType не столбец. Я добавил атрибуты схемы XDB в свою схему, чтобы я мог лучше контролировать, что генерируется. Это * казалось * работать, но я получаю «ORA-26086: прямой путь не поддерживает триггеры». Когда я смотрю, я вижу, что когда Oracle сгенерировал объекты на основе схемы, он создал триггер?!? –

+0

Это триггер (не знаю, для чего он нужен): создать или заменить триггер «SUKLTI». «XML_TABLE $ xd» после удаления или обновления в «SUKLTI». «XML_TABLE» для каждой строки BEGIN IF (удаление) THEN xdb.xdb_pitrig_pkg .pitrig_del ('SUKLTI', 'XML_TABLE',: old.sys_nc_oid $, '1100C2917AF12ADEE053E5D81DAC36D4'); END IF; IF (обновление) THEN xdb.xdb_pitrig_pkg.pitrig_upd ('SUKLTI', 'XML_TABLE',: old.sys_nc_oid $, '1100C2917AF12ADEE053E5D81DAC36D4', пользователь); END IF; КОНЕЦ; –

ответ

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.

Смежные вопросы