OCI ExaDB-DのOS上のDB/GIパッチを1ノードずつ適用する方法
この記事はOracle Cloud Infrastructure Advent Calendar 2023 Day21の記事として書いています。
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ホームへのパッチ適用になります
準備
・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の記事として書いています。
今年も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の概要
- Exadata Cloud Service上のOracle Databaseを管理対象にしてみる
- Database Managementの画面を確認
- 最後に
Oracle Cloud Observability and Management Platformの概要
Database Managementの概要はSlide 28からです。
Exadata Cloud Service上のOracle Databaseを管理対象にしてみる
事前準備
事前準備の内容は、下記のドキュメントの"一般的な前提条件タスク"と"Oracle Cloudデータベース関連の前提条件タスク"を参考に。 docs.oracle.com やったことをざっとまとめると、
- [OCIコンソール作業] 管理対象のデータベースの用意
- [DB作業] 管理対象のデータベースのサービス名確認してメモ
- [DB作業] データベース管理に必要な権限をデータベース・ユーザーに付与(今回はDBSNMPユーザーを使用)
- [OCIコンソール作業] ユーザー・グループに権限を割り当てるポリシーの作成
- [OCIコンソール作業] Oracle Cloud Infrastrucutre ボールトサービスでボールトを作成
- [OCIコンソール作業] 作成したボールトのシークレットに、3で設定したデータベース・ユーザー・パスワードを保存
- [OCIコンソール作業] データベース管理のプライベート・エンドポイントを作成
- [OCIコンソール作業] データベース管理とデータベース間の通信の有効化
Exadata Cloud Service上のデータベースを登録
データベースをデータベース管理に登録する画面にいく方法としては、 1. データベース管理の画面から、管理対象データベースを登録 2. 管理対象のデータベースの詳細ページから、データベース管理機能を有効化 のいずれかで可能です。
1. データベース管理の画面から、管理対象データベースを登録する方法
データベース管理のページに行き、左側のメニューから「管理」>「管理対象データベース」をクリックして、 「データベース管理の有効化」をクリック
2. 管理対象のデータベースの詳細ページから、データベース管理機能を有効
管理対象のデータベースの詳細ページの上部の「データベース情報」>「関連付けられたサービス」>「データベース管理」の「有効化」をクリックするか、 下部の「リソース」>「メトリック」をクリックして、右側にでる「有効化」ボタンをクリック
データベース管理を有効化
- データベースタイプ : 今回はExaCS上のデータベースを登録するので「ExaCS」
- VMクラスタの場所 : 対象のデータベースが稼働するVMクラスタ
- データベース・ホーム : 対象のデータベースが属するデータベース・ホーム
- データベース : 対象のデータベース
- サービス名 : 対象のデータベースに接続するためのサービス名
サービス名以外はプルダウンで選択できるのですが、サービス名だけは記述式なので、事前準備でメモしておいたものを記入します。
- データベース・ユーザー名 : 事前準備で権限を付与したユーザー
- データベース・ユーザー・パスワード・シークレットの場所 : 事前準備で作成したシークレット
- プライベート・エンドポイントの場所 : 事前準備で作成したプライベート・エンドポイント
- 管理オプション : 今回は完全管理を選択します。
管理オプションの「完全管理」と「基本管理」の違いは、ざっくりいうと
基本管理
- 追加コストなし(無料)で利用可能
- CPU使用率やストレージ利用状況など14個の基本的なメトリック
- CDBのパフォーマンス・ハブのASH分析、SQL管理機能
完全管理
- 有償(詳細は最初の概要資料のSlide 15あたり)
- データベースの管理および管理
- オプション機能に含まれる、ADDMやブロック・セッションなどもみれるパフォーマンス・ハブや、SQL監視や表領域監視など
- データベースはどのエディションでも利用可能。Standard Editionに関してパフォーマンス・ハブは利用不可
- Exadata管理
今回は新機能のExadata管理がみたかったので完全管理にしています。
さて、無事に有効化されました
遭遇したエラー
「データベースの登録」をしようとした際に、下記エラーにて失敗しました
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の画面を確認
では、有効化されたのでデータベース管理の画面をいくつか見てみたいと思います
まずは、対象のデータベースの詳細ページでみれるメトリック。
つぎにパフォーマンス・ハブをみたいので、データベースの詳細ページ上部の「パフォーマンス・ハブ」ボタンをクリック
ASH分析、SQLモニタリング、ADDM、ブロックしているセッション、Exadataとタブが並びます
SQLモニタリングで特定のSQLをクリックすると、リアルタイムSQLモニタリングも楽々
Exadata タブを見てみます Oracle管理レイヤーのフラッシュやディスク側も見れてますね。
今度は、データベース管理のページから。
複数データベースを管理していると便利なフリート・サマリーのページですが、時間がなくて今回は1つしかまだ登録していないので、「管理対象データベースの詳細」を。
サマリー、表領域、ユーザー、データベース・パラメータ(ここから編集可能)、クラスタ・キャッシュ・ジョブ、関連付けられたデータベース・グループ、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)のものであり、現在とは異なる可能性がありますので適宜最新状況をご確認ください。
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)を行うという定義を『イベント』機能で設定します。
- ある特定のイベント = 自動バックアップを取得 + そのバックアップジョブが失敗 <--『イベント』で設定
- 設定したアクション = メール通知 <--『通知』で設定
2. 設定方法
通知設定
あるイベントを検知したらメールが飛ぶように、まずは「通知」の設定を行います
・アプリケーション統合 > 通知
・『トピックの作成』をクリックして、今回の設定のためのトピックを作成します。今回は、「eminamin-notification」という名前にしました。
・作成されたトピックの名前をクリック
・通知の方法を設定するために、『サブスクリプションの作成』をクリック
・今回はメール通知にしたいので、プロトコルで『電子メール』を選択して、電子メール欄に通知する宛先のアドレスを入力し、『作成』
作成したサブスクリプションを有効にするまで、ステータスはPENDINGになります。 メールアドレスが正しいかの確認ができると有効(ACTIVE)になるので、メールを確認しましょう。 先ほど実際に入力したメールアドレスが正しければ、メールが届いていると思います。そのメールの本文に記載のあるリンクをクリックすると
サブスクライブできたというページが開かれます。そして、コンソールにもどるとサブスクリプションのステータスがACTIVEになっているのが確認できました。 これで、通知の設定は完了です。
イベントの設定
ある特定のイベントが発生したのを検知したら、設定したアクションを行う、ということを『イベント』で設定します。
前述した通り、今回対象にするイベントの条件は『自動バックアップを取得』 + 『そのバックアップジョブが失敗』の2つです。
・アプリケーション統合 > イベント・サービス
・イベントの『ルールの作成』をクリック
・ルール条件に2つの条件を作成します
条件1 : 自動バックアップを取得
- 『イベント・タイプ』 を選択
- サービス名 : 『Database』
- イベント・タイプ : 『Database - Create Backup End』
バックアップ取得ジョブのイベント・タイプには、『Database - Create Backup Begin』と『Database - Create Backup End』がありますが、ジョブの成功/失敗がわかるのはEndのイベントのため、『Database - Create Backup End』を選択します
条件2 : その(バックアップ)ジョブが失敗
- 『属性』 を選択
- 属性名 : 『lifecycleState』
- 属性 : 『FAILED』を入力
その他) 条件3 : 特定のデータベースのみを対象とする場合
様々なサービス・インスタンスが立ち上がっている環境で、すべてのDatabaseサービスのバックアップの通知がきたら困るので、対象のデータベースのみの通知を受けるために、下記に設定も付け加えています
- 属性』 を選択
- 属性名 : 『databaseId』
- 属性 : DatabaseのOCIDを入力
設定は以上!
3. 確認
バックアップが失敗したらメール通知がされるかどうか、早速試してみましょう。
・『バックアップの作成』を実行 事前にバックアップが失敗する設定にしておいたので、想定通り失敗します
・メールを確認 期待通り、メール通知がきてました!
あとは、通知を受け取ったら設定や環境の状態を確認して、きちんとバックアップが取れる状態に直します。 今のところ、バックアップが成功している時には来ていません。
通知内容をもう少しかっこよくさせたいなぁと思うので、それはまた今度。。
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のセットアップ方法はこちら
事前準備
事前に下記の情報を確認してメモ
- プロバイダの設定に必要
- リージョン
- テナントの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" }
各値の説明はこちら
プランの作成
プランの作成は $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でも確認してみると・・・
Tips
変数への値の指定方法について
上記の例は、対話式で入力する形でしたが、値の指定方法としては
- 実行時に対話式で入力 <-上記のファイルだけの場合
- コマンドの引数で指定
- 環境変数で指定
- 設定ファイルで指定 の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での作成方法は???という方は ↓↓こちら↓↓
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システムと同一のアベイラビリティ・ドメイン内でも異なるアベイラビリティ・ドメインでも配置可能
ということで、早速作ってみましょう
Data Guard 構成を作ってみる
0. 前提条件
事前にプライマリ・データベースの環境を用意
- エディションはEnterprise Edition以上
- Active Data Guardを使いたい場合はEnterprise Edition - Extreme Performance
- エディションはEnterprise Edition以上
スタンバイ・データベース環境の条件
2つのDB Systemが通信可能な状態
スタンバイ・データベースを作る
1.プライマリ・データベースのDBシステム詳細ページを表示
まずプライマリ・データベースの DB System Detail のページのDatabaseの情報を表示します
2.Data Guard構成を有効化
右側にある・・・
をクリックして、Enable Data Guardをクリック
3.スタンバイ・データベース環境の情報を入力
入力する内容は5項目だけ。
- DISPLAY NAME - 任意の名前を入力
- AVAILABILITY DOMAIN - 任意のアベイラビリティ・ドメインを選択(今回はプライマリと別のアベイラビリティ・ドメイン(AD2)を指定しています)
- CLIENT SUBNET - 任意のクライアント・サブネットを選択
- HOSTNAME PREFIX - 任意のホスト名を入力
- DATABASE ADMIN PASSWORD - データベースの管理者パスワードを入力
その他の項目は、選択・入力ではなく情報として表示されます。
はい、終わりです。めちゃくちゃ簡単ですね。
出来上がった環境の状態を確認してみる
出来上がった環境の状態を、コマンドで確認してみます。
さきに結論まとめておくと、こんな構成
- フィジカル・スタンバイ
- 同期が開始している状態
- 保護モードは最大パフォーマンスモード
- 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構成作成の速さだけは自信があるので手動構築も好きですが、ここまで設定された状態で使い始められるのは本当に楽だと思います。
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バージョンが、少し古いものも選択可能になりました。
実際の画面
こちらは従来からの選択肢
そして、"DISPLAY ALL AVAILABLE VARSIONS"のチェックボックスにチェックを入れると
今回のテーマの古いバージョンも含まれた選択肢
(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が適用済)のみでした。
もちろん最新バージョンで使うのが一番なんです。セキュリティ問題対応等もあるので自分の身を守るためにも。なので、古いバージョンで作った後もどこかのタイミグで新しいバージョンにすることをお勧めします。
とはいえ、選択肢が増えるのは嬉しいですね。
記事の内容は執筆時(2018/12/20)のものであり、現在とは異なる可能性がありますので適宜最新状況をご確認ください。