25 DBFSの使用
DBFSファイルシステムの実装には、ファイルシステムの作成、アクセスおよび管理が含まれます。
内容は次のとおりです。
25.1 DBFSインストール
DBFSはOracle Databaseインストールの一部であり、ORACLE_HOME
の下にインストールされます。
$ORACLE_HOME/rdbms/admin
には、次のDBFSユーティリティ・スクリプトが含まれます。
-
コンテンツAPI (CAPI)
-
SecureFilesストア(SFS)
$ORACLE_HOME/bin
には、次が含まれます。
-
dbfs_client
実行可能ファイル
$ORACLE_HOME/rdbms/admin
には、次が含まれます。
-
コンテンツ・ストア用のSQL (
.plb
拡張子)スクリプト
25.2 DBFSファイルシステムの作成
DBFSファイルシステムには、パーティション化されているものとパーティション化されていないものがあります。ユーザーには特定の権限が要求される場合があります。
内容は次のとおりです。
25.2.1 DBFSファイルシステムの作成に必要な権限
データベース・ユーザーがファイルシステムを作成するには、最小限の権限セットが必要です。
ユーザーには、次の権限が必要です。
-
GRANT CONNECT
-
CREATE SESSION
-
RESOURCE
、CREATE TABLE
-
CREATE PROCEDURE
-
DBFS_ROLE
25.2.2 パーティション化されていないDBFSファイルシステムとパーティション化されたDBFSファイルシステムのメリットの違い
パーティション化されていないファイルシステムを作成することも、パーティション化されたファイルシステムを作成することもできます。パーティショニングは、DBFSにファイルシステムを作成するにあたり、最善のパフォーマンスとスケーラビリティを得られるデフォルトの方法です。
パーティション間では、領域は共有されないため、あるパーティションに領域があっても、別のパーティションでは領域が不足する場合があります。通常、ファイルシステム・サイズが個別のファイルのサイズに比べて大きい場合、問題はありません。ただし、ファイル・サイズがファイルシステム・サイズの大きい割合を占める場合、ファイルシステムに空きがあっても、ENOSPC
エラーが発生する場合があります。
また、パーティション化では、名前変更の操作でファイルの再書込みが必要になる場合もあります。ファイルが大きい場合、このコストは高くなる可能性があります。
25.2.3 パーティション化されていないファイルシステムの作成
DBFS管理者権限を持つユーザーとしてログインし、DBFS_CREATE_FILESYSTEM.SQL
を実行してファイルシステムを作成できます。
次のステップにより、ファイルシステムを作成できます。
たとえば、既存の表領域dbfs_tbspc
にstaging_area
というファイルシステムを作成するには、次を実行します。
$ sqlplus dbfs_user/db_server @$ORACLE_HOME/rdbms/admin/dbfs_create_filesystem.sql dbfs_tbspc staging_area
25.2.4 パーティション化されたファイルシステムの作成
DBFS内のファイルはハッシュ・パーティション化されます。パーティション化では、データベース内に複数の物理セグメントが作成され、ファイルはこれらのパーティション内にランダムに分散されます。
DBFS管理者権限を持つユーザーとしてログインし、DBFS_CREATE_FILESYSTEM
_ADVANCED
.SQL
を実行して、パーティション化されたファイルシステムを作成できます。
パーティション化されたファイル・システムの作成時に、次のいずれかの値をハッシュ・キーとして指定できます。
partition
およびpartition-by-itemname
: アイテム名をパーティション・キーとして使用します。アイテム名は、パス名の最後の構成要素です。このオプションは、ファイル・パスの最後の構成要素に基づいてファイルをパーティション化する場合に使用します。たとえば、/directory1/subdirectory2/filename.txt
がパス全体の場合、filename.txt
がパスの最後の構成要素であり、filename.txt
がパーティション・キーとして使用されます。partition
オプションを使用する場合、ファイル・システムは、アイテム名をパーティション・キーとして使用してパーティション化されます。partition-by-guid
: DBFSによってファイルに割り当てられたグローバル一意識別子(GUID)をパーティション・キーとして使用します。DBFSにより、GUIDが各ファイルに割り当てられます。このオプションは、内部生成されたGUIDに基づいてファイルをパーティション化する場合に使用します。partition-by-path
: ファイルのパス全体をパーティション・キーとして使用します。たとえば、ファイルが/directory1/subdirectory2/filename.txt
の場合、/directory1/subdirectory2/filename.txt
全体がパーティション・キーとみなされます。
25.3 DBFSファイル・システムへのアクセス
DBFSファイルシステムにアクセスするには、前提条件、アクセス・インタフェース、DBFSセキュリティ・モデルおよびXML DBサーバー・プロトコルを使用します。
内容は次のとおりです。
25.3.1 DBFSクライアントの前提条件
dbfs_client
という名前のDBFSファイルシステム・クライアントは、特定の前提条件に基づいて、DBFSファイルシステムにアクセスする各システム上で動作します。
DBFSファイルシステム・クライアントdbfs_client
の前提条件は、次のとおりです。
-
dbfs_
client
ホストに、Oracleクライアント・ライブラリがインストールされている必要があります。 -
dbfs_client
は、DBFSコマンド・インタフェースを使用して、直接のRDBMSクライアントとしてLinux、Linux.X64、Solaris、Solaris64、AIX、HPUXおよびWindowsプラットフォームで使用できます。 -
dbfs_client
は、マウント・クライアントとしてLinux、Linux.X64およびSolaris 11プラットフォームでのみ使用できます。これには、次の手順が必要です。-
dbfs_client
ホストには、FUSE
LinuxパッケージまたはSolarislibfuse
パッケージがインストールされている必要があります。 -
fuse
という名前のグループを作成し、dbfs_client
を実行しているユーザー名をメンバーにする必要があります。
関連項目:
詳細は、「DBFSマウント・インタフェース(LinuxおよびSolarisのみ)」を参照してください。
-
25.3.2 DBFSクライアント・コマンドライン・インタフェースの操作
DBFSクライアント・コマンドライン・インタフェースを使用すると、DBFSに格納されているファイルに直接アクセスできます。
内容は次のとおりです。
25.3.2.1 DBFSクライアント・コマンドライン・インタフェースについて
DBFSクライアント・コマンドライン・インタフェースを使用すると、ネットワーク上のホストからDBFSファイルシステムにファイルをコピーしたりDBFSファイルシステムからホストにファイルをコピーするコマンドなど、事前定義された多くのコマンドを実行できます。
コマンドライン・インタフェースのパフォーマンスは、DBFSクライアント・マウント・インタフェースよりも少し上回ります。これは、ファイルシステムにマウントせずに、ユーザー・スペースのファイルシステムを迂回するためです。ただし、これはアプリケーションに対して透過的ではありません。
DBFSクライアント・マウント・インタフェースを使用すると、ファイルシステム・マウント・ポイントを介してDBFSをマウントできるため、一般的なファイルシステム操作により、DBFSに格納されているファイルに透過的にアクセスできます。
DBFSコマンドを実行するには、DBFSクライアントに対して--command
を指定します。
25.3.2.2 コンテンツ・ストア・パスの作成
パス名を指定することにより、コンテンツ・ストア・パスを作成できます
すべてのDBFSコンテンツ・ストア・パスの前には、dbfs:
を付ける必要があります(例: dbfs:/staging_area/file1
)。指定するすべてのデータベース・パス名は、絶対パスである必要があります。
dbfs_client db_user@db_server --command command [switches] [arguments]
説明:
-
command
は、ls
、cp
、mkdir
、rm
などの実行可能なコマンドです。 -
switches
は、コマンドごとに固有です。 -
arguments
は、ファイル名またはディレクトリ名で、コマンドごとに固有です。
dbfs_client
は、失敗するとゼロ以外の値を戻します。
25.3.2.3 ディレクトリの作成
mkdir
コマンドを使用して、新しいディレクトリを作成できます。
次の構文を使用します。
dbfs_client db_user@db_server --command mkdir directory_name
説明:
-
directory_name
は、作成されたディレクトリの名前です。次に例を示します。$ dbfs_client ETLUser@DBConnectString --command mkdir dbfs:/staging_area/dir1
25.3.2.4 ディレクトリのリスト
ls
コマンドを使用して、ディレクトリのコンテンツをリストできます。
次の構文を使用します。
dbfs_client db_user@db_server --command ls [switches] target
説明:
-
target
は、リストされたディレクトリです。 -
switches
は、次の組合せのいずれかになります。-
-
a
は、すべてのファイル('.
'や'..
'を含む)を示します。 -
-
l
は、長いリスト形式(各ファイルの名前、ファイル・タイプ、権限およびサイズ)を示します。 -
-
R
は、サブディレクトリを再帰的にリストします。
-
次に例を示します。
$ dbfs_client ETLUser@DBConnectString --command ls dbfs:/staging_area/dir1
または
$ dbfs_client ETLUser@DBConnectString --command ls -l -a -R dbfs:/staging_area/dir1
25.3.2.5 ファイルおよびディレクトリのコピー
cp
コマンドを使用して、ファイルまたはディレクトリをソースの場所から宛先の場所にコピーできます。
cp
コマンドは、ディレクトリの再帰的コピーもサポートしています。
dbfs_client db_user@db_server --command cp [switches]source
destination
説明:
-
source
は、ソースの場所です。 -
destination
は、宛先の場所です。 -
switches
は-R
または-r
のいずれかで、これらは、すべてのソース・コンテンツを宛先ディレクトリに再帰的にコピーするためのオプションです。
次の例では、ローカル・ディレクトリ01-01-10-dump
のコンテンツをDBFS内のディレクトリに再帰的にコピーします。
$ dbfs_client ETLUser@DBConnectString --command cp -R 01-01-10-dump dbfs:/staging_area/
次の例では、ファイルhello.txt
をDBFSからローカル・ファイルHi.txt
にコピーします。
$ dbfs_client ETLUser@DBConnectString --command cp dbfs:/staging_area/hello.txt Hi.txt
25.3.2.6 ファイルおよびディレクトリの削除
コマンドrm
を使用して、ファイルまたはディレクトリを削除できます。
rm
コマンドは、ディレクトリの再帰的削除もサポートしています。
dbfs_client db_user@db_server --command rm [switches] target
説明:
-
target
は、リストされたディレクトリです。 -
switches
は-R
または-r
のいずれかで、これらは、すべてのコンテンツを再帰的に削除するためのオプションです。
次に例を示します。
$ dbfs_client ETLUser@DBConnectString --command rm dbfs:/staging_area/srcdir/hello.txt
または
$ dbfs_client ETLUser@DBConnectString --command rm -R dbfs:/staging_area/dir1
25.3.3 DBFSマウント・インタフェース(LinuxおよびSolarisのみ)
dbfs_client
を使用してDBFSをマウントできるのは、LinuxおよびSolarisの場合のみです。
LinuxプラットフォームとSolarisプラットフォームでは要件が異なります。
内容は次のとおりです。
25.3.3.1 Solaris 11 SRU7以降でのFUSEのインストール
FUSE
をインストールする場合、Solaris 11 SRU7以降ではdbfs_client
をマウント・クライアントとして使用できます
Solaris 11 SRU7以降でdbfs_client
をマウント・クライアントとして使用するには、FUSE
をインストールします。
-
次のパッケージを
root
として実行します。pkg install libfuse
25.3.3.2 DBFSストアのマウント
DBFSストアをマウントするには、dbfs_client
プログラムを実行します。
dbfs_client
プログラムするには、次の手順を実行します。
- Oracleクライアント・ライブラリへのパスが
LD_LIBRARY_PATH
に正しく指定されていることを確認します。 dbfs_client
プログラムを実行します。
ファイルシステムがアンマウントされるまで、dbfs_client
プログラムは戻されません。
関連項目:
「DBFSクライアントでのOracle Walletの使用」で、パスワードを指定するのが最も安全な方法を参照してください
25.3.3.3 Solaris固有の権限
Solarisの場合、DBFSファイルシステムでマウントおよびアンマウント操作を実行するには、Solarisの権限PRIV_SYS_MOUNT
が必要です。
ユーザーのSolarisの権限PRIV_SYS_MOUNT
を付与します。
-
/etc/user_attr
を編集します。 -
次のようにユーザー・エントリを追加または変更します(ユーザーがOracleであることを前提としています)。
oracle::::type=normal;project=group.dba;defaultpriv=basic,priv_sys_mount;;auth s=solaris.smf.*
25.3.3.4 SolarisおよびLinux用のマウント・コマンドについて
SolarisおよびLinux用のdbfs_client
マウント・コマンドでは、特定の構文を使用します。
構文:
dbfs_client db_user@db_server [-o option_1 -o option_2 ...] mount_point
必須のパラメータは次のとおりです。
-
db_user
は、DBFSコンテンツ・ストア・ファイルシステムを所有するデータベース・ユーザーの名前です。 -
db_server
は、Oracle Databaseサーバーの有効な接続文字列(hrdb_host:1521/hrservice
など)です。 -
mount_point
は、データベース・ファイルシステムがマウントされるパスです。データベース・ユーザーによって所有されるすべてのファイルシステムはマウント・ポイントで表示されることに注意してください。
オプションは次のとおりです。
-
direct_io
: OSページ・キャッシュを使用しないため、大きいファイルの場合にパフォーマンスが向上します。このオプションでは、ファイルシステムのプログラムを実行できません。DBFSがETLステージング領域として使用される場合は、このオプションをお薦めします。 -
wallet
: DBFSクライアントをバックグラウンドで実行します。証明書を取得できるようにウォレットを設定する必要があります。 -
failover
: データを損失せずに残存のデータベース・インスタンスにDBFSクライアントをフェイルオーバーします。小さいファイルでは特に、書込みでパフォーマンスのコストが予想されます。 -
allow_root
: rootユーザーによるファイルシステムへのアクセスを許可します。/etc/fuse.conf
構成ファイルにuser_allow_other
パラメータを設定する必要があります。 -
allow_other
: 他のユーザーによるファイルシステムへのアクセスを許可します。/etc/fuse.conf
構成ファイルにuser_allow_other
パラメータを設定する必要があります。 -
rw
: 読取り/書込みとしてファイルシステムをマウントします。これがデフォルトの設定です。 -
ro
: 読取り専用としてファイルシステムをマウントします。ファイルを変更することはできません。 -
trace_level=
n
では、トレース・レベルを設します。トレース・レベルは次のとおりです。-
1 DEBUG
-
2 INFO
-
3 WARNING
-
4 ERROR
: デフォルトのトレース・レベルです。エラーが発生した場合のみ診断情報を出力します。このトレース・レベルは常に有効にすることをお薦めします。 -
5 CRITICAL
-
-
trace_file=STR
: トレース・ログ・ファイルを指定します。STR
はfile_name
とsyslog
のどちらでもかまいません。 -
trace_size=
trcfile_size
: トレース・ファイルのサイズをMB単位で指定します。デフォルトでは、dbfs_client
では、2つの10MBファイル間でトレース出力をローテーションします。trace_size=
に対して0
を指定すると、トレース・ファイルの最大サイズが無制限に設定されます。
25.3.3.5 ウォレットを使用したファイルシステムのマウント
様々な環境変数を構成した後、ウォレットを使用してファイルシステムをマウントできます。
ウォレットを使用してファイルシステムをマウントする前に、最初にLD_LIBRARY_PATH
およびORACLE_HOME
環境変数を正しく構成する必要があります。
25.3.3.6 コマンド・プロンプトでパスワードを使用したファイルシステムのマウント
dbfs_client
を使用してファイルシステムをマウントできます。
dbfs_client
を使用してファイルシステムをマウントするには、コマンド・プロンプトでパスワードを入力する必要があります。
-
次のコマンドを実行します。
$ dbfs_client ETLUser@DBConnectString /mnt/dbfs password: xxxxxxx
25.3.3.7 ファイルから読み込まれたパスワードを使用したファイルシステムのマウント
ファイルから読み込まれたパスワードを使用してファイルシステムをマウントできます。
次の例では、ファイルシステムをマウントし、ターミナルを解放します。ここでは、パスワードをファイルから読み取ります。
-
次のコマンドを実行します。
$ nohup dbfs_client ETLUser@DBConnectString /mnt/dbfs < passwordfile.f & $ ls -l /mnt/dbfs drwxrwxrwx 10 root root 0 Feb 9 17:28 staging_area
25.3.3.8 ファイルシステムのアンマウント
Linuxの場合、fusermount
を実行して、ファイルシステムをアンマウントできます。
fusermount
をLinuxで実行するには、次を実行します。
-
次のコマンドを実行します。
$ fusermount -u <
mount point
>
Solarisの場合、umount
を実行して、ファイルシステムをアンマウントできます。
-
次のコマンドを実行します。
$ umount -u <
mount point
>
25.3.3.9 Linux用のfstabユーティリティを使用したDBFSのマウント
Linuxの場合、fstab
ユーティリティを構成し、dbfs_client
を使用してDBFSファイルシステムをマウントします。
/etc/fstab
でDBFSをマウントするには、Oracle Walletを認証に使用する必要があります。
25.3.3.11 マウントされたファイルシステムの制限事項
DBFSでは、一部を例外としてほとんどのファイルシステム操作をサポートしています。例外は次のとおりです。
-
ioctl
-
範囲ロック(ファイル・ロックがサポートされています)
-
libaio
を使用した非同期I/O -
O_DIRECT
ファイル・オープン -
ハード・リンク、パイプ
-
その他の特定のファイル・モード
メモリー・マップ・ファイルは、共有書込み可能モードを除いてサポートされます。パフォーマンス上の理由から、DBFSでは、ファイル・データまたはファイル・データ属性の読取りのたびにファイル・アクセス時間を更新することはありません。
direct_io
オプションが指定されている場合、DBFSマウント・ファイルからプログラムを実行することはできません。
Oracleでは、NFSまたはSambaを使用したDBFSファイル・システムのエクスポートはサポートしていません。
25.3.4 ファイルシステム・セキュリティ・モデル
データベースでは、DBFSでセキュリティを管理します。オペレーティング・システムのセキュリティ・モデルは使用しません。
25.3.4.1 ファイルシステムのセキュリティ・モデルについて
DBFSは、ユーザーによって作成されたすべてのファイルシステムが、デフォルトでそのユーザー固有になるセキュリティ・モデルで機能します。
このモデルを変更しないことをお薦めします。オペレーティング・システム・ユーザーとOracle Databaseユーザーは異なるため、複数のオペレーティング・システム・ユーザーを単一のDBFSファイルシステムにマウントすることはできません。これらのマウントは、マウント・ポイントおよび権限が異なる場合があります。たとえば、user1
はDBFSファイルシステムをREAD ONLY
としてマウントし、user2
はREAD WRITE
としてマウントできます。ただし、どちらのユーザーも同じデータベース・ユーザーとしてファイルシステムにアクセスするため、Oracle Databaseでは、両方のユーザーを同じ権限を持つユーザーとして認識します。
データベース・ファイルシステムにアクセスするには、ファイルシステムの基礎となっている表の権限を持つデータベース・ユーザーとしてデータベースにログインする必要があります。データベース管理者は、ファイルシステムへのアクセス権をデータベース・ユーザーに付与します。データベース・ユーザーごとに、ファイルシステムに対して異なるREAD
権限またはUPDATE
権限を持つことができます。データベース管理者は、DBFSファイルシステムに格納されているすべてのファイルにアクセスできます。
各クライアント・コンピュータでは、DBFSマウント・ポイントへのアクセスは、ファイルシステムをマウントするオペレーティング・システム・ユーザーに制限されています。ただし、多数のユーザーが同一のDBFSファイルシステムを別々にマウントできるため、これによってDBFSファイルシステムにアクセス可能なユーザーの数が制限されることはありません。
DBFSでは、データベースの権限チェックのみが実行されます。Linuxでは、DBFSがファイルシステムがマウントされた場合に、オペレーティング・システムのファイル・レベルの権限チェックが実行されます。コマンド・インタフェースを使用した場合、またはPL/SQLインタフェースを直接使用した場合は、DBFSでこのチェックは実行されません。
25.3.4.2 共有ルート・アクセスの有効化
ファイルシステムをマウントしているオペレーティング・システム・ユーザーとしては、allow_root
オプションを指定することで、ファイルシステムへのrootアクセスを許可できます。このオプションでは、例25-1に示すように、/etc/fuse.conf
ファイルにuser_allow_other
フィールドを含める必要があります。
例25-1 他のユーザーのルート・アクセスの有効化
# Allow users to specify the 'allow_root' mount option. user_allow_other
25.3.4.3 複数データベース・ユーザーのDBFSアクセスについて
状況によっては、複数のデータベース・ユーザーが同じファイルシステムにアクセスする必要が生じます。たとえば、ファイルシステムを所有するデータベース・ユーザーが権限を付与されたユーザーで、そのユーザーの証明書を共有すると、セキュリティのリスクにさらされる危険があるとします。これを回避するために、DBFSでは、複数のデータベース・ユーザーがファイルシステムの状態のサブセットを共有できるようになっています。
DBFSコンテンツAPIによるDBFSの登録およびマウントは各ユーザー固有ですが、各ユーザーが利用する基礎となるファイルシステムおよび表はユーザー間で共有できます。これにより、個々のファイルシステムを個別にマウントできるようになり、SQL/PLSQLまたはdbfs_client
APIのいずれかを使用して、異なるデータベース・ユーザーで使用できます。
25.3.4.4 複数のデータベース・ユーザー間でのDBFSアクセスの共有の確立
複数のデータベース・ユーザー間でDBFSを共有できます。
次の例では、ユーザーuser1
はファイルシステムを変更できますが、user2
はこれらの変更を参照することしかできません。user1
は、ファイルシステムを作成するデータベース・ユーザーで、user2
は、最終的にdbfs_client
を使用してファイルシステムのマウントとアクセスを行うデータベース・ユーザーです。user1
とuser2
は、どちらもDBFS_ROLE
権限を持ちます。
エクスポートと登録の組合せが完了した後、基礎となる表の使用に関しては両ユーザーは対等に動作します。exportFilesystem()
プロシージャは、スキーマ間で共有される同じデータへのアクセスに必要な権限の付与を管理します。user1
がexportFilesystem()
をコールした後、ファイルシステムのアクセス権をDBFS_ROLE
を持つすべてのユーザーに付与できます。別のロールを指定することもできます。
続いて、dbms_dbfs_sfs.registerFilesystem()
、dbms_dbfs_sfs.registerStore()
およびdmbs_dbfs_sfs.mountStore()
プロシージャ・コールを呼び出すことにより、基礎となる同じ記憶域を共有する新しいDBFSファイルシステムをuser2
がuser1_FS
ファイルシステムとして作成できます。
複数のデータベース・ユーザーがファイルシステムを共有している場合は、所有者(ここではuser1
)がファイルシステムを削除する前に、すべてのデータベース・ユーザーがそのファイルシステムに関連する各自の項目の登録を解除している必要があります。
root
としてDBFSを実行することは推奨されません。
25.3.5 DBFSへのHTTP、WebDAVおよびFTPアクセス
インターネットを介してDBFSへのHTTP、WebDAVおよびFTPアクセスを可能にするコンポーネントでは、様々なXML DBサーバーのプロトコルを使用します。
内容は次のとおりです。
25.3.5.1 XDBを介したDBFSへのインターネット・アクセス
DBFS認証を持つデータベース・ユーザーに対して、階層ファイルシステムに類似した登録済およびマウント済DBFSストアのビューを提供するために、ストアはパス/dbfs
の下に表示されます。
/dbfs
フォルダは仮想フォルダです。これは、サブツリー内のリソースがXDBリポジトリではなくDBFSストアに格納されるためです。XDBは、ルート・パス名/
に対して(起動者権限を使用して) dbms_dbfs_content.list()
コマンドを発行し、/dbfs
フォルダ内のサブフォルダとしてストア・アクセス・ポイントのリストを受け取ります。このリストは、dbms_dbfs_content.mountStore()
に渡されたstore_mount
パラメータと比較されます。FTPおよびWebDAVユーザーはこれらのストアにナビゲートでき、HTTPおよびHTTPSユーザーはブラウザからURLにアクセスします。
リポジトリ・イベント、リソース構成およびACLなどの、XDBリポジトリによって実装される機能は、/dbfs
フォルダでは使用できません。
DBFSストアの作成、登録、登録解除、マウント、アンマウントおよび削除に関するガイドラインの詳細は、「DBFSコンテンツAPI」を参照してください
25.3.5.2 Web Distributed Authoring and Versioning (WebDAV)アクセス
WebDAVは、インターネットを介してリポジトリへのファイルシステムの類似インタフェースをユーザーに提供するIETF標準のプロトコルです。
通常、WebDAVサーバーのフォルダは、Microsoft Windows (2000/NT/XP/Vista/7など)上でWebフォルダを介してアクセスされます。リソースには、完全修飾名を使用してアクセスできます。たとえば、/dbfs/sfs1/dir1/file1.txt
などで、sfs1
はDBFSストアの名前です。
DBFSファイルシステムにアクセスするには、WindowsでWebDAVを設定する必要があります。
関連項目:
DBFS仮想フォルダにアクセスするために必要なユーザー認証は、XDBリポジトリの場合と同じです。
WebDAVクライアントがWebDAVサーバーに初めて接続する場合、通常、ユーザーにはユーザー名およびパスワードの入力が求められます。これらは、クライアントが後続のすべてのリクエストに対して使用します。プロトコルの観点からは、すべてのリクエストには認証情報が含まれます。この情報は、XDBがユーザーを有効なデータベース・ユーザーとして認証するために使用します。ユーザーが存在しない場合、クライアントはDBFSストアまたはXDBリポジトリにアクセスできません。認証が成功すると、データベース・ユーザーはセッション内の現在のユーザーになります。
XDBでは、Basic認証およびDigest認証の両方がサポートされています。セキュリティ上の理由により、Basic認証が有効になっている場合はHTTPS転送を使用することをお薦めします。
25.3.5.3 DBFSへのFTPアクセス
DBFSへのFTPアクセスでは、ほとんどのUNIXベースのディストリビューションで使用されている標準のFTPクライアントが使用されます。FTPは、制御およびデータ接続方式が異なるクライアント・サーバー・アーキテクチャ上に構築されるファイル転送メカニズムです。
FTPユーザーは、データベース・ユーザーとして認証されます。このプロトコルは、RFC 959で説明されているように、認証用としてクリアテキストのユーザー名およびパスワードを使用します。したがって、FTPはセキュアなプロトコルではありません。
DBFSに対しては、次のコマンドがサポートされています。
-
USER
: 認証ユーザー名 -
PASS
: 認証パスワード -
CWD
: 作業ディレクトリの変更 -
CDUP
: 親ディレクトリへの変更 -
QUIT
: 切断 -
PORT
: サーバーの接続先のアドレスおよびポートの指定 -
PASV
: パッシブ・モードの入力 -
TYPE
: ASCIIまたはバイナリなどの転送モードの設定 -
RETR
: ファイルのコピーの転送 -
STOR
: データを受け入れ、サーバー・サイトでデータをファイルとして格納 -
RNFR
: 変更前の名前 -
RNTO
: 変更後の名前 -
DELE
: ファイルの削除 -
RMD
: ディレクトリの削除 -
MKD
: ディレクトリの作成 -
PWD
: 作業ディレクトリの印刷 -
LIST
: ファイルまたはディレクトリのリスト。デフォルトは現在のディレクトリです。 -
NLST
: ディレクトリ内のファイル名を戻す -
HELP
: 使用方法に関するドキュメント -
SYST
: システム・タイプを戻す -
FEAT
: サーバーによって実装される機能リストの取得 -
NOOP
: 操作なし(キープ・アライブ用として使用) -
EPRT
: サーバーの接続先の拡張アドレス(IPv6)およびポート -
EPSV
: 拡張パッシブ・モード(IPv6)の入力
25.4 DBFS管理
25.4.1 DBFSクライアントでのOracle Walletの使用
Oracle Walletを使用すると、ユーザーがパスワードを入力しなくても、DBFSクライアントでDBFSストアをマウントできます。
関連項目:
ウォレットの作成と管理の詳細は、Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイドを参照してください
ステップ7に示すように、/@
構文は、ウォレットを使用することを意味します。
25.4.2 DBFSの診断
dbfs_client
プログラムは、問題の診断に役立つように複数レベルのトレースをサポートしています。トレースは、ファイルに出力することも、Linuxのsyslog
デーモンを使用して/var/log/messages
に出力することもできます。
ファイルに対してトレースする場合、dbfs_client
プログラムにより、ディスク上で2つのトレース・ファイルが保持されます。dbfs_client
は、トレース・ファイルを自動的にローテーションし、ディスク使用量を20MBに制限します。
デフォルトでは、/var/log/messages
に常にロギングされるクリティカルなメッセージを除き、トレーシングは無効になっています。
dbfs_client
でOracle Databaseに接続できない場合、trace_level
およびtrace_file
オプションを使用してトレースを有効にします。トレースを使用すると、追加メッセージがログ・ファイルに出力されて、デバッグが容易になります。
DBFSでは、Oracle Databaseを使用して、ファイルが格納されます。Oracleサーバーの問題は、dbfs_client
にエラーとして伝播される場合があります。dbfs_client
エラーが発生した場合、Oracleサーバー・ログを表示して、そのエラーが根本原因であるかを確認してください。
25.4.3 フェイルオーバー・イベント中のデータ損失の防止
dbfs_client
プログラムは、Oracle RACクラスタ内のデータベース・インスタンスの1つに障害が発生した場合、既存の他のデータベース・インスタンスの1つにフェイルオーバーできます。
dbfs_client
フェイルオーバーが正常に動作するには、Oracleデータベース・サービスを変更して、フェイルオーバー・パラメータを指定する必要があります。サービスを変更するには、例25-2に示すように、DBMS_SERVICE.MODIFY_SERVICE
プロシージャを実行します例25-2 DBFSクライアント・フェイルオーバー・イベントの有効化
exec DBMS_SERVICE.MODIFY_SERVICE(service_name => 'service_name', aq_ha_notifications => true, failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 180, failover_delay => 1);
前提条件が満たされれば、バックエンドのOracle Databaseインスタンスに障害が発生した後におけるDBFS接続のフェイルオーバー中のデータ損失を防ぐことができます。この場合、クライアントが終了するとキャッシュされた書込みは失われる可能性があります。ただし、他のOracle RACインスタンスまたはスタンバイ・データベースに対するバックエンド・フェイルオーバーでは、書込みが失われることはありません。
-
-o failover
マウント・オプションを指定します。$ dbfs_client database_user@database_server -o failover /mnt/dbfs
25.4.4 クライアント側の書込みキャッシュの迂回
dbfs_client
の共有およびキャッシュ・セマンティクスは、close-to-openキャッシュ一貫性動作を使用する点においてNFSと類似しています。これにより、dbfs_client
の複数のコピーが同一の共有ファイルシステムにアクセスできるようになります。デフォルト・モードでは、クライアント上に書込みをキャッシュし、タイムアウト後またはユーザーがファイルを閉じた後で、その書込みをフラッシュします。また、ファイルへの書込みは、ライターがファイルをクローズした後にファイルをオープンするクライアントにのみ表示されます。
クライアント側の書込みキャッシュは迂回できます。
-
ファイルがオープンしているときに
O_SYNC
を指定します。キャッシュへの書込みをディスクに強制するには、
fsync
をコールします。
25.4.5 DBFSのバックアップ
DBFSのバックアップには2つの方法があります。ファイルシステムの基礎となる表をデータベース・レベルでバックアップするか、マウント・ポイントを介してOracle Secure Backupなどのファイルシステムのバックアップ・ユーティリティを使用できます。
内容は次のとおりです。
25.4.5.1 データベース・レベルでのDBFSバックアップ
データベース・レベルで表をバックアップすると、ファイルシステム内のファイルとデータベース内のリレーショナル・データの一貫性を常に保つことができる利点があります。また、データベースの完全なリストアおよびリカバリにより、データを損失せずにファイルシステムを完全にリストアおよびリカバリできます。データベースのpoint-in-timeリカバリの実行中に、ファイルは指定した時間にリカバリされます。通常のデータベース・バックアップのように、バックアップ中に発生した変更はリストアの一貫性に影響しません。リストアされたファイルシステム全体は、指定したタイム・スタンプにおいて常に一貫性があります。
25.4.6 DBFSの小さいファイルのパフォーマンス
すべての共有ファイルシステムと同様に、小さいファイルに対するDBFSのパフォーマンスは、ローカル・ファイルシステムのパフォーマンスより遅れます。
DBFS内の各ファイルのデータまたはメタデータの操作は、FUSE
ユーザー・モード・ファイルシステムによって処理され、ネットワークを介してデータベースに転送される必要があります。このため、クライアントでキャッシュされていない操作は、DBFS内での実行に数ミリ秒かかります。
ディスクへの入力/出力(IO)を伴う操作では、ディスクIOの待機によって時間遅延のオーバーヘッドがマスクされます。大きいIOのオーバーヘッドは、小さいIOの場合よりも当然低いパーセンテージになります。ネットワーク・オーバーヘッドは、ディスクIOを発行しない操作でより顕著です。
ローカル・ファイルシステムを使用する数の少ない小さいファイル上で動作する操作では、オーバーヘッドは目立ちませんが、数千の小さいファイル上に影響を与える操作では、オーバーヘッドは大きくなります。たとえば、単一ディレクトリをリストする場合や単一ファイルを参照する場合、ほぼ即時にレスポンスが得られますが、数千のファイルを含むディレクトリ・ツリー内を検索する場合、オーバーヘッドは相対的に大きくなります。
25.4.7 DBFSの高度なSecureFiles LOBの有効化
DBFSでは、圧縮、重複除外、暗号化、パーティション化など、SecureFiles LOBで使用可能な拡張機能を利用できます。
たとえば、パーティション化を使用して、DBFSを圧縮ファイルシステムとして構成できます。DBFSファイルシステムの作成時に、ファイルシステムで使用可能にする機能のセットを指定する必要があります。
関連項目:
SecureFiles LOBの機能の詳細は、「Oracle LOB記憶域の使用」および「パーティション化されたファイルシステムの作成」を参照してください。
例25-3 DBFSの高度なセキュア・ファイルLOBの有効化
$ sqlplus @dbfs_create_filesystem_advanced tablespace_name file_systemname [compress-high | compress-medium | compress-low | nocompress] [deduplicate | nodeduplicate] [encrypt | noencrypt] [partition | non-partition]
25.5 DBFSファイルシステムの縮小および再編成
DBFSファイルシステムは、オンライン・ファイルシステム再編成を使用してそれ自体を縮小することにより、割り当てられた領域を、これが含まれる表領域に解放できるようにします。
内容は次のとおりです。
25.5.1 DBFSファイルシステムの変更について
DBFSファイルシステムは、他のデータベース・セグメントと同様に、ファイルやディレクトリの追加または増大に伴ってサイズが動的に大きくなります。ファイルシステムが大きくなるのは、DBFSファイルシステムを保持する表領域から、ファイルシステムを構成する様々なセグメントに領域が割り当てられるときです。
ただし、DBFSファイルシステム内のファイルおよびディレクトリが削除されたとしても、割り当てられた領域は、これが含まれる表領域には解放されずに存在し続け、他のDBFSエンティティで使用できます。オンライン・ファイルシステム再編成というプロセスは、DBFSファイルシステムを縮小することにより、この問題を解消します。
DBFSオンライン・ファイルシステム再編成ユーティリティの内部ではOracle Databaseオンライン再定義機能が使用されます。その際に、元のファイルシステム、およびオンライン再定義モデルの基本オブジェクトと暫定オブジェクトに対応する一時プレースホルダが使用されます。
関連項目:
オンライン再定義の詳細は、『Oracle Database管理者ガイド』を参照してください
25.5.2 オンライン・ファイルシステム再編成の利点
DBFSオンライン・ファイルシステム再編成は、次のような一定のメリットがある強力なデータ移動機能です。
それらは次のとおりです。
-
オンラインである: 再編成が行われても、ファイルシステムはすべてのアプリケーションに対する読取りおよび書込み操作が完全に使用可能なままです。
-
構造を再編成できる: DBFSファイルシステムの基礎となる物理構造および組織を、次のような様々な方法で変更できます。
-
パーティション化されていないファイルシステムを、パーティション化されたファイルシステムに変換できます(この逆も可能)。
-
圧縮、暗号化および重複除外プロパティを含む特定のSecureFiles LOBプロパティを選択して任意の組合せで有効化または無効化できます。
-
ファイルシステム内のデータを表領域間または同じ表領域内で移動できます。
-
-
複数のファイルシステムを同時に再編成できる: 複数の異なるファイルシステムを同時に再編成できます。同じ名前を持つ一時ファイルシステムが存在せず、表領域に十分な空き領域がある場合は通常、再編成するファイルシステムごとに領域要件を2倍にします。
25.5.3 オンライン・ファイルシステム再編成の可用性の確認
Oracle Database 12c以降のDBFSは、オンライン・ファイルシステム再編成をサポートしています。以前のバージョンの一部もこの機能をサポートしています。使用中のバージョンがサポートしているかどうかを確認するには、次に示すように、DBFS PL/SQLパッケージ内の特定の機能について問い合せます。
-
DBFS PL/SQLパッケージ内の特定の機能について問い合せます。
$ sqlplus / as sysdba SELECT * FROM dba_procedures WHERE owner = 'SYS' and object_name = 'DBMS_DBFS_SFS' and procedure_name = 'REORGANIZEFS';
この問合せによってこの出力のような単一行が戻される場合、DBFSインストールはオンライン・ファイルシステム再編成をサポートしています。問合せによっていずれの行も戻されない場合、DBFSインストールは、アップグレードするか、バグ10051996用のパッチを適用する必要があります。
OWNER ---------------------------------------------------------------------------------- OBJECT_NAME ---------------------------------------------------------------------------------- PROCEDURE_NAME ---------------------------------------------------------------------------------- OBJECT_ID|SUBPROGRAM_ID|OVERLOAD |OBJECT_TYPE |AGG|PIP ----------|-------------|-----------------------------------|-------------|---|--- IMPLTYPEOWNER ---------------------------------------------------------------------------------- IMPLTYPENAME ---------------------------------------------------------------------------------- PAR|INT|DET|AUTHID ---|---|---|------------ SYS DBMS_DBFS_SFS REORGANIZEFS 11424| 52|(null) |PACKAGE |NO |NO (null) (null) NO |NO |NO |CURRENT_USER
25.5.4 オンライン・ファイルシステム再編成の起動
一時DBFSファイルシステムを作成することにより、オンライン・ファイルシステム再編成を実行できます。
ノート:
SYSスキーマに一時DBFSファイルシステムを作成していないでください。SYSスキーマに一時DBFSファイルシステムを作成すると、DBFSオンライン・ファイルシステム再編成は機能しません。- 目的の新規組織および構造を使用して一時DBFSファイルシステムを作成します。これには、目的のターゲット表領域(再編成するファイルシステムと同じ表領域である場合があります)、目的のターゲットSecureFiles LOB記憶域プロパティ(圧縮、暗号化または重複除外)などが含まれます。
- PL/SQLプロシージャを起動し、データ移動用として新しく作成した一時ファイルシステムを使用してDBFSファイルシステムを再編成します。
- 再編成プロシージャが完了したら、一時ファイルシステムを削除します。
次の例は、一時ファイルシステム名TMP_FS
を使用して、表領域TS1
のDBFSファイルシステムFS1
を新しい表領域TS2
に再編成します。ここでは、すべてのファイルシステムはデータベース・ユーザーdbfs_user
に属します。
$ cd $ORACLE_HOME/rdbms/admin $ sqlplus dbfs_user/*** @dbfs_create_filesystem TS2 TMP_FS EXEC DBMS_DBFS_SFS.REORGANIZEFS('FS1', 'TMP_FS'); @dbfs_drop_filesystem TMP_FS QUIT;
説明:
-
TMP_FS
には、任意の有効な名前を使用できます。これは、一時プレースホルダとして使用することを目的としており、削除することも(前述の例のように)、完全に具体化された元のファイルシステムのpoint-in-timeスナップショットとして保持することもできます。 -
FS1
は、元のファイルシステムであり、再編成試行の影響は受けません。これは、再編成時に、SQL、PL/SQL、およびdbfs_client
のマウントとコマンドラインを含むすべてのDBFS操作で使用可能なままです。再編成が終了すると、FS1は、TMP_FS
を作成するために使用される新規構造および組織になります(またはこの逆。TMP_FS
は、本来FS1
に使用されていた構造および組織になります)。なんらかの理由により、再編成が失敗すると、DBFSはFS1
の内部状態をクリーン・アップしようとします。 -
TS2
には、FS1
内のアクティブな(削除されていない)ファイルおよびディレクトリをすべて収容するために十分な領域が必要です。 -
縮小の一環としてファイルシステムが同じ表領域内で移動する場合、
TS1
には、FS1
によって使用される領域量の少なくとも2倍の量が必要です。