OCI DB管理の使用体験

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
OCI Database Management(DB管理)サービスが、2021/01/27にリリースされました。
OCI上のDBCSだけではなく、OCI以外(On-P)のOracle DBも管理できます。

<strong>サポート対象DB</strong>: 
On-P、或いはExternal Oracle DB 11.2.0.4以降
2021/09/08より、OCI DB System(Bare Metal, VM)とExaData Cloud Serviceは、管理対象になりました。
2021/11/30より、Autonomous DBも管理対象になりました。

<strong>DB場所</strong>：Oracle Cloud Infrastructure, On-P, 他クラウド上
<strong>管理範囲</strong>：DBサマリー情報、パラメータ、表領域、パフォーマンス、ジョブ(SQL,PL/SQL)など
<strong>管理エージェントの対応OS</strong>: Linux(Oracle Linux, RHL, CentOS, SUSE), Windows(2012 R2, 2016, 2019)

今回は、OCI DB管理の設定方法を簡単に紹介します。この例は、OCI DB System(VM)を管理対象として利用します。（このブログを発表する時点で、まだOCI DB Systemは直接な管理対象外でしたので、外部データベースとして管理します。）
DBバージョン：Oracle DB 19c Enterprise Edition

1. [IAMポリシーの設定 - 管理エージェント用](#iamポリシーの設定---管理エージェント用)
2. [IAMポリシーの設定 - DB管理サービス用](#iamポリシーの設定---db管理サービス用)
3. [管理エージェントのインストール](#管理エージェントのインストール) 
4. [外部データベース接続](#外部データベース接続) 
5. [パフォーマンス・ハブ](#performance-hub)
6. [DBの監視と管理](#dbの監視と管理)

# IAMポリシーの設定 - 管理エージェント用

<strong>グループ名</strong>：AGENT_ADMINS
IAMユーザをグループに追加します。

<strong>動的なグループ名</strong>：Management_Agent_Dynamic_Group
<strong>ルール</strong>:
ALL {resource.type='managementagent', resource.compartment.id='ocid1.compartment.oc1..compartmentocid'}
DBが所属するCompartmentのOCIDを事前に用意しておきます。

<strong>ポリシー名</strong>：Agent-Policy-PoC
<strong>ステートメント</strong>：
ALLOW GROUP AGENT_ADMINS TO <font color="blue">MANAGE management-agents</font> IN COMPARTMENT PoC
ALLOW GROUP AGENT_ADMINS TO <font color="blue">MANAGE management-agent-install-keys</font> IN COMPARTMENT PoC
ALLOW GROUP AGENT_ADMINS TO <font color="blue">READ METRICS</font> IN COMPARTMENT PoC
ALLOW DYNAMIC-GROUP Management_Agent_Dynamic_Group TO <font color="blue">MANAGE management-agents</font> IN COMPARTMENT PoC
ALLOW DYNAMIC-GROUP Management_Agent_Dynamic_Group TO <font color="blue">USE METRICS</font> IN COMPARTMENT PoC

# IAMポリシーの設定 - DB管理サービス用

<strong>グループ名</strong>：DB-MGMT-GRP
IAMユーザをグループに追加します。

<strong>ポリシー名</strong>：DB-MGMT-Policy-PoC
<strong>ステートメント</strong>：
Allow group DB-MGMT-GRP to <font color="blue">use external-database-family</font> in compartment PoC
Allow group DB-MGMT-GRP to <font color="blue">manage dbmgmt-family</font> in compartment PoC
Allow group DB-MGMT-GRP to <font color="blue">read metrics</font> in compartment PoC
Allow group DB-MGMT-GRP to <font color="blue">read alarms</font> in compartment PoC

# 管理エージェントのインストール

DBサーバに管理エージェントのインストールは必要です。
JDK(1.8以降)を事前にインストールしておいてください。（この例は、JDKのインストールを省略します。）
エージェントとOCIの通信は、HTTPSを経由します。

<strong>エージェント・ソフトウェアのダウンロード</strong>
MENU -> Observability & Management -> Management Agents -> Downloads and Keys
この例は、"Agent for LINUX"を利用します。

ダウンロード後、ローカルに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6229905b-d6bb-2b83-09de-b31478c96c20.png)

<strong>エージェント・インストール・キーの作成</strong>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bbf4038e-5288-ead1-ecd9-d1c52baa4090.png)

キー名とCompartmentを指定し、作成します。
最大インストール回数と有効期限は、デフォルトのままです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/07acb68e-7bef-9b8d-a7c3-cf04c53f2a98.png", width="450">

<strong>キーのダウンロード</strong>
キーファイルをローカルに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d8257358-c76f-ee0d-b1a1-4d89ac0682a7.png)

<strong>エージェント・ソフトウェアのインストール</strong>

ダウンロードしたエージェント・ソフトウェアをDBサーバにアップロードします。
sudoユーザで、以下を実行します。
<strong>コマンド例</strong>：<font color="blue">sudo rpm -ivh oracle.mgmt_agent.rpm</font>

<pre>
[opc@db19cee ~]$ sudo rpm -ivh oracle.mgmt_agent.rpm
Preparing...                          ################################# [100%]
Checking pre-requisites
        Checking if any previous agent service exists
        Checking if OS has systemd or initd
        Checking available disk space for agent install
        Checking if /opt/oracle/mgmt_agent directory exists
        Checking if 'mgmt_agent' user exists
        Checking Java version
                JAVA_HOME is not set or not readable to root
                Trying default path /usr/bin/java
                Java version: 1.8.0_281 found at /usr/bin/java
        Checking agent version
Updating / installing...
   1:oracle.mgmt_agent-210727.1608-1  ################################# [100%]

Executing install
        Unpacking software zip
        Copying files to destination dir (/opt/oracle/mgmt_agent)
        Initializing software from template
        Creating 'mgmt_agent' daemon
        Agent Install Logs: /opt/oracle/mgmt_agent/installer-logs/installer.log.0

        Setup agent using input response file (run as any user with 'sudo' privileges)
        Usage:
                sudo /opt/oracle/mgmt_agent/agent_inst/bin/setup.sh opts=[FULL_PATH_TO_INPUT.RSP]

Agent install successful

[opc@db19cee ~]$
</pre>

<strong>レスポンス・ファイルの作成</strong>

ダウンロードしたキーファイルを編集します。
キーファイルの内容（サンプル）
<pre>
managementAgentInstallKey = MS4wLHVzLWFzaGJ1cm4tMSxvY2lkMS50ZW5hbmN5
CredentialWalletPassword = abcdefgh1#
</pre>

<strong>managementAgentInstallKey</strong>: エージェント・インストール・キーで、<font color="blue">必須項目</font>です。(編集不要)
<strong>CredentialWalletPassword</strong>: キーファイルが作成された時、空白のままです。<font color="blue">必須項目</font>なので、入力必要です。エージェントをインストールする際、妥当性をチェックします。（大文字、小文字、数値、特殊文字は必要ですが、"_"と"-"などはだめです。）
認証用パスワードの妥当性チェックが失敗した時、以下のメッセージが表示されます。
<pre>
Credential wallet password must contain atleast 16 character for FIPS only mode and 8 for non-FIPS with one of each of the following classes:
Lower case chars [a-z]
Upper case chars [A-Z]
Numeric chars [0-9]
Special chars [!@#%^&*]
Additional details are available in the configure logs at /opt/oracle/mgmt_agent/configure-logs
</pre>

<font color="blue">その他はオプション</font>で、必要により編集します。
<strong>AgentDisplayName</strong>: エージェントの表示名です。空白のままにしますと、デフォルト値は「Agent (ホスト名)」に設定されます。この例は、"DB19cEE_Agent"に設定します。
<strong>ProxyXXXX</strong>: プロキシサーバーを利用する場合、設定します。

編集後、DBサーバにアップロードします。
保存先：/opt/oracle/mgmt_agent/agent_inst/bin  (エージェントのインストール先)
ファイル名：<font color="blue">input.rsp</font>に変更
所有者とグループ：<font color="blue">mgmt_agent</font>

<pre>
[opc@db19cee ~]$ sudo mv DB19c.txt /opt/oracle/mgmt_agent/agent_inst/bin/input.rsp
[opc@db19cee ~]$ sudo chown mgmt_agent:mgmt_agent /opt/oracle/mgmt_agent/agent_inst/bin/input.rsp
[opc@db19cee ~]$
</pre>

<strong>管理エージェントのインストール</strong>
コマンド例：
<font color="blue">sudo /opt/oracle/mgmt_agent/agent_inst/bin/setup.sh opts=</font>\<full_path_of_response_file>

<pre>
[opc@db19cee ~]$ sudo /opt/oracle/mgmt_agent/agent_inst/bin/setup.sh opts=/opt/oracle/mgmt_agent/agent_inst/bin/input.rsp

Executing configure

        Parsing input response file
        Validating install key
        Generating communication wallet
        Generating security artifacts
        Registering Management Agent

Starting agent...
Agent started successfully


Agent setup completed and the agent is running.
In the future agent can be started by directly running: sudo systemctl start mgmt_agent

Please make sure that you delete /opt/oracle/mgmt_agent/agent_inst/bin/input.rsp or store it in secure location.

[opc@db19cee ~]$
</pre>

OSでエージェントの起動状態を確認します。
コマンド例：<font color="blue">sudo systemctl status mgmt_agent</font>
<pre>
[opc@db19cee ~]$ sudo systemctl status mgmt_agent
● mgmt_agent.service - mgmt_agent
   Loaded: loaded (/etc/systemd/system/mgmt_agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-08-10 04:21:02 UTC; 5min ago
  Process: 91110 ExecStart=/opt/oracle/mgmt_agent/agent_inst/bin/agentcore start sysd (code=exited, status=0/SUCCESS)
 Main PID: 91186 (wrapper)
   CGroup: /system.slice/mgmt_agent.service
           tq91186 /opt/oracle/mgmt_agent/agent_inst/bin/./wrapper /opt/oracle/mgmt_agent/agent_inst/bin/../config/wrapper.con...
           mq91202 /usr/java/jre1.8.0_281-amd64/bin/java -Dorg.tanukisoftware.wrapper.WrapperSimpleApp.maxStartMainWait=5 -Dja...

Aug 10 04:20:49 db19cee systemd[1]: Starting mgmt_agent...
Aug 10 04:20:49 db19cee agentcore[91110]: Starting mgmt_agent...
Aug 10 04:20:57 db19cee agentcore[91110]: Waiting for mgmt_agent..........
Aug 10 04:21:02 db19cee systemd[1]: Started mgmt_agent.
[opc@db19cee ~]$
</pre>

OCIコンソールで、エージェントの状態(<font color="blue">Active</font>)を確認します。
エージェント起動後、すぐOCIコンソールに反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fcbb5c3d-f7d5-dcd7-0989-8ca6617ae9b9.png)
※管理エージェント用のポリシーは、未設定か設定不正の場合、エージェントをインストールした後、"Not Available"(使用不可)の状態になりますので、ご注意ください。
# 外部データベース接続

この例は、CDBに接続します。
MENU -> Oracle Database -> External Databases -> Container Databases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8bb1f0f0-779f-1b3f-8db6-7c73826a6543.png)

CDBを登録します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fa9ee2d8-abb8-d2af-49ea-7b033350d785.png", width="400">

<font color="blue">"Connect to External Container Database"</font>をクリックし、接続設定画面に入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/321dcfc4-a428-8baa-2390-61edb0982814.png)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8620f62c-2f82-0668-e9aa-d444f922d106.png", width="500">
DBの接続情報を入力してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1547f3c2-b414-e943-b163-9d9b39787fe2.png", width="500">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b48cf423-f0b2-089c-7cc8-75c40c0f6332.png", width="500">
<font color="blue">※TIPS</font>
接続文字列をチェックするため、事前にSQL Plusコマンドでを確認したほうがよいです。
<strong>コマンド例</strong>：
sqlplus system/パスワード@ホスト名:ポート/サービス名
ログイン後、<font color="blue">"show con_name"</font>で接続先のコンテナ名を確認します。

<pre>
[oracle@db19cee ~]$ sqlplus system/XXXXXXX@db19cee.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_nrt1v3.publicsubnet1.vcn1.oraclevcn.com
...省略...
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL>
</pre>

接続開始後、"Work Request"で進捗状況を確認します。（完了まで、数分間がかかります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ee454d92-94f2-c913-7953-bc7ec8f6c25e.png)
接続成功後：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ae147221-2ec9-7af7-4c01-7ff00540ca72.png)

