minamin's Blog

ゆるーく好きなモノ・興味あるコトについて書きます。技術系ネタは主にOracle DatabaseやCloudまわり。

OCI ExaDB-DのOS上のDB/GIパッチを1ノードずつ適用する方法

この記事はOracle Cloud Infrastructure Advent Calendar 2023 Day21の記事として書いています。

qiita.com

Oracle Cloud Infrastructure Advent Calendar 2023 Day20 の記事は、@takuya_0301 さんの記事「OKE上に展開したLLMでRAGやってみた」でした。

はじめに

2人の産休育休で前回の記事からだいぶあいてしまい、久々の記事です。

今回は、OCI Exadata Database Service on Dedicated Infrastructure (通称 : ExaDB-D)のDB/GIのパッチ適用(更新)を1ノードずつ行う方法を試したので、メモ書きとしてまとめます。

顧客が管理するVM内のOS、Oracle Database(DB)、Oracle Grid Infrastructure(GI)などのコンポーネントのメンテナンスは、顧客のタイミングで実施が可能です。コンソールやAPIからも簡単に適用可能ですが、その場合、VMクラスタ内の全ノードにローリングで適用されます。1ノードずつ適用したい場合は、コマンドツールで実行することで対応可能です。コンソールやAPI側で定期的に状態を監視しているので、コマンドラインで実行後も、タイムラグはあるものの検知されて反映されます。

なお、今回はdbaastools バージョン : 23.4.0.0.0での結果となります。定期的にdbaascliは更新されるので、実施する際には最新マニュアルをご確認ください。

適用方法

1ノードずつ実行したい場合は、VM内にプリインストールされているCLIを利用して行います。

  • Oracle Database : dbaascli dbhome patch
  • Grid Infrastructure : dbaascli grid patch
  • OS : patchmgr

今回は、DBとGIを対象に書くので、dbaascliの内容になります。 OCIドキュメントのExaDB-Dのdbaascliの章で、DBへのパッチ適用方法GIへのパッチ適用方法がまとめられている箇所がありますが、この例は全ノードを一気に実行する例なので、今回はdbaascli コマンド・リファレンスを見てみましょう

検証情報

  • ExaDB-D X9Mインフラストラクチャ上の 2ノードのVMクラスタ
  • dbaastools バージョン : 23.4.0.0.0
  • DB/GIともに19.20.0.0.0に対する RU 19.21.0.0.0 のパッチ適用

GIパッチ適用

クラウドのツールを利用したGIのパッチ適用(更新)方法は、in-placeになります。

準備

GIへのパッチ適用については、まずはマニュアルのコンソールからの適用の内容や流れを確認することをお勧めします。

・現在のGridホームの情報を表示

# dbaascli system getGridHomes
DBAAS CLI version 23.3.2.0.0
Executing command system getGridHomes
Job id: 12b968e9-f3aa-4c40-9036-aa69ebc12edc
Session log: /var/opt/oracle/log/system/getGridHomes/dbaastools_xxx.log
{
  "OraGiHome19000" : {
    "homePath" : "/u01/app/19.0.0.0/grid",
    "homeName" : "OraGiHome19000",
    "version" : "19.20.0.0.0",
    "createTime" : 1697731875000,
    "updateTime" : 1697731875000,
    "unifiedAuditEnabled" : false,
    "ohNodeLevelDetails" : {
      "<ノード1>" : {
        "nodeName" : "<ノード1>",
        "version" : "19.20.0.0.0"
      },
      "<ノード2>" : {
        "nodeName" : "<ノード2>",
        "version" : "19.20.0.0.0"
      }
    },
    "messages" : [ ]
  }
}

マニュアル dbaascli コマンド・リファレンス dbaascli system getGridHomes

・適用可能なパッチを確認

# dbaascli cswlib showImages --product grid
DBAAS CLI version 23.3.2.0.0
Executing command cswlib showImages --product grid
Job id: b7f5132b-d2c1-4354-b895-25422e22173e
Session log: /var/opt/oracle/log/cswLib/showImages/dbaastools_xxx.log
Log file location: /var/opt/oracle/log/cswLib/showImages/dbaastools_xxx.log

############ List of Available grid Artifacts  #############

1.IMAGE_TAG=grid_19.20.0.0.0
  VERSION=19.20.0.0.0
  DESCRIPTION=19c JUL 2023 GI Image
2.IMAGE_TAG=grid_19.18.0.0.0
  VERSION=19.18.0.0.0
  DESCRIPTION=19c JAN 2023 GI Image
3.IMAGE_TAG=grid_19.19.0.0.0
  VERSION=19.19.0.0.0
  DESCRIPTION=19c APR 2023 GI Image
4.IMAGE_TAG=grid_19.21.0.0.0
  VERSION=19.21.0.0.0
  DESCRIPTION=19c OCT 2023 GI Image
Images can be downloaded using their image tags. For details, see help using 'dbaascli cswlib download --help'.
dbaascli execution completed

マニュアル データベースおよびグリッド・インフラストラクチャで使用可能なソフトウェア・イメージおよびバージョンのリスト

プリチェック

・19.21.0.0.0を適用できる状態かをチェック

# dbaascli grid patch --targetVersion 19.21.0.0.0 --executePrereqs

実行ログ

# dbaascli grid patch --targetVersion 19.21.0.0.0 --executePrereqs
DBAAS CLI version 23.3.2.0.0
Executing command grid patch --targetVersion 19.21.0.0.0 --executePrereqs
Job id: 61416363-e8fb-4994-9126-894473b7bea2
Session log: /var/opt/oracle/log/grid/patch/dbaastools_2023-10-31_02-51-05-PM_1403.log
Loading PILOT...
Session ID of the current execution is: 68
Log file location: /var/opt/oracle/log/grid/patch/pilot_2023-10-31_02-51-08-PM_1891
-----------------
Running initialization job
Completed initialization job
-----------------
Running validate_nodes job
Completed validate_nodes job
-----------------
Running validate_target_version job
Completed validate_target_version job
-----------------
Running validate_backup_locations job
Completed validate_backup_locations job
-----------------
Running validate_source_home job
Completed validate_source_home job
-----------------
Running validate_creg_file_existence job
Completed validate_creg_file_existence job
-----------------
Running validate_crs_stack_state job
Completed validate_crs_stack_state job
-----------------
Running validate_databases job
Completed validate_databases job
-----------------
Running validate_disk_space job
Completed validate_disk_space job
-----------------
Running validate_perm_on_dir job
Completed validate_perm_on_dir job
-----------------
Running validate_users_umask job
Completed validate_users_umask job
-----------------
Running unpackage_patches job
Completed unpackage_patches job
-----------------
Running remove_zipped_patches job
Completed remove_zipped_patches job
-----------------
Running replace_opatch job
Completed replace_opatch job
-----------------
Running check_patch_conflicts job
Completed check_patch_conflicts job
-----------------
Running restore_opatch_prereqs_only job
Completed restore_opatch_prereqs_only job
-----------------
Running cleanup_prereqs_only job
Completed cleanup_prereqs_only job
dbaascli execution completed

マニュアル Oracle Grid Infrastructureパッチ適用の事前チェック

ノード指定でのパッチ適用

--targetVersion で適用するバージョン、--nodeList で適用するノードのホスト名を指定します。 --nodesで指定するノードに含まれるノードから実行してください。 例)ノード1に対しての実行はノード1上から、ノード2・3に対しての実行はノード2・3いずれかから

# dbaascli grid patch --targetVersion 19.21.0.0.0 --nodeList <適用するノードのホスト名>

実行ログ

