本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
OCI上の「Oracle Base Database サービス」からオブジェクト・ストレージにバックアップを出したい場合、さまざまな方法があります。以下に示す方法は一般的です。
- Base DBサービスの自動バックアップ機能を利用する。
- バックアップ・モジュールをインストールし、RMANで手動バックアップを実施する。
- DBMS_CLOUDプロシージャを利用し、DBから直接にデータ・ポンプ・ファイルをオブジェクト・ストレージにエクスポートする。(※関連記事)
- データ・ポンプ・ファイルを一時にローカルにエクスポートしてから、OCI-CLIかRloneなどのツールで、オブジェクト・ストレージに転送する。
上記の各方法には、それぞれの利点と制限事項があります。今回はもう一つ選択肢を提供したいと思います。
この前の記事で紹介したように、オブジェクト・ストレージをローカルのファイル・システムにマウントできます。この方法は、OCI上のBase DBインスタンスにも適用されます。それにより、マウント・ポイントを経由し、データ・ポンプ・ファイルをオブジェクト・ストレージにエクスポートするのが可能です。
この方法の利点
✅ 自動バックアップ機能と違って、バケットに出力されたファイルを表示・管理できる。
✅ 直接にオブジェクト・ストレージにエクスポートするため、ローカルへの一時保存は不要。
✅ DBのバージョンに依存せず、DBMS_CLOUDプロシージャのインストールは不要。(Base DBにDBMS_CLOUDをインストールする際に、DBバージョンの制限がある)
※、この方法はBase DBサービスだけではなく、IaaS DBにも適用されます。
これから、ステップ・バイ・ステップで設定方法を説明します。
検証環境
- DBバージョン:Base DB 19c (VM) Standard Edition (on OL7)
- ツール:s3fs-fuse
ステップ
1. 事前準備
1-1. クレデンシャルの生成
プロファイル・アイコン(右上) → マイ・プロファイル → 顧客秘密キー → 秘密キーの生成
二度と表示しないので、メモしておいてください。
1-2 ネームスペースの確認
- 一部の古いテナンシでは、ネームスペースとテナンシ名は同じですけど、そもそも別物なので、間違いようにご注意ください。
- OCI-CLIを利用する場合、
oci os ns get
で簡単に取得できます。
2. Base 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
s3fs-fuseをインストール
コマンド: sudo yum install s3fs-fuse --enablerepo=ol7_developer_EPEL -y
2-2. クレデンシャルの設定
パスワード・ファイルを作成
STEP 1-1で作成したアクセス・キー(ACCESS_KEY)と秘密キー(SECRET_KEY)を利用し、パスワード・ファイルを作成します。その真ん中に、半角のコロンで結合されます。
パスとファイル名: ~/.passwd-s3fs
コマンド例:
[opc@db19cse ~]$ sudo su -
Last login: <中略> on pts/0
[root@db19cse ~]# echo ACCESS_KEY:SECRET_KEY > ~/.passwd-s3fs
[root@db19cse ~]# chmod 600 ~/.passwd-s3fs
2-3. バケットをマウント
マウント・ポイントを作成:
[root@db19cse ~]# mkdir /u01/app/oracle/dmp
バケットをマウント:
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>: リージョン識別子に置き換えてください(例:ap-tokyo-1, ap-osaka-1)。分からない場合はこちらをご参照ください。
コマンド例:
[root@db19cse ~]# 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
[root@db19cse ~]# df -h /u01/app/oracle/dmp
Filesystem Size Used Avail Use% Mounted on
s3fs 16E 0 16E 0% /u01/app/oracle/dmp
[root@db19cse ~]#
バケットをアンマウントしたい場合、以下のコマンドを実施してください。
fusermount -u <mount_point>
、或いは umount <mount_point>
3. エクスポートの実施
ディレクトリの作成
事前にディレクトリを作成する必要があります。パスは、マウント・ポイントと同じです。
次のように、管理者ユーザーでPDBに接続し、ディレクトリの作成と権限の割り当てを実施します。
sudo su - oracle
sqlplus system/<password>@<hostname_or_IP>:1521/<PDB_Service_Name>
SQL> show user;
USER is "SYSTEM"
SQL> CREATE OR REPLACE DIRECTORY MOUNT_DIR AS '/u01/app/oracle/dmp/';
Directory created.
SQL> GRANT READ, WRITE ON DIRECTORY MOUNT_DIR TO USER01;
Grant succeeded.
ディレクトリの確認
SQL> col DIRECTORY_NAME for a20
SQL> col DIRECTORY_PATH for a30
SQL> l
1 SELECT DIRECTORY_NAME, DIRECTORY_PATH FROM DBA_DIRECTORIES
2* WHERE DIRECTORY_NAME = 'MOUNT_DIR'
SQL> /
DIRECTORY_NAME DIRECTORY_PATH
-------------------- ------------------------------
MOUNT_DIR /u01/app/oracle/dmp/
エクスポートの実施
コマンド例: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=MOUNT_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=MOUNT_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オブジェクト・ストレージへデータをエクスポートする手順