Oracle Databaseを運用していて「ノード障害が起こったらどうする?」に対応する答えが、アプリケーション・コンティニュイティ(Application Continuity)です
簡単に述べると
- Database 12.1 できれば19c以降のバージョンであれば対応している
- RACノード障害時にOLTP系処理は全て再実行して救うことができる
しかも、アプリケーションの改変はほぼなし - バッチジョブは救えない。別の仕組みでリトライする仕組みが必要(従来どおり)
ですが、実装が非常に簡単なのでDBAとしては知っておきたい機能です
では、見ていきましょう
情報ソース(本家Oracleの解説動画)
情報ソースは本家本元からです。
なんでこの素晴らしい動画が数十回しか視聴されていないのか。。。不思議ですね。
その説明スライドはこちら
必要なライセンス
Application Continuityには、個別のライセンスは必要としません
- Oracle Enterprise Editionであること
-
加えて、以下のどちらかのライセンスを保有していること
Real Application Clusters (RAC)
または
Active Data Guard
情報ソースは以下の通り
"Requires the Oracle Active Data Guard option or the Oracle Real Application Clusters option"
- 「Y」になっているものは、利用可能と定義されている。以下はすべてOK
EE: オンプレEnterprise Edition環境
EE-ES: オンプレEngineered Systems(Exadata)環境
DBCS EE-EP: Oracle Cloud のDatabase Cloud Service環境
ExaCS: Oracle CloudのExadata Cloud Service
Oracle database Enterprise Editionであって、更にADGまたはRACのライセンス追加購入が必要です
アプリケーションコンティニュイティを使うようなデータベースであれば最低限RACは購入しているでしょう
AWSでアプリケーション・コンティニュイティ
AWSではEC2での手組のRACがサポートされていません。RDS for OracleがRACをサポートしています。AWSでApplication Continuityを使用したい場合は、RDS for Oracleで利用可否を確認する必要があります
Azureでアプリケーション・コンティニュイティ
AzureではOracle RACを動作させる方法が提供されていません。残念ながらAzureではApplication Continuityは使用できないと考えたほうが良さそうです
AzureならSQL Serverを利用することになるでしょう
必要なデータベースバージョン
11gでは利用できません、12c以降と考えてください
https://speakerdeck.com/oracle4engineer/apurikesiyonkonteiniyuitei?slide=22
より高機能・最新機能の透過的アプリケーション・コンティニュイティ(TAC)が本命です。これから利用を始めるのであればDatabase 19cでの利用が中心になってくるでしょう
透過的アプリケーション・コンティニュイティ / Transparent Application Continuity (18c~)
TACと略して記載されます
アプリケーション・コンティニュイティで制御可能だったいくつかの動作を決め打ち
ほとんどのアプリケーションで適用可能な動作
リプレイ境界(トランザクションの境界)を自動挿入
サード・パーティ製Javaアプリケーション・サーバーでもコード修正なしに使用可能(19c~)
https://speakerdeck.com/oracle4engineer/apurikesiyonkonteiniyuitei から引用
アプリケーション・コンティニュイティ / Application Continuity (12c Release 1~)
ACと略して記載されます
これはTACが利用できない18c未満のバージョンで利用を検討してください
Oracleサーバー障害を検出すると自動再接続しトランザクションを自動再実行
DBMS外部に副作用のあるプロシージャの再実行を制御可能https://speakerdeck.com/oracle4engineer/apurikesiyonkonteiniyuitei から引用
アプリケーションコンティニュイティの動作
簡単にまとめると、アプリケーション・コンティニュイティは、以下のとおりです
- TAC/ACともに、DB側はとっても簡単に実装可能
データベース接続サービスを設定するだけ - TAC/ACともに、Oracle Client側の考慮事項が数点あるので注意
Oracle Client 対応がある(JDBC Thin Driver / OCI Session Pool / DOP.Net Unmanaged Driver)
コネクションプール使っているか - TAC/ACともに、アプリケーションの回収はほぼ不要
アプリケーション・コンティニュイティで再実行できないコードになっていないか確認をして、対応できなければ諦めればいい - Application Continuityを使える点を19cアップグレードの理由にしてもいいくらい素晴らしい機能
- 短いトランザクションに向いている。長いトランザクションには向かない
OLTP処理には使える(OLTP向けに実装されている)
バッチジョブには向かない(複数回コミットが必要なバッチには向かない)
詳しくは、本家のYoutube画像とスライド(Speakerdeck)を御覧ください
めちゃめちゃわかりやすく、丁寧に説明されています
関連記事です
なんとなくPartitionを使うのではなく、理由を持ってPartitionを使うべきかなとは思っています。せっかく購入するのでちゃんと理由が必要ですよね。
最新は Oracle Database 21c です。19c のほうが長く利用できますが新しい機能は21cに詰まっているようです
以上です