226 DBMS_XMLSTORAGE_MANAGE
DBMS_XMLSTORAGE_MANAGE
パッケージは、スキーマ登録の完了後にXML記憶域を管理および変更するためのインタフェースを提供します。
この章のトピックは、次のとおりです:
226.1 DBMS_XMLSTORAGE_MANAGEの概要
DBMS_XMLSTORAGE_MANAGE
には、スキーマ登録の完了後にXML記憶域を管理および変更するためのプロシージャが含まれています。
バルク・ロード操作のパフォーマンスを改善するには、このパッケージのサブプログラムを使用してください。バルク・ロード・プロセスを開始する前に索引と制約を無効化し、後でそれらを有効化することができます。
226.2 DBMS_XMLSTORAGE_MANAGEのセキュリティ・モデル
DBMS_XMLSTORAGE_MANAGEパッケージはXDBによって所有されているため、SYS
またはXDBによって作成される必要があります。EXECUTE
権限は、PUBLIC
に付与されます。
このパッケージ内のサブプログラムは、現行のユーザーの権限を使用して実行されます。
226.3 DBMS_XMLSTORAGE_MANAGEサブプログラムの要約
この表は、DBMS_XML_STORAGE
パッケージのサブプログラムについて説明しています。
表226-1 DBMS_XMLSTORAGE_MANAGEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
すべての索引を再構築し、 |
|
パーティションの交換後に制約を有効化してください。 |
|
パーティションの交換前に制約を無効化してください。 |
|
指定されたXMLタイプの表の |
|
これは、パーティション交換操作によりデータをパーティション化された表および(子表にローカル |
|
パーティション交換操作によりデータをパーティション化された表および(子表にローカル |
|
コレクション表の名前を指定された表名に変更します。 |
|
すべてのXML参照の有効範囲を指定します。有効範囲を指定した |
|
パス式を(XPath表記法またはDOT表記法で)対応する表名と列名にマップします。 |
226.3.1 DISABLEINDEXESANDCONSTRAINTSプロシージャ
このプロシージャは、XMLType
表およびXMLType
列の索引と制約を無効化します。
構文
DBMS_XMLSTORAGE_MANAGE.DISABLEINDEXESANDCONSTRAINTS ( owner_name IN VARCHAR2 DEFAULT USER, table_name IN VARCHAR2, column_name IN VARCHAR2 DEFAULT NULL, clear IN BOOLEAN DEFAULT FALSE);
パラメータ
表226-2 DISABLEINDEXESANDCONSTRAINTSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
プロシージャが実行されている |
|
|
|
|
使用上のノート
XMLTYPE表の引渡し
XMLType
表の場合は、バルク・ロード操作が実行されるXMLType
表の名前を渡す必要があります。XMLType
列の場合は、リレーショナル表の名前と、対応するXMLType
列の名前を渡す必要があります。
索引と制約を有効化および無効化するclearの使用
ノート:
clear
をTRUE
に設定してDISABLEINDEXESANDCONTRAINTS
プロシージャをコールした場合、このプロシージャを以前に実行した際に記憶されたXMLTYPE
の表または列に関する索引または制約情報がすべて削除されます。
したがって、clear
をTRUE
に設定してDISABLEINDEXESANDCONTRAINTS
プロシージャをコールする前に、この表または列で無効化された索引と制約がすべて再有効化されていることを確認する必要があります。
最初の実行では、clear
をTRUE
に設定しておくことをお薦めします。それ以降の実行では(索引を無効化または有効化する際にエラーが発生したため)、clear
をFALSE
(デフォルト値)に設定してください。バルク・ロード操作の後ですべての索引と制約を正常に再有効化できた場合は、clear
をTRUE
に設定してプロシージャを再度コールし、次のバルク・ロード操作を行うことができます。
例
次の例では、DISABLEINDEXESANDCONSTRAINTS
プロシージャとENABLEINDEXESANDCONSTRAINTSプロシージャでのclear
の使用を示しています。
まず、PURCHASEORDER_TAB
表のcomment
要素に対して、非NULL
の制約を追加します。
ALTER TABLE PURCHASEORDER_TAB ADD CONSTRAINT c1 check ("XMLDATA"."comment" IS NOT NULL);
次に、DISABLEINDEXESANDCONSTRAINTS
プロシージャをコールして、clear
をTRUE
として渡すことによって、すべての索引と制約を無効化します。
BEGIN XDB.DBMS_XMLSTORAGE_MANAGE.DISABLEINDEXESANDCONSTRAINTS ( USER,'PURCHASEORDER_TAB',NULL,TRUE ); END; /
さらに、ALTER
表の文の制約c1
に違反するバルク・ロード操作(データ・ポンプのインポートなど)を実行します。これで制約が無効化されるため、エラーは発生しません。
host impdp orexample/orexample directory=dir dumpfile=dmp.txt tables=OREXAMPLE.PURCHASEORDER_TAB content = DATA_ONLY;
ノート: 無効化された制約と索引を表示するには、次を使用します。
SELECT constraint_name,table_name,status FROM all_constraints WHERE owner = user;
最後に、ENABLEINDEXESANDCONSTRAINTS
プロシージャを使用して制約を有効化してみます。非NULL制約であるc1
にバルク・ロード操作が違反したため、エラーが発生します。
BEGIN XDB.DBMS_XMLSTORAGE_MANAGE.ENABLEINDEXESANDCONSTRAINTS ( USER,'PURCHASEORDER_TAB'); END; /
すべての索引と制約を無効化するには、再度DISABLEINDEXESANDCONSTRAINTS
を使用します。ただし、clear=
はFALSE
に設定します(ENABLEINDEXESANDCONSTRAINTS
が正常に終了しなかったため)。ノート: デフォルトでは、clear = FALSE
であるため、次にコールするときは、これを明示的に渡す必要はありません。
BEGIN xdb.DBMS_XMLSTORAGE_MANAGE.DISABLEINDEXESANDCONSTRAINTS ( USER,'PURCHASEORDER_TAB'); END; /
さらに、表に入力された不適切な行を削除します。
DELETE FROM purchaseorder_tab p WHERE p.xmldata."comment" IS NULL;
ENABLEINDEXESANDCONSTRAINTS
を使用して、索引と制約を再有効化します。これは正常に終了します。
BEGIN xdb.DBMS_XMLSTORAGE_MANAGE.ENABLEINDEXESANDCONSTRAINTS ( USER,'PURCHASEORDER_TAB'); END; /
226.3.2 ENABLEINDEXESANDCONSTRAINTSプロシージャ
このプロシージャはすべての索引を再構築し、XMLType
表(子表および表外の表も含む)に対して制約を有効化します。
column_name
が渡された場合は、このXMLType
列に対しても同じように作用します。
構文
DBMS_XMLSTORAGE_MANAGE.ENABLEINDEXESANDCONSTRAINTS
(
owner_name IN VARCHAR2 DEFAULT USER,
table_name IN VARCHAR2,
column_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表226-3 ENABLEINDEXESANDCONSTRAINTSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
索引と制約を削除中である表の名前 |
|
列名。 |
使用上のノート
このプロシージャは、DISABLEINDEXESANDCONSTRAINTSプロシージャとは逆の処理をします。
例
「DISABLEINDEXESANDCONSTRAINTSプロシージャ」を参照してください。
226.3.3 EXCHANGEPOSTPROCプロシージャ
このプロシージャは、パーティションの交換後に制約を有効化します。
構文
DBMS_XMLSTORAGE_MANAGE.EXCHANGEPOSTPROC
(
owner_name IN VARCHAR2 DEFAULT USER,
table_name IN VARCHAR2);
パラメータ
表226-4 EXCHANGEPOSTPROCプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
索引と制約を削除中である表の名前 |
226.3.4 EXCHANGEPREPROCプロシージャ
このプロシージャは、パーティションの交換前に制約を無効化します。
構文
DBMS_XMLSTORAGE_MANAGE.EXCHANGEPREPROC
(
owner_name IN VARCHAR2 DEFAULT USER,
table_name IN VARCHAR2);
パラメータ
表226-5 EXCHANGEPREPROCプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
索引と制約を削除中である表の名前 |
226.3.5 INDEXXMLREFERENCESプロシージャ
このプロシージャは、指定されたXMLタイプの表のREF
列に、または指定された表のXMLタイプの列に、一意の索引を作成します。
このプロシージャで複数のREF
列が作成された場合は、それぞれの名前に_1
、_2
、などと追加されます。
構文
DBMS_XMLSTORAGE_MANAGE.INDEXXMLREFERENCES ( owner_name IN VARCHAR2 DEFAULT USER, table_name IN VARCHAR2, column_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表226-6 INDEXXMLREFERENCESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
索引付けが行われている表 |
|
列の名前。XMLタイプの表には不要です。 |
|
新規作成された索引の名前 |
使用上のノート
このプロシージャは、REF
に有効範囲が指定されている場合にのみ使用します。「SCOPEXMLREFERENCESプロシージャ」を参照してください。
元表と子表の結合が問合せ計画で発生する場合、REF
に索引を付けることによってパフォーマンスが向上します。
-
元表の選択性が子表よりも高い場合、
REF
の索引付けは不要です。 -
子表の選択性が元表よりも高く、索引が付けられていない場合は、子表の1つの行を元表に結合することによって、元表を全表スキャンすることができます。
INDEXXMLREFERENCES
は、コール元の表の子表でREF
を再帰的に索引付けすることはありません。そうするには、XML_OUT_OF_LINE_TABLES
ビューまたはXML_NESTED_TABLES
ビューのループ内でプロシージャをコールすることをお薦めします。これにより、ビュー内の列の現在値から索引名が作成されます。
ノート:
このプロシージャは構造化記憶域モデルに限定されています。
226.3.6 REFPARTITIONEXCHANGEINプロシージャ
これは、パーティション交換操作によりデータをパーティション化された表および(子表にローカルxmlindex
を持つxmltype
列がある場合は)子の参照パーティション表にロードする補助プロシージャです。
構文
DBMS_XMLSTORAGE_MANAGE.REFPARTITIONEXCHANGEIN (
owner_name IN VARCHAR2,
parent_table_name IN VARCHAR2,
child_table_name IN VARCHAR2,
parent_exchange_table_name IN VARCHAR2,
child_exchange_table_name IN VARCHAR2,
parent_exchange_stmt IN CLOB,
child_exchange_stmt IN CLOB);
パラメータ
表226-7 REFPARTITIONEXCHANGEINのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前 |
|
パーティション化された元表 |
|
|
|
パーティション化された元表の交換対象の表 |
|
|
|
|
|
|
226.3.7 REFPARTITIONEXCHANGEOUTプロシージャ
これは、パーティション交換操作によりデータをパーティション化された表および(子表にローカルxmlindex
を持つxmltype
列がある場合は)子の参照パーティション表からロードする補助プロシージャです。
構文
DBMS_XMLSTORAGE_MANAGE.REFPARTITIONEXCHANGEOUT (
owner_name IN VARCHAR2,
parent_table_name IN VARCHAR2,
child_table_name IN VARCHAR2,
parent_exchange_table_name IN VARCHAR2,
child_exchange_table_name IN VARCHAR2,
parent_exchange_stmt IN CLOB,
child_exchange_stmt IN CLOB);
パラメータ
表226-8 REFPARTITIONEXCHANGEOUTのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前 |
|
パーティション化された元表 |
|
|
|
パーティション化された元表の交換対象の表 |
|
|
|
|
|
|
226.3.8 RENAMECOLLECTIONTABLEプロシージャ
このプロシージャは、コレクション表の名前を指定された表名に変更します。
XPath式では、コレクション表の指定がXMLtype
元表、またはこの元表のXMLType
列から始まります。
このプロシージャは、コレクション表の名前を対応するコレクション・タイプの名前から導出する唯一の手段になります。この用途に応じた直接的なスキーマ注釈が存在しないからです。
構文
DBMS_XMLSTORAGE_MANAGE.RENAMECOLLECTIONTABLE ( owner_name IN VARCHAR2 DEFAULT USER, table_name IN VARCHAR2, column_name IN VARCHAR2 DEFAULT NULL, xpath IN VARCHAR2, collection_table_name IN VARCHAR2 namespaces IN VARCHAR2 default NULL); // For release 11.2 only
パラメータ
表226-9 RENAMECOLLECTIONTABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前 |
table_name |
コレクション表を指定する際の開始点として使用できる元表の名前 |
|
コレクション表を指定する際の開始点として使用できる |
|
コレクション表を指定するXPath式 |
|
コレクション表の名前 |
|
Oracle Database 11gリリース2(11.2)以降で使用可能。XPathで使用される名前空間です。 |
使用上のノート
このプロシージャは、XMLスキーマの登録後にコールしてください。
表名は索引名の接頭辞として使用されます。
問合せ実行計画が読みやすくなるため、このファンクションの使用をお薦めします。
このプロシージャの実行中に発生したエラーは、プロシージャをコールしたユーザーに報告してください。
ノート:
このプロシージャは構造化記憶域モデルに限定されています。
Oracle Database 11gリリース2(11.2)以降にかぎり、このファンクションではXPath表記法とDOT表記法が両方とも受け入れられます。XPath表記法を使用する場合は、namespaces
パラメータが必要になる場合もあります。
例
コレクション表の名前はEMP_TAB_NAMELIST
になります。これを検証するには、SELECT * FROM user_nested_tables
を使用します。
DOT表記法の使用:
call XDB.DBMS_XMLSTORAGE_MANAGE.RENAMECOLLECTIONTABLE ( USER, 'EMP_TAB', NULL, '"XMLDATA"."EMPLOYEE"."NAME"', ''EMP_TAB_NAMELIST);
XPath表記法の使用:
XPath表記法は、Oracle Database 11gリリース2(11.2)以降で使用可能です。
call XDB.DBMS_XMLSTORAGE_MANAGE.RENAMECOLLECTIONTABLE ( USER, 'EMP_TAB', NULL, '/e:Employee/Name', 'EMP_TAB_NAMELIST', '''http://www.oracle.com/emp.xsd'' as "e"');
226.3.9 SCOPEXMLREFERENCESプロシージャ
このプロシージャは、すべてのXML参照の有効範囲を指定します。有効範囲付きREF
では、有効範囲指定なしのREF
に比べて、少ない記憶域でより効率的なアクセスが可能です。
構文
DBMS_XMLSTORAGE_MANAGE.SCOPEXMLREFERENCES;
使用上のノート
-
DBMS_XMLSTORAGE_MANAGE パッケージのSETOUTOFLINEプロシージャを使用した場合、XMLスキーマの登録時に
'4096 column limit'
エラーの発生を回避するために、SCOPEXMLREFERENCESプロシージャも使用する必要があります。 -
XMLスキーマの登録後のXMLインスタンス・データのロード前に
SCOPEXMLREFERENCES
を使用すると、これらの参照の有効範囲が表外の表にのみ指定されます。
ノート:
このプロシージャは構造化記憶域モデルに限定されています。
226.3.10 XPATH2TABCOLMAPPINGファンクション
このファンクションは、パス式を(XPath表記法またはDOT表記法で)対応する表名と列名にマップします。これは、ユーザーがこの表に索引を作成する場合や制約を追加する場合、または問合せ実行計画を読みやすくするために表の名前を変更する場合に必要になります。
構文
DBMS_XMLSTORAGE_MANAGE.XPATH2TABCOLMAPPING
(
owner_name IN VARCHAR2 DEFAULT USER,
table_name IN VARCHAR2,
column_name IN VARCHAR2 DEFAULT NULL,
xpath IN VARCHAR2,
namespaces IN VARCHAR2 DEFAULT NULL)
RETURN XMLTYPE;
パラメータ
表226-10 XPATH2TABCOLMAPPINGプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
所有者の名前。 |
|
元表の名前 |
|
|
|
DOT表記法またはXPath表記法でのパス式(次の例を参照) |
|
パス式のオプション名前空間の定義 |
例
Xpath表記法と名前空間を指定してXMLType表で評価されたXPath2TablColMapping
SELECT XDB.DBMS_XMLSTORAGE_MANAGE.XPATH2TABCOLMAPPING ( USER, 'XML_TAB', '', '//n1:item/n1:location','''xdbXmark'' as "n1"') FROM DUAL;
これは、次のような結果を生成します。
<Result> <Mapping TableName="SYS_NT12345" ColumnName="location"/> </Result>
これにより、表SYS_NT12345
および列location
に対して索引または制約を定義することができます。
XMLTypeではないが、DOT表記法によるXMLType列を持つ表で評価されたXPath2TablColMapping
SELECT XDB.DBMS_XMLSTORAGE_MANAGE.XPATH2TABCOLMAPPING ( USER,'PurchaseOrderTab','XMLCOL','xmldata.LineItems.LineItem', '') FROM DUAL;