# dbaascli grid patch --targetVersion 19.21.0.0.0 --nodeList <ノード1>
DBAAS CLI version 23.3.2.0.0
Executing command grid patch --targetVersion 19.21.0.0.0 --nodeList <ノード1>
Job id: 4c79c36e-c8e8-4f06-b0c7-1e96fe3aab7a
Session log: /var/opt/oracle/log/grid/patch/dbaastools_2023-10-31_04-13-34-PM_22831.log
Loading PILOT...
Session ID of the current execution is: 75
Log file location: /var/opt/oracle/log/grid/patch/pilot_2023-10-31_04-13-37-PM_23308
-----------------
Running initialization job
Completed initialization job
-----------------
Running validate_nodes job
Completed validate_nodes job
-----------------
Running validate_target_version job
Completed validate_target_version job
-----------------
Running validate_backup_locations job
Completed validate_backup_locations job
-----------------
Running validate_source_home job
Completed validate_source_home job
-----------------
Running validate_creg_file_existence job
Completed validate_creg_file_existence job
-----------------
Running validate_crs_stack_state job
Completed validate_crs_stack_state job
-----------------
Running validate_databases job
Completed validate_databases job
-----------------
Running validate_disk_space job
Completed validate_disk_space job
-----------------
Running validate_perm_on_dir job
Completed validate_perm_on_dir job
-----------------
Running validate_users_umask job
Completed validate_users_umask job
-----------------
Running unpackage_patches job
Completed unpackage_patches job
-----------------
Running remove_zipped_patches job
Completed remove_zipped_patches job
-----------------
Running replace_opatch job
Completed replace_opatch job
-----------------
Running check_patch_conflicts job
Completed check_patch_conflicts job
Acquiring write lock: _u01_app_19.0.0.0_grid
Acquiring write lock: provisioning
-----------------
Running pre_patch_lock_manager job
Completed pre_patch_lock_manager job
-----------------
Running create_global_backup_loc job
Completed create_global_backup_loc job
-----------------
Running rotate_image_backup job
Completed rotate_image_backup job
-----------------
Running backup_image job
Completed backup_image job
-----------------
Running rotate_config_backup job
Completed rotate_config_backup job
-----------------
Running backup_config-<ノード1> job
Completed backup_config-<ノード1> job
-----------------
Running save_local_backup-<ノード1> job
Completed save_local_backup-<ノード1> job
-----------------
Running stop_db_instances-<ノード1> job
Completed stop_db_instances-<ノード1> job
-----------------
Running run_rootcrs_prepatch-<ノード1> job
Completed run_rootcrs_prepatch-<ノード1> job
-----------------
Running stop_tfa-<ノード1> job
Completed stop_tfa-<ノード1> job
-----------------
Running check_processes-<ノード1> job
Completed check_processes-<ノード1> job
-----------------
Running rollback_conflicting_patches-<ノード1> job
Completed rollback_conflicting_patches-<ノード1> job
-----------------
Running apply_gi_oneoffs_prepatch-<ノード1> job
Completed apply_gi_oneoffs_prepatch-<ノード1> job
-----------------
Running apply_ru-<ノード1> job
Completed apply_ru-<ノード1> job
-----------------
Running stop_processes-<ノード1> job
Completed stop_processes-<ノード1> job
-----------------
Running apply_gi_oneoffs_postpatch-<ノード1> job
Completed apply_gi_oneoffs_postpatch-<ノード1> job
-----------------
Running rootadd_rdbms_script-<ノード1> job
Completed rootadd_rdbms_script-<ノード1> job
-----------------
Running run_rootcrs_postpatch-<ノード1> job
Completed run_rootcrs_postpatch-<ノード1> job
-----------------
Running start_db_instances-<ノード1> job
Completed start_db_instances-<ノード1> job
-----------------
Running update_opatch_log_ownership-<ノード1> job
Completed update_opatch_log_ownership-<ノード1> job
-----------------
Running disable_diagsnap-<ノード1> job
Completed disable_diagsnap-<ノード1> job
-----------------
Running restore_tfa_status-<ノード1> job
Completed restore_tfa_status-<ノード1> job
-----------------
Running remove_local_backup-<ノード1> job
Completed remove_local_backup-<ノード1> job
-----------------
Running cleanup-<ノード1> job
Completed cleanup-<ノード1> job
-----------------
Running cleanup_patched_home_backup job
Completed cleanup_patched_home_backup job
-----------------
Running post_patch_validation job
Completed post_patch_validation job
-----------------
Running update_creg job
Completed update_creg job
-----------------
Running post_patch_lock_manager job
Completed post_patch_lock_manager job
Releasing lock: _u01_app_19.0.0.0_grid
Releasing lock: provisioning
-----------------
Running generate_system_details job
Acquiring native write lock: global_dbsystem_details_generation
Releasing native lock: global_dbsystem_details_generation
Completed generate_system_details job
dbaascli execution completed

参考: ノード2に対して、ノード1から適用しようとした時のエラー

-----------------
Running validate_nodes job
Execution of validate_nodes failed
[FATAL] [DBAAS-70064] Specified cluster nodes '[<ノード2>]' does not include local node name '[<ノード1>]'.
   ACTION: Local node needs to be part of cluster nodes to perform the operation.
*** Executing jobs which need to be run always... ***

マニュアル dbaascli コマンド・リファレンス dbaascli grid patch

適用後の情報

$ opatch lspatches

35762404;OCW Interim patch for 35762404
35763448;ENFORCE V2 CHECKS ONLY FOR CLIENT CLOUD MNEMONIC QUERIES
34697081;NOT SHIPPING LIBAUTH_SDK_IAM.SO IN 23 SHIPHOME INSTALL
35638318;JDK BUNDLE PATCH 19.0.0.0.231017
35652062;ACFS RELEASE UPDATE 19.21.0.0.0 (35652062)
35643107;Database Release Update : 19.21.0.0.231017 (35643107)
35553096;TOMCAT RELEASE UPDATE 19.0.0.0.0 (35553096)
35099674;DSTV41 UPDATE - TZDATA2022G - NEED OJVM FIX
35050341;OJVM RELEASE UPDATE: 19.19.0.0.230418 (35050341)
33575402;DBWLM RELEASE UPDATE 19.0.0.0.0 (33575402)

OPatch succeeded.

・一部のノードでしか適用していない状態で、GIの情報を確認

[root@vmem-6gl0h1 opc]# dbaascli system getGridHomes
DBAAS CLI version 23.3.2.0.0
Executing command system getGridHomes
Job id: 9124f1cd-9130-4ed4-9466-42e2199b23ba
Session log: /var/opt/oracle/log/system/getGridHomes/dbaastools_2023-10-31_05-01-56-PM_175719.log
{
  "OraGiHome19000" : {
    "homePath" : "/u01/app/19.0.0.0/grid",
    "homeName" : "OraGiHome19000",
    "version" : "19.0.0.0.0",
    "createTime" : 1698737961000,
    "updateTime" : 1698737961000,
    "unifiedAuditEnabled" : false,
    "ohNodeLevelDetails" : {
      "<ノード1>" : {
        "nodeName" : "<ノード1>",
        "version" : "19.21.0.0.0"
      },
      "<ノード2>" : {
        "nodeName" : "<ノード2>",
        "version" : "19.20.0.0.0"
      }
    },
    "messages" : [ ]
  }
}
dbaascli execution completed

・全ノードで適用した状態で、GIの情報を確認

