はじめに
プライベート・エンドポイントで構成されているAutonomous DatabaseにNFSファイルシステムをアタッチ(マウント)できるようになったので早速試してみました。
オンプレミス環境とOCIをIPSec VPNやFastConnectで接続している場合、FSSのファイルシステムをオンプレミスのサーバでマウントすることも可能なので、
・オンプレミス側のDBサーバでFSSファイルシステムをマウント
・オンプレミスのDBでFSSファイルシステムに対するディレクトリ・オブジェクト作成
・expdpでオンプレミスのDBの内容をディレクトリ・オブジェクトにエクスポート
・Autonomous DatabaseにFSSファイルシステムをアタッチ
・impdpでFSSファイルシステム内のダンプファイルをAutonomous Databaseにインポート
といったことも可能になりますね。
1. File Storage Serviceのファイルシステムの作成
Autonomous Databaseにアタッチするためのファイルシステムを作成します。
コンソールメニューから「ファイル・ストレージ」に移動します。
「ファイルシステムの作成」をクリックします。
ファイルシステムの作成ウィザードが表示されます。
「ファイル・システム情報」セクションの「詳細の編集」をクリックします。
名前を変更します。今回はファイルシステム名を「MYFSS」としました。
「マウント・ターゲット情報」セクションの「詳細の編集」をクリックします。
マウント・ターゲット名を変更します。今回はマウント・ターゲット名「MYFSSTARGET」としました。
「拡張オプションの表示」をクリックします。
ホスト名を入力します。今回はホスト名をmyfssとしました。
入力が完了したら「作成」をクリックします。
なお、File Storage ServiceのファイルシステムをAutonomous Databaseにアタッチする際に、IPアドレスは使用できません。ホスト名(FQDN)を使用する必要があります。
2. File Storage ServiceのファイルシステムをComputeインスタンスにマウント
Autonomous Databaseにファイルシステムをアタッチするのに必須ではありませんが、ファイルシステム内にファイルを作成するために、Oracle LinuxのComputeインスタンスにFile Storage Serviceのファイルシステムをマウントします。
マウントするためのコマンドはファイルシステムの詳細画面からエクスポートパスの詳細画面に移動し、「マウントコマンド」をクリックすると確認できます。
マウントポイントとなるディレクトリ/mnt/MYFSSを作成し、パーミッションを変更します。
mountコマンドで/mnt/MYFSSにFile Storage Serviceのファイルシステムをマウントします。
[opc@tools ~]$ sudo mkdir -p /mnt/MYFSS
[opc@tools ~]$ sudo chmod 777 /mnt/MYFSS
[opc@tools ~]$ sudo mount myfsstarget.privatesubnet.vcn1.oraclevcn.com:/MYFSS /mnt/MYFSS
[opc@tools ~]$
Autonomous Databaseからファイルシステムへのアクセスをテストするためのファイルtest_data.txtを作成します。
[opc@tools ~]$ cat <<'EOL' >>/mnt/MYFSS/test_data.txt
> 1,RUN
> 2,DMC
> 3,Jam Master Jay
> EOL
[opc@tools ~]$ ls -l /mnt/MYFSS/test_data.txt
-rw-rw-r--. 1 opc opc 29 Nov 16 03:26 /mnt/MYFSS/test_data.txt
[opc@tools ~]$
[opc@tools ~]$ cat /mnt/MYFSS/test_data.txt
1,RUN
2,DMC
3,Jam Master Jay
[opc@tools ~]$
3. Autonomous DatabaseにFile Storage Serviceのファイルシステムをアタッチ
SQL*PlusからAutonomous Databaseに接続します。
ディレクトリオブジェクトを作成します。
SQL> CREATE DIRECTORY FSS_DIR AS 'FSS';
ディレクトリが作成されました。
SQL>
DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEMプロシージャを使用して、ファイルシステムをAutonomous Databaseにアタッチします。
指定する各パラメータは以下の通りです。
パラメータ | 値 |
---|---|
file_system_name | 作成するファイルアタッチの名前 |
file_system_location | ファイルシステムのパス |
directory_name | ファイルシステムをマウントするディレクトリオブジェクト名 |
description | 説明 |
なお、ファイルシステムの名前に"-"が含まれる場合は、'"xxx-xxx"'のようにダブルクウォートで囲んだ上でシングルクウォートで囲む必要があります。
では、実際にアタッチしてみます。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEM(
3 file_system_name => 'MYFSS',
4 file_system_location => 'myfsstarget.privatesubnet.vcn1.oraclevcn.com:/MYFSS',
5 directory_name => 'FSS_DIR',
6 description => 'Mounting a NFS'
7 );
8 END;
9 /
PL/SQLプロシージャが正常に完了しました。
SQL>
正常に完了しましたので、登録内容を確認してみます。
ファイルシステムのアタッチに関する情報は、dba_cloud_file_systemsビューで確認できます。
SQL> desc dba_cloud_file_systems
名前 NULL? 型
----------------------------------------- -------- ----------------------------
FILE_SYSTEM_NAME VARCHAR2(128)
FILE_SYSTEM_LOCATION VARCHAR2(4000)
DIRECTORY_NAME VARCHAR2(128)
DIRECTORY_PATH VARCHAR2(4000)
DESCRIPTION VARCHAR2(4000)
CREATION_TIME TIMESTAMP(6) WITH TIME ZONE
UPDATE_TIME TIMESTAMP(6) WITH TIME ZONE
SQL>
実際に確認してみます。
SQL> SELECT
2 file_system_name,
3 file_system_location,
4 directory_path
5 FROM dba_cloud_file_systems;
FILE_SYSTEM_NAME
--------------------------------------------------------------------------------
FILE_SYSTEM_LOCATION
--------------------------------------------------------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
MYFSS
myfsstarget.privatesubnet.vcn1.oraclevcn.com:/MYFSS
/u03/dbfs/ED8B6F380F7E39D2E0532114000AD95F/data/FSS/
SQL>
正しく登録されていることが確認できたので、DBMS_CLOUD.LIST_FILESファンクションを使用して、ディレクトリ内(=ファイルシステム内)にあるファイルの一覧を取得してみます。
SQL> SELECT object_name FROM DBMS_CLOUD.LIST_FILES('FSS_DIR');
OBJECT_NAME
--------------------------------------------------------------------------------
test_data.txt
SQL>
ディレクトリ内(=ファイルシステム内)に先ほどComputeインスタンスから作成したtest_data.txtがあることが、Autonomous Databaseから確認できました。
ファイルの存在が確認できたので、UTL_FILEパッケージを使用して、ファイルの中身を確認してみます。
SQL> set serveroutput on
SQL> DECLARE
2 l_file UTL_FILE.FILE_TYPE;
3 l_location VARCHAR2(100) := 'FSS_DIR';
4 l_filename VARCHAR2(100) := 'test_data.txt';
5 l_text VARCHAR2(32767);
6 BEGIN
7 l_file := UTL_FILE.FOPEN(l_location, l_filename, 'r');
8 LOOP
9 BEGIN
10 UTL_FILE.GET_LINE(l_file, l_text, 32767);
11 DBMS_OUTPUT.PUT_LINE(l_text);
12 EXCEPTION
13 WHEN NO_DATA_FOUND THEN EXIT;
14 END;
15 END LOOP;
16 UTL_FILE.FCLOSE(l_file);
17 END;
18 /
1,RUN
2,DMC
3,Jam Master Jay
PL/SQLプロシージャが正常に完了しました。
SQL>
アタッチしたファイルシステム内にあるファイルtest_data.txtの内容が確認できました。
参考資料
・Access Network File System from Autonomous Database
・How to Attach a File System to your Autonomous Database
・UTL_FILE