この項の内容は次のとおりです。
このパッケージは、DBFSコンテンツAPIのストア・プロバイダで、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』に記載されているDBMS_DBFS_CONTENT_SPI
で定義されるプロバイダSPIに準拠します。
詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
プロシージャCREATEFILESYSTEM()
では、新しいSecureFilesストア・ファイルシステム・ストアstore_name
を、スキーマschema_name
(デフォルトで現在のスキーマに設定)に表tbl_name
として作成します。この表は、表領域tbl_tbs
(デフォルトでスキーマのデフォルト表領域に設定)内の表(および内部索引)と、表領域lob_tbs
(デフォルトでtbl_tbs
に設定)内のLOB列を使用します。
use_bf
がtrue
の場合、BasicFiles LOBが使用され、それ以外の場合、SecureFiles LOBが使用されます。
props
は、ストア・プロパティの構成で使用される(名前、値、タイプコード)のタプルの表です。現在、このようなプロパティは定義または使用されていませんが、参照実装の将来のバージョンのためにプレースホルダが存在します。
create_only
引数がtrue
の場合、ファイルシステムは作成されますが、現行ユーザーに登録されないため、DBMS_DBFS_SFS_ADMIN.registerFilesystem
を個別に(同じユーザーまたは別のユーザーが)コールして、ファイルシステムをプロバイダ操作で表示できるようにすることが必要です。
プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。メソッドcreateStore()
はcreateFilesystem()
のラッパーです。
DBMS_DBFS_SFS
の使用の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
この項では、SecureFilesストア・ファイルシステムの作成方法について説明します。
権限の管理手順:
DBFSコンテンツAPIターゲット・ユーザーを作成または選択します。
たとえば、DBFSコンテンツAPIを、データベース・ユーザー/パスワードuser1/
password1
、user2/
password2
およびsfs_demo/
password3
として使用するとします。これらのデータベース・ユーザーには、少なくともCREATE SESSION
、RESOURCE
およびCREATE VIEW
の権限が必要です。
操作のためのコンテンツAPIおよびストアへのアクセスでは、常に標準のデータベース・ユーザーを使用します。DBFSコンテンツAPIの操作にSYS
やSYSTEM
ユーザー、あるいはSYSDBA
/ SYSOPER
ロールは使用しないでください。
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ファイルシステム・ストアの作成手順:
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
で、現在のスキーマの表領域を指定します。
これらのファイルシステムを、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ストアFS1
とdbms_dbfs_sfs
プロバイダが関連付けられます。
条件:
store_name
は、表SFS_DEMO.T1
を使用するSecureFilesストアFS1
です。
provider_name
は無視されます。
provider_package
はdbms_dbfs_sfs
で、SecureFilesストアの参照プロバイダ用です。
ストアを適切なマウント・ポイントにマウントします。
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
はマウント・ポイントです。
(オプション)前述の手順の結果を確認するには、次の文のいずれかを使用します。
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は、Oracle Database 11gリリース1以上でのみ使用できます。それより前のリリースでは使用できません。
SecureFiles LOBを使用するには、11.1.0.0以上の互換性が必要です。
SecureFiles LOBを使用するには、DBMS_DBFS_SFS.CREATEFILESYSTEM
でuse_bf => false
を指定します。
BasicFiles LOBを使用するには、DBMS_DBFS_SFS.CREATEFILESYSTEM
でuse_bf => true
を指定します。
SecureFilesストア・ファイルシステム・ストアを初期化および再初期化します。次の例では、ファイルシステムFS1
および表"SFS_DEMO
"."T1
"を使用します。
connect sfs_demo/******; exec dbms_dbfs_content.initFS(store_name => 'FS1');
SecureFilesストア・ファイルシステムの削除手順:
ストアをアンマウントします。
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
はマウント・ポイントです。
ストアを登録解除します。
connect sfs_demo/******; exec dbms_dbfs_content.unregisterStore(store_name => 'FS1'); commit;
store_name
は、表SFS_DEMO.T1
を使用するSecureFilesストアFS1
です。
ファイルシステムを削除します。
connect sfs_demo/******; exec dbms_dbfs_sfs.dropFilesystem(store_name => 'FS1'); commit;
store_name
は、表SFS_DEMO.T1
を使用するSecureFilesストアFS1
です。
前述の手順を実行して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
が使用不可または設定されていない環境)によって、移入およびアクセスできます。