# dbaascli system getGridHomes
DBAAS CLI version 23.3.2.0.0
Executing command system getGridHomes
Job id: e941a44b-28b2-4da7-8495-6df39a08e01a
Session log: /var/opt/oracle/log/system/getGridHomes/dbaastools_2023-10-31_06-51-03-PM_295053.log
{
  "OraGiHome19000" : {
    "homePath" : "/u01/app/19.0.0.0/grid",
    "homeName" : "OraGiHome19000",
    "version" : "19.21.0.0.0",
    "createTime" : 1698737961000,
    "updateTime" : 1698737961000,
    "unifiedAuditEnabled" : false,
    "ohNodeLevelDetails" : {
      "v<ノード1>" : {
        "nodeName" : "<ノード1>,
        "version" : "19.21.0.0.0"
      },
      "<ノード2>" : {
        "nodeName" : "<ノード2>",
        "version" : "19.21.0.0.0"
      }
    },
    "messages" : [ ]
  }
}
dbaascli execution completed

マニュアル dbaascli コマンド・リファレンス dbaascli system getGridHomes

無事コンソール上でも、適用後のバージョンに情報が反映されていました

DBパッチ適用

まず、DBのパッチ適用(更新)方法としては、in-placeのOracleホーム(DBホーム)へのパッチ適用と、out-of-placeのDBの移動がありますが、1ノードずつ実行したい場合はin-placeのOracleホームへのパッチ適用になります

マニュアル: dbaascli dbHome patch

準備

Oracleホームの情報を確認 パッチ適用のコマンド dbaascli dbHome patch --oracleHome で指定するOracleホームのパスを確認します。

マニュアルには、dbaascli dbHome patchでターゲットのOracleホームを --oracleHome か --oracleHomeName パラメータで指定するように書かれているのですが、コンソールから確認できるのは、--oracleHome = Oracleホームのパスの情報なので、今回は簡単に確認できる--oracleHome を使用します。

ちなみに、--oracleHomeName は、--oracleHome の名前がわかっている上でdbaascli dbHome getDetailsを実行すると確認できる "homeName"です。

# dbaascli dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5
DBAAS CLI version 23.4.1.0.0
Executing command dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5
Job id: 8ada5970-9a63-4b74-b1cc-1511df61864e
Session log: /var/opt/oracle/log/dbHome/getDetails/dbaastools_2023-11-17_02-19-27-PM_121372.log
{
  "homePath" : "/u02/app/oracle/product/19.0.0.0/dbhome_5",
  "homeName" : "OraHome6",
  "version" : "19.20.0.0.0",
  "createTime" : 1700188575000,
  "updateTime" : 1700188575000,
  "unifiedAuditEnabled" : false,
  "ohNodeLevelDetails" : {
    "<ノード1>" : {
      "nodeName" : "<ノード1>",
      "version" : "19.20.0.0.0"
    },
    "<ノード1>" : {
      "nodeName" : "<ノード2>",
      "version" : "19.20.0.0.0"
    }
  },
  "messages" : [ ]
}
dbaascli execution completed

マニュアル dbaascli コマンド・リファレンス dbaascli dbHome getDetails

プリチェック

・19.21.0.0.0を適用できる状態かをチェック

# dbaascli dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --executePrereqs

実行ログ

# dbaascli dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --executePrereqs
DBAAS CLI version 23.4.1.0.0
Executing command dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --executePrereqs
Job id: b3acc326-c719-4353-b2f9-5279124cd4c3
Session log: /var/opt/oracle/log/dbHome/patch/dbaastools_2023-11-17_02-27-05-PM_162325.log
Loading PILOT...
Session ID of the current execution is: 951
Log file location: /var/opt/oracle/log/dbHome/patch/pilot_2023-11-17_02-27-08-PM_163064
-----------------
Running initialization job
Completed initialization job
-----------------
Running validate_user_input job
Completed validate_user_input job
-----------------
Running validate_nodes job
Completed validate_nodes job
-----------------
Running validate_oracle_home job
Completed validate_oracle_home job
-----------------
Running validate_source_version job
Completed validate_source_version job
-----------------
Running validate_target_version job
Completed validate_target_version job
-----------------
Running validate_creg_file_existence job
Completed validate_creg_file_existence job
-----------------
Running validate_diag_perm job
Completed validate_diag_perm job
-----------------
Running validate_backup_loc job
Completed validate_backup_loc job
-----------------
Running validate_patch_across_nodes job
Completed validate_patch_across_nodes job
-----------------
Running validate_users_umask job
Completed validate_users_umask job
-----------------
Running validate_gold_image_url job
Completed validate_gold_image_url job
-----------------
Running validate_disk_space job
Completed validate_disk_space job
-----------------
Running validate_audit_files_in_source_home job
Completed validate_audit_files_in_source_home job
-----------------
Running download_gold_image job
Completed download_gold_image job
-----------------
Running validate_gold_image job
Completed validate_gold_image job
-----------------
Running run_installer_prereqs job
Completed run_installer_prereqs job
-----------------
Running check_patch_conflict job
Completed check_patch_conflict job
-----------------
Running remove_unzip_loc job
Completed remove_unzip_loc job
dbaascli execution completed

マニュアル dbaascli コマンド・リファレンス dbaascli dbHome patch

ノード指定でのパッチ適用

--targetVersionで適用するバージョン、--nodesで適用対象のノードのホスト名を指定します。 コマンドは、--nodesで指定するノードに含まれるノードから実行してください。 例)ノード1に対しての実行はノード1上から、ノード2・3に対しての実行はノード2・3いずれかから

# dbaascli dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --nodes <ノード名>

実行ログ

# date;dbaascli dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --nodes <ノード1>
DBAAS CLI version 23.4.1.0.0
Executing command dbHome patch --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5 --targetVersion 19.21.0.0.0 --nodes <ノード1>
Job id: 62702836-eee6-4b21-8fed-910e645621de
Session log: /var/opt/oracle/log/dbHome/patch/dbaastools_2023-11-17_02-34-43-PM_213714.log
Loading PILOT...
Session ID of the current execution is: 952
Log file location: /var/opt/oracle/log/dbHome/patch/pilot_2023-11-17_02-34-46-PM_214321
-----------------
Running initialization job
Completed initialization job
-----------------
Running validate_user_input job
Completed validate_user_input job
-----------------
Running validate_nodes job
Completed validate_nodes job
-----------------
Running validate_oracle_home job
Completed validate_oracle_home job
-----------------
Running validate_source_version job
Completed validate_source_version job
-----------------
Running validate_target_version job
Completed validate_target_version job
-----------------
Running validate_creg_file_existence job
Completed validate_creg_file_existence job
-----------------
Running validate_diag_perm job
Completed validate_diag_perm job
-----------------
Running validate_backup_loc job
Completed validate_backup_loc job
-----------------
Running validate_patch_across_nodes job
Completed validate_patch_across_nodes job
-----------------
Running validate_users_umask job
Completed validate_users_umask job
-----------------
Running validate_gold_image_url job
Completed validate_gold_image_url job
-----------------
Running validate_disk_space job
Completed validate_disk_space job
-----------------
Running validate_audit_files_in_source_home job
Completed validate_audit_files_in_source_home job
-----------------
Running download_gold_image job
Completed download_gold_image job
-----------------
Running validate_gold_image job
Completed validate_gold_image job
-----------------
Running run_installer_prereqs job
Completed run_installer_prereqs job
-----------------
Running check_patch_conflict job
Completed check_patch_conflict job
Acquiring write lock: _u02_app_oracle_product_19.0.0.0_dbhome_5
-----------------
Running pre_patch_lock_manager job
Completed pre_patch_lock_manager job
-----------------
Running copy_image-<ノード1> job
Completed copy_image-<ノード1> job
-----------------
Running detach_home-<ノード1> job
Completed detach_home-<ノード1> job
-----------------
Running move_home-<ノード1> job
Completed move_home-<ノード1> job
-----------------
Running move_image_to_home_loc-<ノード1> job
Completed move_image_to_home_loc-<ノード1> job
-----------------
Running setup_db_home-<ノード1> job
Completed setup_db_home-<ノード1> job
-----------------
Running update_inventory-<ノード1> job
Completed update_inventory-<ノード1> job
-----------------
Running root_script_execution-<ノード1> job
Completed root_script_execution-<ノード1> job
-----------------
Running move_config_files-<ノード1> job
Completed move_config_files-<ノード1> job
-----------------
Running backup_old_home job
Completed backup_old_home job
-----------------
Running post_patch_lock_manager job
Completed post_patch_lock_manager job
Releasing lock: _u02_app_oracle_product_19.0.0.0_dbhome_5
-----------------
Running cleanup job
Completed cleanup job
-----------------
Running generate_dbsystem_details job
Acquiring native write lock: global_dbsystem_details_generation
Releasing native lock: global_dbsystem_details_generation
Completed generate_dbsystem_details job
dbaascli execution completed

