Database Support Blog

  • Oracle Cloud
2023.05.31

【Oracle Cloud】BaseDB の起動・停止を自動化しよう

【WebLogic Server】WebLogic Deploy Tooling(WDT) でドメイン/アプリケーション/データソースの移行をしよう

24時間365日稼働のシステム以外の用途(例えば開発や検証環境、稼働時間帯が限定されているシステムなど)の場合、クラウド利用コストの最適化の観点から、稼働時間外は対象サービスの停止を検討するお客様が多いのではないでしょうか。

また、その作業はできるだけ自動化したいと考えられるのではないでしょうか。

BaseDB における OCPU の課金を停止するには、BaseDB のノード停止を行います。

そのため、お客様から「BaseDB のノードの起動・停止をスケジュールで自動化したいので、設定方法を知りたい」というお問い合わせを多くいただきます。

BaseDB の場合は OCI CLI による起動・停止を cron やタスクスケジューラなど OS 側の機能を使用して自動化する必要があります。

本記事では、BaseDB の起動・停止の方法としてノードの起動・停止を記載しており、オンプレミスの Linux サーバから OCI 上の BaseDB を自動起動・自動停止する手順をご紹介します。


Compute インスタンスの場合は以下の記事をご参照ください。

【Oracle Cloud】Computeインスタンスの起動・停止を自動化しよう
https://www.ashisuto.co.jp/db_blog/article/howto-automate-starting-and-stopping-Compute-instances.html


OCI CLI を使用して BaseDB を起動・停止する手順

自動起動・自動停止の説明の前に、OCI CLI を使用して BaseDB を起動・停止する手順をおさらいします。


OCI CLI の導入

BaseDB に対して接続するクライアント環境(本記事ではオンプレミスの Oracle Linux 8.5 x86-64 のサーバ)に OCI CLI を導入します。

手順については以下の記事の「OCI CLIインストール」および「OCI CLIコマンド利用設定」の項目をご参照ください。


OCI CLIを利用してコマンドラインからOCIを操作する方法
https://www.ashisuto.co.jp/db_blog/article/N0021_OracleCloud_20200626.html

※OCI CLIを既にインストールおよび利用設定済みの場合、こちらの手順は不要です。


OCI CLI を利用するユーザーへの権限付与

まず最初に、OCI CLI を利用して BaseDB に接続をするユーザーに対してBaseDB の一覧の表示や起動・停止、作業リクエストの表示を行う権限を付与するため、対象のユーザーが所属するグループに対してポリシーを作成します。既に管理者グループに所属している場合はこの手順は不要です。

OCI コンソールのメニューから、「アイデンティティとセキュリティ > ポリシー」 より「ポリシーの作成」をクリックします。

OCI ポリシーの作成

OCI ポリシーの作成

ポリシーの作成」画面で各項目を入力、選択します。

ポリシー・ビルダー」の項目で「手動エディタの表示」のトグル・スイッチを有効にして以下の内容を入力し、「作成」をクリックします。

 Allow group <Group_Name> to read database-family in compartment <Compartment_Name>
 Allow group <Group_Name> to {DB_NODE_POWER_ACTIONS} in compartment <Compartment_Name>
 Allow group <Group_Name> to inspect work-requests in compartment <Compartment_Name>

OCI ポリシーの作成


接続先 BaseDB のノードの OCID を確認

次に、OCI CLI でコマンドを実行する前に、OCI コンソールを利用して対象ノードの OCID を確認します。

OCI コンソールのメニューから、「Oracle Database > Oracle Base Database (VM、BM)」 よりサービス・インスタンスの一覧を表示します。

OCID 確認

OCID 確認

接続先のインスタンスを選択し、”リソース”より「ノード」を選択します。右端にあるメニューより、「OCIDのコピー」を選択します。

OCID コピー


OCI CLI を使用した BaseDB の操作

以上の準備ができたら、OCI CLI を導入したサーバで以下のコマンドを実行します。


状態確認

サービス・インスタンスが起動しているのか、どのようなシェイプで作成されたかなど、インスタンスの構成情報を確認します。

コマンド構文

