3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[OCI]Database Clientを利用したADBのAWRダンプ取得/ロード

Posted at

1.はじめに

ADBはBaseDBと異なり、運用管理が自動化される反面、OSへの接続ができません。
LinuxOS上からSQL*Plus等でDB接続を行いたい場合、別途Computeインスタンスを構築し、
そこにClientを導入して接続するなどの方法でADBへの接続が可能です。

Oracle接続のClientには「Oracle Database Client」と「Oracle Instant Client」の2種類のClientがあります。
単純にSQL*Plus等で接続できればよい場合、Instant Clientの利用がシンプルで簡単です。
以下記事にInstant ClientでのADB接続方法について記載していますのでご参照ください。
[OCI]ComputeインスタンスからADBへの接続設定(OL8)

今回、ADBのAWR情報のダンプ取得やロードをする要件があり、$ORACLE_HOME/rdbms/admin/awrextr.sqlやawrload.sqlの利用を行いたいため、
Instant ClientではなくDatabase Clientを導入してADB接続を行う手順を記載します。

OCI上のVCN、Compute、ADB作成までは前回の記事と同様なので、必要であれば上記リンクの記事を参考に構築します。
5.Computeインスタンスの設定部分からは設定内容が異なりますので本記事を参考にしていただければと思います。

警告
Oracle Linux 8環境上で、23aiのDatabase Clientで構築を進めたところ、以下のエラーが発生し解消できなかったため、ここでは21cのDatabase Clientを利用します。

ORA-28884: invalid cipher suite

参考リンク

2.Database Client のインストール

2-1.Oracleユーザーの作成

[opc@<host名> ~]$ sudo su - 
[root@<host名> ~]# /usr/sbin/groupadd -g 54321 oinstall
[root@<host名> ~]# /usr/sbin/useradd -u 54321 -g oinstall oracle
[root@<host名> ~]# exit
[opc@<host名> ~]$ sudo su - oracle
[oracle@<host名> ~]$ pwd
/home/oracle
[oracle@<host名> ~]$ vi .bashrc

/home/oracleの.bashrcに以下を記載しておきます。

ORACLE_HOME=/u01/app/oracle/product/21.0.0/client_1; export ORACLE_HOME
PATH=$PATH:/u01/app/oracle/product/21.0.0/client_1/bin; export PATH
LD_LIBRARY_PATH=/u01/app/oracle/product/21.0.0/client_1/lib; export LD_LIBRARY_PATH
TNS_ADMIN=/home/oracle/wallet; export TNS_ADMIN

その後、もう一度suを実行するか、.bashrcを読み込みなおしておきます。

[oracle@<host名> ~]$ . .bashrc

2-2.Database Client ソフトウェアのダウンロード

以下のOracle Database 21c ソフトウェアダウンロードページより、Oracle Database 21c Clientをダウンロードします。
本記事では ~client_home.zip の方を利用した手順を記載します。

image.png

上記のダウンロードページからzipをローカルにダウンロードし、Compute環境にアップロードする方法でもいいのですが、
ここではComputeインスタンス上からダウンロードする方法を紹介します。

  1. まず、ダウンロードページからライセンスに同意し、ダウンロードを開始します。
  2. ダウンロードが開始されたらダウンロードを一時停止します。
  3. ダウンロードリンクのURLを確認します。
    Chromeの場合は「すべてのダウンロード履歴」「ダウンロードリンクをコピー」でURLをコピーできます。
  4. Computeインスタンス上でダウンロードディレクトリに移動し、curlコマンドにコピーしたURLを指定することでCompute上に直接ダウンロードが可能です。

[oracle@<host名> ~]$ cd /tmp
[oracle@<host名> tmp]$ curl -0 curl -0 https://download.oracle.com/otn/linux/oracle21c/LINUX.X64_213000_client_home.zip?AuthParam=xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx > LINUX.X64_213000_client_home.zip

2-3.Database Client ソフトウェアの展開

[oracle@<host名> ~]$ mkdir -p /u01/app/oracle/product/21.0.0/client_1
[oracle@<host名> ~]$ cd $ORACLE_HOME
[oracle@<host名> client_1]$ unzip /tmp/LINUX.X64_213000_client_home.zip

2-4.X転送設定