マニュアル dbaascli コマンド・リファレンス dbaascli dbHome patch

適用後の情報

・一部のノードでしか適用していない状態で、Oracleホームの情報を確認

# dbaascli dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5

DBAAS CLI version 23.4.1.0.0
Executing command dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5
Job id: 82f27e9e-5cd7-4958-a8bf-c7b974fece66
Session log: /var/opt/oracle/log/dbHome/getDetails/dbaastools_2023-11-17_02-55-56-PM_312093.log
{
  "homePath" : "/u02/app/oracle/product/19.0.0.0/dbhome_5",
  "homeName" : "OraHome6",
  "version" : "19.0.0.0.0",
  "createTime" : 1700188575000,
  "updateTime" : 1700199519000,
  "unifiedAuditEnabled" : false,
  "ohNodeLevelDetails" : {
    "<ノード1>" : {
      "nodeName" : "<ノード1>",
      "version" : "19.21.0.0.0"
    },
    "<ノード2>" : {
      "nodeName" : "<ノード2>",
      "version" : "19.20.0.0.0"
    }
  },
  "messages" : [ ]
}
dbaascli execution completed

一部のノードだけだと、コンソール上には反映されず

・全ノードで適用した状態で、Oracleホームの情報を確認

[root@exaem-i704n2 opc]# dbaascli dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5
DBAAS CLI version 23.4.1.0.0
Executing command dbHome getDetails --oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_5
Job id: 9136e244-cc24-4124-a53b-06fac39db7c7
Session log: /var/opt/oracle/log/dbHome/getDetails/dbaastools_2023-11-17_03-09-16-PM_31151.log
{
  "homePath" : "/u02/app/oracle/product/19.0.0.0/dbhome_5",
  "homeName" : "OraHome6",
  "version" : "19.21.0.0.0",
  "createTime" : 1700188575000,
  "updateTime" : 1700200875000,
  "unifiedAuditEnabled" : false,
  "ohNodeLevelDetails" : {
    "<ノード1>" : {
      "nodeName" : "<ノード1>",
      "version" : "19.21.0.0.0"
    },
    "<ノード2>" : {
      "nodeName" : "<ノード2>",
      "version" : "19.21.0.0.0"
    }
  },
  "messages" : [ ]
}
dbaascli execution completed

マニュアル dbaascli コマンド・リファレンス dbaascli dbHome getDetails

無事コンソール上でも、適用後のバージョンに情報が反映されていました

さいごに

dbaascliを利用すると、コンソール/APIで実施するよりも細かい指定が可能です。 注意点としては、コンソール/APIから実施する場合には、実行ができないまたは影響がでる可能性がある処理を行おうとすると、画面での選択がグレーアウト or 実行時に別の処理が実行中というエラーで、別の処理との同時実行によるトラブルを防止する仕組み(ロック)になっていますが、dbaascliで更新作業中はコンソール/APIにはそのロックがかからないので、同時実行してしまうとどちらかの処理が失敗もしくは影響を及ぼする可能性があります。そのため、コマンドツールでの実行時は、別の作業者が作業しないように調整していただいた方が良いかと思います。

Oracle Cloud InfrastructureのDatabase ManagementにExaCSを登録してみる

この記事はOracle Cloud Infrastructure Advent Calendar 2021 Day23の記事として書いています。

qiita.com

今年もAdvent Calendarの季節がやってきました。 年末だからと余裕をこいているとなぜか毎年急に忙しくなり、まさに師走というように駆け回る12月を過ごしております。この記事も期日(Advent Calendarの担当日)に間に合うか、冷や汗をかきながら書いています。

今回は、Oracle Cloud InfrastructureのOracle Cloud Observability and Management Platformで利用可能なデータベース管理機能のDatabase Management=データベース管理に、Exadata Cloud Service(ExaCS)のデータベースを登録してみたいと思います。

目次

Oracle Cloud Observability and Management Platformの概要

Database Managementの概要はSlide 28からです。

Exadata Cloud Service上のOracle Databaseを管理対象にしてみる

事前準備

事前準備の内容は、下記のドキュメントの"一般的な前提条件タスク"と"Oracle Cloudデータベース関連の前提条件タスク"を参考に。 docs.oracle.com やったことをざっとまとめると、

  1. [OCIコンソール作業] 管理対象のデータベースの用意
  2. [DB作業] 管理対象のデータベースのサービス名確認してメモ
  3. [DB作業] データベース管理に必要な権限をデータベース・ユーザーに付与(今回はDBSNMPユーザーを使用)
  4. [OCIコンソール作業] ユーザー・グループに権限を割り当てるポリシーの作成
  5. [OCIコンソール作業] Oracle Cloud Infrastrucutre ボールトサービスでボールトを作成
  6. [OCIコンソール作業] 作成したボールトのシークレットに、3で設定したデータベース・ユーザー・パスワードを保存
  7. [OCIコンソール作業] データベース管理のプライベート・エンドポイントを作成
  8. [OCIコンソール作業] データベース管理とデータベース間の通信の有効化

Exadata Cloud Service上のデータベースを登録

データベースをデータベース管理に登録する画面にいく方法としては、 1. データベース管理の画面から、管理対象データベースを登録 2. 管理対象のデータベースの詳細ページから、データベース管理機能を有効化 のいずれかで可能です。

1. データベース管理の画面から、管理対象データベースを登録する方法

f:id:minamin96:20211223235441p:plain
データーベース管理の画面でデータベースを登録
データベース管理のページに行き、左側のメニューから「管理」>「管理対象データベース」をクリックして、 「データベース管理の有効化」をクリック

2. 管理対象のデータベースの詳細ページから、データベース管理機能を有効

f:id:minamin96:20211223235536p:plain
管理対象のデータベースの詳細ページから有効化
管理対象のデータベースの詳細ページの上部の「データベース情報」>「関連付けられたサービス」>「データベース管理」の「有効化」をクリックするか、 下部の「リソース」>「メトリック」をクリックして、右側にでる「有効化」ボタンをクリック

データベース管理を有効化

f:id:minamin96:20211224000050p:plain
有効化画面1

  • データベースタイプ : 今回はExaCS上のデータベースを登録するので「ExaCS」
  • VMクラスタの場所 : 対象のデータベースが稼働するVMクラスタ
  • データベース・ホーム : 対象のデータベースが属するデータベース・ホーム
  • データベース : 対象のデータベース
  • サービス名 : 対象のデータベースに接続するためのサービス名

サービス名以外はプルダウンで選択できるのですが、サービス名だけは記述式なので、事前準備でメモしておいたものを記入します。