oci db node get --db-node-id <事前に確認したノードの OCID>

 
 $ oci db node get --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq
 {
   "data": {
     "additional-details": null,
     "backup-ip-id": null,
     "backup-vnic-id": null,
     "backup-vnic2-id": null,
     "cpu-core-count": 1,
     "db-node-storage-size-in-gbs": null,
     "db-server-id": null,
     "db-system-id": "ocid1.dbsystem.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvpo6kkbro6u3ti4x5a",
     "fault-domain": "FAULT-DOMAIN-2",
     "host-ip-id": null,
     "hostname": "kkadbs",
     "id": "ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq",
     "lifecycle-state": "STOPPED", ---インスタンス状態(停止済)
     "maintenance-type": null,
     "memory-size-in-gbs": null,
     "software-storage-size-in-gb": 200,
     "time-created": "2023-04-17T02:30:55.801000+00:00",
     "time-maintenance-window-end": null,
     "time-maintenance-window-start": null,
     "vnic-id": "ocid1.vnic.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvp5uzfeopqyupf37eq",
     "vnic2-id": null
   },
   "etag": "8598f531--gzip"
 }
 

起動

サービス・インスタンスが停止している場合に、起動操作を実行します。
※プロンプトはすぐに戻ってきますが、起動処理は実行中です。
(プロンプトが戻ってくる=起動済ではありません。)
処理が完了したかどうかは、状態確認のコマンドを利用して ” lifecycle-state ” を確認します。

コマンド構文

oci db node start --db-node-id <事前に確認したノードの OCID>

 
 $ oci db node start db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq
 {
   "data": {
     "additional-details": null,
     "backup-ip-id": null,
     "backup-vnic-id": null,
     "backup-vnic2-id": null,
     "cpu-core-count": 1,
     "db-node-storage-size-in-gbs": null,
     "db-server-id": null,
     "db-system-id": "ocid1.dbsystem.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvpo6kkbro6u3ti4x5a",
     "fault-domain": "FAULT-DOMAIN-2",
     "host-ip-id": null,
     "hostname": "kkadbs",
     "id": "ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq",
     "lifecycle-state": "STARTING", ---インスタンスの状態(起動中)
     "maintenance-type": null,
     "memory-size-in-gbs": null,
     "software-storage-size-in-gb": 200,
     "time-created": "2023-04-17T02:30:55.801000+00:00",
     "time-maintenance-window-end": null,
     "time-maintenance-window-start": null,
     "vnic-id": "ocid1.vnic.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvp5uzfeopqyupf37eq",
     "vnic2-id": null
   },
   "etag": "2d691fe5",
   "opc-work-request-id": "ocid1.coreservicesworkrequest.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXX4o6vlazvkt5bawkzpq"
 }
 

OCI コンソールの状態は処理直後は”起動中”と表示されます。

OCI コンソールの状態

処理が完了すると OCI コンソールの状態は”使用可能”と表示されます。

OCI コンソールの状態


停止

サービス・インスタンスが起動している場合に、停止操作を実行します。
※プロンプトはすぐに戻ってきますが、停止処理は実行中です。
(プロンプトが戻ってくる=停止済ではありません。)
処理が完了したかどうかは、状態確認のコマンドを利用して ” lifecycle-state ” を確認します。

コマンド構文

oci db node stop --db-node-id <事前に確認したノードの OCID>

 
 $ oci db node stop --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq
 {
   "data": {
     "additional-details": null,
     "backup-ip-id": null,
     "backup-vnic-id": null,
     "backup-vnic2-id": null,
     "cpu-core-count": 1,
     "db-node-storage-size-in-gbs": null,
     "db-server-id": null,
     "db-system-id": "ocid1.dbsystem.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvpo6kkbro6u3ti4x5a",
     "fault-domain": "FAULT-DOMAIN-2",
     "host-ip-id": null,
     "hostname": "kkadbs",
     "id": "ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq",
     "lifecycle-state": "STOPPING", ---インスタンス状態(停止中)
     "maintenance-type": null,
     "memory-size-in-gbs": null,
     "software-storage-size-in-gb": 200,
     "time-created": "2023-04-17T02:30:55.801000+00:00",
     "time-maintenance-window-end": null,
     "time-maintenance-window-start": null,
     "vnic-id": "ocid1.vnic.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXvp5uzfeopqyupf37eq",
     "vnic2-id": null
   },
   "etag": "9e604161",
   "opc-work-request-id": "ocid1.coreservicesworkrequest.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXswkfpmlzhuodu2x3oq"
 }
 

