もしもみなみんがDBをクラウドで動かしてみたら 連載Indexページ
※本記事は2020/08/25に公開。2022/06/03最終更新時点の内容になります
みなさん、こんにちは。
前回、Database Cloud Service(DBCS)/Exadata Cloud Service(ExaDB-D(ExaCS))のバージョンやパッチ適用について解説しましたが、続きとして定期的なインフラ・メンテナンスについて触れてきたいと思います。今回は、ExaCSの定期メンテナンスの考え方や、ユーザー側で任意のタイミングを指定することが可能なスケジューリング機能を紹介していきます。
目次
- ExaDB-D(ExaCS) 定期メンテナンスについて
- メンテナンス・スケジューリング機能について
- メンテナンス・スケジューリングの設定方法
- スケジュールを確認する方法
- スケジュールされた日程を変更する
- 通知の設定
- まとめ
1. ExaDB-D(ExaCS) 定期メンテナンスについて
PaaSサービスとして提供しているExaDB-D(ExaCS)では、インフラ層、具体的にはExadataのH/W、Databaseサーバー上の管理ドメイン(dom0)、Storageサーバー、ネットワーク、ファームウェアなどは、オラクルが責任範囲として運用・管理を行います。そのため、インフラ層に対するメンテナンスをオラクルが定期的に実施する形になります。安定性・セキュリティを考慮したサービスの提供のために、インフラ層の定期メンテナンスは四半期ごとに必須で行います。
四半期の定期メンテナンスでは、前回解説したユーザー管理層のコンピュートのOS以上に対してはメンテナンスは行いません。ただし、Databaseサーバーの管理ドメイン(dom0)に対してのメンテナンスを行うため、その際にコンピュート(ノード)の再起動が発生します。ですが、ExaDB-D(ExaCS)はデフォルトで各コンポーネントが冗長化されている構成です。データベースに関しては、Oracle Real Application Clusters (RAC) を利用したデータベースのクラスタリング、データベースがアクセスするストレージもOracle Autonomatic Storage Management (ASM) でのクラスタリング構成となっています。メンテナンス自体は、デフォルトは1サーバー、1ノードずつ行われる(ローリング・メンテナンス)ため、基本的にExaDB-D(ExaCS)のサービス、その上で動くデータベースとしてはオンラインで稼働し続ける形になり、ダウンタイムはほぼない形で実施されます。なお、非ローリングでメンテナンスの時間を最短で実施する方式にも、変更可能です。緊急のメンテナンスやセキュリティ対応などでサービス停止が必要となる場合には、事前にその旨も通知されます。

ただし、基本サービス停止はしないものの、メンテナンス中は縮退運転(通常時よりも利用可能なリソースが減少)のため、性能影響やその間のセッションの瞬断などはあります。そのため、オラクル側で計画実施される定期メンテナンスで、懸念点を許容するのが難しいという場合には、対応を検討する必要が出てきます。検討するケースにも2種類あり、1つはユーザーの指定した日時でならメンテナンス実施可能なケース、1つはメンテナンス期間を設けるのが難しい(ローリング・メンテナンスでも難しい)ケースになります。後者の場合は、クライアント側のエラーハンドリングや再接続/再試行の仕組みの実装や、メンテナンス前後でのレプリカへの切り替えなどが対応策としてあります。今回は、前者の場合に利用できる、メンテナンス・スケジューリング機能について紹介していきます。
ローリングもしくは非ローリングでの、メンテナンス時間の目安はこちらに記載があります : Approximate Times for Exadata Infrastructure Patching
参考
・マニュアル Configure Oracle-Managed Infrastructure Maintenance
2. メンテナンス・スケジューリング機能について
定期メンテナンスの実施日時はオラクルから予定日時が通知されますが、ExaDB-D(ExaCS)ではコンソール上から事前にメンテナンス実施可能なタイミングを設定することが可能です。具体的には、メンテナンスが実施可能な月、週 、曜日、開始時間(UTC) と、実施日からみて通知をどれくらい前(リード・タイム)にほしいかを設定可能です。この設定内容に基づき、オラクル側で定期メンテナンスの実施予定日を設定し、リード・タイムに従う形で事前にユーザーに通知されます(通知先はテナントの管理者)。
参考
・マニュアル Configure Oracle-Managed Infrastructure Maintenance
3. メンテナンス・スケジューリングの設定方法
「DBシステムの詳細」ページで、「DBシステム概要」の「インフラストラクチャ・メンテナンス」のセクションに、オラクル実施の定期メンテナンスの情報が記載されています。

