マウントポイント経由でOracle Base DBのData PumpをObject Storageへエクスポートする

Database

初めに

OCI上の「Oracle Base Database サービス」からオブジェクト・ストレージにバックアップをを行う場合、いくつかの方法があります。以下に主な方法を挙げます。

  • Base DBサービスの自動バックアップ機能を利用する。
  • バックアップ・モジュールをインストールし、RMANで手動バックアップを実施する。
  • DBMS_CLOUDプロシージャを使用し、データ・ポンプ・ファイルをデータベースから直接オブジェクト・ストレージにエクスポートする。(次の記事をご参照ください)
    Oracle DBのデータをOCI Object Storageへ直接エクスポートする方法
  • データ・ポンプ・ファイルを一度ローカルにエクスポートした後、OCI-CLIRloneなどのツールで、オブジェクト・ストレージに転送する。

上記の各方法には、それぞれの利点と制限事項があります。
今回ご紹介するのは、それらとは別の新しいアプローチです。
Export data pump from Oracle Base DB to OCI object storage via mount point

この前の記事(OCI Object StorageをLinux/Windowsにマウントする方法)で紹介したように、オブジェクト・ストレージをローカルのファイル・システムにマウントできます。この方法は、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. クレデンシャルの生成

プロファイル・アイコン(右上) → マイ・プロファイル → 顧客秘密キー → 秘密キーの生成
二度と表示しないので、メモしておいてください。
Generate secret key

マウスを「アクセス・キー」に移動し、キーをコピーします。
Copy secret key

1-2 ネームスペースの確認

プロファイル・アイコン(右上) → テナンシ
Get object storage namespace

  • 一部の古いテナンシでは、ネームスペースとテナンシ名は同じですけど、そもそも別物なので、間違いようにご注意ください。
  • 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://<object_storage_namespace>.compat.objectstorage.<region>.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=<region>,allow_other
  • <object_storage_namespace>: ネームスペースに置き換えてください (STEP 1-2で取得)。
  • <region>: リージョン識別子に置き換えてください(例:ap-tokyo-1, ap-osaka-1)。分からない場合はこちらをご参照ください。

コマンド例:

[root@db19cse ~]# s3fs MyBucket /u01/app/oracle/dmp -o url=https://<object_storage_namespace>.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 ~]$

バックアップ後、バケットの中身を確認します。
Check data pump file

DBインスタンス再起動後、マウントポイントが切れないように再マウントするか、/etc/fstabを編集してください。

以上

タイトルとURLをコピーしました