OCI コンソールの状態は処理直後は”停止中”と表示されます。

OCI コンソールの状態

処理が完了すると OCI コンソールの状態は”停止済”と表示されます。

OCI コンソールの状態


OCI CLI を使用した BaseDB の起動・停止を自動化する手順

いよいよここから、本記事の主題であるBaseDBの起動・停止の自動化に入っていきます。

まず、OCI CLI を導入したサーバで、OCI CLI を使用した Base DB の起動・停止コマンドを実行するスクリプトを作成します。

その後、cron やタスクスケジューラなど OS 側の機能を使用してシェルスクリプトの実行を自動化します。


BaseDB の起動・停止コマンドを実行するシェルスクリプトの作成

本記事では、OCI CLI を導入したオンプレミスの Oracle Linux 8.5 x86-64 のサーバで、BaseDB の起動・停止コマンドを実行するシェルスクリプトを作成します。


起動用のシェルスクリプトサンプル

以下のサンプルはシンプルな作りのため、条件分岐などは要件に応じて作り込む必要があります。ファイル名と配置場所は任意です。

/home/kka/work/oci_start.sh

 
 #!/bin/bash
 date >> /home/kka/work/logs/oci_start.log
 /home/kka/bin/oci db node start --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq | grep -ie lifecycle-state >> /home/kka/work/logs/oci_start.log
 sleep 300
 echo sleep 300s >> /home/kka/work/logs/oci_start.log
 date >> /home/kka/work/logs/oci_start.log
 /home/kka/bin/oci db node get --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq | grep -ie lifecycle-state >> /home/kka/work/logs/oci_start.log
 

停止用のシェルスクリプトサンプル

以下のサンプルはシンプルな作りのため、条件分岐などは要件に応じて作り込む必要があります。ファイル名と配置場所は任意です。

/home/kka/work/oci_stop.sh

 
 #!/bin/bash
 date >> /home/kka/work/logs/oci_stop.log
 /home/kka/bin/oci db node stop --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq | grep -ie lifecycle-state  >> /home/kka/work/logs/oci_stop.log
 sleep 300
 echo sleep 300s >> /home/kka/work/logs/oci_stop.log
 date >> /home/kka/work/logs/oci_stop.log
 /home/kka/bin/oci db node get --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXxv4q4arrcw7sgka7xq | grep -ie lifecycle-state >> /home/kka/work/logs/oci_stop.log
 

シェルスクリプトの動作確認

各シェルスクリプトの作成後、実行権限を付与します。

 
 $ chmod +x /home/kka/work/oci_start.sh
 $ chmod +x /home/kka/work/oci_stop.sh
 

実行権限を付与した後、各シェルスクリプトを手動実行することで BaseDB の起動・停止が正常に行われるか確認します。

 
 $ /home/kka/work/oci_start.sh
 $ /home/kka/work/oci_stop.sh
 

OS 側の機能でシェルスクリプトの実行を自動化

本記事では cron を利用してシェルスクリプトの実行を自動化します。


crond の状態確認方法

cron を使用するには crond のサービスが起動している必要があるため、crond のサービスの状態を確認します。
本記事では systemd を使用してサービス管理を行う環境のため、systemctl コマンドを使用しています。
確認の結果、” Active: active (running) ” と表示されている場合は crond のサービスが起動しています。

 
 $ systemctl status crond
 
 ● crond.service - Command Scheduler
    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor prese>
    Active: active (running) since Tue 2023-04-18 02:04:00 UTC; 24h ago
  Main PID: 140805 (crond)
     Tasks: 1 (limit: 48719)
    Memory: 1.2M
    CGroup: /system.slice/crond.service
            mq140805 /usr/sbin/crond -n
    :
  

crond の起動方法

crond のサービスが起動していない場合は root ユーザーで起動します。

 
 # systemctl start crond
 

cron の自動実行設定方法

crontab -e コマンドを実行することでエディタが起動するので、cron の設定を行います。
設定後、crontab -l コマンドを実行することで cron の設定を確認できます。

時刻は OS のタイムゾーンに準拠する 点にご注意ください。
本記事のクライアント環境では OS のタイムゾーンが UTC のため、以下の例では、 毎日 1:00 UTC(10:00 JST) に /home/kka/work/oci_start.sh を実行、毎日10:00 UTC(19:00 JST) に /home/kka/work/oci_stop.sh を実行します。

