ヘッダーをスキップ
Oracle XML DB開発者ガイド
11gリリース1(11.1)
E05669-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

26 PL/SQLを使用したリポジトリへのアクセス

この章では、Oracle XML DB Resource API for PL/SQL(PL/SQLパッケージDBMS_XDB)について説明します。この章の内容は次のとおりです。

PL/SQLパッケージDBMS_XDBの概要

PL/SQLパッケージDBMS_XDBは、Oracle XML DBのPL/SQL用リソースAPIです。これは、PL/SQLフォルダリングAPIともいいます。このAPIは、PL/SQLを使用して、Oracle XML DBリポジトリにアクセスして管理するためのファンクションとプロシージャを提供します。また、リソースのセキュリティおよびOracle XML DBの構成の管理方法も説明します。

Oracle XML DBリポジトリはXMLでモデル化されており、すべてのデータに対するデータベース・ファイル・システムを提供します。リポジトリは、XMLTypeのデータベース・オブジェクトにパス名(またはURL)をマップし、これらのオブジェクトの管理機能を提供します。

PL/SQLパッケージDBMS_XDBはAPIで、これを使用することにより次のすべてを管理できます。


関連項目:

  • 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

  • 「XML用のAPI」


DBMS_XDB: リソース管理

表26-1 は、DBMS_XDBのOracle XML DBリソースの管理用ファンクションおよびプロシージャの説明です。

表26-1 DBMS_XDBのリソース管理用ファンクションおよびプロシージャ

ファンクションおよびプロシージャ 説明

appendResourceMetadata

ユーザー定義のメタデータをリソースに追加します。

createFolder

新しいフォルダ・リソースを作成します。

createOIDPath

オブジェクト識別子(OID)に基づいてリソースへの仮想パスを作成します。

createResource

新しいファイル・リソースを作成します。

deleteResource

リポジトリからリソースを削除します。

deleteResourceMetadata

指定したユーザー定義のメタデータをリソースから削除します。

existsResource

絶対パスを指定されたリソースが存在するかどうかを示します。

getLockToken

指定されたリソースのパスを使用して、現行のユーザーに対するリソースのロック・トークンを戻します。

getResOID

絶対パスで指定したリソースのオブジェクト識別子(OID)を戻します。

getXDB_tablespace

データベース・スキーマ(ユーザー・アカウント)XDBの現行の表領域を戻します。

link

既存のリソースへのリンクを作成します。

lockResource

指定されたリソースのパスを使用して、WebDAV形式のロックを取得します。

moveXDB_tablespace

ユーザーXDBを指定された表領域に移動します。

purgeResourceMetadata

すべてのユーザー定義のメタデータをリソースから削除します。

rebuildHierarchicalIndex

インポートまたはエクスポート操作の後で、リポジトリの階層索引を再構築します。

renameResource

リソースの名前を変更します。

unlockResource

ロック・トークンとパスで指定したリソースのロックを解除します。

updateResourceMetadata

ユーザー定義のリソース・メタデータを変更します。



ヒント:

リポジトリ・リソースへの問合せのパフォーマンスを最適化するため、リソース作成後にプロシージャDBMS_XDB_ADMIN.gatherRepositoryStatsを使用して、オプティマイザの統計を収集してください。gatherRepositoryStatsを使用するためには、権限ANALYZE ANYを持つXDBADMINロール、またはDBAロールが必要です。


関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

この項の例では、これらのファンクションおよびプロシージャの使用方法を説明します。

例26-1 DBMS_XDBを使用したリソースの管理

この例では、パッケージDBMS_XDBを使用してリポジトリ・リソースを管理します。次のものが作成されます。

  • フォルダ/publicの下にフォルダmydocs

  • 2つのファイル・リソースemp_selby.xmlおよびemp_david.xml

  • ファイル・リソースへの2つのリンクperson_selby.xmlおよびperson_david.xml

続いて、新しく作成されたリソースとリンクが削除されます。フォルダを削除する前にフォルダの内容が削除されます。

DECLARE
  retb BOOLEAN;
BEGIN
  retb := DBMS_XDB.createfolder('/public/mydocs');
  retb := DBMS_XDB.createresource('/public/mydocs/emp_selby.xml',
                                  '<emp_name>selby</emp_name>');
  retb := DBMS_XDB.createresource('/public/mydocs/emp_david.xml',
                                  '<emp_name>david</emp_name>');