f:id:minamin96:20211224000108p:plain
有効化画面2

  • データベース・ユーザー名 : 事前準備で権限を付与したユーザー
  • データベース・ユーザー・パスワード・シークレットの場所 : 事前準備で作成したシークレット
  • プライベート・エンドポイントの場所 : 事前準備で作成したプライベート・エンドポイント
  • 管理オプション : 今回は完全管理を選択します。

管理オプションの「完全管理」と「基本管理」の違いは、ざっくりいうと

基本管理

  • 追加コストなし(無料)で利用可能
  • CPU使用率やストレージ利用状況など14個の基本的なメトリック
  • CDBのパフォーマンス・ハブのASH分析、SQL管理機能

完全管理

  • 有償(詳細は最初の概要資料のSlide 15あたり)
  • データベースの管理および管理
  • オプション機能に含まれる、ADDMやブロック・セッションなどもみれるパフォーマンス・ハブや、SQL監視や表領域監視など
  • データベースはどのエディションでも利用可能。Standard Editionに関してパフォーマンス・ハブは利用不可
  • Exadata管理

今回は新機能のExadata管理がみたかったので完全管理にしています。

さて、無事に有効化されました

f:id:minamin96:20211224002811p:plain

遭遇したエラー

「データベースの登録」をしようとした際に、下記エラーにて失敗しました

Operation failed because password secret is not accessible by Database Management

事前準備でポリシーに追加が必要な内容で不足があった模様。 下記の内容を追加

Allow group <group_name>  to manage secret-family in tenancy

Allow service dpd to read secret-family in tenancy 

Allow group <group_name>  to read secret-family in tenancy where target.vault.id = '{ボールトのocid}'

Database Managementの画面を確認

では、有効化されたのでデータベース管理の画面をいくつか見てみたいと思います

まずは、対象のデータベースの詳細ページでみれるメトリック。

f:id:minamin96:20211224002845p:plain
メトリック

つぎにパフォーマンス・ハブをみたいので、データベースの詳細ページ上部の「パフォーマンス・ハブ」ボタンをクリック f:id:minamin96:20211224002908p:plain

ASH分析、SQLモニタリング、ADDM、ブロックしているセッション、Exadataとタブが並びます f:id:minamin96:20211224003527p:plain

SQLモニタリングで特定のSQLをクリックすると、リアルタイムSQLモニタリングも楽々 f:id:minamin96:20211224002942p:plain

Exadata タブを見てみます f:id:minamin96:20211224002924p:plain Oracle管理レイヤーのフラッシュやディスク側も見れてますね。

今度は、データベース管理のページから。 複数データベースを管理していると便利なフリート・サマリーのページですが、時間がなくて今回は1つしかまだ登録していないので、「管理対象データベースの詳細」を。

f:id:minamin96:20211224002958p:plain

サマリー、表領域、ユーザー、データベース・パラメータ(ここから編集可能)、クラスタ・キャッシュ・ジョブ、関連付けられたデータベース・グループ、SQLチューニングアドバイザのページがあります。

最後に

今回は、Oracle Cloud のデータベース管理機能でExadata Cloud Service 上のデータベースの管理を有効化してみました。 まずは有効化をしてみる、という内容にしたので、複数データベース、複数サービス(DBCSやAutonomous Database)を一元管理した場合や、ちゃんと処理をかけた状態でのモニタリングをしてみたいとおもいます。

Oracle Cloud Infrastructure Databaseのバックアップが失敗したら通知させる方法

この記事は「Oracle Cloud Infrastructure Advent Calendar 2019 - Adventar」の12月8日の記事として書かれています。 記事の内容は執筆時(2019/12/08)のものであり、現在とは異なる可能性がありますので適宜最新状況をご確認ください。

adventar.org

Oracle Cloud 上でPaaSとしてOracle Databaseを利用できるサービス、 Oracle Cloud Infrastructure - Database (通称 OCI DBCS。VM/BM/Exadataを含みます)だと、データベースのバックアップを自動で定期取得してくれるように設定をすることが可能です。また、Autonomous Database ではデフォルトで自動取得されます。

その機能を利用するにあたり、最近よく聞かれるのが

「バックアップ取得が失敗したら通知する方法ありますか?」

たしかに定期取得されるように設定しているバックアップが何らかの原因でとれていなくて、いざ必要な時に「バックアップがとれてなかったです!もどせません!」なんてことにはなりたくないですよね。

ということで、今回は「バックアップが失敗したら通知する」ように設定してみたいと思います。

1. 前提

今回の内容が利用可能な対象サービス

  • Oracle Cloud Infrasctructure - Database (Virtual Machine / Bare Metal / Exadata)
  • Oracle Autonomous Database (Autonomous Transaction Processing / Autonomous Data Warehouse)

→ 今回は、OCI Database(OCI DBCS)のVirtual Machineを利用しました

利用する機能

  • イベント
  • 通知 (今回はメール通知を利用します)

マニュアル Oracle Cloud Infrastructure Documentation Events 英語 日本語 マニュアル Oracle Cloud Infrastructure Documentation Notifications 英語 / 日本語

やりたいこと

ある特定のイベントが発生したのを検知したら、設定したアクションを行う、ということを設定します。

具体的には、今回は下記の イベント(1)を検知したらアクション(2)を行うという定義を『イベント』機能で設定します。

  1. ある特定のイベント = 自動バックアップを取得 + そのバックアップジョブが失敗 <--『イベント』で設定
  2. 設定したアクション = メール通知 <--『通知』で設定

2. 設定方法

通知設定

あるイベントを検知したらメールが飛ぶように、まずは「通知」の設定を行います

・アプリケーション統合 > 通知

f:id:minamin96:20191208180011p:plain
OCIのコンソールのメニューの [アプリケーション統合] > [通知]

・『トピックの作成』をクリックして、今回の設定のためのトピックを作成します。今回は、「eminamin-notification」という名前にしました。 f:id:minamin96:20191208180448p:plain

f:id:minamin96:20191208180536p:plain
トピックの作成

・作成されたトピックの名前をクリック f:id:minamin96:20191208180626p:plain

・通知の方法を設定するために、『サブスクリプションの作成』をクリック

f:id:minamin96:20191208180942p:plain
トピックの詳細

・今回はメール通知にしたいので、プロトコルで『電子メール』を選択して、電子メール欄に通知する宛先のアドレスを入力し、『作成』

f:id:minamin96:20191208181042p:plain
サブスクリプションの作成

作成したサブスクリプションを有効にするまで、ステータスはPENDINGになります。 f:id:minamin96:20191208184258p:plain メールアドレスが正しいかの確認ができると有効(ACTIVE)になるので、メールを確認しましょう。 先ほど実際に入力したメールアドレスが正しければ、メールが届いていると思います。そのメールの本文に記載のあるリンクをクリックすると f:id:minamin96:20191208181417p:plain

サブスクライブできたというページが開かれます。そして、コンソールにもどるとサブスクリプションのステータスがACTIVEになっているのが確認できました。 f:id:minamin96:20191208184354p:plain これで、通知の設定は完了です。

イベントの設定

ある特定のイベントが発生したのを検知したら、設定したアクションを行う、ということを『イベント』で設定します。

前述した通り、今回対象にするイベントの条件は『自動バックアップを取得』 + 『そのバックアップジョブが失敗』の2つです。

・アプリケーション統合 > イベント・サービス

f:id:minamin96:20191208181557p:plain
OCIのコンソールのメニューの[アプリケーション統合]>[イベント・サービス]

・イベントの『ルールの作成』をクリック

f:id:minamin96:20191208181731p:plain
ルールの作成

・ルール条件に2つの条件を作成します

条件1 : 自動バックアップを取得

  • 『イベント・タイプ』 を選択
  • サービス名 : 『Database』
  • イベント・タイプ : 『Database - Create Backup End』 f:id:minamin96:20191208181951p:plain