フォーマット

分 時 日 月 曜日 コマンド

※曜日の指定は 0(日曜) - 6(土曜) で指定します


起動・停止が自動実行されているか確認

OCI コンソールから、接続先のインスタンスのページを表示し、”リソース”より「作業リクエスト」を選択します。

Start Node” と ”Stop Node” の開始日時や終了日時から、cron で指定した時刻に起動・停止が実行されているか確認します。

OCI コンソールの状態


BaseDB の起動・停止に関する注意点

ノード停止に伴い、DB は shutdown abort で停止される

BaseDB のノードを停止した場合、DB は shutdown abort で停止されるという仕様の動作になっています。

shutdown abort で停止される明確な理由については公開されていませんが、OCI では課金が発生してしまう都合上、OCI の設計思想として速やかに停止するために abort で停止されると考えられます。

DB は shutdown abort で停止されますが、次回起動時に自動的にクラッシュリカバリが実行されるため、ユーザー側での対応は不要です。


停止中は BaseDB の自動バックアップが取得されない

BaseDB の自動バックアップ取得は、ノードが起動した状態、および DB インスタンスがオープンした状態でなければ実行されません。

そのため、BaseDB の自動バックアップのスケジュールを考慮してノードの自動停止時刻を決定する必要があります。


OS コマンドでの再起動を行うことは可能か

技術的には OS コマンド (reboot コマンド)による再起動は可能ですが、オラクル社が公開している以下資料に記載があるとおり、OS にログインして直接操作可能な処理であっても実行することは非推奨であり、OCI 上で実装されているツールの利用が推奨されています。

https://speakerdeck.com/oracle4engineer/bm-ji-shu-xiang-xi?slide=52

  Base Database Service
  非推奨・お勧めしない操作、注意点

  6 OCIコンソール、ocicliで実施可能な処理をその他の処理方法で直接実施しないでください。


プロキシサーバを経由して OCI CLI を実行する場合は環境変数 https_proxy の指定が必要

BaseDB の起動・停止に限った内容ではありませんが、OCI CLI を実行する際にプロキシサーバを経由する場合、事前に環境変数 https_proxy の指定が必要です。


Linux OS の場合

コマンド構文

export https_proxy=http://<プロキシサーバの IP アドレスまたはホスト名>:<ポート番号>

または

export https_proxy=http://<プロキシ認証のユーザー名>:<パスワード>@<プロキシサーバの IP アドレスまたはホスト名>:<ポート番号>

 
 $ export https_proxy=http://kka-proxy:8090/
 

Windows OS の場合

コマンド構文

set https_proxy=http://<プロキシサーバの IP アドレスまたはホスト名>:<ポート番号>

または

set https_proxy=http://<プロキシ認証のユーザー名>:<パスワード>@<プロキシサーバの IP アドレスまたはホスト名>:<ポート番号>

 
 DOS> set https_proxy=http://kka-proxy:8090/
 

まとめ

本記事では BaseDB の起動・停止を自動化する方法をご紹介しました。

停止忘れによる意図しない課金を抑えるため、また、管理者の方の管理負荷を下げるために、本記事がお役に立てば幸いです。


執筆者情報

こばやしけんた プロフィール画像

2008年度アシストに入社後、Oracle WebLogic Server や Oracle HTTP Server を中心にサポートエンジニアとして活動しており、これまでに4000件以上の問い合わせを対応。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Cloud
  • Oracle Database
2024.12.02

OCIでGPUインスタンスを構築してみた

OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。

  • Oracle Cloud
  • Oracle Database
2024.11.15

Oracle Cloud VMware SolutionにおけるVMware HCXとは?

前回の記事でお伝えしたとおり、OCVSを構築するとVMwareの複数の機能が利用可能です。 それらの機能の中で、今回はHCXの概要や具体的な機能、OCVSでHCXを利用するメリットなどをお伝えします!

  • Oracle Database
  • Oracle Cloud
2024.11.05

Oracle Database 23ai新機能!メモリーを有効活用する統合メモリー管理

2024年5月にOracle Cloud環境にて、先行してOracle DB 23aiがリリースされました。 Oracle Base Database ServiceにおけるOracle Database 23aiの検証結果を報告します。 今回は「統合メモリー管理」をテーマにお伝えします。

ページの先頭へ戻る