ヘッダーをスキップ
Oracle® Database SecureFilesおよびラージ・オブジェクト開発者ガイド
11gリリース2 (11.2)
B56263-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 DBFS SecureFilesストア

この項の内容は次のとおりです。

DBFS SecureFilesストア・パッケージ(DBMS_DBFS_SFS)

このパッケージは、DBFSコンテンツAPIのストア・プロバイダで、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』に記載されているDBMS_DBFS_CONTENT_SPIで定義されるプロバイダSPIに準拠します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

新しいSecureFilesストアの作成および登録

プロシージャCREATEFILESYSTEM()では、新しいSecureFilesストア・ファイルシステム・ストアstore_nameを、スキーマschema_name(デフォルトで現在のスキーマに設定)に表tbl_nameとして作成します。この表は、表領域tbl_tbs(デフォルトでスキーマのデフォルト表領域に設定)内の表(および内部索引)と、表領域lob_tbs(デフォルトでtbl_tbsに設定)内のLOB列を使用します。

use_bftrueの場合、BasicFiles LOBが使用され、それ以外の場合、SecureFiles LOBが使用されます。

propsは、ストア・プロパティの構成で使用される(名前、値、タイプコード)のタプルの表です。現在、このようなプロパティは定義または使用されていませんが、参照実装の将来のバージョンのためにプレースホルダが存在します。

create_only引数がtrueの場合、ファイルシステムは作成されますが、現行ユーザーに登録されないため、DBMS_DBFS_SFS_ADMIN.registerFilesystemを個別に(同じユーザーまたは別のユーザーが)コールして、ファイルシステムをプロバイダ操作で表示できるようにすることが必要です。

プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。メソッドcreateStore()createFilesystem()のラッパーです。

DBMS_DBFS_SFSの使用の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SecureFilesストアの初期化または再初期化

プロシージャINITFS()は、SecureFilesストアstore_nameに関連付けられた表を切り捨てて、再初期化します。プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。

DBMS_DBFS_SFSメソッドの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SecureFilesストア・ファイルシステム・ストアの登録解除および削除

ファイルシステムを参照するすべてのストアは、メタデータ表から削除され、基礎となるファイルシステム表自体が削除されます。プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。

DBMS_DBFS_SFSメソッドの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SecureFilesストア・ファイルシステムの使用

この項では、SecureFilesストア・ファイルシステムの作成方法について説明します。

権限の管理

権限の管理手順:

  1. DBFSコンテンツAPIターゲット・ユーザーを作成または選択します。

    たとえば、DBFSコンテンツAPIを、データベース・ユーザー/パスワードuser1/password1user2/password2およびsfs_demo/password3として使用するとします。これらのデータベース・ユーザーには、少なくともCREATE SESSIONRESOURCEおよびCREATE VIEWの権限が必要です。

    操作のためのコンテンツAPIおよびストアへのアクセスでは、常に標準のデータベース・ユーザーを使用します。DBFSコンテンツAPIの操作にSYSSYSTEMユーザー、あるいはSYSDBA / SYSOPERロールは使用しないでください。

  2. dbfs_roleロールを、これらのユーザーにそれぞれ付与します。dbfs_roleにより、DBFSコンテンツAPIの使用が許可されるユーザーが制御され、間接的に追加の権限がターゲット・ユーザーに付与されます。

    このロールがないと、データベース・ユーザーはDBFSコンテンツAPIを使用できません。適切な管理権限(SYSDBA)を持つユーザーが、必要に応じて追加のユーザーにロールを付与できます。

    connect / as sysdba
    grant dbfs_role to user1;
    grant dbfs_role to user2;
    grant dbfs_role to sfs_demo;
    

これにより、dbfs_roleを持つデータベース・ユーザー用にDBFSコンテンツAPIが設定されます。

データベースでのロール、アクセス制御および定義者/実行者権限の相互作用に応じて、DBFSコンテンツAPIタイプ(DBMS_DBFS_CONTENT_接頭辞を持つSQLタイプ)およびパッケージ(通常はDBMS_DBFS_CONTENTおよびDBMS_DBFS_SFSのみ)の各種の権限(ほとんど常に実行権限)を、本来dbfs_roleを持つユーザーに明示的に付与することが必要な場合があります。

これらの明示的および直接的な付与は、一般的な必要とされる処理であり、必要またはリクエストに応じて行われます。

SecureFilesファイルシステム・ストアの作成

