はじめに
ocifsを利用してBase Databaseからオブジェクトストレージへexpdpをしてみる
ocifsを利用することで、ファイルシステムとしてマウントしてデータ移行をすることができます。
0. 前提条件 (事前確認事項)
- Oracle Databaseは26aiを利用(Oracle Linux 8以上)
-
バケット: OCI上にバケット
ocifstestが作成されていること。(適宜バケット名は読み替えてください) - APIキー: OCIのAPIキーが登録済みであること
- ネットワーク: DBシステムから Object Storage への通信(サービス・ゲートウェイ等)が確保されていること
1. システム基盤のセットアップ (opc ユーザー / sudo)
# 1. ocifsのインストール
sudo dnf install -y ocifs
# 2. FUSEの設定変更(DBプロセスがマウント先にアクセスするため)
sudo sed -i 's/#user_allow_other/user_allow_other/' /etc/fuse.conf
# 3. マウントポイントの作成と権限変更
sudo mkdir -p /u01/mydir
sudo chown oracle:oinstall /u01/mydir
sudo chmod 755 /u01/mydir
2. 認証設定と動作確認 (oracle ユーザー)
# oracle ユーザーへスイッチ
sudo su - oracle
# 1. 構成ファイルの作成
mkdir -p ~/.oci
vi ~/.oci/config
~/.oci/config の内容:
[DEFAULT]
user=ocid1.user.oc1..[ユーザーOCID]
fingerprint=[fingerprint]
tenancy=ocid1.tenancy.oc1..[テナントOCID]
region=[利用しているリージョン]
key_file=/home/oracle/.oci/oci_api_key.pem
# 2. 権限設定と認証テスト
chmod 600 ~/.oci/config ~/.oci/oci_api_key.pem
oci os ns get
Object StorageのNamespace名が表示されていればoci cliの動作はOK
3. マウントの動作確認 & 設定
# oracle ユーザーとして手動マウントを実行
ocifs ocifstest /u01/mydir
# 書き込みテスト(ファイルが作成できればOK)
touch /u01/mydir/manual_mount_test.txt
ls -l /u01/mydir/*
書き込みテストのファイルがObject Storageにマウントされていることを確認します。

4. DBユーザー作成とデータ準備 (SYSTEM ユーザー / PDB直接接続)
# oracle ユーザーで PDB にログイン
sudo su - oracle
sqlplus system/パスワード@fstest...:1521/DB0108_pdb1...
-- 1. USER01の作成と基本権限付与
CREATE USER USER01 IDENTIFIED BY "WelCome123#123#";
GRANT CREATE SESSION, RESOURCE TO USER01;
ALTER USER USER01 QUOTA UNLIMITED ON USERS;
-- 2. ディレクトリ・オブジェクトの作成と権限付与
CREATE OR REPLACE DIRECTORY MOUNT_DIR AS '/u01/mydir';
GRANT READ, WRITE ON DIRECTORY MOUNT_DIR TO USER01;
EXIT;
5. テーブル作成とデータ投入 (USER01 ユーザー / PDB直接接続)
sqlplus USER01/"WelCome123#123#"@fstest...:1521/DB0108_pdb1...
-- テーブル作成
CREATE TABLE CUSTOMERS (
customer_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
email VARCHAR2(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- サンプルデータ投入 (5件)
INSERT INTO CUSTOMERS (first_name, last_name, email) VALUES ('Taro', 'Tanaka', 'taro@example.com');
INSERT INTO CUSTOMERS (first_name, last_name, email) VALUES ('Jiro', 'Suzuki', 'jiro@example.com');
INSERT INTO CUSTOMERS (first_name, last_name, email) VALUES ('Saburo', 'Sato', 'saburo@example.com');
INSERT INTO CUSTOMERS (first_name, last_name, email) VALUES ('Shiro', 'Ito', 'shiro@example.com');
INSERT INTO CUSTOMERS (first_name, last_name, email) VALUES ('Goro', 'Watanabe', 'goro@example.com');
COMMIT;
EXIT;
6. Data Pump Export の実行 (oracle ユーザー)
# oracle ユーザーの OS プロンプトで実行
expdp USER01/"WelCome123#123#"@fstest...:1521/DB0108_pdb1... \
tables=CUSTOMERS \
directory=MOUNT_DIR \
dumpfile=customers.dmp \
logfile=expdp_customers.log
必要に応じて、expdp時はダンプファイルを分割してエクスポートすることなどもご検討ください
(コマンドにfilesizeを指定する)
7. 最終確認
① Linux側でのディレクトリ確認
ls -lh /u01/mydir/customers.dmp
ls -lh /u01/mydir/expdp_customers.log
tail -n 5 /u01/mydir/expdp_customers.log
② OCI Object Storage 側での確認
oci os object list --bucket-name ocifstest --output table --query "data[].{Name:name, Size:size}"
備考
- マウントの恒久化(再起動対策)
- OSの再起動を行うとマウントが一時的なものになるので、適宜fstabなどで再起動後も設定を保持できるように設定ください。
参考
下記を参考にさせて頂きました。