インフラストラクチャ・メンテナンス実施日時の指定
『メンテナンス・スケジュール カスタム・スケジュール』の右にある『編集』をクリック


デフォルトは『プリファレンスなし』=任意のタイミングでスケジューリングされる設定になっているので、『スケジュールの指定』のボタンをクリックし、メンテナンスがスケジュールされてもいい日程にあてはまる内容を入力していきます。
設定項目
・メンテナンス月 : 四半期の中で1つ以上選択
・週 : 任意の週 or 第x週を1つ以上選択
・曜日 : すべての曜日 or 1つ以上の曜日を選択
・開始時間(UTC) : 任意の時間 or 1つの時間帯を指定
・リード・タイム : 1-4週間前から1つ指定 (事前通知のタイミングとして、実施日からみて通知をどれくらい前にほしいか)
設定をしたら、『インフラストラクチャ・メンテナンス・スケジュールの更新』をクリックして完了です。あとは、この内容に基づき、定期メンテナンスの日程が計画されていく形になります。よくある問い合わせとして、「今月のxx週に実施されるように設定したのに、メンテナンスが実施されなかった」ということがありますが、スケーリング機能で設定したタイミングがリード・タイムを守れないタイミング(例えば、リード・タイムを4週間前と設定したにも関わらず、次回のメンテナンスが2週間後に実施されるような設定にされている場合など)は、リード・タイムを守るように次の四半期内の実施可能なタイミングに予定されます。リード・タイプの最短は1週間前のため、いきなり翌日を指定しても翌日には計画・実施はされません。
参考
・マニュアル Configure Oracle-Managed Infrastructure Maintenance
4. 予定されたメンテナンス・スケジュールを確認
インフラストラクチャのメンテナンスが計画されると、テナントの管理者へのメール通知ならびにコンソール上での確認ができるようになります。コンソール上でスケジューリングされた内容を確認してみましょう。
「DBシステム詳細」ページからの確認
「インフラストラクチャ・メンテナンス」セクションの『次回のメンテナンス』に計画されたメンテナンス日時が表示されます。
詳細を確認するには、右の『表示』をクリック(今回は7月の平日の17時(UTC)に実施されるように事前に設定した内容に対して計画された、次回メンテナンス)

計画されたメンテナンスは、左側の『メンテナンス』のタブから確認可能です。その下の「メンテナンス履歴」から実施済の履歴をみることも可能です。

『お知らせ』からの確認
インフラストラクチャ・メンテナンスの日程の通知はテナントの管理者に通知される内容のため、テナント全体に対するお知らせを確認する画面でも、このメンテナンスについての内容が確認可能です。
コンソールの右上の『お知らせ』マークをクリック

お知らせの一覧に表示されます。フィルタしたい場合は、タイプを「スケジュール済メンテナンス」にすると絞れます。

参考
・マニュアル To view or edit the time of the next scheduled maintenance for Exadata DB system infrastructure
5. スケジュールされた日程や方式を変更する
事前にプリファレンスを設定して計画されたメンテナンスであっても、何かしらの理由によりメンテナンス日時を変更したいということはありますよね。その場合も、コンソール上からスケジュールの変更が可能です。
次回のメンテナンスの日時変更
「DBシステム詳細」ページの「インフラストラクチャ・メンテナンス」>『次回のメンテナンスの右の『表示』をクリック

『スケジュール開始時間』の右の『編集』をクリック

