Docker Desktop for WindowsでOracle Enterprise Manager Cloud Controlを試す

# テスト環境
・Windows 10 Pro 20H2 19042.685
・Docker Desktop Community 2.3.0.4（Use the WSL 2 based engineを有効）
・Oracle Enterprise Manager Cloud Control 13c Release 4（13.4.0.0.0）

# インストール要件
・ディスク空き容量：約70GB
・Oracleアカウント

# 手順
## Oracle Enterprise Manager Cloud Control 13cのダウンロード
https://www.oracle.com/jp/enterprise-manager/downloads/cloud-control-downloads.html からLinux x86-64（64ビット）用の以下のファイルをダウンロードします。
em13400_linux64.bin
em13400_linux64-2.zip
em13400_linux64-3.zip
em13400_linux64-4.zip
em13400_linux64-5.zip
em13400_linux64-6.zip
em13400_linux64-7.zip
ダウンロードにはOracleアカウントが必要です。zipファイルの解凍はしないでください。

## 永続化のためのVolume作成
```powershell
docker volume create oracle-emcc
```

## dockerコンテナ起動
Oracle Databaseがすぐ使えるdockerイメージとしてabsolutapps/oracle-12c-eeを使わせていただきます。

```powershell
docker run -d --name oracle-emcc --privileged --mount source=oracle-emcc,destination=/u01/app/oracle -v /e/docker/oracle:/eminstall --hostname oracle-db -e TZ=Asia/Tokyo -e ORACLE_CHARACTERSET=AL32UTF8 -e NLS_LANG=Japanese_Japan.AL32UTF8 -p 8080:8080 -p 1521:1521 -p 7803:7803 -p 443:443 absolutapps/oracle-12c-ee
```
「-v /e/docker/oracle:/eminstall」の部分は各自のダウンロードしたファイルが格納されているフォルダのパスを指定してください。「eminstall」は任意の名前です。以降ではeminstallで説明します。
DBが使えるようになるまでしばらく時間がかかります。以下でログを表示し「Done with scripts we are ready to go」が表示されるのを確認するか、ブラウザでhttp://localhost:8080/em/login にアクセスしてEM ExpressにアクセスできればOKです。

```powershell
docker logs -f oracle-emcc
```

## インストール前準備
上記のままではsqlplusで接続したときに「ORA-12547: TNS: 接続を失いました。」が発生するので以下を実行します。

```
docker exec -it oracle-emcc bash
[root@oracle-db /]# gosu oracle relink all
```
続いてOracleのパラメータ設定を行います。

```
[root@oracle-db /]# sqlplus /nolog
SQL> conn sys/oracle as sysdba
SQL> alter system set "optimizer_adaptive_features"=false scope=both;

SQL> System altered.

SQL> show parameter optimizer_adaptive_features

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_adaptive_features          boolean     FALSE
SQL> exit 
```

## レスポンス・ファイル生成
サイレント・インストールを実行するためにレスポンス・ファイルを生成します。

```
[root@oracle-db /]# /eminstall/em13400_linux64.bin -getResponseFileTemplates -outputLoc /u01/app/oracle
```
/u01/app/oracleにnew_install.rspが作成されるので以下を参考に編集します。
※変更行のみ抜粋
※PROXYの設定は各自の環境に合わせてください。