<strong>DB管理を有効にする</strong>
接続の詳細画面に、"<font color="blue">Enable"</font>をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7e683689-7e33-d8ae-0f1a-0d28313b8c02.png)

ライセンスタイプを指定し、有効化をします。（数分間がかかります。）
有効化にしたら、追加使用料が発生します。料金の詳細は、[ここ](https://www.oracle.com/jp/cloud/price-list.html?Observability%20and%20Management%20Platform%20-%20Database%20Management#observability)をご参照ください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fb75560f-410b-b1a2-4ee2-c35b6db280be.png",width="400">
有効化実施後：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/72f9e621-b74c-c889-441e-54c254ffe03e.png)

# Performance Hub
"Performance Hub"は、以下の２つ条件を満たす場合、利用可能です。
1. DB管理サービスを<font color="blue">有効</font>にする必要があります。
2. <font color="blue">"Enterprise Edition"</font>バージョン、12.1.0.0.0以上です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8566a58e-bf19-5852-f74e-6af91eeb0846.png)
"Performance Hub"画面に入ったら、以下の権限付与のコマンドが表示されます。
そのコマンドをコピーし、DB管理者でSQL Plusのコマンド実行します。（ユーザ名を置き換えます。）
※このユーザは、DBの接続情報を入力した時、指定したユーザです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/83f2f035-1f75-3999-226d-b19ac9346b68.png)