END;
/
PL/SQL procedure successfully completed.

CALL DBMS_XDB.link('/public/mydocs/emp_selby.xml',
                   '/public/mydocs',
                   'person_selby.xml');
Call completed.

CALL DBMS_XDB.link('/public/mydocs/emp_david.xml',
                   '/public/mydocs',
                   'person_david.xml');
Call completed.

CALL DBMS_XDB.deleteresource('/public/mydocs/emp_selby.xml');
Call completed.

CALL DBMS_XDB.deleteresource('/public/mydocs/person_selby.xml');
Call completed.

CALL DBMS_XDB.deleteresource('/public/mydocs/emp_david.xml');
Call completed.

CALL DBMS_XDB.deleteresource('/public/mydocs/person_david.xml');
Call completed.

CALL DBMS_XDB.deleteresource('/public/mydocs');
Call completed.

関連項目:

appendResourceMetadataおよびdeleteResourceMetadataを使用した例は、第29章「ユーザー定義のリポジトリ・メタデータ」を参照してください。

DBMS_XDB: ACLベースのセキュリティ管理

表26-2 は、DBMS_XDBのOracle XML DB ACLに基づくセキュリティ管理用ファンクションおよびプロシージャのリストです。

表26-2 DBMS_XDB: セキュリティ管理用のファンクションおよびプロシージャ

ファンクションおよびプロシージャ 説明

ACLCheckPrivileges

現行のユーザーに付与されたすべてのアクセス権限をACLで確認します。

ChangePrivileges

リソースACLにACEを追加します。

checkPrivileges

現行のユーザーに付与された、あるリソースへのアクセス権限を確認します。

getACLDocument

リソースのパス名で指定された、リソースを保護しているACL文書を取得します。

getPrivileges

現行のユーザーに付与された、あるリソースへのすべての権限を戻します。

setACL

リソースにACLを設定します。



関連項目:

  • 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

  • 『Oracle XML Developer's Kitプログラマーズ・ガイド』


この項の例では、これらのファンクションおよびプロシージャの使用方法を説明します。

例26-2 プロシージャDBMS_XDB.getACLDocumentの使用

この例では、データベースのサンプル・スキーマ・ユーザーhrが、フォルダ/public/mydocsと、それに含まれるファイルemp_selby.xmlの、2つのリソースを作成します。プロシージャgetACLDocumentがファイル・リソースでコールされて、文書の<principal>ユーザーがPUBLICであることを示しています。

CONNECT hr
Enter password: password

Connected.

DECLARE
  retb BOOLEAN;
BEGIN
  retb := DBMS_XDB.createFolder('/public/mydocs');
  retb := DBMS_XDB.createResource('/public/mydocs/emp_selby.xml',
                                  '<emp_name>selby</emp_name>');
END;
/
PL/SQL procedure successfully completed.

SELECT DBMS_XDB.getACLDocument('/public/mydocs/emp_selby.xml').getCLOBVal()
  FROM DUAL;

DBMS_XDB.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML').GETCLOBVAL()
--------------------------------------------------------------------------------
<acl description="Public:All privileges to PUBLIC" xmlns="http://xmlns.oracle.co
m/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaL
ocation="http://xmlns.oracle.com/xdb/acl.xsd                           http://xm
lns.oracle.com/xdb/acl.xsd">
  <ace>
    <principal>PUBLIC</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
</acl>

1 row selected.

例26-3 プロシージャDBMS_XDB.setACLの使用

この例では、システム管理者がプロシージャsetACLに接続して、所有者(hr)に、例26-2で作成されたファイル・リソースにおけるすべての権限を付与しています。プロシージャgetACLDocumentは、続いて<principal>ユーザーが所有者(hr)であるdav:ownerであることを示しています。

CONNECT SYSTEM
Enter password: password

Connected.

-- Give all privileges to owner, HR.
CALL DBMS_XDB.setACL('/public/mydocs/emp_selby.xml',
                     '/sys/acls/all_owner_acl.xml');
Call completed.
COMMIT;
Commit complete.

SELECT DBMS_XDB.getACLDocument('/public/mydocs/emp_selby.xml').getCLOBVal()
  FROM DUAL;

