Oracle Database File System (DBFS)構築について

## はじめに
Oracle Database には 表領域を利用してファイルシステムを構成し、Oracle Client から操作・使用する Oracle Database File System (DBFS) があります。Oracle Client を必要としない Oracle File System (OFS)と異なり、DBFSクライアント・コマンドライン・インタフェースを使用して操作します。
## SecureFilesストアの設定
Database File System (DBFS)はいくつかのタイプの「ストア」で提供されますが、ここでは SecureFiles ストアを使用した実装を用います。構成は DBFSサーバー、DBFSクライアントが必要で以下を想定します。

DBFSサーバー:	Database サーバで表領域をSecureFilesストアとして提供
DBFSクライアント:	clientモジュール “dbfs_client”を使用した操作を想定

ちなみにDBFSへの接続は他に PL/SQL, ファイルシステム・マウント, DBFSリンクなどの選択肢があります。
![dbfs_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/ffabe275-c827-c7d5-fdf8-40dada6a9d6c.png)
参考にしたサイトURL
<https://docs.oracle.com/cd/F19136_01/adlob/introducing-database-file-system.html#GUID-B7A83817-F0D6-4A09-AE98-DFC966783109>

## DBFS 環境構築手順
### 1) FUSEのインストール
```
[root@ofstest05 ~] # yum install fuse
```
OSの再起動
### 2)	表領域の作成
Database EE 19c (19.17)での作業 / DBFS作成用のPDBを作成 (DBFSPDB)
```
CREATE BIGFILE TABLESPACE "DBFS_FS1" DATAFILE SIZE 104857600
AUTOEXTEND ON NEXT 104857600 MAXSIZE 33554431M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;
```
![dbfs_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/b0d5697f-36b8-d201-5844-555c025f6f0b.png)
### 3)	DBFS領域のオーナー(ユーザ)作成
scott 作成とロール付与
```
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO scott IDENTIFIED BY tiger;
GRANT dbfs_role to scott;
```
### 4)	DBFS ファイルシステムの作成
参考にしたURL
<https://docs.oracle.com/cd/F19136_01/adlob/DBFS-securefiles-store.html#GUID-31709BF1-B980-4252-9428-7E6FE86612A5>
scottユーザによる作業
[ストアの作成]
```
DECLARE
  BEGIN
    DBMS_DBFS_SFS.CREATEFILESYSTEM(
      store_name => 'FS1',
      tbl_name => null,
      tbl_tbs => DBFS_FS1,
      use_bf => false 
    );
    COMMIT;
  END;
/
```
[DBFS コンテンツAPIに登録]
```
DECLARE
  BEGIN
    DBMS_DBFS_CONTENT.REGISTERSTORE(
      store_name    => 'FS1',
      provider_name => 'anything',
      provider_package => 'dbms_dbfs_sfs'
    );
    COMMIT;
  END;
/
```
[DBFS マウント]
```
DECLARE
  BEGIN
    DBMS_DBFS_CONTENT.MOUNTSTORE(
      store_name    => 'FS1',
      store_mount   => 'mnt1'
    );
    COMMIT;
  END;
/
```
[DBFS 初期化]
```
EXEC DBMS_DBFS_SFS.INITFS(store_name=> 'FS1');
```
作成したDBFS領域の確認
```
SQL> select pathname from dbfs_content;
```
![dbfs_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/84e376de-1632-54e8-ba83-be84cd9190c3.png)

## DBFS_CLIENT操作手順
### 1)	Oracle Client のインストール
DBサーバー上の作業になるので省略
tnsnames.ora に以下を追記 - DBFS表領域を作成したpdb接続文字列
```
dbfspdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbfstest05)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbfspdb)
    )
  )
```
### 2)	シンボリック・リンクの作成とライブラリ(環境変数のセット)
Top issues in DBFS mount (Doc ID 2247907.1)を参考にシンボリック・リンク作成
```
[root@dbfstest05 ~]#  cd /usr/lib64
[root@dbfstest05 lib64]#  ln -s libfuse.so.2 libfuse.so
[root@dbfstest05 lib64]#  ldconfig
[root@dbfstest05 lib64]#  ldconfig -p | grep fuse
libfuse.so.2 (libc6,x86-64) => /lib64/libfuse.so.2
libfuse.so (libc6,x86-64) => /lib64/libfuse.so
```
### 3)	dbfs_client による操作
ls コマンドの実行
```
[oracle@dbfstest05]$ dbfs_client scott@dbfstest05/dbfspdb 
--command ls dbfs:/mnt1
Password:
dbfs:/mnt1/FS1
```
dbfs:/mnt1/FS1 ⇦ 作成されたストア(ファイルシステム)が確認できる
### 4)	dbfs_client によるLinux OS上のマウント
<前提条件>
- OS上のマウントポイントは<font color="Red">/mnt/dbfs/fs01</font>とする
- DB上のDBFS表領域については<font color="Navy">/mnt/FS1</font>というマウントストアが作成されている
```
[oracle@dbfstest05 ~]$ dbfs_client scott@dbfstest05/dbfspdb /mnt/dbfs/fs01
Password:
```
mount コマンドで確認
```
dbfs-scott@dbfstest05/dbfspdb:/ on /mnt/dbfs/fs01 type fuse (rw,nosuid,nodev,relatime,user_id=54321,group_id=54321,default_permissions,max_read=1048576)
[oracle@dbfstest05 FS1]$ cd /mnt/dbfs/fs01/mnt/FS1
[oracle@dbfstest05 FS1]$ pwd
/mnt/dbfs/fs01/mnt1/FS1
```
## 最後に
DBFS (Database File System) は OFS (Oracle File System) 同様にファイル・コンテンツの格納場所として有用です。DB内に格納されるため、MAAなどOracle のデータベースに対するアーキテクチャの恩恵が得られます。
また、GoldenGate の可用性・業務継続性を高めるためにも利用されています。
<https://www.oracle.com/technetwork/jp/database/features/availability/maa-goldengate-rac-2007111-ja.pdf>
この例ではClusterware へのリソース登録も含め GoldenGate プロセスの起動設定も施されており、OFSと比較してDatabaseと他のファイルシステムのコンテンツを利用した、より高度なサービス連携が実現されています。特にDBFSはData Guard と GoldenGate の併設環境において強みを持っています。