今回はGUIでDatabase Clientをインストールしようと思うので、Xクライアントをインストールします。
サイレントインストールをする場合は、この手順は不要です。

[root@<host名> ~]# yum install xauth libXtst libXrender -y

また、動作確認用のアプリケーションもインストールします。
OL7とOL8でコマンドが異なるため読み分けてください。

- OL7の場合
[root@<host名> ~]# yum install xorg-x11-apps -y

- OL8の場合
[root@<host名> ~]# yum --enablerepo=ol8_codeready_builder install xorg-x11-apps -y

sshd設定を行います。
ここでは X11Forwarding が yes であることと、 AddressFamily が inet であることを確認します。

パラメータ 設定値
X11Forwarding yes
AddressFamily inet
[root@<host名> ~]# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config    
#AddressFamily any
X11Forwarding yes
#X11UseLocalhost yes
#       X11Forwarding no

[root@<host名> ~]# vi /etc/ssh/sshd_config
- AddressFamily inetとなるように修正する。

[root@<host名> ~]# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config    
AddressFamily inet
X11Forwarding yes
#X11UseLocalhost yes
#       X11Forwarding no

[root@<host名> ~]# systemctl restart sshd

puttyでComputeに接続する際、以下の設定が有効になっていることを確認します。
Connection - SSH - X11 - Enable X11 forwarding
image.png

X11 forwarding を有効にした putty でサーバーに接続すると、そのログインユーザーにXウィンドウの設定が設定されます。
ですが、OCIにはopcユーザーで接続し、Database Clientのインストールはoracleユーザーで実施するため、
Xウィンドウの各設定をopcユーザーからoracleユーザーに引き継ぎます。

パラメータ 設定値
DISPLAY opcユーザーで確認した値
xauth opcユーザーで確認した値
[opc@<host名> ~]$ echo $DISPLAY
localhost:10.0
[opc@<host名> ~]$ xauth list
<host名>/unix:10  MIT-MAGIC-COOKIE-1  753126dab3a536d91df303d1b7bb9fc7
[opc@<host名> ~]$ sudo -i su - oracle
Last login: Thu Apr 24 00:25:14 GMT 2025 on pts/0
[oracle@<host名> ~]$ export DISPLAY=localhost:10.0
[oracle@<host名> ~]$ xauth add <host名>/unix:10  MIT-MAGIC-COOKIE-1  753126dab3a536d91df303d1b7bb9fc7
[oracle@<host名> ~]$ xeyes &

最後に xeyes でGUI画面が確認できれば成功です。

2-5.インストーラ起動

[oracle@<host名> ~]$ cd $ORACLE_HOME
[oracle@<host名> client_1]$ ./runInstaller

2-6.インストールの事前チェック結果(推奨設定)の確認

image.png

2-7.warningの解消

チェック結果warningとなった個所を解消します。
まず、推奨されているライブラリをインストールします。

[root@<host名> ~]# yum install compat-openssl10 -y
[root@<host名> ~]# yum install ksh -y

kernelパラメータは現在の設定を確認して推奨された値を/etc/sysctl.confに反映します。
warningが出たパラメータの現在値を確認します。

[root@<host名> ~]# sysctl -a | grep file-max
fs.file-max = 1597539
[root@<host名> ~]# sysctl -a | grep rmem_default
net.core.rmem_default = 212992
[root@<host名> ~]# sysctl -a | grep rmem_max
net.core.rmem_max = 212992
[root@<host名> ~]# sysctl -a | grep wmem_default
net.core.wmem_default = 212992
[root@<host名> ~]# sysctl -a | grep wmem_max
net.core.wmem_max = 212992
[root@<host名> ~]# sysctl -a | grep aio-max-nr
fs.aio-max-nr = 65536

/etc/sysctl.confの編集

[root@<host名> ~]# vi /etc/sysctl.conf
- 以下の内容を反映
fs.file-max = 6815744
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576 

設定のロード

[root@<host名> ~]# sysctl -a | grep file-max
fs.file-max = 1597539
[root@<host名> ~]# sysctl -p
kernel.unknown_nmi_panic = 1
fs.file-max = 6815744
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
[root@<host名> ~]# sysctl -a | grep file-max
fs.file-max = 6815744

2-8.インストールの再開

