初めに
OCI上の「Oracle DBクラウド・サービス」からオブジェクト・ストレージにバックアップを出したい場合、いろいろな方法があります。以下のようなやり方は、一般的です。
- Base DBサービスの自動バックアップ機能を利用する。
- バックアップ・モジュールをインストールし、RMANで手動バックアップを実施する。
- DBMS_CLOUDプロシージャを利用し、DBから直接にデータ・ポンプ・ファイルをオブジェクト・ストレージにエクスポートする。(※関連記事)
- データ・ポンプ・ファイルを一時にローカルにエクスポートしてから、OCI-CLIかRloneなどのツールで、オブジェクト・ストレージに転送する。
上記の各方法は、それぞれの利点と制限事項があります。今回はもう一つ選択肢を提供したいと思います。
この前の記事で紹介したように、オブジェクト・ストレージをローカルのファイル・システムにマウントできます。この方法は、OCI上のDBインスタンスにも適用します。それで、マウント・ポイントを経由し、データ・ポンプ・ファイルをオブジェクト・ストレージにエクスポートするのは可能です。
この方法の利点:
✅ 自動バックアップ機能と違って、バケットに出力されたファイルを表示・管理できる。
✅ 直接にオブジェクト・ストレージにエクスポートする。(ローカルへの一時保存は不要)
✅ DBのバージョンに依存せず、DBMS_CLOUDプロシージャのインストールは不要。(Base DBにDBMS_CLOUDをインストールするのに、DBバージョンの制限がある)
これから、ステップ・バイ・ステップで設定方法を説明します。
検証環境
項目 | 内容 | コメント |
---|---|---|
DB version | DB System VM 19c Standard Edition |
この方法はBase DBだけではなく、IaaS DBにも適用する |
ツール | s3fs-fuse |
STEP
1. 事前準備
1-1. クレデンシャルの生成
プロファイル・アイコン(右上) → マイ・プロファイル → 顧客秘密キー → 秘密キーの生成
二度と表示しないので、メモしておいてください。
1-2 ネームスペースの確認
プロファイル・アイコン(右上) → テナンシ
一部の古いテナンシでは、ネームスペースとテナンシ名は同じですけど、そもそも別物なので、間違いようにご注意ください。
2. DBインスタンスへのマウント
2-1. s3fs-fuseをインストール
s3fs-fuseをインストールする前に、Oracle EPELリポジトリをまず有効にしてください。そうしないと、次のようなメッセージが表示されます。
[opc@db19cse ~]$ sudo yum install s3fs-fuse
Loaded plugins: versionlock
There are no enabled repos.
Run "yum repolist all" to see the repos you have.
To enable custom repositories:
yum-config-manager --enable <repo>
[opc@db19cse ~]$ sudo yum repolist all
Loaded plugins: versionlock
repolist: 0
[opc@db19cse ~]$
Oracle EPEL レポジトリを有効する
リポジトリ・ファイルをダウンロードします。
コマンド:
cd /etc/yum.repos.d
sudo wget http://yum.oracle.com/public-yum-ol7.repo
リポジトリ・ファイルを編集します。
コマンド:sudo vi public-yum-ol7.repo
編集対象:[ol7_developer_EPEL]の部分
編集方法:enabled=0
をenabled=1
に変更する。
s3fs-fuseをインストール
コマンド: sudo yum install s3fs-fuse -y
2-2. クレデンシャルの設定
パスワード・ファイルを作成
STEP 1-1で作成したアクセス・キー(ACCESS_KEY)と秘密キー(SECRET_KEY)を利用し、パスワード・ファイルを作成します。その真ん中に、半角のコロンで結合されます。
パスとファイル名: /etc/passwd-s3fs
コマンド例:
[opc@db19cse ~]$ sudo echo <ACCESS_KEY>:<SECRET_KEY> > $HOME/.passwd-s3fs
[opc@db19cse ~]$ sudo mv $HOME/.passwd-s3fs /etc/passwd-s3fs
[opc@db19cse ~]$ sudo chown root:root /etc/passwd-s3fs
[opc@db19cse ~]$ sudo chmod 600 /etc/passwd-s3fs
[opc@db19cse ~]$
2-3. バケットをマウント
マウント・ポイントを作成:
[opc@db19cse ~]$ sudo mkdir /u01/app/oracle/dmp
[opc@db19cse ~]$
バケットをマウント:
sudo s3fs <bucket_Name> <mount_point> -o url=https://<namespace_name>.compat.objectstorage.<region>.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=<region>,allow_other
<namespace_name>をネームスペースに置き換えてください (STEP 1-2で確認)。
<region>をリージョン識別子に置き換えてください。分からない場合はこちらをご確認ください。
コマンド例:
[opc@db19cse ~]$ sudo s3fs MyBucket /u01/app/oracle/dmp -o url=https://<namespace_name>.compat.objectstorage.ap-tokyo-1.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=ap-tokyo-1,allow_other
[opc@db19cse ~]$ sudo df -h /u01/app/oracle/dmp
Filesystem Size Used Avail Use% Mounted on
s3fs 16E 0 16E 0% /u01/app/oracle/dmp
[opc@db19cse ~]$
バケットをアンマウントしたい時、以下のコマンドを実施してください。
sudo fusermount -u <mount_point>
3. エクスポートの実施
ディレクトリの準備
事前にディレクトリを作成しておきます。パスは、マウント・ポイントと同じです。
SQL> show user;
USER is "USER01"
SQL> CREATE OR REPLACE DIRECTORY TEST_DIR AS '/u01/app/oracle/dmp/';
Directory created.
エクスポートの実施
コマンド例:expdp <User_Name>/<Password>@<Host_Name_or_IP>:<Port>/<Service_Name> tables=<Table_Name> directory=<Directory_Name> dumpfile=<Data_Pump_File_Name> logfile=<Export_Log_File_Name>
[oracle@db19cse ~]$ expdp USER01/********@10.0.0.54:1521/db19cse_pdb1.publicsubnet1.vcn1.oraclevcn.com tables=CUSTOMERS directory=TEST_DIR dumpfile=customers.dmp logfile=expdp_customers.log
Export: Release 19.0.0.0.0 - Production on Sat Jun 11 11:13:36 2022
Version 19.15.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Starting "USER01"."SYS_EXPORT_TABLE_01": USER01/********@10.0.0.54:1521/db19cse_pdb1.publicsubnet1.vcn1.oraclevcn.com tables=CUSTOMERS directory=TEST_DIR dumpfile=customers.dmp logfile=expdp_customers.log
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/IDENTITY_COLUMN
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "USER01"."CUSTOMERS" 32.26 KB 319 rows
ORA-39173: Encrypted data has been stored unencrypted in dump file set.
Master table "USER01"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER01.SYS_EXPORT_TABLE_01 is:
/u01/app/oracle/dmp/customers.dmp
Job "USER01"."SYS_EXPORT_TABLE_01" successfully completed at Sat Jun 11 11:13:57 2022 elapsed 0 00:00:19
[oracle@db19cse ~]$ ls -l /u01/app/oracle/dmp
total 230
-rw-r----- 1 oracle asmadmin 233472 Jun 11 11:13 customers.dmp
-rw-r--r-- 1 oracle asmadmin 1385 Jun 11 11:13 expdp_customers.log
[oracle@db19cse ~]$
注意
DBインスタンス再起動後、マウント・ポイントを切らないように、再マウントするか/etc/fstab
を編集してください(省略)。
以上
関連記事
オラクル・クラウドの個人シリーズ・ブログ
OCI Object StorageのバケットをLinux/Windowsのローカルにマウントする
Oracle DBからOCIオブジェクト・ストレージへデータをエクスポートする手順