この項の内容は次のとおりです。
このパッケージは、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が使用不可または設定されていない環境)によって、移入およびアクセスできます。