概要
EMCC には RESTAPI が用意されており、登録されている target db に対して SQL を実行することが可能です。
本記事では最低限の設定と実行サンプルを説明します。
環境
Oracle Enterprise Manager Cloud Control 13c Release 5
なお、前提として EM 上で DBターゲット(oracle_database、cluster_database) は登録済みとします。
設定サンプル
OMS 側の oracle.sysman.db.restfulapi.executesql.target.query.enable プロパティを enable に変更
[oracle@***]$ emctl get property -name oracle.sysman.db.restfulapi.executesql.target.query.enable
Oracle Enterprise Manager Cloud Control 13c Release 5
Copyright (c) 1996, 2021 Oracle Corporation. All rights reserved.
SYSMAN password:
Value for property oracle.sysman.db.restfulapi.executesql.target.query.enable for oms All Management Servers is null
[oracle@***]$ emctl set property -name oracle.sysman.db.restfulapi.executesql.target.query.enable -value true
Oracle Enterprise Manager Cloud Control 13c Release 5
Copyright (c) 1996, 2021 Oracle Corporation. All rights reserved.
SYSMAN password:
Property oracle.sysman.db.restfulapi.executesql.target.query.enable has been set to value true for all Management Servers
OMS restart is not required to reflect the new property value
target db への名前付き資格証明の作成と EMUSER への紐づけ
target DB ログインする名前付き資格証明を作成し、
使用する EMUSER に紐づけます(CLI でも可)
POST
OMS の HTTPS console port にリクエストできる適当なサーバで POST します。(curl で試しています)
各パラメータは以下を参照してください。
/usr/bin/curl -k \
-u <EM_USER>:<EM_USER_PASS> \
-X POST https://***:7803/em/websvcs/restful/emws/oracle.sysman.db/executesql/target/query/v1 \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{"targetName":"<TARGET_NAME>", "targetType": "<TARGET_TYPE>", "sqlStatement": "<sqlStatement>", "credential": {"DBCredsMonitoring":"<NAMED_CREDS>"}}
EOF
実行サンプル
[oracle@*** ~]$ /usr/bin/curl -k \
> -u SYSMAN:*** \
> -X POST https://***:7803/em/websvcs/restful/emws/oracle.sysman.db/executesql/target/query/v1 \
> -H "Content-Type: application/json" \
> -d @- <<'EOF'
> {"targetName":"orcl", "targetType": "rac_database", "sqlStatement": "SELECT * from v$database", "credential": {"DBCredsMonitoring":"ORCL_DBSNMP"}}
> EOF
{"Result":[{"DBID":***,"NAME":"ORCL","CREATED":1629102482000,"RESETLOGS_CHANGE#":8979227,"RESETLOGS_TIME":1631259190000,"PRIOR_RESETLOGS_CHANGE#":1,"PRIOR_RESETLOGS_TIME":1629102482000,"LOG_MODE":"ARCHIVELOG","CHECKPOINT_CHANGE#":118998869,"ARCHIVE_CHANGE#":118998855,"CONTROLFILE_TYPE":"CURRENT","CONTROLFILE_CREATED":1629102486000,"CONTROLFILE_SEQUENCE#":730912,"CONTROLFILE_CHANGE#":119001521,"CONTROLFILE_TIME":1646906901000,"OPEN_RESETLOGS":"NOT ALLOWED","VERSION_TIME":1631258284000,"OPEN_MODE":"READ WRITE","PROTECTION_MODE":"MAXIMUM PERFORMANCE","PROTECTION_LEVEL":"MAXIMUM PERFORMANCE"}]}
json 形式で返ってくるので後は parse なりして利用が可能です。
複数 DB に同時に投げたり、update や pl/sql の実行も可能です。(こちらは別プロパティを設定する必要があります)
以下のようなケースで利用価値があるのではないかと思います。
・EMCC、agent の deploy は OK
・EM 経由の target への sql 発行は可能
・client への認証情報の保存(walletなど)、remote からの sqlplus などの直接接続は NG
ドキュメント