再度チェックを実施し、warningが解消されたことを確認し、インストールを進めます。
(または解消しなくてもいいもののみになった場合はIgnore Allにチェックを入れて進めます)
途中でrootユーザーでscriptを流す指示が出てきたら指示通りにscriptを実行します。

3.ADBへの接続設定

3-1.walletのダウンロード

ADBのデータベース接続メニューからインスタンス・ウォレットをダウンロードし、Computeインスタンスに配置します。
ウォレットディレクトリは /home/oracle/wallet としています。

[oracle@<host名> ~]$ mkdir wallet
[oracle@<host名> ~]$ cd wallet
[oracle@<host名> wallet]$ unzip /tmp/Wallet_<ADB名>.zip
[oracle@<host名> wallet]$ ls
cwallet.sso  ewallet.p12  ewallet.pem  keystore.jks  ojdbc.properties  README  sqlnet.ora  tnsnames.ora  truststore.jks
[oracle@<host名> wallet]$ cat tnsnames.ora
- 接続文字列を確認
[oracle@<host名> wallet]$ vi sqlnet.ora
- DIRECTORYの値を$TNS_ADMINに変更
DIRECTORY=$TNS_ADMIN

3-2.接続確認

[oracle@<host名> ~]$ sqlplus admin/<password>@<tnsnames.oraで確認した接続文字列>

SQL*Plus: Release 21.0.0.0.0 - Production on Thu Apr 24 10:01:04 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Last Successful login time: Thu Apr 24 2025 09:05:28 +00:00

Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.8.0.25.05

SQL>

4.ADBからAWRダンプ取得

4-1.AWRダンプ取得

dbidとsnapの範囲を確認します。

SQL> select dbid,min(snap_id),max(snap_id) from awr_pdb_snapshot group by dbid;

DATA_PUMP_DIR の設定を確認します。

SQL> select * from all_directories where directory_name='DATA_PUMP_DIR';

以下のシェルを準備します。

awrdump.sh
#!/bin/bash

##### var setting
v_dbuser='admin'
v_dbpw='<password>'
v_constr='<接続詞>'

v_dmpfilename='<dumpファイル名>'
v_directory_name='DATA_PUMP_DIR'

v_dbid=<dbid>
v_begin_snap=<begin_snap>
v_end_snap=<end_snap>

################################
######### main process #########
################################

echo "START AWREXPORT TIME : $(date '+%Y/%m/%d %H:%M:%S')" 

sqlplus -s ${v_dbuser}/${v_dbpw}@${v_constr} <<SQLEND
    DEFINE dbid=${v_dbid}
    DEFINE num_days=1
    DEFINE begin_snap=${v_begin_snap}
    DEFINE end_snap=${v_end_snap}
    DEFINE file_name=${v_dmpfilename}
    DEFINE directory_name=${v_directory_name}
    DEFINE include_sqlmon='no' 
    @?/rdbms/admin/awrextr.sql
    --select sysdate from dual;
SQLEND

echo "END AWREXPORT TIME : $(date '+%Y/%m/%d %H:%M:%S')"
exit

実行します。

[oracle@<host名> awrdump]$ ./awrdump.sh

ADB上のディレクトリオブジェクトにAWRダンプが取得されます。
ですが、ADBのローカル上に配置されているため、そのままではダンプをダウンロードすることができません。

SQL> select * from DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

そのため、ADB上のディレクトリからオブジェクトストレージに以下の手順でファイルをコピーする必要があります。

4-2.認証トークンの作成

上記を参考に、OCIのプロファイルから認証トークンを作成します。
認証トークンは後から確認できないため、作成後、トークンをコピーしておきます。

4-3.クレデンシャルの作成

ADB上で以下のコマンドを実行し、クレデンシャルを作成します。
クレデンシャル名は任意の名称にし、usernameとpasswordは認証トークンを作成したユーザーと作成した認証トークンを指定します。

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name =>  '<credential名>',
        username        =>  '<OCIのユーザー名>',
        password        =>  '<発行した認証トークン文字列>'
    );
END;
/

4-4.ADB上からオブジェクトストレージの確認

上記でクレデンシャルが作成できたら、ADB上からオブジェクトストレージが見えるか確認します。
接続用にオブジェクトストレージの情報もOCIコンソール上で確認しておきます。

