OCIFSユーティリティを使用して、Oracle Cloud Infrastructure Object Storageバケットをファイル・システムとしてマウントでき、標準のシェル・コマンド(ls、rm、catなど)を使用して読取り、書込みまたは変更できる通常のファイルとしてアクセスできるようになります。
ということで、SQL*Loader で Object Storageバケットに配置したCSVファイルをOracle Databaseへロードしてみてみます。
■ 構成イメージ
■ OCIFSユーティリティのインストール
⚫︎ 前提条件
OCIFSは共有ファイル・システムではありません。オブジェクト・データの破損を回避するために、OCIFSを使用して同じObject Storageバケット(または重複するバケット・サブフォルダ)を複数回マウントしないでください。
また、Object Storageバケットがマウントされている間は、バケット・オブジェクト(コンソール、CLIまたはAPIなど)を直接変更しないでください。
・ OS要件
Oracle Linux 8 以降で起動されたインスタンスで使用できます。
・ OCI Object Storage 要件
OCIFSは、既存のObject Storageバケットへのアクセスまたは接続が可能なシステムまたはOCIコンピュート・インスタンスにインストールする必要があります。
・ ローカル・ディスク領域
OCIFSは、オブジェクト・ストレージ・オブジェクトをキャッシュするためにローカル・ディスク領域を消費します。
キャッシュ・ディレクトリがあるストレージ・デバイスが一杯になると、OCIFS操作は失敗する可能性があります。
キャッシュ・ディレクトリが、マウントされたObject Storageバケット・パスの内容全体をホストするのに十分な空き領域があるストレージ・デバイス上にあることを確認します。
OCIFSキャッシュの詳細は、OCIFSキャッシュ・オプションを参照してください。
■ OCIFSユーティリティのインストール
⚫︎ OS確認
Oracle Linux 8 以降であることを確認
[root@OL8-inst ~]# cat /etc/oracle-release
Oracle Linux Server release 8.6
⚫︎ ローカル・ディスク領域
OCIFSは、オブジェクト・ストレージ・オブジェクトをキャッシュするためにローカル・ディスク領域を消費します。
OCIFSは、マウントされたオブジェクト・ストレージ・バケットのオブジェクトをディレクトリにキャッシュします。
最適なパフォーマンスを得るには、高速アクセス時間のあるストレージデバイス上のキャッシュ用のローカルディレクトリを選択します。
また、キャッシュ・ディレクトリが、マウントされたObject Storageバケット・パスの内容全体をホストするのに十分な空き領域があるストレージ・デバイス上にあることを確認します。
■ oci_includedリポジトリ有効化
ocifsパッケージを含むoci_includedリポジトリを有効にします。
詳細は、Oracle Linuxインスタンスへのソフトウェアのインストールを参照
⚫︎ oci-included 確認
Oracle Linux8 の OCI コンピュートにはデフォルトでインストールされています。
[root@OL8-inst ~]# dnf list --all | grep oci-included
oci-included-release-el8.x86_64 1.0-4.el8 @ol8_oci_included
⚫︎ oci-included インストール
インストールされていない場合、Oracle Linux 8では、次のコマンドを実行してol8_oci_includedリポジトリを有効化します。
sudo dnf install oci-included-release-el8
sudo dnf config-manager --enable ol8_oci_included
■ OCIFSユーティリティのインストール
ocifsパッケージをインストール
[root@OL8-inst ~]# dnf install ocifs
This system is receiving updates from OSMS server.
Last metadata expiration check: 2:52:21 ago on Tue 26 Sep 2023 01:25:51 AM GMT.
Dependencies resolved.
======================================================================================================================================================================================
Package Architecture Version Repository Size
======================================================================================================================================================================================
Installing:
ocifs x86_64 1.1.0-2.el8 ol8_oci_included-x86_64 73 k
Installing dependencies:
fuse x86_64 2.9.7-16.0.1.el8 ol8_baseos_latest-x86_64 83 k
fuse-common x86_64 3.3.0-16.0.1.el8 ol8_baseos_latest-x86_64 22 k
Transaction Summary
======================================================================================================================================================================================
Install 3 Packages
Total download size: 179 k
Installed size: 365 k
Is this ok [y/N]: y
Downloading Packages:
(1/3): fuse-common-3.3.0-16.0.1.el8.x86_64.rpm 836 kB/s | 22 kB 00:00
(2/3): fuse-2.9.7-16.0.1.el8.x86_64.rpm 1.0 MB/s | 83 kB 00:00
(3/3): ocifs-1.1.0-2.el8.x86_64.rpm 619 kB/s | 73 kB 00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 1.4 MB/s | 179 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : fuse-common-3.3.0-16.0.1.el8.x86_64 1/3
Installing : fuse-2.9.7-16.0.1.el8.x86_64 2/3
Installing : ocifs-1.1.0-2.el8.x86_64 3/3
Running scriptlet: ocifs-1.1.0-2.el8.x86_64 3/3
Verifying : fuse-2.9.7-16.0.1.el8.x86_64 1/3
Verifying : fuse-common-3.3.0-16.0.1.el8.x86_64 2/3
Verifying : ocifs-1.1.0-2.el8.x86_64 3/3
Installed:
fuse-2.9.7-16.0.1.el8.x86_64 fuse-common-3.3.0-16.0.1.el8.x86_64 ocifs-1.1.0-2.el8.x86_64
Complete!
■ OCIFS認証設定
デフォルトでは、Object StorageバケットはAPIベースの認証を使用してマウントされます。OCIFS認証を参照してください。
APIキーベースの認証はOCIFSのデフォルトの認証方法であり、ローカルのOCI SDKおよびCLI構成ファイルが必要です。
構成ファイルを指定するには、ocifsコマンドで config=オプションを使用します。デフォルトでは、構成ファイルは ~/.oci/config です。
今回デフォルトの~/.oci/configファイルを使用するように OCI CLIをインストールして設定します。
⚫︎ CLIのインストール
次を参考にCLIをインストールします。
Oracle Linux 8 へ次のようにCLIのインストール インストールします。
1) dnfを使用してCLIをインストール
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli
・実行例
[opc@OL8-inst ~]$ sudo dnf -y install oraclelinux-developer-release-el8
This system is receiving updates from OSMS server.
Last metadata expiration check: 2:59:48 ago on Tue 26 Sep 2023 01:25:51 AM GMT.
Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[opc@OL8-inst ~]$ sudo dnf install python36-oci-cli
This system is receiving updates from OSMS server.
Last metadata expiration check: 3:00:04 ago on Tue 26 Sep 2023 01:25:51 AM GMT.
Dependencies resolved.
======================================================================================================================================================================================
Package Architecture Version Repository Size
======================================================================================================================================================================================
Installing:
python36-oci-cli noarch 3.23.2-1.el8 ol8_addons-x86_64 15 M
Upgrading:
python36-oci-sdk x86_64 2.93.1-1.el8 ol8_addons-x86_64 26 M
Installing dependencies:
python3-arrow noarch 1.1.1-1.el8 ol8_addons-x86_64 119 k
python3-jmespath noarch 0.10.0-1.el8 ol8_addons-x86_64 48 k
python3-prompt-toolkit noarch 3.0.29-1.0.2.el8 ol8_addons-x86_64 669 k
python3-terminaltables noarch 3.1.0-1.0.1.el8 ol8_addons-x86_64 31 k
python3-typing-extensions noarch 3.7.4.2-1.el8 ol8_addons-x86_64 47 k
python3-wcwidth noarch 0.2.5-3.el8 ol8_addons-x86_64 48 k
Installing weak dependencies:
python3-pygments noarch 2.2.0-22.module+el8.5.0+20329+5c5719bc ol8_appstream-x86_64 1.9 M
Transaction Summary
======================================================================================================================================================================================
Install 8 Packages
Upgrade 1 Package
Total download size: 44 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm 370 kB/s | 31 kB 00:00
(2/9): python3-arrow-1.1.1-1.el8.noarch.rpm 12 MB/s | 119 kB 00:00
(3/9): python3-jmespath-0.10.0-1.el8.noarch.rpm 506 kB/s | 48 kB 00:00
(4/9): python3-pygments-2.2.0-22.module+el8.5.0+20329+5c5719bc.noarch.rpm 14 MB/s | 1.9 MB 00:00
(5/9): python3-wcwidth-0.2.5-3.el8.noarch.rpm 464 kB/s | 48 kB 00:00
(6/9): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm 348 kB/s | 47 kB 00:00
(7/9): python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch.rpm 4.7 MB/s | 669 kB 00:00
(8/9): python36-oci-cli-3.23.2-1.el8.noarch.rpm 117 MB/s | 15 MB 00:00
(9/9): python36-oci-sdk-2.93.1-1.el8.x86_64.rpm 43 MB/s | 26 MB 00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 53 MB/s | 44 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Upgrading : python36-oci-sdk-2.93.1-1.el8.x86_64 1/10
Installing : python3-wcwidth-0.2.5-3.el8.noarch 2/10
Installing : python3-typing-extensions-3.7.4.2-1.el8.noarch 3/10
Installing : python3-arrow-1.1.1-1.el8.noarch 4/10
Installing : python3-jmespath-0.10.0-1.el8.noarch 5/10
Installing : python3-terminaltables-3.1.0-1.0.1.el8.noarch 6/10
Installing : python3-pygments-2.2.0-22.module+el8.5.0+20329+5c5719bc.noarch 7/10
Installing : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 8/10
Installing : python36-oci-cli-3.23.2-1.el8.noarch 9/10
Cleanup : python36-oci-sdk-2.79.0-1.el8.x86_64 10/10
Running scriptlet: python36-oci-sdk-2.79.0-1.el8.x86_64 10/10
Verifying : python3-pygments-2.2.0-22.module+el8.5.0+20329+5c5719bc.noarch 1/10
Verifying : python3-terminaltables-3.1.0-1.0.1.el8.noarch 2/10
Verifying : python3-jmespath-0.10.0-1.el8.noarch 3/10
Verifying : python3-arrow-1.1.1-1.el8.noarch 4/10
Verifying : python3-typing-extensions-3.7.4.2-1.el8.noarch 5/10
Verifying : python3-wcwidth-0.2.5-3.el8.noarch 6/10
Verifying : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 7/10
Verifying : python36-oci-cli-3.23.2-1.el8.noarch 8/10
Verifying : python36-oci-sdk-2.93.1-1.el8.x86_64 9/10
Verifying : python36-oci-sdk-2.79.0-1.el8.x86_64 10/10
Upgraded:
python36-oci-sdk-2.93.1-1.el8.x86_64
Installed:
python3-arrow-1.1.1-1.el8.noarch python3-jmespath-0.10.0-1.el8.noarch python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch
python3-pygments-2.2.0-22.module+el8.5.0+20329+5c5719bc.noarch python3-terminaltables-3.1.0-1.0.1.el8.noarch python3-typing-extensions-3.7.4.2-1.el8.noarch
python3-wcwidth-0.2.5-3.el8.noarch python36-oci-cli-3.23.2-1.el8.noarch
Complete!
2) OCI CLI 設定
[opc@OL8-inst ~]$ oci setup config
This command provides a walkthrough of creating a valid CLI config file.
The following links explain where to find the information required by this
script:
User API Signing Key, OCID and Tenancy OCID:
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
Region:
https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
General config documentation:
https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm
Enter a location for your config [/home/opc/.oci/config]:
Enter a user OCID: ocid1.user.oc1..aaaaaaaatkb2a32gjm4yyq6hrx4geayb77o6hr5kgcipyvinmej3rup6sz2a
Enter a tenancy OCID: ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca
Enter a region by index or name(e.g.
1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,
6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,
11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,
16: eu-amsterdam-1, 17: eu-dcc-dublin-1, 18: eu-dcc-dublin-2, 19: eu-dcc-milan-1, 20: eu-dcc-milan-2,
21: eu-dcc-rating-1, 22: eu-dcc-rating-2, 23: eu-frankfurt-1, 24: eu-madrid-1, 25: eu-marseille-1,
26: eu-milan-1, 27: eu-paris-1, 28: eu-stockholm-1, 29: eu-zurich-1, 30: il-jerusalem-1,
31: me-abudhabi-1, 32: me-dcc-muscat-1, 33: me-dubai-1, 34: me-jeddah-1, 35: mx-queretaro-1,
36: sa-santiago-1, 37: sa-saopaulo-1, 38: sa-vinhedo-1, 39: uk-cardiff-1, 40: uk-gov-cardiff-1,
41: uk-gov-london-1, 42: uk-london-1, 43: us-ashburn-1, 44: us-chicago-1, 45: us-gov-ashburn-1,
46: us-gov-chicago-1, 47: us-gov-phoenix-1, 48: us-langley-1, 49: us-luke-1, 50: us-phoenix-1,
51: us-sanjose-1): ap-tokyo-1
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/home/opc/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /home/opc/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /home/opc/.oci/oci_api_key.pem
Fingerprint: a2:f5:5f:f0:16:0f:f2:78:de:90:66:80:05:af:e1:78
Config written to /home/opc/.oci/config
If you haven't already uploaded your API Signing public key through the
console, follow the instructions on the page linked below in the section
'How to upload the public key':
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2
[opc@OL8-inst ~]$ ls -l $HOME/.oci
total 20
-rw-------. 1 opc opc 299 Sep 26 04:38 config
-rw-------. 1 opc opc 1704 Sep 26 04:31 oci_api_key.pem
-rw-------. 1 opc opc 451 Sep 26 04:32 oci_api_key_public.pem
3) ~/.oci/config ファイル確認
[opc@OL8-inst .oci]$ cat config
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaatkb2a32gjm4yyq6hrx4geayb77o6hr5kgcipyvinmej3rup6sz2a
fingerprint=c5:ac:ae:a9:f8:bd:8a:ab:d3:9d:f1:4c:26:68:cb:55
key_file=/home/opc/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca
region=ap-tokyo-1
4) CLI設定確認
[opc@OL8-inst .oci]$ oci iam region list --output table
+-----+-------------------+
| key | name |
+-----+-------------------+
| AMS | eu-amsterdam-1 |
| ARN | eu-stockholm-1 |
| AUH | me-abudhabi-1 |
| BOM | ap-mumbai-1 |
| CDG | eu-paris-1 |
| CWL | uk-cardiff-1 |
| DXB | me-dubai-1 |
| FRA | eu-frankfurt-1 |
| GRU | sa-saopaulo-1 |
| HYD | ap-hyderabad-1 |
| IAD | us-ashburn-1 |
| ICN | ap-seoul-1 |
| JED | me-jeddah-1 |
| JNB | af-johannesburg-1 |
| KIX | ap-osaka-1 |
| LHR | uk-london-1 |
| LIN | eu-milan-1 |
| MAD | eu-madrid-1 |
| MEL | ap-melbourne-1 |
| MRS | eu-marseille-1 |
| MTY | mx-monterrey-1 |
| MTZ | il-jerusalem-1 |
| NRT | ap-tokyo-1 |
| ORD | us-chicago-1 |
| PHX | us-phoenix-1 |
| QRO | mx-queretaro-1 |
| SCL | sa-santiago-1 |
| SIN | ap-singapore-1 |
| SJC | us-sanjose-1 |
| SYD | ap-sydney-1 |
| VCP | sa-vinhedo-1 |
| YNY | ap-chuncheon-1 |
| YUL | ca-montreal-1 |
| YYZ | ca-toronto-1 |
| ZRH | eu-zurich-1 |
+-----+-------------------+
5) Object Sotrage バケット・アクセス確認
事前に Object Sotrage へ 作成した バケット bucketを 確認
[opc@OL8-inst ~]$ oci os bucket get --bucket-name bucket --query 'data."name"'
"bucket"
■ Object Storage へCSVファイルをアップロード
1) アップロード
[oracle@db-tokyo1 ~]$ oci os object put -ns orasejapan -bn bucket --file /home/oracle/file1.txt
{
"etag": "dcd6d7da-3b65-4b7c-90ff-03cfbeab1c48",
"last-modified": "Tue, 03 Oct 2023 02:48:29 GMT",
"opc-content-md5": "v/rkBNE0hKF5r71pFlc8cw=="
}
**2) アップロード確認**
[oracle@db-tokyo1 ~]$ oci os object list -ns orasejapan -bn bucket
{
"data": [
{
"archival-state": null,
"etag": "dcd6d7da-3b65-4b7c-90ff-03cfbeab1c48",
"md5": "v/rkBNE0hKF5r71pFlc8cw==",
"name": "file1.txt",
"size": 12,
"storage-tier": "Standard",
"time-created": "2023-10-03T02:48:29.364000+00:00",
"time-modified": "2023-10-03T02:48:29.364000+00:00"
}
],
"prefixes": []
}
■ OCIFSを使用したマウント
OCIFSでは、ファイル・システムとして使用するオブジェクト・ストレージ・バケットをマウントでき、マウントされたバケット内のオブジェクトを通常のディレクトリおよびファイルとして管理できます。
マウントするObject Storageバケットをバケット・パスで指定できます。
⚫︎ オブジェクト・ストレージ・バケットのマウント
1) マウント・ディレクトリ作成
[opc@OL8-inst ~]$ mkdir ocifs_dir
2) マウント
[opc@OL8-inst ~]$ ocifs bucket ocifs_dir
3) マウント確認
マウントしたディレクトリにオブジェクト・ストレージ・バケットのファイルがあることを確認
[opc@OL8-inst ~]$ ls -l ocifs_dir/
total 0
-rw-r--r--. 1 opc opc 12 Sep 26 04:56 file1.csv
4) ファイル・アクセス確認
[opc@OL8-inst ~]$ cat ocifs_dir/file1.csv
X,Y
1,2
4,5
⚫︎ オブジェクト・ストレージ・バケットのアンマウント
1) アンマウント
[opc@OL8-inst ~]$ fusermount -u ocifs_dir
2) アンマウント確認
マウントしたディレクトリにオブジェクト・ストレージ・バケットのファイルがあることを確認
[opc@OL8-inst ~]$ ls -l ocifs_dir/
total 0
■ SQL*Loder実行
1) Load する Table作成
[opc@OL8-inst ~]$ sqlplus system/<Password>@PDB
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 26 05:07:12 2023
Version 21.11.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Tue Sep 26 2023 05:03:39 +00:00
Connected to:
Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
Version 19.17.0.0.0
SQL>
SQL> create table TEST_TABLE(X NUMBER(5),Y VARCHAR2(40));
Table created.
2) Load テスト・データ作成
[opc@OL8-inst ~]$ cat /home/opc/ocifs_dir/file1.csv
X,Y
1,2
4,5
3) SQL*Lodar 制御ファイル作成
[opc@OL8-inst ~]$ vi /home/opc/test.ctl
[opc@OL8-inst ~]$ cat /home/opc/test.ctl
load data
infile '/home/opc/ocifs_dir/file1.csv'
into table TEST_TABLE
fields terminated by ',' optionally enclosed by '"'
(X ,Y)
4) SQL*Lodar ロード実行
[opc@OL8-inst ~]$ sqlldr system/<Password>@PDB /home/opc/test.ctl
SQL*Loader: Release 21.0.0.0.0 - Production on Tue Sep 26 05:25:03 2023
Version 21.11.0.0.0
Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved.
Path used: Conventional
Commit point reached - logical record count 3
Table TEST_TABLE:
2 Rows successfully loaded.
Check the log file:
test.log
for more information about the load.
5) ロード確認
[opc@OL8-inst ~]$ sqlplus system/<Password>@PDB
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 26 05:25:13 2023
Version 21.11.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Tue Sep 26 2023 05:25:03 +00:00
Connected to:
Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
Version 19.17.0.0.0
SQL> select * from TEST_TABLE;
X Y
---------- ----------------------------------------
1 2
4 5
■ OCI Object Storageバケットのアンマウント
1) アンマウント
[opc@OL8-inst ~]$ fusermount -u ocifs_dir
2) アンマウント確認
マウントしたディレクトリにオブジェクト・ストレージ・バケットのファイルがあることを確認
[opc@OL8-inst ~]$ ls -l ocifs_dir/
total 0
■ 参考
・OCIFSユーティリティ
・OCIFSユーティリティを使用した、通常のファイルシステムとしてのOCI GoldenGateデプロイメント・バックアップへのアクセス