入力画面の右にあるカレンダーアイコンをクリックして、変更したい先の日時を指定し、『スケジュールされた開始時間の更新』をクリックします。

また、メンテナンス方法をローリング形式ではなく非ローリング(サービスを停止して最短時間でメンテナンスを実施可能な方式)に変更したり、即時適用したい場合にも、この画面で変更が可能です。
コンソール上からのメンテナンスの日程変更は、下記の点にご注意ください。
- 直近のメンテナンス実行から180日以内の日程に再スケジュールが可能
- メンテナンス開始予定時間の2時間以上前の場合のみ、再スケジュールが可能
参考
・マニュアル To view or edit the time of the next scheduled maintenance for Exadata Cloud Infrastructure
6. 通知の設定
よくある質問として、
・「テナント管理者以外に、メンテナンス計画の通知はできないのか」
・「インフラストラクチャ・メンテナンスを実際に実施するタイミング(開始時間と終了時間)に通知を飛ばせないのか」
といったものがありますが、この場合はOracle Cloud Infrastructureの「イベント」と「通知」サービスを使ってみましょう。イベントサービスは、クラウド上のリソースの変化をとらえてサービスが自動的に連動する仕組みを作れます。その連動先として、通知サービスを用いると、メール通知やHPPTS(カスタムURL)、PagerDutyなどのメッセージング機能を使うことができます。
関連イベントの種類
ExaDB-D(ExaCS)のインフラストラクチャ・メンテナンスに関連するイベント・タイプとしては、2020/08時点では下記のものがあります。
・Exadata Infrastructure – Maintenance Scheduled : メンテナンス日時が計画(テナント管理者には自動通知)
・Exadata Infrastructure – Maintenance Reminder : メンテナンス実施前のリマインド(テナント管理者には自動通知)
・Exadata Infrastructure – Maintenance Begin : メンテナンス開始時
・Exadata Infrastructure – Maintenance End : メンテナンス完了時

7. まとめ
クラウドを利用するにあたり、計画停止・計画外停止に関する対応を考えることは大事です。もちろん、その点はオンプレミスでも同じですが、違うところはインフラ側のクラウド・ベンダー主導のメンテナンスがあることです。そのため、クラウド利用を検討する場合には、システムでメンテナンス日時を設けたり、計画停止時の対応方針を決めたり、サービス継続するための実装を考えたり、事前にどのように対応するかを考えることは大事になります。インフラ側はオラクル管理のレイヤーとして定期メンテナンスが実施されますが、今回ご紹介したように、事前にユーザー側で任意のタイミングを指定することが可能です。また、RACやGrid Infrastructure(ASM含む)、SCANなどOracle Databseの可用性機能をデフォルトで実装している構成のため、メンテナンス実施時にもサービスとしての停止は抑える形で実施されています。さらに対応が必要な場合には、Oracle Application Continuityによるアプリケーション側からの接続の自動再接続・トランザクションの再実行や、Oracle Data GuardやOracle GoldenGateで同期している環境への切り替えを行ったりなど、Oracle Databaseの機能や関連製品でも対応が可能です。クラウド上で動かすシステムの要件にあった、計画メンテナンス(停止)の対応を実装・運用に取り組み、安全なサービス継続を検討していきましょう。
よくある質問
Q1) インフラストラクチャ・メンテナンスを拒否したり、スキップすることはできますか
A1) 出来ません。安定性・セキュリティを考慮したサービスの提供のために、インフラ層の定期メンテナンスは四半期ごとに必須で行います。
Q2) テナント管理者以外へのメンテナンス計画の通知はできますか。また、開始時・終了時に連絡してもらえますか。
A2) デフォルトでは、計画日時の決定とリマインドのみが自動でテナント管理者に通知されます。それ以外は、OCIのイベントサービスと通知サービスで該当イベントの通知の仕組みを設定することで通知可能です。詳細は、6. 通知の設定をご確認ください。
メンテナンスに関して、2020/07/29 Oracle Database Technology Nightで解説した資料はこちら(動画あり)