パラメータ 設定値
credential 上記で作成したcredential名
region ap-tokyo-1 など。
ObjectStorageNameSpace バケットの詳細のネームスペース
BucketName バケット名

image.png

SQL> select * from dbms_cloud.list_objects('<credential>','https://objectstorage.<region>.oraclecloud.com/n/<ObjectStorageNameSpace>/b/<BucketName>/o/');

4-5.ダンプファイルをオブジェクトストレージに配置

再度ダンプファイルを確認します。
DATA_PUMP_DIRにはダンプファイルとログファイルが出力されていると思います。

SQL> select * from DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

DBMS_CLOUD.PUT_OBJECTを使用してダンプファイルをオブジェクトストレージに配置します。

BEGIN
    DBMS_CLOUD.PUT_OBJECT(
      credential_name =>  '<credential名>',
      object_uri      =>  'https://objectstorage.<region>.oraclecloud.com/n/<ObjectStorageNameSpace>/b/<BucketName>/o/',
      directory_name  =>  'DATA_PUMP_DIR',
      file_name       =>  '<dumpファイル名>'
    );
END;
/

オブジェクトストレージに配置できたことが確認できたら、ADBのDATA_PUBP_DIR上のファイルは不要となるので削除しておきます。

BEGIN
    DBMS_CLOUD.DELETE_FILE(
        directory_name  =>  'DATA_PUMP_DIR',
        file_name       =>  '<dumpファイル名>'
    );
END;
/

5.ADBへのAWRダンプデータロード

5-1.ロードしたいAWRダンプの配置

別の環境で取得したAWRダンプをオブジェクトストレージにアップロードします。
オブジェクトストレージへのアップロードはGUIのドラッグ&ドロップで行います。

DBMS_CLOUD.GET_OBJECTを使用し、オブジェクトストレージにアップロードしたダンプファイルをDATA_PUMP_DIRに配置します。
その際、PUT_OBJECTと異なり、ファイル名はfile_nameパラメータではなく、object_uriに含めます。

BEGIN
    DBMS_CLOUD.GET_OBJECT(
      credential_name =>  '<credential名>',
      object_uri      =>  'https://objectstorage.<region>.oraclecloud.com/n/<ObjectStorageNameSpace>/b/<BucketName>/o/<dumpファイル名>',
      directory_name  =>  'DATA_PUMP_DIR'
    );
END;
/

DATA_PUMP_DIRに配置できたことを確認します。

SQL> select * from DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

5-2.AWRダンプロード

以下のシェルを準備します。

awrload.sh
#!/bin/bash

##### var setting
v_dbuser='admin'
v_dbpw='<password>'
v_constr='<接続詞>'

v_dmpfilename='<dumpファイル名 ※.dmpは付けない>'
v_directory_name='DATA_PUMP_DIR'

################################
######### main process #########
################################

echo "START AWRIMPORT TIME : $(date '+%Y/%m/%d %H:%M:%S')" 

sqlplus -s ${v_dbuser}/${v_dbpw}@${v_constr} <<SQLEND
    DEFINE file_name=${v_dmpfilename}
    DEFINE directory_name=${v_directory_name}
    @?/rdbms/admin/awrload.sql
    --select sysdate from dual;
SQLEND

echo "END AWRIMPORT TIME : $(date '+%Y/%m/%d %H:%M:%S')"
exit

シェルに実行権限を付け、実行します。

[oracle@<host名> awrload]$ ./awrload.sh

ロードできたことを確認します。

SQL> select dbid,min(snap_id),max(snap_id) from awr_pdb_snapshot group by dbid;

5-3.ダンプファイルの削除

ADBのDATA_PUMP_DIR上のファイルを削除します。

SQL> select * from DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

上記で見つかった不要なファイルをDBMS_CLOUD.DELETE_FILEで削除します。
dmpファイルとlogファイルがあるはずです。

BEGIN
    DBMS_CLOUD.DELETE_FILE(
        directory_name  =>  'DATA_PUMP_DIR',
        file_name       =>  '<dumpファイル名>'
    );
END;
/

オブジェクトストレージのファイル削除はGUI上で削除できます。

以上で、ADB上のAWRダンプの取得、ADBへのAWRダンプのロードができました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?