はじめに
先日のAutonomous Databaseの機能アップデートで、ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルからのデータロード(DBMS_CLOUD.COPY_DATA)や、ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルを元にした外部表の作成(DBMS_CLOUD.CREATE_EXTERNAL_TABLE)が可能になったので、早速試してみました。
今回は、プライベート・エンドポイントでデプロイされたAutonomous Databaseと同じサブネット上に、NFS共有としてOCI File Storageを作成して検証しました。
<OCI File Storageの情報>
<Autonomous Databaseのネットワーク情報>
1.事前準備
まずは、ComputeインスタンスでOCI File Storageをマウントして、内容を確認します。
マウントポイントを作成します。
[opc@testvm ~]$ sudo mkdir -p /mnt/MyFileSystem
mountコマンドで作成したマウントポイントにOCI File Storageをマウントします。
[opc@testvm ~]$ sudo mount myfss.myprivatesubnet.myvcn.oraclevcn.com:/MyFileSystem /mnt/MyFileSystem
lsコマンドで、マウントしたOCI File Storageの内容を確認します。
[opc@testvm ~]$ ls /mnt/MyFileSystem/
dept.csv test.txt
catコマンドで、OCI File Storage内にあるdept.csvファイルの内容を確認します
[opc@testvm ~]$ cat /mnt/MyFileSystem/dept.csv
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
umaountコマンドでOCI File Storageをアンマウントします。
[opc@testvm ~]$ sudo umount /mnt//MyFileSystemu[opc@testvm ~]$
2. Autonomous DatabaseへのNFS共有のアタッチ
SQL*PlusでadminユーザとしてAutonomous Databaseに接続します。
[opc@testvm ~]$ sqlplus admin/Demo#1Demo#1@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=myadw.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=jym1f5owgdmcult_myadw_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=no)))
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Mar 14 04:32:44 2023
Version 21.9.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Tue Mar 14 2023 04:32:30 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.1.0
SQL>
ディレクトリ・オブジェクト「MY_FSS_DIR」を作成します。
SQL> CREATE DIRECTORY MY_FSS_DIR AS 'FSS';
Directory created.
SQL>
ファイルシステム名を「MYFSS」として、作成したディレクトリ・オブジェクト「MY_FSS_DIR」にNFS共有(OCI File Storage)をアタッチします。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEM(
3 file_system_name => 'MYFSS',
4 file_system_location => 'myfss.myprivatesubnet.myvcn.oraclevcn.com:/MyFileSystem',
5 directory_name => 'MY_FSS_DIR',
6 description => 'Mounting MyFileSystem'
7 );
8 END;
9 /
PL/SQL procedure successfully completed.
SQL>
DBMS_CLOUD.LIST_FILESファンクションを使用して、ディレクトリ「MY_FSS_DIR」内のファイルを確認します。
SQL> SELECT object_name FROM DBMS_CLOUD.LIST_FILES('MY_FSS_DIR');
OBJECT_NAME
--------------------------------------------------------------------------------
test.txt
dept.csv
SQL>
OCI File Storageがディレクトリ・オブジェクトにアタッチされ、NFS共有(OCI File Storage)にあるファイルがディレクトリ「MY_FSS_DIR」から参照できることが確認できました。
3.ディレクトリ・オブジェクトにアタッチしたNFS共有からのデータロード
データのロード先となる表「dept」を作成します。
SQL> CREATE TABLE dept
2 (DEPTNO NUMBER(2),
3 DNAME VARCHAR2(14),
4 LOC VARCHAR2(13)
5 );
Table created.
SQL>
DBMS_CLOUD.COPY_DATAプロシージャを使用して、NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルの内容を表deptにロードします。
file_uri_listは「ディレクトリ名:ファイル名」の形式で指定します。
SQL> BEGIN
2 DBMS_CLOUD.COPY_DATA(
3 table_name => 'DEPT',
4 file_uri_list => 'MY_FSS_DIR:dept.csv',
5 format => JSON_OBJECT('type' value 'csv') );
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
表deptの内容を確認します。
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルの内容が、表deptにロードできました。
4.ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルを元にした外部表の作成
次に、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルを元にした外部表「dept_ext」を作成します。
file_uri_listは「ディレクトリ名:ファイル名」の形式で指定します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
3 table_name => 'DEPT_EXT',
4 file_uri_list => 'MY_FSS_DIR:dept.csv',
5 format => json_object('type' value 'csv', 'skipheaders' value '0'),
6 field_list => 'DEPTNO,
7 DNAME,
8 LOC',
9 column_list => 'DEPTNO NUMBER,
10 DNAME VARCHAR2(14),
11 LOC VARCHAR2(13)'
12 );
13 END;
14 /
PL/SQL procedure successfully completed.
SQL>
表dept_extの内容を確認します。
SQL> SELECT * FROM dept_ext;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
OCI File Storageをアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルを元にした外部表「dept_ext」が作成できました。
まとめ
Autonomous Databaseで、NFS共有(OCI File Storage)にあるファイルからのデータのロード、NFS共有(OCI File Storage)にあるファイルを元にした外部表の作成が可能であることが確認できました。
参考資料
・Access Network File System from Autonomous Database
・How to Attach a File System to your Autonomous Database
・Load Data from Directories in Autonomous Database
・SQL言語リファレンス CREATE DIRECTORY
・DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEM
・DBMS_CLOUD.COPY_DATA
・DBMS_CLOUD.CREATE_EXTERNAL_TABLE