DBMS_XDB.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML').GETCLOBVAL()
--------------------------------------------------------------------------------
<acl description="Private:All privileges to OWNER only and not accessible to oth
ers" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="htt
p://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.
com/xdb/acl.xsd                           http://xmlns.oracle.com/xdb/acl.xsd">
  <ace>
    <principal>dav:owner</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
</acl>

1 row selected.

例26-4 ファンクションDBMS_XDB.changePrivilegesの使用

この例では、ユーザーhrがファンクションchangePrivilegesに接続して、新しいアクセス制御エントリ(ACE)をACLに追加して、リソースemp_selby.xmlにおけるすべての権限をユーザーoeに付与しています。プロシージャgetACLDocumentは、新しいACEがACLに追加されたことを示します。

CONNECT hr
Enter password: password

Connected.

SET SERVEROUTPUT ON

-- Add an ACE giving privileges to user OE
DECLARE
  r        PLS_INTEGER;
  ace      XMLType;
  ace_data VARCHAR2(2000);
BEGIN
  ace_data := '<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
                                        http://xmlns.oracle.com/xdb/acl.xsd
                                        DAV:http://xmlns.oracle.com/xdb/dav.xsd">
                 <principal>OE</principal>
                 <grant>true</grant>
                 <privilege><all/></privilege>
               </ace>';
  ace := XMLType.createXML(ace_data);
  r := DBMS_XDB.changePrivileges('/public/mydocs/emp_selby.xml', ace);
END;
/

PL/SQL procedure successfully completed.

SELECT DBMS_XDB.getACLDocument('/public/mydocs/emp_selby.xml').getCLOBVal()
  FROM DUAL;

DBMS_XDB.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML').GETCLOBVAL()
--------------------------------------------------------------------------------
<acl description="Private:All privileges to OWNER only and not accessible to oth
ers" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="htt
p://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.
com/xdb/acl.xsd                           http://xmlns.oracle.com/xdb/acl.xsd" s
hared="false">
  <ace>
    <principal>dav:owner</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
  <ace>
    <principal>OE</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
</acl>

1 row selected.

例26-5 ファンクションDBMS_XDB.getPrivilegesの使用

この例では、ユーザーoeは接続してDBMS_XDB.getPrivilegesをコールし、リソースemp_selby.xmlでユーザーoeに付与されたすべての権限を表示します。

CONNECT oe
Enter password: password

Connected.

SELECT DBMS_XDB.getPrivileges('/public/mydocs/emp_selby.xml') FROM DUAL;

DBMS_XDB.GETPRIVILEGES('/PUBLIC/MYDOCS/EMP_SELBY.XML').GETCLOBVAL()
--------------------------------------------------------------------------------
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.
org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl
.xsd http://xmlns.oracle.com/xdb/acl.xsd DAV: http://xmlns.oracle.com/xdb/dav.xs
d" xmlns:xdbacl="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:">
  <read-properties/>
  <read-contents/>
  <update/>
  <link/>
  <unlink/>
  <read-acl/>
  <write-acl-ref/>
  <update-acl/>
  <resolve/>
  <link-to/>
  <unlink-from/>
  <dav:lock/>
  <dav:unlock/>
</privilege>

1 row selected.

DBMS_XDB: 構成管理

表26-3は、DBMS_XDBのOracle XML DBの構成管理用ファンクションおよびプロシージャの説明です。

表26-3 DBMS_XDB: 構成管理用のファンクションおよびプロシージャ

ファンクションおよびプロシージャ 説明

CFG_Get

現行セッションの構成情報を戻します。

CFG_Refresh

現行のOracle XML DB構成ファイルxdbconfig.xmlを使用してセッションの構成情報をリフレッシュします。

cfg_update

Oracle XML DB構成情報を更新します。構成ファイルxdbconfig.xmlが書き込まれます。

getFTPPort

現行のFTPポート番号を戻します。

getHTTPPort

現行のHTTPポート番号を戻します。

setFTPPort

Oracle XML DB FTPポートを、指定したポート番号に設定します。

setHTTPPort

Oracle XML DB HTTPポートを、指定したポート番号に設定します。



関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

この項の例では、これらのファンクションおよびプロシージャの使用方法を説明します。

例26-6 ファンクションDBMS_XDB.cfg_getの使用

この例では、ファンクションcfg_getを使用してOracle XML DB構成ファイルxdbconfig.xmlを取得しています。

