OCIのBaseDBをGoogle CloudのEM Expressからクロスクラウド経由で管理する

# はじめに

Google CloudとOCIを接続し、OCIのデータベース(BaseDB)へアクセスを行うことが可能です。

- [Google Cloud から クロスクラウド接続で OCI のデータベースに接続してみた](https://qiita.com/asahide/items/fe0b33928b676dc1a760)

クロスクラウド接続の場合には基本的にインスタンスなどは各クラウドで管理する必要があります。
OCI上のBaseDBだけ利用したい、という場合にわざわざ両方のコンソールで管理したりするのは大変だな、という事で、Oracle DatabaseのWebベースの管理ツール、Enterprise Manager Express(以下、EM Express)を利用してGoogle Cloudから管理すると良いのではないか、という事でやってみました。

# EM Expressの準備

OCI上のBaseDBでEM Expressを利用できるように準備する必要があります。
基本的には流れは次のリンクのとおりです。

- [Enterprise Manager Expressを使用したデータベースのモニター](https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/dbcs/doc/monitor-database-enterprise-manager-express.html)

#### 1．EM Expressのコンソールを有効化

BaseDBのCDBに接続し、次のコマンドを実行してポートの設定を行います。
5500番ポートを指定しています。

```SQL
$ sqlplus '/as sysdba'

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Sep 21 16:27:46 2024
Version 19.24.0.0.0

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

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.24.0.0.0

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> exec DBMS_XDB_CONFIG.SETHTTPSPORT(5500);
PL/SQL procedure successfully completed. 

SQL> select dbms_xdb_config.getHttpsPort() from dual; 
DBMS_XDB_CONFIG.GETHTTPSPORT() 
------------------------------ 
                          5500
                          
SQL> !lsnrctl status | grep HTTP
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=emtest.xxxxxxxx.xxxxxxxxx.oraclevcn.com)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/product/19.0.0/dbhome_1/admin/EMTEST_xxx_xxx/xdb_wallet))(Presentation=HTTP)(Session=RAW))

```

#### 2．BaseDBのiptablesの設定

BaseDBのOSのポートもOpenしてあげる必要があります。
- [Open Ports on the DB System](https://docs.oracle.com/en/cloud/paas/base-database/open-ports-dbs/index.html)

```Shell
# iptables-save > /tmp/iptables.orig
# iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 5500 -j ACCEPT -m comment --comment "Required for EM Express."
# service iptables status
Redirecting to /bin/systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sat 2024-09-21 12:08:41 JST; 2h 34min ago
  Process: 1558 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 1558 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 99933)
   Memory: 0B
   CGroup: /system.slice/iptables.service

Sep 21 12:08:41 emtest systemd[1]: Starting IPv4 firewall with iptables...
Sep 21 12:08:41 emtest iptables.init[1558]: iptables: Applying firewall rules: [  OK  ]
Sep 21 12:08:41 emtest systemd[1]: Started IPv4 firewall with iptables.
# 
# cat /etc/sysconfig/iptables | grep 5500
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5500 -m comment --comment "Required for EM Express." -j ACCEPT
# 
# /sbin/service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
```

#### 3．PDB用のポート設定

CDB/PDB構成となるため、PDBでも同一のポートで管理できるように設定します。

- [PDB用EM Expressの起動](https://docs.oracle.com/cd/F19136_01/admqs/getting-started-with-database-administration.html#GUID-06C767B0-B435-4C6B-9123-C39C030DF457)

```SQL
SQL> exec dbms_xdb_config.setglobalportenabled(TRUE);
PL/SQL procedure successfully completed.
```

#### 4. ネットワーク接続の設定

Google Cloud側からBaseDBの 5500 ポートへのアクセスを許可するようセキュリティリストもしくはネットワークセキュリティグループ(以下、NSG)を設定します。
今回はNSGでGoogle Cloud側のセグメントをそのまま許可します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/e37eedf6-429a-a255-5277-f1246e6b84e0.png)

接続元のGoogle Cloud側のインスタンスは次になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/292910b9-c069-c8db-3ff2-49c923e178fd.png)


# EM Express からの接続

Google Cloud側のインスタンスからブラウザを起動し、「BaseDBのIPアドレス：5500」にアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/c54c5f15-761a-5f1e-28eb-3e44c426a578.png)

sysユーザでCDB$ROOTにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/3bf3fe81-b104-f5a0-6667-043ca53b933c.png)

ログインするとリソースやストレージの管理ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/2f26e014-9333-8445-4546-1fead887e8bc.png)



# まとめ

無事Google Cloud側からOCI BaseDBのEM Expressに接続して管理を行うことができました！
これでOCI側のコンソールに入らなくてもデータベースの管理ができますね、めでたしめでたし・・・といきたいところでしたが、実はEM Expressは19c（正確には21c）でサポート終了しており、23aiでは利用できません。。
また、EM Express自体の機能も色々と経緯があり機能縮小されているのでこれで管理、というのはちょっと難しそうです。

Enterprise Managerには有償のCloud Controlもあり、そちらなら高度な管理ができそうなので、次回試してみます。。
- [Enterprise Manager Cloud Control 13cについて](https://docs.oracle.com/cd/F45244_01/emcon/enterprise-manager-cloud-control-13c.html#GUID-0FF70AF9-B939-4874-819C-E095852BAB9E)