バックアップ取得ジョブのイベント・タイプには、『Database - Create Backup Begin』と『Database - Create Backup End』がありますが、ジョブの成功/失敗がわかるのはEndのイベントのため、『Database - Create Backup End』を選択します

条件2 : その(バックアップ)ジョブが失敗

  • 『属性』 を選択
  • 属性名 : 『lifecycleState』
  • 属性 : 『FAILED』を入力 f:id:minamin96:20191208182054p:plain

その他) 条件3 : 特定のデータベースのみを対象とする場合

様々なサービス・インスタンスが立ち上がっている環境で、すべてのDatabaseサービスのバックアップの通知がきたら困るので、対象のデータベースのみの通知を受けるために、下記に設定も付け加えています

  • 属性』 を選択
  • 属性名 : 『databaseId』
  • 属性 : DatabaseのOCIDを入力 f:id:minamin96:20191208182318p:plain

f:id:minamin96:20191208182413p:plain
データベースのOCIDの情報

設定は以上!

3. 確認

バックアップが失敗したらメール通知がされるかどうか、早速試してみましょう。

・『バックアップの作成』を実行 事前にバックアップが失敗する設定にしておいたので、想定通り失敗します f:id:minamin96:20191208182525p:plain

・メールを確認 期待通り、メール通知がきてました!

f:id:minamin96:20191208182911p:plain
バックアップが失敗した際のメール通知

あとは、通知を受け取ったら設定や環境の状態を確認して、きちんとバックアップが取れる状態に直します。 今のところ、バックアップが成功している時には来ていません。

通知内容をもう少しかっこよくさせたいなぁと思うので、それはまた今度。。

Oracle Databaseのサービス比較編 資料公開

2019/03/29(金)に、下記のイベントで講演した際の資料が公開されました。

Oracle Database Technology Night 日本データセンター開設前に知っておくべきこと -Oracle Databaseのサービス比較編

Oracle Technology Networkの連載の方でも書いているのですが、 Oracle Cloudが提供しているOracle Databaseのクラウドサービスにもいくつか種類があるので、 どれがどう違うのかをきかれることが多々あり、まとめてみました。

クラウド・サービスは日々進化しているので、公演日時点での内容として見ていただければ幸いです。

TerraformでAutonomous Data Warehouse (ADW)を作ってみる

今回はTerraform(クラウドに事前に定義した内容の構成・リソースを生成・操作してくれるツール)で Oracle CloudのAutonomous Data Warehouse(ADW)を作ってみました。

Terraformのセットアップ方法はこちら

community.oracle.com

事前準備

事前に下記の情報を確認してメモ

  • プロバイダの設定に必要
    • リージョン
    • テナントのOCID
    • ユーザーのOCID
    • APIアクセス用のキーペア
  • リソース作成に必要
    • コンパートメントのOCID

※以降、上記の情報でマスクが必要なものはxxxに置き換えて記述するので、実際の情報に書き換えてください


定義ファイルの用意

変数定義

・variable.tf

### 環境の変数
variable "tenancy_ocid" {}
variable "user_ocid" {}
variable "fingerprint" {}
variable "private_key_path" {}
variable "region" {}
variable "compartment_ocid" {}

### ADWのサービス関連の変数
variable "autonomous_data_warehouse_db_name" {}
variable "autonomous_data_warehouse_display_name" {}
variable  "autonomous_data_warehouse_admin_password" {}
variable "autonomous_data_warehouse_wallet" {}

###デフォルト定義
variable "autonomous_data_warehouse_cpu_core_count" {
    default = 1 // OCPU単位
}

variable "autonomous_data_warehouse_data_storage_size_in_tbs" {
    default = 1 // TB単位
}

variable "autonomous_data_warehouse_license_model" {
    default = "LICENSE_INCLUDED"
}

variable "autonomous_data_warehouse_state" {
    default = "AVAILABLE"
}

variable "autonomous_data_warehouse_backup_display_name" {
    default = "Monthly Backup"
}

variable "autonomous_data_warehouse_backup_state" {
    default = "AVAILABLE"
}

プロバイダ定義

・provider.tf

provider "oci" {
    tenancy_ocid = "${var.tenancy_ocid}"
    user_ocid = "${var.user_ocid}"
    fingerprint = "${var.fingerprint}"
    private_key_path = "${var.private_key_path}"
    region = "${var.region}"
}

作成するADWインスタンスの設定

・adw.tf

resource "oci_database_autonomous_data_warehouse" "autonomous_data_warehouse" {
#Required
    compartment_id = "${var.compartment_ocid}"
    cpu_core_count = "${var.autonomous_data_warehouse_cpu_core_count}"
    data_storage_size_in_tbs = "${var.autonomous_data_warehouse_data_storage_size_in_tbs}"
    db_name = "${var.autonomous_data_warehouse_db_name}"
    admin_password = "${var.autonomous_data_warehouse_admin_password}"

#Optional
#    defined_tags = "${var.defined_tags}"
#    freeform_tags = "${var.freeform_tags}"
    display_name = "${var.autonomous_data_warehouse_display_name}"
    license_model = "${var.autonomous_data_warehouse_license_model}"
}

data "oci_database_autonomous_data_warehouses" "autonomous_data_warehouses" {
#Required
    compartment_id = "${var.compartment_ocid}"
#Optional
    display_name = "${oci_database_autonomous_data_warehouse.autonomous_data_warehouse.display_name}"
    #state = "${var.autonomous_data_warehouse_state}"
}


output "autonomous_data_warehouses" {
    value = "${data.oci_database_autonomous_data_warehouses.autonomous_data_warehouses.autonomous_data_warehouses}"
}