CONNECT SYSTEM
Enter password: password

Connected.

SELECT DBMS_XDB.cfg_get() FROM DUAL;

DBMS_XDB.CFG_GET()
--------------------------------------------------------------------------------
<xdbconfig xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" xmlns:xsi="http://w
ww.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/x
db/xdbconfig.xsd                                     http://xmlns.oracle.com/xdb
/xdbconfig.xsd">
  <sysconfig>
    <acl-max-age>900</acl-max-age>
    <acl-cache-size>32</acl-cache-size>
    <invalid-pathname-chars>,</invalid-pathname-chars>
    <case-sensitive>true</case-sensitive>
    <call-timeout>300</call-timeout>
    <max-link-queue>65536</max-link-queue>
    <max-session-use>100</max-session-use>
    <persistent-sessions>false</persistent-sessions>
    <default-lock-timeout>3600</default-lock-timeout>
    <xdbcore-logfile-path/>
    <xdbcore-log-level>0</xdbcore-log-level>
    <resource-view-cache-size>1048576</resource-view-cache-size>
    <protocolconfig>
      <common>
        . . .
      </common>
      <ftpconfig>
        . . .
      </ftpconfig>
      <httpconfig>
        <http-port>8000</http-port>
        <http-listener>local_listener</http-listener>
        <http-protocol>tcp</http-protocol>
        <max-http-headers>64</max-http-headers>
        <max-header-size>16384</max-header-size>
        <max-request-body>2000000000</max-request-body>
        <session-timeout>6000</session-timeout>
        <server-name>XDB HTTP Server</server-name>
        <logfile-path/>
        <log-level>0</log-level>
        <servlet-realm>Basic realm=&quot;XDB&quot;</servlet-realm>
        <webappconfig>
        . . .
        </webappconfig>
      </httpconfig>
    </protocolconfig>
    <xdbcore-xobmem-bound>1024</xdbcore-xobmem-bound>
    <xdbcore-loadableunit-size>16</xdbcore-loadableunit-size>
  </sysconfig>
</xdbconfig>

1 row selected.

例26-7 プロシージャDBMS_XDB.cfg_updateの使用

この例は、プロシージャcfg_updateの使用方法を説明しています。現行の構成がXMLTypeインスタンスとして取得され、変更されます。続いてcfg_updateを使用してリライトされます。

DECLARE
  configxml    SYS.XMLType;
  configxml2   SYS.XMLType;
BEGIN
  -- Get the current configuration
  configxml := DBMS_XDB.cfg_get();

  -- Modify the configuration
  SELECT updateXML(
           configxml,
           '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',
           '8000',
           'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"')
    INTO configxml2 FROM DUAL;

  -- Update the configuration to use the modified version
  DBMS_XDB.cfg_update(configxml2);
END;
/

PL/SQL procedure successfully completed.

SELECT DBMS_XDB.cfg_get() FROM DUAL;

DBMS_XDB.CFG_GET()
--------------------------------------------------------------------------------
<xdbconfig xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" xmlns:xsi="http://w
ww.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/x
db/xdbconfig.xsd                                     http://xmlns.oracle.com/xdb
/xdbconfig.xsd">
  <sysconfig>
    <acl-max-age>900</acl-max-age>
    <acl-cache-size>32</acl-cache-size>
    <invalid-pathname-chars>,</invalid-pathname-chars>
    <case-sensitive>true</case-sensitive>
    <call-timeout>300</call-timeout>
    <max-link-queue>65536</max-link-queue>
    <max-session-use>100</max-session-use>
    <persistent-sessions>false</persistent-sessions>
    <default-lock-timeout>3600</default-lock-timeout>
    <xdbcore-logfile-path/>
    <xdbcore-log-level>0</xdbcore-log-level>
    <resource-view-cache-size>1048576</resource-view-cache-size>
    <protocolconfig>
      <common>
      . . .
      </common>
      <ftpconfig>
      . . .
      </ftpconfig>
      <httpconfig>
        <http-port>8000</http-port>
        . . .
      </httpconfig>
    </protocolconfig>
    <xdbcore-xobmem-bound>1024</xdbcore-xobmem-bound>
    <xdbcore-loadableunit-size>16</xdbcore-loadableunit-size>
  </sysconfig>
</xdbconfig>

1 row selected.