<pre>
GRANT CREATE PROCEDURE to "db_monitoring_user";
GRANT SELECT ANY DICTIONARY, SELECT_CATALOG_ROLE to "db_monitoring_user";
GRANT ALTER SYSTEM to "db_monitoring_user";
GRANT ADVISOR to "db_monitoring_user";
GRANT EXECUTE ON DBMS_WORKLOAD_REPOSITORY to "db_monitoring_user";
</pre>

もう一回"Performance Hub"を開くと、正常に表示されます。この画面で、下記の各種レポートが出力できます。
AWR - Automatic Workload Repository
ASH - Active Session History
Performance Hub
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c6a2d132-24ab-0069-1591-32532f1e8a11.png)


# DBの監視と管理

DBグループとフリート管理を利用し、OCI上と外部の各DBの一元管理ができます。

__DBグループの作成__
MENU -> Observability & Management -> Database Management -> Database Groups
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d8beeb89-ebd5-2d6f-2b5d-38aea45f22d4.png)

DBグループ名を指定し、作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/be6f385f-a052-d9e2-1cf4-66ac869cd862.png", width="400">

__管理DBの追加__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/42b0c4f1-ce18-879f-f397-f9708d9edca9.png)
対象DBを追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/762aad42-b8fe-1a99-dbdd-ddecc5ba0091.png", width="500">
追加後：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5221dd0a-8abc-0eba-936f-6fcf7c4e44c1.png)
DB詳細画面に入りますと、各種情報(サマリー、表領域、パラメータなど)が見られます。
SQLジョブの実施もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/33468907-902f-86cd-d9bc-fde6f4148f8f.png)

__管理対象のDBの状態は、"不明"(UNKNOWN)になった場合__

以下のような画面があった時、管理エージェントが動作されていないと思われます。
管理エージェントの状態は、動作中であるのかをチェックしてください。
参考ドキュメント：
OCI : All The Managed Databases Started Reporting UNKNOWN In Console ([Doc ID 2765784.1](https://support.oracle.com/knowledge/Oracle%20Cloud/2765784_1.html))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/46605295-5e3d-4715-e7e3-2f1640442e16.png)


以上

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)

__公式ドキュメント__
[管理エージェント](https://docs.oracle.com/ja-jp/iaas/management-agents/index.html)
[外部データベース接続の作成および管理](https://docs.oracle.com/ja-jp/iaas/Content/Database/Tasks/externalconnection.htm)