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サブプログラム

サブプログラム 説明

DESTROY_ORACLE_FSプロシージャ

fstypeを使用して、fsnameという名前のOracle File Systemを破棄します。

FS_EXISTSプロシージャ 指定されたファイル・システムが存在するかどうかを検証します。 マウント、アンマウントまたは破棄操作を実行する前に、このプロシージャを実行します。
LIST_FILESプロシージャ ファイル・システム内の指定されたディレクトリ内のすべてのファイルをリストします。

MAKE_ORACLE_FSプロシージャ

fstypeで指定されたタイプで、fsnameという名前のファイル・システムを作成します。

MOUNT_ORACLE_FSプロシージャ

指定されたマウント・ポイントにOracle File Systemをマウントします。

UNMOUNT_ORACLE_FSプロシージャ

指定されたマウント・ポイントの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パラメータ

パラメータ 説明

fstype

ファイル・システム・タイプ。 Oracleファイル・システム(OFS)およびデータベース・ファイル・システム(DBFS)がサポートされます。

fsname

ファイル・システムの名前。

使用上のノート

  • 現在マウントされているファイル・システムの情報を取得するには、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パラメータ

パラメータ 説明

fsname

ファイル・システムの名前。

次のサンプル・コードは、指定されたファイル・システム名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パラメータ

パラメータ 説明

fsname

ファイル・システムの名前。

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パラメータ

パラメータ 説明

fstype 

ファイル・システム・タイプ。 次のいずれかの値を入力します。
  • ofs- Oracleファイル・システムを作成する場合
  • dbfs- データベース・ファイル・システムを作成する場合

fsname 

ファイル・システムの名前。 英数字を使用して、256文字以下の文字列を入力します。

fsoptions 

次の形式を使用して、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 Database 19.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プロシージャのパラメータ

パラメータ 説明

fstype

ファイル・システム・タイプ。 Oracleファイル・システム(OFS)およびデータベース・ファイル・システム(DBFS)がサポートされます。

fsname

ファイル・システムの名前。 英数字を使用して、256文字以下の文字列を入力します。

mount_point

ファイル・システムをマウントするローカル・ディレクトリ。 このディレクトリはすでに存在している必要があります。 絶対パスを入力します。 作成できるマウント・ポイントの最大数は、PDBごとに5個のマウント・ポイント、およびインスタンスごとに1000個のマウント・ポイントです。

mount_options

カンマで区切られたマウント・オプション。「表92-7」にリストされています。

使用上のノート

表92-7 MOUNT_ORACLE_FSプロシージャでサポートされるマウント・オプション

マウント・オプション 使用方法の説明

db_access

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 マウント・エントリを、以降のインスタンス起動時に再度自動マウントされるように永続的に格納します。 このオプションは、ofsdbfsの両方でサポートされます。
ro 読取り専用モードでファイル・システムをマウントします。 ファイルを変更することはできません。
rw ファイル・システムを読取り/書込みとしてマウントします。 これはデフォルトです。
nosuid ファイル・システムに設定ユーザーIDファイルを含められないことを指定します。
suid ファイル・システムに設定ユーザーIDファイルを含められることを指定します。 これはデフォルトです。
ofs_cache_attr_time

OFSキャッシュ属性のタイムアウトを秒単位で指定します。 デフォルト値は5秒です。 指定可能な範囲は、0からUB4MAXVALです。 RACを使用する場合は、小さい値を指定することをお薦めします。 1000のような大きい値を指定すると、同じファイル・システムが別のパスにマウントされている場合に、ファイルからの属性が一致しないことがあります。 これは、OFSレイヤーで行われるアグレッシブ・キャッシュによるものです。

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

このオプションの値としてwritebackと入力すると、Linuxカーネル・キャッシュがライトバック・キャッシュのように動作します。 ライトバック・キャッシュは、入力出力要件が多数ある場合にパフォーマンスを向上させます。 FUSEでは、このオプションを使用します。 使用可能な値は、writebackおよびwrite-throughです。 デフォルト値はwrite-throughです。

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オプションを使用します。

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プロシージャのパラメータ

パラメータ 説明

fsname

ファイル・システムの名前。

mount_point

ファイル・システムがマウントされたローカル・ディレクトリ。 絶対パスを入力します。

unmount_options

オプションで、forceまたはcleanを入力します。

forceを入力して、ファイル・システムを強制的にアンマウントします。 これを設定すると、新しいリクエストはファイル・システムに送信されません。 ファイル・システム上のすべての保留中のリクエストは、完了するか取り消されるかのどちらかです。 この設定を省略した場合、ビジー状態のファイル・システムをアンマウントしようとすると、EBUSYエラーが発生します。

OFSDの再起動時にファイル・システムを再マウントしない場合は、cleanと入力します。

使用上のノート

  • ファイル・システムをアンマウントする前に、このファイル・システムを使用するすべてのアプリケーションが停止していることを確認してください。 また、マウント中のファイル・システムを参照するプロセスがないことも確認してください。

  • 現在マウントされているファイル・システムの情報を取得するには、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;