output "parallel_connection_string" {
    value = ["${lookup(oci_database_autonomous_data_warehouse.autonomous_data_warehouse.connection_strings.0.all_connection_strings, "PARALLEL", "Unavailable")}"]

(オプション)クライアントの資格証明(ウォレット)の設定とダウンロード

これは環境作成時には必須ではないですが、ダウンロードも一緒にしてくれるのでいれておくと便利

・adwwallet.tf

data "oci_database_autonomous_data_warehouse_wallet" "autonomous_data_warehouse_wallet" {
#Required
    autonomous_data_warehouse_id = "${oci_database_autonomous_data_warehouse.autonomous_data_warehouse.id}"
    password = "${var.autonomous_data_warehouse_wallet}"
}

resource "local_file" "autonomous_data_warehouse_wallet_file" {
    content = "${data.oci_database_autonomous_data_warehouse_wallet.autonomous_data_warehouse_wallet.content}"
    filename = "${path.module}/autonomous_data_warehouse_wallet.zip"
}

各値の説明はこちら

www.terraform.io

プランの作成

プランの作成は $terraform plan で行います。 -out=<プラン名> でプランのファイル出力が可能です。

実行ログ

$ terraform plan -out=adw1
var.autonomous_data_warehouse_admin_password
  Enter a value: <password>

var.autonomous_data_warehouse_db_name
  Enter a value: adwdb1

var.autonomous_data_warehouse_display_name
  Enter a value: adw1

var.compartment_ocid
  Enter a value: ocid1.compartment.oc1..<xxxx>

var.fingerprint
  Enter a value: <xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx>

var.private_key_path
  Enter a value: /mnt/c/Users/eminamin/.oci/oci_api_key.pem

var.region
  Enter a value: us-phoenix-1

var.tenancy_ocid
  Enter a value: ocid1.tenancy.oc1..<xxxx>

var.user_ocid
  Enter a value: ocid1.user.oc1.<xxxx>

var.autonomous_data_warehouse_wallet
  Enter a value: <password>

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

random_string.wallet_password: Refreshing state... (ID: none)
data.oci_database_autonomous_data_warehouses.autonomous_data_warehouses: Refreshing state...

------------------------------------------------------------------------

  + create
 <= read (data resources)

Terraform will perform the following actions:

 <= data.oci_database_autonomous_data_warehouse_wallet.autonomous_data_warehouse_wallet
      id:                           <computed>
      autonomous_data_warehouse_id: "${oci_database_autonomous_data_warehouse.autonomous_data_warehouse.id}"
      content:                      <computed>
      password:                     <sensitive>

 <= data.oci_database_autonomous_data_warehouses.autonomous_data_warehouses
      id:                           <computed>
      autonomous_data_warehouses.#: <computed>
      compartment_id:               "ocid1.compartment.oc1..<XXXXX>"
      display_name:                 "adw1"

  + local_file.autonomous_data_warehouse_wallet_file
      id:                           <computed>
      content:                      "${data.oci_database_autonomous_data_warehouse_wallet.autonomous_data_warehouse_wallet.content}"
      filename:                     "C:\\Users\\eminamin\\tflab\\adw/autonomous_data_warehouse_wallet.zip"

  + oci_database_autonomous_data_warehouse.autonomous_data_warehouse
      id:                           <computed>
      admin_password:               <sensitive>
      compartment_id:               "ocid1.compartment.oc1.<XXXXX>"
      connection_strings.#:         <computed>
      cpu_core_count:               "1"
      data_storage_size_in_tbs:     "1"
      db_name:                      "adwdb1"
      db_version:                   <computed>
      display_name:                 "adw1"
      freeform_tags.%:              <computed>
      license_model:                "LICENSE_INCLUDED"
      lifecycle_details:            <computed>
      service_console_url:          <computed>
      state:                        <computed>
      time_created:                 <computed>


Plan: 2 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

This plan was saved to: adw1

To perform exactly these actions, run the following command to apply:
    terraform apply "adw1"

実行

実行は$terraform applyコマンドで出来ます。

実行ログ

$ terraform apply adw1
oci_database_autonomous_data_warehouse.autonomous_data_warehouse: Creating...
  admin_password:           "<sensitive>" => "<sensitive>"
  compartment_id:           "" => "ocid1.compartment.oc1.<xxxx>"
  connection_strings.#:     "" => "<computed>"
  cpu_core_count:           "" => "1"
  data_storage_size_in_tbs: "" => "1"
  db_name:                  "" => "adwdb1"
  db_version:               "" => "<computed>"
  display_name:             "" => "adw1"
  freeform_tags.%:          "" => "<computed>"
  license_model:            "" => "LICENSE_INCLUDED"
  lifecycle_details:        "" => "<computed>"
  service_console_url:      "" => "<computed>"
  state:                    "" => "<computed>"
  time_created:             "" => "<computed>"
oci_database_autonomous_data_warehouse.autonomous_data_warehouse: Still creating... (10s elapsed)
oci_database_autonomous_data_warehouse.autonomous_data_warehouse: Still creating... (20s elapsed)
oci_database_autonomous_data_warehouse.autonomous_data_warehouse: Still creating... (30s elapsed)
oci_database_autonomous_data_warehouse.autonomous_data_warehouse: Still creating... (40s elapsed)
(略)

  filename: "" => "C:\\Users\\eminamin\\tflab\\adw/autonomous_data_warehouse_wallet.zip"
local_file.autonomous_data_warehouse_wallet_file: Creation complete after 0s (ID: <xxxxx>)

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Outputs:

autonomous_data_warehouses = [
    {
        admin_password = ,
        compartment_id = ocid1.compartment.oc1..<xxxxx>,
        connection_strings = [map[all_connection_strings:map[] high:adb.us-phoenix-1.oraclecloud.com:1522/ar8grq08m8d79by_adwdb1_high.adwc.oraclecloud.com medium:adb.us-phoenix-1.oraclecloud.com:1522/ar8grq08m8d79by_adwdb1_medium.adwc.oraclecloud.com low:adb.us-phoenix-1.oraclecloud.com:1522/ar8grq08m8d79by_adwdb1_low.adwc.oraclecloud.com]],
        cpu_core_count = 1,
        data_storage_size_in_tbs = 1,
        db_name = adwdb1,
        db_version = 18.4.0.0,
        defined_tags = map[],
        display_name = adw1,
        freeform_tags = map[],
        id = ocid1.autonomousdwdatabase.oc1.phx.<xxxxx>,
        license_model = LICENSE_INCLUDED,
        lifecycle_details = ,
        service_console_url = https://adb.us-phoenix-1.oraclecloud.com/console/index.html?tenant_name=OCID1.TENANCY.OC1..<xxxxx>A&database_name=ADWDB1&service_type=ADW,
        state = AVAILABLE,
        time_created = 2019-01-27 13:25:56.61 +0000 UTC
    }
]

出来上がり。 一応UIでも確認してみると・・・

f:id:minamin96:20190127223427p:plain
ADW作成完了


Tips

変数への値の指定方法について

上記の例は、対話式で入力する形でしたが、値の指定方法としては

  1. 実行時に対話式で入力 <-上記のファイルだけの場合
  2. コマンドの引数で指定
  3. 環境変数で指定
  4. 設定ファイルで指定 の4種類があります。

環境変数で指定する場合

TF_VAR_ を変数名の先頭につけます

・env-vars

### Substitute USERNAME to correct the path
### Substitute the OCIDs, fingerprints and keys with the correct ones for your environment
### File for Linux and OS X Users in shell environment
### Authentication details
export TF_VAR_tenancy_ocid=<テナントのOCID>
export TF_VAR_user_ocid=<ユーザーのOCID>
export TF_VAR_fingerprint=<API Keyフィンガープリント>
export TF_VAR_private_key_path=<API Keyのpemフォーマットの秘密鍵のパス>

### Compartment
export TF_VAR_compartment_ocid=<コンパートメントのOCID>

### Region
export TF_VAR_region=<リージョン> --) us-phoenix-1

設定ファイルで指定する場合

・<ファイル名>.tfvars (今回はbasic.tfvars)

tenancy_ocid="<テナントのOCID>"
user_ocid="<ユーザーのOCID>"
fingerprint="<API Keyフィンガープリント>"
private_key_path="<API Keyのpemフォーマットの秘密鍵のパス>"
compartment_ocid="<コンパートメントのOCID>"
region="<リージョン>"
autonomous_data_warehouse_admin_password="<DB管理者パスワード>"
autonomous_data_warehouse_db_name="<DB名>"
autonomous_data_warehouse_display_name="<サービス表示名>"
autonomous_data_warehouse_cpu_core_count=<OCPU数>
autonomous_data_warehouse_data_storage_size_in_tbs=<ストレージサイズ(TB)>

この設定ファイルを使ってプランを作成するのは $ terraform plan -var-file=./basic.tfvars -out=adw

環境変数のケースでも、設定ファイルを指定するケースでも 下記の通り実行時に値を聞かれることなく実行できます。

パスワードの自動生成

パスワードは今回は実行時入力する形(対話式)で書いていますが、 ランダムに生成したいという時には、下記を使ってみてください。 outputを入れているので、apply実行時に自動生成されたパスワードが表示されます

resource "random_string" "autonomous_data_warehouse_admin_password" {
    length = 16
    special = true
}

output "autonomous_data_warehouse_admin_password" {
    value = "${random_string.autonomous_data_warehouse_admin_password.result}"
}

まとめ

設定する内容や必要とする他のサービスなどが少ないので、 ADW単体であればTerraformじゃなくていいかなぁというかんじですが、 ひとつのサービス単体で使うケースではなくいくつかのサービスやインフラ設定を含めて、 環境全体を簡単に作成するのに使えるので、その際の参考にしてもらえればと。