```new_install.rsp
#UNIX_GROUP_NAME=<string>
#INVENTORY_LOCATION=<string>
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=false
MYORACLESUPPORT_USERNAME=test@example.co.jp
#MYORACLESUPPORT_PASSWORD=<string>
INSTALL_UPDATES_SELECTION="skip"
#STAGE_LOCATION=<string>
MYORACLESUPPORT_USERNAME_FOR_SOFTWAREUPDATES=test@example.co.jp
MYORACLESUPPORT_PASSWORD_FOR_SOFTWAREUPDATES=password0
#PROXY_USER=<string>
#PROXY_PWD=<string>
#PROXY_HOST=<string>
#PROXY_PORT=<string>
ORACLE_MIDDLEWARE_HOME_LOCATION="/u01/app/oracle/middleware"
#ORACLE_HOSTNAME=<string>
AGENT_BASE_DIR="/u01/app/oracle/agent"
#WLS_ADMIN_SERVER_USERNAME="weblogic"
WLS_ADMIN_SERVER_PASSWORD="password0"
WLS_ADMIN_SERVER_CONFIRM_PASSWORD="password0"
NODE_MANAGER_PASSWORD="password0"
NODE_MANAGER_CONFIRM_PASSWORD="password0"
ORACLE_INSTANCE_HOME_LOCATION="/u01/app/oracle/gc_inst"
CONFIGURE_ORACLE_SOFTWARE_LIBRARY=true
SOFTWARE_LIBRARY_LOCATION="/u01/app/oracle/library"
DATABASE_HOSTNAME="oracle-db"
LISTENER_PORT=1521
SERVICENAME_OR_SID="orcl"
SYS_PASSWORD=oracle
SYSMAN_PASSWORD=password0
SYSMAN_CONFIRM_PASSWORD=password0
DEPLOYMENT_SIZE=SMALL
MANAGEMENT_TABLESPACE_LOCATION=/u01/app/oracle/oradata/orcl/mgmt.dbf
CONFIGURATION_DATA_TABLESPACE_LOCATION=/u01/app/oracle/oradata/orcl/mgmt_ecm_depot1.dbf
JVM_DIAGNOSTICS_TABLESPACE_LOCATION=/u01/app/oracle/oradata/orcl/mgmt_deepdive.dbf
AGENT_REGISTRATION_PASSWORD=password0
AGENT_REGISTRATION_CONFIRM_PASSWORD=password0
#STATIC_PORTS_FILE=<string>
PLUGIN_SELECTION={}
b_upgrade=false
EM_INSTALL_TYPE=NOSEED
CONFIGURATION_TYPE=ADVANCED
CONFIGURE_SHARED_LOCATION_BIP=false
#CONFIG_LOCATION=<string>
#CLUSTER_LOCATION=<string>
```

## インストール

```
[root@oracle-db /]# su - oracle
[oracle@oracle-db ~]$ /eminstall/em13400_linux64.bin -silent -responseFile /u01/app/oracle/new_install.rsp
```
マシンによりますがインストールには1時間以上かかります。

## 動作確認
インストールが終了したらブラウザでhttps://localhost:7803/em にアクセスするとOracle Enterprise Manager Cloud Controlのログイン画面が表示されます。ブラウザによっては安全でないといわれて最初表示できませんので、「それでも表示する」的な選択をして表示させましょう。
User Name: sysman
Password: password0
でログインしましょう！
![oracle-emcc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132879/961cfbbe-33e7-fcd1-4f9c-b49cfb5d6799.jpeg)

# 継続して使用するために
dockerコンテナを再起動した場合、再起動後に以下のことをしなければいけません。

```
[root@oracle-db /]# gosu oracle relink all
[oracle@oracle-db ~]$ cd /u01/app/oracle
[oracle@oracle-db oracle]$ ./middleware/bin/emctl start oms     
Oracle Enterprise Manager Cloud Control 13c Release 4  
Copyright (c) 1996, 2020 Oracle Corporation.  All rights reserved.
Starting Oracle Management Server...

WebTier Successfully Started
Oracle Management Server Successfully Started
Oracle Management Server is Up
JVMD Engine is Up
Starting BI Publisher Server ...
BI Publisher Server Successfully Started
BI Publisher Server is Up
[oracle@oracle-db oracle]$ ./agent/agent_13.4.0.0.0/bin/emctl start agent 
Oracle Enterprise Manager Cloud Control 13c Release 4  
Copyright (c) 1996, 2020 Oracle Corporation.  All rights reserved.
Starting agent .............................................................. started.
[oracle@oracle-db oracle]$ 
```