92 DBMS_FS
OracleデータベースでOracle File Systemに対する操作(make、mount、unmountおよびdestroy操作)を実行するためのDBMS_FS
パッケージ。
この章のトピックは、次のとおりです:
DBMS_FSの概要
DBMS_FS
パッケージには、Oracle File Systemの作成、マウント、アンマウントおよび破棄に使用できるOracle File System (OFS)のプロシージャが含まれています。
19cリリース以降では、このファイル・システムはPDBによってサポートされます。 Oracle Databaseでは、PDBごとに最大5個のファイル・システム、合計で1000個のファイル・システムがサポートされます。
DBMS_FS
パッケージによって、アプリケーションはNFSサーバーなどのユニバーサル・クライアントからデータベース・オブジェクトにアクセスできます。 この機能はOracle SecureFilesとのインタフェースとなって、ファイル・システム・アクセスを提供します。
参照:
Oracle DatabaseでのNFSサーバーの管理の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
DBMS_FSのセキュリティ・モデル
DBMS_FS
パッケージを使用するには、SYSDBA
管理権限が必要です。
DBMS_FS
パッケージを使用して実行する操作は、ルート・ユーザーがオペレーティング・システムで実行するファイル・システム操作と同じです。 このパッケージにより作成およびマウントされた個々のファイル・システムへのアクセスは、アクセス制御リスト(ACL)と、オペレーティング・システム・ユーザーへのマウント済ディレクトリに対する権限を使用して適用されます。
DBMS_FSサブプログラムの要約
次の表は、DBMS_FS
サブプログラムを示し、簡単に説明しています。
表92-1 DBMS_FSサブプログラム
サブプログラム | 説明 |
---|---|
|
|
FS_EXISTSプロシージャ | 指定されたファイル・システムが存在するかどうかを検証します。 マウント、アンマウントまたは破棄操作を実行する前に、このプロシージャを実行します。 |
LIST_FILESプロシージャ | ファイル・システム内の指定されたディレクトリ内のすべてのファイルをリストします。 |
|
|
指定されたマウント・ポイントにOracle File Systemをマウントします。 |
|
指定されたマウント・ポイントのOracle File Systemをアンマウントします。 |
DESTROY_ORACLE_FSプロシージャ
このプロシージャは、Oracle File Systemを破棄してから、それに関連付けられたリソースを解放します。 dbms_fs.destroy_oracle_fs()
プロシージャを実行して、使用されなくなったファイル・システムを破棄します。
構文
DBMS_FS.DESTROY_ORACLE_FS ( fstype IN VARCHAR2, fsname IN VARCHAR2);
パラメータ
表92-2 DBMS_FSパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システム・タイプ。 Oracleファイル・システム(OFS)およびデータベース・ファイル・システム(DBFS)がサポートされます。 |
|
ファイル・システムの名前。 |
使用上のノート
-
現在マウントされているファイル・システムの情報を取得するには、
V$OFSMOUNT
動的ビューを問い合せます。 -
ファイル・システム・タイプの詳細は、「MAKE_ORACLE_FSプロシージャ」の
fstypeに関する項
を参照してください。 -
DBMS_FS.DESTROY_ORACLE_FS
プロシージャを実行する前に、DBMS_FS.UNMOUNT_ORACLE_FS
プロシージャを使用してファイル・システムをアンマウントする必要があります。 まだ使用中のファイル・システム上でこのプロシージャを実行すると、エラーが発生します。 -
DBMS_FS.DESTROY_ORACLE_FS
を実行した後、Oracle Databaseはファイル・システムを破棄して、関連付けられたリソースを解放します。
例
次のサンプル・コードは、DBFSファイル・システムdbfs_fs1
を破棄する方法を示しています。
BEGIN DBMS_FS.DESTROY_ORACLE_FS ( fstype => 'dbfs', fsname => 'dbfs_fs1'); END; /
FS_EXISTSプロシージャ
dbms_fs.fs_exists()
プロシージャを使用して、マウント、アンマウントまたは破棄操作を実行する前に、指定されたファイル・システムが存在するかどうかを検証します。
構文
DBMS_FS.FS_EXISTS ( fsname IN VARCHAR2);
パラメータ
表92-3 DBMS_FSパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システムの名前。 |
例
次のサンプル・コードは、指定されたファイル・システム名data
のファイル・システムが存在するかどうかを確認する方法を示しています。
SQL> declare
fsname varchar2(64) := 'data';
fsexists integer;
begin
fs_exists := dbms_fs.fs_exists(fsname);
dbms_output.put_line('fs exists: ' || fsexists);
end;
/
SQL> select dbms_fs.fs_exists('data') from dual;
LIST_FILESプロシージャ
dbms_fs.list_files()
プロシージャを実行して、ファイル・システム内の指定されたディレクトリ内のすべてのファイルをリストします。
構文
DBMS_FS.LIST_FILES ( fsname IN VARCHAR2, dirpath IN VARCHAR2);
パラメータ
表92-4 DBMS_FSパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システムの名前。 |
dirpath |
ファイル・システム内の既存のディレクトリへのパス。 マウント・パスに対する相対パスを入力します。 たとえば、ディレクトリ・パスとして'/' と入力すると、マウント・パスに対する相対パスになります。
|
例
次のサンプル・コードは、ファイル・システム内の指定されたディレクトリ内のすべてのファイルをリストする方法を示しています。
SQL> select * from DBMS_FS.LIST_FILES ('data', '/') from dual;
ディレクトリへのパス('/'
)は、マウント・パスに対する相対パスです。
MAKE_ORACLE_FSプロシージャ
このプロシージャは、タイプDBFS
またはOFS
の新しいファイル・システムを、既存のOracle表領域またはその他のデータベース・オブジェクトの上に作成します。
構文
DBMS_FS.MAKE_ORACLE_FS ( fstype IN VARCHAR2, fsname IN VARCHAR2, fsoptions IN VARCHAR2);
パラメータ
表92-5 DBMS_FSパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システム・タイプ。 次のいずれかの値を入力します。
|
|
ファイル・システムの名前。 英数字を使用して、256文字以下の文字列を入力します。 |
|
次の形式を使用して、Oracle File Systemに使用する既存の表領域を指定します。 "tablespace=tablespace_name" |
使用上のノート
-
データベース・ファイル・システム(DBFS)を作成する場合は、
dbfs_create_filesystem.sql
スクリプトを実行する必要があります。このスクリプトによって、dbfs_create_filesystem_advanced.sql
スクリプトがコールされます。 デフォルトでは、このスクリプトは$ORACLE_HOME/rdbms/admin
ディレクトリ内にあります。 このスクリプトを実行する場合、既存の表領域の名前と、データベースに格納されるファイル・システムの名前を指定します。 ファイル・システムのサイズは、表のサイズと同じです。 たとえば、dbfs_ts
表領域にファイル・システムdbfs_tab
を作成する場合は、次のようにします。@/$ORACLE_HOME/rdbms/admin/dbfs_create_filesystem.sql dbfs_ts dbfs_tab
このスクリプトを実行した後、
DBMS_FS
パッケージ内の他のプロシージャを使用して、ファイル・システムをマウント、アンマウントおよび破棄できます。ノート:
Oracle Database19.3.1.0
リリース以降では、DBMS_FS.MAKE_ORACLE_FS
を使用してDBFS
ファイルシステムを作成します。このため、DBFS
ファイルシステムを作成するために必要となる補助SQLスクリプトはありません。 -
データベース・インスタンスに対して
DBMS_FS.MAKE_ORACLE_FS
プロシージャを実行することは、オペレーティング・システムでルートとしてmkfs
コマンドを実行することと同じです。 -
DBMS_FS.MAKE_ORACLE_FS
プロシージャを実行するには、fsoptions
パラメータで指定した表領域がすでに存在している必要があります。 既存の表領域を検索するには、DBA_TABLESPACES
データ・ディクショナリ・ビューを問い合せます。 -
ファイル・システムのサイズは、この表領域のサイズと同じです。
例
次の例は、dbfs_fs1
という名前のDBFSファイル・システムを表領域dbfs_fs1_tbspc
に作成する方法を示しています。
BEGIN DBMS_FS.MAKE_ORACLE_FS ( fstype => 'dbfs', fsname => 'dbfs_fs1', fsoptions => 'TABLESPACE=dbfs_fs1_tbspc'); END; /
MOUNT_ORACLE_FSプロシージャ
dbms_fs.mount_oracle_fs()
プロシージャを使用して、指定したマウント・ポイントにOracleファイル・システムまたはOFS管理対象ファイル・システムをマウントします。
始める前に、次のチェックを完了して、次のことを確認します。
dbms_fs.make_oracle_fs()
プロシージャを使用してファイル・システムを作成しました。- 指定したマウント・ポイントがローカル・ノードに存在します。
- Oracleユーザーにアクセス権限があります。
- マウント・パスが空です。これは、マウント・ポイントで指定されたディレクトリにファイルがないことを意味します。
Oracleは、リソースをより適切に制御し、優れたパフォーマンスを達成するために使用できる広範なマウント・オプションのリストをサポートしています。 persist
マウント・オプションを使用すると、インスタンスを再起動するたびにファイル・システムが自動的に再マウントされます。 OFSDは致命的でないバックグラウンド・プロセスであるため、プロセスの終了後に自動的に再起動されます。 OFSDプロセスの終了時にマウントされたファイル・システムは、新しいOFSDプロセスを起動すると自動的に再マウントされます。 これにより、エラーの場合でも、マウントされたファイル・システムの継続的な可用性が保証されます。
スループットを向上させるために、OFSDには書込みおよび読取り用の独自のローカル・キャッシュがあります。 書込みキャッシュは、ファイル接続ごとに8 (1MB)のバッファを使用し、ファイル・システムごとに最大256MBを使用できます。 この値は、マウント・オプションwcache_size
を使用して変更できます。 先読みアルゴリズムは、読取り操作用に実装され、ファイル接続ごとに2 (1MB)を使用し、ファイル・システムごとに最大256MBを使用できます。 この値を変更するには、マウント・オプションrcache_size
を使用します。
読取り/書込みキャッシュはノードごとに保持されるため、ローカル・キャッシュの一貫性が得られます。 RAC環境では、ファイルに対してflush()
またはclose()
操作が実行された後にのみ一貫性が保証されます。 2つの異なるRACノード上の2つの異なるプロセスが1つのファイルを変更して同じオフセットに書き込む場合、ファイルに対してclose()
操作を実行する最初のプロセスでは、そのデータがファイルに書き込まれます。
構文
DBMS_FS.MOUNT_ORACLE_FS ( fstype IN VARCHAR2, fsname IN VARCHAR2, mount_point IN VARCHAR2, mount_options IN VARCHAR2);
パラメータ
表92-6 MOUNT_ORACLE_FSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システム・タイプ。 Oracleファイル・システム(OFS)およびデータベース・ファイル・システム(DBFS)がサポートされます。 |
|
ファイル・システムの名前。 英数字を使用して、256文字以下の文字列を入力します。 |
|
ファイル・システムをマウントするローカル・ディレクトリ。 このディレクトリはすでに存在している必要があります。 絶対パスを入力します。 作成できるマウント・ポイントの最大数は、PDBごとに5個のマウント・ポイント、およびインスタンスごとに1000個のマウント・ポイントです。 |
|
カンマで区切られたマウント・オプション。「表92-7」にリストされています。 |
使用上のノート
表92-7 MOUNT_ORACLE_FSプロシージャでサポートされるマウント・オプション
マウント・オプション | 使用方法の説明 |
---|---|
|
OFSまたはDBFSによって管理されているファイルにアクセスしたときに、データベース・プロセスによって実行される読取りおよび書込み操作を最適化します。 |
default_permissions |
権限チェックを有効にし、ファイル・モードに基づいてアクセスを制限します。 このオプションは、allow_otherマウント・オプションとともに使用できます。 |
allow_other
|
マウントを実行したオペレーティング・システム・ユーザー以外のユーザーがファイルにアクセスできるようにします。 これは、ファイル・アクセスの決定時に権限チェックと組み合せて使用されます。 Linuxでは、このオプションを使用する場合、/etc/fuse.conf 構成ファイルにuser_allow_otherパラメータを設定する必要があります。
|
max_read
|
読取り操作の最大サイズ。 デフォルトでは、最大サイズは設定されません。 |
max_write
|
1つのリクエストにおける最大書込みサイズ。 デフォルトは128KBです。 |
direct_io |
オペレーティング・システム・カーネルに対してファイル・システム・キャッシュを使用しないように指示します。 |
nopersist
|
マウント・オプションを次回のインスタンス起動で使用するために格納しません。 |
persist |
マウント・エントリを、以降のインスタンス起動時に再度自動マウントされるように永続的に格納します。 このオプションは、ofs とdbfs の両方でサポートされます。
|
ro |
読取り専用モードでファイル・システムをマウントします。 ファイルを変更することはできません。 |
rw |
ファイル・システムを読取り/書込みとしてマウントします。 これはデフォルトです。 |
nosuid
|
ファイル・システムに設定ユーザーIDファイルを含められないことを指定します。 |
suid |
ファイル・システムに設定ユーザーIDファイルを含められることを指定します。 これはデフォルトです。 |
ofs_cache_attr_time |
OFSキャッシュ属性のタイムアウトを秒単位で指定します。 デフォルト値は5秒です。 指定可能な範囲は、 |
exec |
マウント・パスの下でのファイルの実行を許可します。 このオプションはデフォルトでは有効になります。 |
noexec |
マウント・パスの下でのファイルの実行を禁止します。 このオプションを使用して、ファイル・システムでのファイルの実行を禁止します。 |
atime |
ファイルがアクセスされた時間に関する情報を保持します。 このオプションはデフォルトでは有効になります。 |
noatime |
ファイルがアクセスされた時間に関する情報を保持しません。 このオプションを有効にすると、すべての読取り操作でアクセス時間が更新されるわけではないため、スループットが向上します。 |
max_readahead |
先読み操作の最大サイズをバイト単位で設定します。 デフォルト値は、使用するオペレーティング・システムのカーネルおよびFUSEのバージョンによって異なります。 |
sync_read |
同期読取りのみを許可します。 このオプションを使用すると、OFSの先読みキャッシュが無効になります。 |
async_read |
非同期読取りを許可します。 ファイル・システム内のすべての読取りおよび書込み操作が非同期に実行されます。 これは、FUSEバージョン7.6以降のデフォルト・オプションです。 |
dirsync |
すべてのディレクトリ操作を同期させます。 FUSEでは、このオプションを使用します。 |
big_writes |
4KBを超える書込みを許可します。 これは、FUSEバージョン7.6以降のデフォルト・オプションです。 |
no_big_writes |
4KBを超える書込みは許可されません。 これはOFSの推奨オプションではありません。 |
xattr_enabled |
拡張属性の使用を有効にします。 このオプションは、拡張属性を使用する場合にのみ指定します。 |
kernel_cache_mode=writeback |
このオプションの値として |
kernel_cache_attr_time=N |
Linuxカーネル属性キャッシュのタイムアウトをN秒に設定します。 デフォルト値は無限です。 Oracleでは、RAC設定に低い値を設定することをお薦めします。 |
wcache_size=N |
OFS書込みキャッシュ・サイズをNバイトに設定します。 デフォルト値は256MBです。 |
rcache_size |
OFS読取りキャッシュ・サイズをNバイトに設定します。 デフォルト値は256MBです。 |
statfs_ctime |
statfs() がOFSにキャッシュされる時間(秒)を設定します。 デフォルト値は300秒(5分)です。 Oracleでは、デフォルト値を使用して、FUSEからのstatfs() コールが繰り返されないようにすることをお薦めします。
|
no_rbt_cache |
ディレクトリ・エントリのキャッシュにレッド・ブラック・ツリーを使用できないようにします。 デフォルトでは、ディレクトリのリスト表示中に同時更新があるときに正確性を確保するために、レッド・ブラック・ツリーが使用されます。 |
posix_locks |
OFSにPOSIXファイル・ロックを実装します。 これはOFSではサポートされていません。 ファイルロック・メカニズムを使用する場合は、 |
noposix_locks |
LinuxカーネルにPOSIXファイル・ロックを実装します。 これがデフォルトのオプションです。 |
ノート:
nopersist
/persist
ro
/rw
nosuid
/suid
exec
/noexec
atime
/noatime
big_writes
/no_big_writes
sync_read
/async_read
posix_locks
/noposix_locks
使用上のノート
-
このプロシージャは、ローカル・データベース・インスタンスでファイル・システムを参照可能にします。
-
ファイル・システム・タイプの詳細は、「MAKE_ORACLE_FSプロシージャ」の
fstypeに関する項
を参照してください。 -
現在マウントされているファイル・システムの情報を取得するには、
V$OFSMOUNT
動的ビューを問い合せます。 -
Oracleデータベース・インスタンスが実行されているローカル・コンピュータ・ノードで、
DBMS_FS.MAKE_ORACLE_FS
を使用してすでに作成されたファイル・システムに対してDBMS_FS.MOUNT_ORACLE_FS
プロシージャを実行します。 Oracle Database外部で作成されたファイル・システムに対してこのプロシージャを実行することはできません。 -
ファイル・システムをマウントした後にマウント・オプションを更新することはできません。 後でマウント・オプションを変更する場合は、ファイル・システムをアンマウントしてから、再マウントする必要があります。
例1: DBFSファイル・システムのマウント
DBFSファイル・システムを/oracle/DBFS/testfs
にマウントします。
BEGIN DBMS_FS.MOUNT_ORACLE_FS ( fstype => 'dbfs', fsname => 'dbfs_fs1', mount_point => '/oracle/dbfs/testfs', mount_options => 'default_permissions, allow_other, db_access'); END;
例2: DBFSファイル・システムの永続マウント
DBFSファイル・システムを/oracle/DBFS/testfs
に永続的にマウントします。
BEGIN DBMS_FS.MOUNT_ORACLE_FS ( fstype => 'dbfs', fsname => 'dbfs_fs1', mount_point => '/oracle/dbfs/testfs', mount_options => 'default_permissions, allow_other, persist, db_access'); END;
UNMOUNT_ORACLE_FSプロシージャ
このプロシージャは、指定されたマウント・ポイントのOracle File Systemをアンマウントします。
PDBにマウントされているファイル・システムは、PDBがクローズされると自動的にアンマウントされます。 dbms_fs.unmount_oracle_fs()
を使用して、OFSを介してマウントしたOracleファイル・システムを明示的にアンマウントすることもできます。
構文
DBMS_FS.UNMOUNT_ORACLE_FS ( fsname IN VARCHAR2, mount_point IN VARCHAR2, unmount_options IN VARCHAR2);
表92-8 UNMOUNT_ORACLE_FSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ファイル・システムの名前。 |
|
ファイル・システムがマウントされたローカル・ディレクトリ。 絶対パスを入力します。 |
|
オプションで、
OFSDの再起動時にファイル・システムを再マウントしない場合は、 |
使用上のノート
-
ファイル・システムをアンマウントする前に、このファイル・システムを使用するすべてのアプリケーションが停止していることを確認してください。 また、マウント中のファイル・システムを参照するプロセスがないことも確認してください。
-
現在マウントされているファイル・システムの情報を取得するには、
V$OFSMOUNT
動的ビューを問い合せます。 -
ファイル・システム・タイプの詳細は、「MAKE_ORACLE_FSプロシージャ」の
fstypeに関する項
を参照してください。 - ファイル・システムをアンマウントした後、アプリケーションがOFSがサポートするファイル・システムではなく基盤となるファイル・システムに書き込むことができないように、マウント・ポイントから書き込み権限が削除されます。
-
Oracleインスタンスが通常の即時モードで停止された場合、マウントされているすべてのファイル・システムは自動的にアンマウントされます。
-
ファイル・システムが
persist
オプションを指定してMOUNT_ORACLE_FS
プロシージャを使用してマウントされる場合、データベース・インスタンスの起動時またはPDBの接続時に自動的に再度マウントされます。 このファイル・システムをDBMS_FS.UNMOUNT_ORACLE_FS
を実行してアンマウントした場合、マウント時にpersist
オプションを使用していても、アンマウントされたままになります。 -
SHUTDOWN ABORT
を実行した後も、ファイル・システムにマウントされていると示されますが、アクセスできない場合があります。 この場合、オペレーティング・システム・レベルでunmount
コマンド(Linuxシステムではfusermount
プロシージャ)をコールして、手動でシステムをアンマウントできます。 v$ofsmount
などのOracleビューで不整合が発生するため、fusermount -u
を使用して実行中のファイル・システムをアンマウントしないでください。-
Oracle File Systemのローカル・マウント・ポイントをリモート・システムを指すようにエクスポートし、次にオペレーティング・システムの
mount
コマンドを使用してリモート・システムからファイル・システムのNFSマウントを実行できます。DBMS_FS.MOUNT_ORACLE_FS
プロシージャは、他のローカル・ファイル・システムで使用されるmount
コマンドに類似しています。 -
セキュリティを強化するため、アクセス制御リスト(ACL)およびKerberosを使用して、機密性の高いデータへのアクセスを制御することをお薦めします。
-
オペレーティング・システム・レベルからファイル・システムをアンマウントしないでください。 これを行うと、Oracle Databaseで作成されたファイル・システム内部表が一貫性のない状態のまま残ることがあります。
例
次のサンプル・コードは、DBFSにマウントされたファイル・システムを/oracle/DBFS/testfs
にアンマウントします。
BEGIN DBMS_FS.UNMOUNT_ORACLE_FS ( fsname => 'dbfs_fs1', mount_point => '/oracle/dbfs/testfs', mount_options => 'force'); END;