SecureFilesファイルシステム・ストアの作成手順:

  1. DBFS CAPIを使用して、アクセスで必要なストアを次のように作成します。

    declare
      begin
        dbms_dbfs_sfs.createFilesystem(
          store_name => 'FS1',
          tbl_name => 'T1',
          tbl_tbs => null,
          use_bf => false 
        );
        commit;
      end;
    /
    

    条件:

    • store_nameは、任意のユーザー固有の名前です。

    • tbl_nameは、現在のスキーマで作成された有効な表名です。

    • tbl_tbsは、索引、LOB、ネストした表などのストア表および依存セグメントに使用される有効な表領域の名前です。デフォルトはNULLで、現在のスキーマの表領域を指定します。

  2. これらのファイルシステムを、SecureFilesストアで管理される新規ストアとしてDBFS CAPIに登録します。

    connect sfs_demo/******
    declare
      begin
        dbms_dbfs_content.registerStore(
          store_name    => 'FS1',
          provider_name => 'anything',
          provider_package => 'dbms_dbfs_sfs'
        );
        commit;
      end;
    /
    

    この操作では、SecureFilesストアFS1dbms_dbfs_sfsプロバイダが関連付けられます。

    条件:

    • store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

    • provider_nameは無視されます。

    • provider_packagedbms_dbfs_sfsで、SecureFilesストアの参照プロバイダ用です。

  3. ストアを適切なマウント・ポイントにマウントします。

    connect sfs_demo/******
    declare
      begin
        dbms_dbfs_content.mountStore(
          store_name    => 'FS1',
          store_mount   => 'mnt1'
        );
        commit;
      end;
    /
    

    条件:

    • store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

    • store_mountはマウント・ポイントです。

  4. (オプション)前述の手順の結果を確認するには、次の文のいずれかを使用します。

    • SecureFilesストア表およびファイルシステムを確認する場合

      select * from table(dbms_dbfs_sfs.listTables);
      select * from table(dbms_dbfs_sfs.listFilesystems);
      
    • ContentAPIストアおよびマウントを確認する場合

      select * from table(dbms_dbfs_content.listStores);
      select * from table(dbms_dbfs_content.listMounts);
       
      
    • SecureFilesストア機能を確認する場合

      var fs1f number;
      exec :fs1f := dbms_dbfs_content.getFeaturesByName('FS1');
      select * from table(dbms_dbfs_content.decodeFeatures(:fs1f)); 
      
    • リソースおよびプロパティ・ビューを確認する場合

      select * from dbfs_content;
      select * from dbfs_content_properties;
      

DBMS_DBFS_SFSパッケージ・メソッドを使用する場合でも、SecureFilesストア・ファイルシステムのデータを保持する表には直接アクセスしないでください。ファイルシステムにアクセスする正しい方法は、手続き型操作の場合はDBFSコンテンツAPI(DBMS_DBFS_CONTENTメソッド)を、SQL操作の場合はリソース/プロパティ・ビュー(dbfs_contentおよびdbfs_content_properties)を使用する方法です。

SecureFiles LOBとBasicFiles LOBの比較

SecureFiles LOBは、Oracle Database 11gリリース1以上でのみ使用できます。それより前のリリースでは使用できません。

SecureFiles LOBを使用するには、11.1.0.0以上の互換性が必要です。

SecureFiles LOBを使用するには、DBMS_DBFS_SFS.CREATEFILESYSTEMuse_bf => falseを指定します。

BasicFiles LOBを使用するには、DBMS_DBFS_SFS.CREATEFILESYSTEMuse_bf => trueを指定します。

SecureFilesストア・ファイルシステムの初期化

SecureFilesストア・ファイルシステム・ストアを初期化および再初期化します。次の例では、ファイルシステムFS1および表"SFS_DEMO"."T1"を使用します。

connect sfs_demo/******;
exec dbms_dbfs_content.initFS(store_name => 'FS1');

SecureFilesストア・ファイルシステムの削除

SecureFilesストア・ファイルシステムの削除手順:

  1. ストアをアンマウントします。

    connect sfs_demo/******;
    declare
      begin
        dbms_dbfs_content.unmountStore(
          store_name    => 'FS1',
          store_mount   => ‘mnt1’
        );
        commit;
    end;
    /
    

    条件:

    • store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

    • store_mountはマウント・ポイントです。

  2. ストアを登録解除します。

    connect sfs_demo/******;
    exec dbms_dbfs_content.unregisterStore(store_name => 'FS1');
    commit;
    

    store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

  3. ファイルシステムを削除します。

    connect sfs_demo/******;
    exec dbms_dbfs_sfs.dropFilesystem(store_name => 'FS1');
    commit;
    

    store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

DBFSコンテンツAPIの操作

前述の手順を実行してDBFSコンテンツAPIを設定し、少なくとも1つのSecureFilesストア参照ファイルシステムをマウント・ポイント/mnt1の下に作成しマウントすると、例8-1のようにして新しいファイルおよびディレクトリ要素を作成できます。

例8-1 DBFSコンテンツAPIの操作

connect foo/******
 
declare
   ret integer;
   b   blob;
   str varchar2(1000)  := '' || chr(10) ||
 
'#include <stdio.h>' || chr(10) ||
'' || chr(10) ||
'int main(int argc, char** argv)' || chr(10) ||
'{' || chr(10) ||
'    (void) printf("hello world\n");' || chr(10) ||
'    return 0;' || chr(10) ||
'}' || chr(10) ||
'';
 
    begin
        ret := dbms_fuse.fs_mkdir('/mnt1/src');
        ret := dbms_fuse.fs_creat('/mnt1/src/hello.c', content => b);
        dbms_lob.writeappend(b, length(str), utl_raw.cast_to_raw(str));
        commit;
    end;
    /
    show errors;
 
    -- verify newly created directory and file
    select pathname, pathtype, length(filedata),
        utl_raw.cast_to_varchar2(filedata)
        from dbfs_content
            where pathname like '/mnt1/src%'
            order by pathname;

ファイルシステムは、DBMS_DBFS_CONTENTを使用してPL/SQLから移入およびアクセスできます。ファイルシステムは、dbfs_contentおよびdbfs_content_propertiesビューを使用してSQLから読取り専用でアクセスできます。

ファイルシステムは、通常のファイルシステムAPIおよびUNIXユーティリティでFUSEを使用して、またはスタンドアロンのdbfs_clientツール(FUSEが使用不可または設定されていない環境)によって、移入およびアクセスできます。