そもそもWebUIでの作成方法は???という方は ↓↓こちら↓↓

speakerdeck.com

www.youtube.com

OCI Database-VMでData Guard構成を作ってみた

この記事は「Oracle Cloud その2 Advent Calendar 2018 - Adventar」の12月23日の記事として書かれています。 記事の内容は執筆時(2018/12/23)のものであり、現在とは異なる可能性がありますので適宜最新状況をご確認ください。

ついに来ました!OCI Database - Virtual Machines(VM)の自動Data Guard構成対応!

Release Notes : Data Guard for virtual machine DB systems (2018/12/14)

Oracle Cloud Infrastructure Database (OCI Database) の自動Data Guard構成

そもそもData Guardって?

Oracle Databaseの機能で、主にデータ保護を目的としたデータベースの自動同期(レプリケーション)機能です。何かあった場合にきちんと切り替えられるように、データの変更情報を元に同期を行うので、ブロックそのものをレプリケーションして破損ブロックまでそのまま伝搬しないような仕組みや、レプリケーション元(プライマリ)・先(スタンバイ)に対して正常なブロックかをチェックしながらレプリケーションを行うことが可能です。Active Data Guardを使うと、スタンバイ側を参照専用で利活用することができます。

どんな構成がとれるの?

OCI Database VMでData Guardを自動構成する場合には、

  • プライマリ・データベースに紐づけられるスタンバイ・データベースは1つ(1対1)。もっと多くのスタンバイ・データベースを紐づけたい場合には、手動でスタンバイ・データベースを作成することで構成可能です。

  • プライマリ・データベースのDBシステムと同一のアベイラビリティドメイン内でも異なるアベイラビリティドメインでも配置可能

f:id:minamin96:20181223125103p:plain


ということで、早速作ってみましょう

Data Guard 構成を作ってみる

0. 前提条件

マニュアルはこちら

  • 事前にプライマリ・データベースの環境を用意

    • エディションはEnterprise Edition以上
      • Active Data Guardを使いたい場合はEnterprise Edition - Extreme Performance
  • スタンバイ・データベース環境の条件

  • 2つのDB Systemが通信可能な状態

    • セキュリティ・リストでの通信制御の設定を確認
    • ポート(1521)を開けておく
      どちらも変更情報(REDO)を転送したり健全性をチェックしたりするのに必要です

スタンバイ・データベースを作る

マニュアルはこちら

1.プライマリ・データベースのDBシステム詳細ページを表示

まずプライマリ・データベースの DB System Detail のページのDatabaseの情報を表示します

f:id:minamin96:20181223092431p:plain
DB Systemsでプライマリ・データベースのDB Systemをクリック
f:id:minamin96:20181223092551p:plain
プライマリ・データベースのDB Systems Detail

2.Data Guard構成を有効化

右側にある・・・をクリックして、Enable Data Guardをクリック

f:id:minamin96:20181223092754p:plain
Enable Data Guard

3.スタンバイ・データベース環境の情報を入力

入力する内容は5項目だけ。

  • DISPLAY NAME - 任意の名前を入力
  • AVAILABILITY DOMAIN - 任意のアベイラビリティドメインを選択(今回はプライマリと別のアベイラビリティドメイン(AD2)を指定しています)
  • CLIENT SUBNET - 任意のクライアント・サブネットを選択
  • HOSTNAME PREFIX - 任意のホスト名を入力
  • DATABASE ADMIN PASSWORD - データベースの管理者パスワードを入力

その他の項目は、選択・入力ではなく情報として表示されます。

f:id:minamin96:20181223092909p:plain
スタンバイ・データベースの情報をいれてDBシステム作成
はい、終わりです。めちゃくちゃ簡単ですね。


出来上がった環境の状態を確認してみる

出来上がった環境の状態を、コマンドで確認してみます。

さきに結論まとめておくと、こんな構成

  • フィジカル・スタンバイ
  • 同期が開始している状態
  • 保護モードは最大パフォーマンスモード
  • Oracle Data Guard Brokerが有効
  • (Extream Performanceで作成した場合) Active Data Guard機能が使えるためRead-Only mode でのopen状態=参照可能な状態

・・・要は、全て設定済で、デフォルト構成でよければそのまま使える状態。

自動構成された環境は、Oracle Data Guard Brokerという、Data Guardの管理フレームワーク機能が有効な状態になります。これによって、簡単にData Guard構成の管理や転送・適用状況の情報が確認できます。

  • DGMGRL(Data Guard Brokerのコマンド・ユーティリティ)を使って、Data Guard構成を確認
[oracle@dgp ~]$ dgmgrl /
DGMGRL for Linux: Release 18.0.0.0.0 - Production on Sat Dec 22 12:13:54 2018
Version 18.2.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "dgp_iad1k2"
Connected as SYSDG.
DGMGRL>  SHOW CONFIGURATION;

Configuration - dgp_iad1k2_dgp_iad26x

  Protection Mode: MaxPerformance
  Members:
  dgp_iad1k2 - Primary database
    dgp_iad26x - Physical standby database 

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 42 seconds ago)
  • スタンバイ・データベースの情報(REDO転送・適用情報など)を確認
DGMGRL> show database dgp_iad26x

Database - dgp_iad26x

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 4 seconds ago)
  Apply Lag:          0 seconds (computed 4 seconds ago)
  Average Apply Rate: 8.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    dgp

Database Status:
SUCCESS

ここまで自動で構成・設定するのは、手動だと慣れていない人はけっこう大変だと思います。大体REDO転送の設定で皆さんはまりがち。 手動(コマンド)でのData Guard構成作成の速さだけは自信があるので手動構築も好きですが、ここまで設定された状態で使い始められるのは本当に楽だと思います。

*1:テナントの中を仕切る区切り

*2:独立し高い信頼性でデザインされた、リージョンのサブコンポーネント

*3:単一のアベイラビリティドメイン内の異なる物理ハードウェア上にコンピューティング・インスタンスを分散させるための仕組み

OCI Database-VMで選択可能なDatabaseバージョンが増えた話

概要

リリースノート(英語) : Older database release versions available for virtual machine DB system databases(2018.12.17)

OCI Database VM(Oracle Cloud Infrastructure Database - Virtual Machine) のインスタンスを作るときに選択可能なDBバージョンが、少し古いものも選択可能になりました。

実際の画面

こちらは従来からの選択肢 f:id:minamin96:20181220212103p:plain

そして、"DISPLAY ALL AVAILABLE VARSIONS"のチェックボックスにチェックを入れると

今回のテーマの古いバージョンも含まれた選択肢 f:id:minamin96:20181220212137p:plain

(latest)が末尾についていているものは、そのリリースの最新バージョンになるので、 例えば12.2.0.1(latest)は、12.2.0.1.180417 と同じです。 要は、従来の選択肢=latestです。

マニュアル(英語): Availability of Older Database Versions for Virtual Machine DB Systems


地味に嬉しい、この機能。

従来のインスタンス作成時のバージョン選択は、各リリースの最新バージョン(Patch Set Update/Bundle PatchやRelease Updateが適用済)のみでした。

もちろん最新バージョンで使うのが一番なんです。セキュリティ問題対応等もあるので自分の身を守るためにも。なので、古いバージョンで作った後もどこかのタイミグで新しいバージョンにすることをお勧めします。

docs.cloud.oracle.com

とはいえ、選択肢が増えるのは嬉しいですね。


記事の内容は執筆時(2018/12/20)のものであり、現在とは異なる可能性がありますので適宜最新状況をご確認ください。