Slide 1

Slide 1 text

Application Continuity Oracle Database Technology Night #82 日下部明 日本オラクル株式会社 2024年9月26日

Slide 2

Slide 2 text

アプリケーション・コンティニュイティとは • トランザクションの途中でデータベース・サーバーに障害が発生したら? • トランザクションの自動再実行 内部実装の改良による自動再実行の高速化 • Database Native Transaction Guard • Resumable Cursor 接続ドライバの整理統合 • JDBC Driver • Oracle Data Provider for .NET (ODP.NET) Application Continuity Copyright © 2024, Oracle and/or its affiliates 2

Slide 3

Slide 3 text

アプリケーションはOracle接続ドライバを介してOracleサーバーに接続 アプリケーション Oracle接続ドライバ Oracleサーバー アプリケーション・サーバー (Oracleクライアント) ネットワーク接続 (TCP/IP) データベース・サーバー (Oracleサーバー) Copyright © 2024, Oracle and/or its affiliates 3

Slide 4

Slide 4 text

アプリケーションはOracle接続ドライバを介してSQLを発行 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 Copyright © 2024, Oracle and/or its affiliates 4

Slide 5

Slide 5 text

トランザクションの途中でOracleサーバーがクラッシュすると アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 サーバーがクラッシュ トランザクションはロールバックされる Copyright © 2024, Oracle and/or its affiliates 5

Slide 6

Slide 6 text

トランザクションは異常終了する トランザクションの途中でOracleサーバーがクラッシュすると アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 サーバーがクラッシュ トランザクションはロールバックされる アプリケーションにはエラーが返る トランザクション異常終了 Copyright © 2024, Oracle and/or its affiliates 6

Slide 7

Slide 7 text

セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracle接続ドライバのメモリー上にサーバーとの処理を記憶 Copyright © 2024, Oracle and/or its affiliates 7

Slide 8

Slide 8 text

セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 サーバーがクラッシュ トランザクションはロールバックされる Copyright © 2024, Oracle and/or its affiliates 8

Slide 9

Slide 9 text

再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 1. 自動的に再接続 0. 切断を検出するとアプリケーション・コンティニュイティが発動 Copyright © 2024, Oracle and/or its affiliates 9

Slide 10

Slide 10 text

再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 状態確認 1. 自動的に再接続 2. トランザクション状態を確認 Copyright © 2024, Oracle and/or its affiliates 10

Slide 11

Slide 11 text

再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 状態確認 1. 自動的に再接続 2. トランザクション状態を確認 3. メモリー上に記憶していた処理を再実行 Copyright © 2024, Oracle and/or its affiliates 11

Slide 12

Slide 12 text

再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL n SQL 1 SQL 2 SQL 3 SQL n Oracleサーバー SQL 1 SQL 2 SQL 3 SQL n SQL 1 SQL 2 SQL 3 状態確認 SQL n 4. 再実行完了するとアプリケーション・コードに復帰してトランザクション続行 Copyright © 2024, Oracle and/or its affiliates 12

Slide 13

Slide 13 text

再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL n COMMIT SQL 1 SQL 2 SQL 3 SQL n COMMIT Oracleサーバー SQL 1 SQL 2 SQL 3 SQL n COMMIT SQL 1 SQL 2 SQL 3 状態確認 SQL n COMMIT 5. アプリケーションはエラーを観測せずにトランザクション完了 Copyright © 2024, Oracle and/or its affiliates 13

Slide 14

Slide 14 text

再接続 再実行完了するまで待たされる アプリケーション・コンティニュイティの課題 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL n COMMIT SQL 1 SQL 2 SQL 3 SQL n COMMIT Oracleサーバー SQL 1 SQL 2 SQL 3 SQL n COMMIT SQL 1 SQL 2 SQL 3 状態確認 SQL n COMMIT 再実行完了するまでSQL実行API呼び出しが待たされる Copyright © 2024, Oracle and/or its affiliates 14

Slide 15

Slide 15 text

再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 23ai 新機能 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 状態確認 Database Native Transaction Guard Resumable Cursor トランザクション状態確認機能の高速化 SELECT文再実行のFETCH動作の高速化 Copyright © 2024, Oracle and/or its affiliates 15

Slide 16

Slide 16 text

Database Native Transaction Guard トランザクション状態確認の高速化 Copyright © 2024, Oracle and/or its affiliates 16

Slide 17

Slide 17 text

更新トランザクションを自動再実行してもよいか? • COMMITがエラーを返したらトランザクションは完了していない? • rollbackされている…はず? • Transaction Guard • トランザクション状態を確認する機能 • Application Continuity (12c~)のために実装された • Database Native Transaction Guard • Transaction Guardの高速化 Database Native Transaction Guard Copyright © 2024, Oracle and/or its affiliates 17

Slide 18

Slide 18 text

COMMITがエラーを返したらトランザクションは完了していない? アプリケーション Oracle接続ドライバ COMMIT COMMIT Oracleサーバー COMMIT アプリケーションがCOMMIT発行したらエラーを観測した COMMITは成功した? ? Copyright © 2024, Oracle and/or its affiliates 18

Slide 19

Slide 19 text

COMMITがエラーになったらトランザクションは完了していない? アプリケーション Oracle接続ドライバ COMMIT COMMIT Oracleサーバー COMMIT LGWR ログ・ライター・プロセス オンラインREDOログ・ファイル COMMIT COMMITがオンラインREDOログ・ファイルに書き込み完了: していない → トランザクション未完了 → ロールバック していた → トランザクション完了 未完了 完了 ? Copyright © 2024, Oracle and/or its affiliates 19

Slide 20

Slide 20 text

再接続 Application Continuityを実装するために12c Release 1で追加 Transaction Guard - トランザクション状態を確認する機能 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 状態確認 1. 自動的に再接続 2. トランザクション状態を確認 Transaction Guard Copyright © 2024, Oracle and/or its affiliates 20

Slide 21

Slide 21 text

論理トランザクションIDを指定するとそのトランザクションの状態を返す Transaction Guard - トランザクション状態を確認する機能(12.1~) アプリケーション Oracle接続ドライバ Oracleサーバー 論理トランザクションID (LTXID) TXN_UID STATE … トランザクション状態 • USER_CALL_COMPLETED ? • COMMITED? Copyright © 2024, Oracle and/or its affiliates 21

Slide 22

Slide 22 text

トランザクション・ガード機能の高速化 • トランザクション処理を再実行する前にトランザクション・ガードの機能でトランザクション状態を確認する。 • トランザクション状態を管理する内部的な動作の高速化。 21cまで • トランザクション状態を管理する内部的な表(LTXID_TRANS表)がある • SQLで操作 • 更新するとREDOログが生成される 23ai • トランザクション状態の管理方式を変更 • 更新してもREDOログが生成されない • 動作の高速化 Database Native Transaction Guard TXN_UID STATE … トランザクション状態 Copyright © 2024, Oracle and/or its affiliates 22

Slide 23

Slide 23 text

データベース・サービスの設定 • (Transparent) Application Continuityの設定はデータベース・サービスの属性 -failovertype • Database Native Transaction Guardの属性パラメータの追加 -commit_outcome_fastpath • Transaction Guardを有効にするとデフォルトでDatabase Native Transaction Guardも有効になる Database Native Transaction Guard $ srvctl add service … -failovertype AUTO -commit_outcome true [-commit_outcome_fastpath true] $ srvctl config service … : Commit Outcome: TRUE Commit Outcome Fastpath: TRUE : 設定 確認 -commit_outcome true を設定すると、デフォルトで -commit_outcome_fastpath true となる Native Transaction Guard Transaction Guard (Transparent) Application Continuity Native Transaction Guard Transaction Guard Copyright © 2024, Oracle and/or its affiliates 23

Slide 24

Slide 24 text

Resumable Cursor アプリケーション・コンティニュイティのFETCH再実行の高速化 Copyright © 2024, Oracle and/or its affiliates 24

Slide 25

Slide 25 text

PARSE → EXECUTE → FETCH SQL文の実行過程 PARSE 結果集合 対応関係の定義 インターフェース SQL実行計画 SQL文を解析してSQL実行計画を自動合成 アルゴリズム実装 入力 出力 集合 Copyright © 2024, Oracle and/or its affiliates 25

Slide 26

Slide 26 text

PARSE → EXECUTE → FETCH SQL文の実行過程 PARSE EXECUTE 結果集合 対応関係の定義 インターフェース SQL実行計画 SQL文を解析してSQL実行計画を自動合成 アルゴリズム実装 SQL実行計画を実行 入力 出力 集合 実行 SQL実行計画 結果集合 Copyright © 2024, Oracle and/or its affiliates 26

Slide 27

Slide 27 text

PARSE → EXECUTE → FETCH SQL文の実行過程 PARSE EXECUTE FETCH 結果集合 対応関係の定義 インターフェース SQL実行計画 SQL文を解析してSQL実行計画を自動合成 アルゴリズム実装 SQL実行計画を実行 入力 出力 結果集合から行を逐次読み出す 集合 実行 SQL実行計画 読み出し 結果集合 Copyright © 2024, Oracle and/or its affiliates 27

Slide 28

Slide 28 text

FETCHの再実行をどこから始めるか Resumable Cursor 結果集合の先頭からFETCHも再実行していた 結果集合 FETCH FETCH FETCH FETCH カーソル位置 21cまで Copyright © 2024, Oracle and/or its affiliates 28

Slide 29

Slide 29 text

FETCHの再実行をどこから始めるか Resumable Cursor 結果集合の先頭からFETCHも再実行していた 結果集合 FETCH FETCH FETCH FETCH FETCH FETCH FETCH FETCH カーソルを再実行前の位置まで進めてからFETCH 結果集合 カーソル位置 カーソル位置 21cまで 23ai Copyright © 2024, Oracle and/or its affiliates 29

Slide 30

Slide 30 text

再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 23ai 新機能 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 状態確認 Database Native Transaction Guard Resumable Cursor トランザクション状態確認機能の高速化 SELECT文再実行のFETCH動作の高速化 Copyright © 2024, Oracle and/or its affiliates 30

Slide 31

Slide 31 text

再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 23ai 新機能 アプリケーション Oracle接続ドライバ SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 Oracleサーバー SQL 1 SQL 2 SQL 3 SQL 1 SQL 2 SQL 3 状態確認 Database Native Transaction Guard Resumable Cursor トランザクション状態確認機能の高速化 SELECT文再実行のFETCH動作の高速化 Copyright © 2024, Oracle and/or its affiliates 31 Smooth Reconfiguration 再実行開始前倒し

Slide 32

Slide 32 text

接続ドライバの整理統合 JDBC Driver Oracle Data Provider for .NET Copyright © 2024, Oracle and/or its affiliates 32

Slide 33

Slide 33 text

JDBC Driver • jarファイルの統合 Oracle Data Provider for .NET (ODP.NET) • 接続ドライバの整理 • Core • Managed • Unmanaged 接続ドライバの整理統合 Copyright © 2024, Oracle and/or its affiliates 33

Slide 34

Slide 34 text

JARファイルの統合 JDBC Driver ojdbc8.jar ojdbc8dms.jar ojdbc8_g.jar ojdbc8dms_g.jar $ pwd /u01/app/oracle/product/21.0.0/dbhome_3/jdbc/lib $ ls ojdbc11.jar ojdbc8.jar rsi.jar ojdbc11_g.jar ojdbc8_g.jar simplefan.jar ojdbc11dms.jar ojdbc8dms.jar ojdbc11dms_g.jar ojdbc8dms_g.jar 21cまで 機能によってJARファイルを使い分ける • dms : Data Mediator Serviceメトリック対応 • _g : ロギング対応 Copyright © 2024, Oracle and/or its affiliates 34

Slide 35

Slide 35 text

JARファイルの統合 JDBC Driver $ pwd /u01/app/oracle/product/23.0.0.0/dbhome_1/jdbc/lib $ ls ojdbc11.jar ojdbc8.jar rsi.jar simplefan.jar ojdbc8.jar ojdbc8dms.jar ojdbc8_g.jar ojdbc8dms_g.jar ojdbc8.jar $ pwd /u01/app/oracle/product/21.0.0/dbhome_3/jdbc/lib $ ls ojdbc11.jar ojdbc8.jar rsi.jar ojdbc11_g.jar ojdbc8_g.jar simplefan.jar ojdbc11dms.jar ojdbc8dms.jar ojdbc11dms_g.jar ojdbc8dms_g.jar 21cまで 23ai 機能によってJARファイルを使い分ける • dms : Data Mediator Serviceメトリック対応 • _g : ロギング対応 JARファイルを統合 Copyright © 2024, Oracle and/or its affiliates 35

Slide 36

Slide 36 text

Microsoft .NET環境用の接続ドライバ • 21cまでは(Transparent) Application Continuityを使用するためにはUnmanaged Driverが必要 Oracle Data Provider for .NET (ODP.NET) ドライバの種類 21cまで Core Driver • 最小限の機能 Managed Driver • .NET Managed Code Unmanaged Driver • 内部的にOracle Call Interfaceを使用 • (T)ACを使用可能 Unmanaged Managed Core できることの範囲 Copyright © 2024, Oracle and/or its affiliates 36

Slide 37

Slide 37 text

Microsoft .NET環境用の接続ドライバ • 21cまでは(Transparent) Application Continuityを使用するためにはUnmanaged Driverが必要 • 23aiではManaged Driverで(T)ACを使用できるようになり、Unmanaged Driverは非推奨(将来廃止予定) Oracle Data Provider for .NET (ODP.NET) ドライバの種類 21cまで 23ai Core Driver • 最小限の機能 • (T)ACを使用可能 Managed Driver • .NET Managed Code • .NET Managed Code • (T)ACを使用可能 Unmanaged Driver • 内部的にOracle Call Interfaceを使用 • (T)ACを使用可能 • 非推奨(将来廃止予定) Unmanaged Managed Core (Unmanaged) Managed Core できることの範囲 Copyright © 2024, Oracle and/or its affiliates 37

Slide 38

Slide 38 text

アプリケーション・コンティニュイティとは • トランザクションの途中でデータベース・サーバーに障害が発生したら? • トランザクションの自動再実行 内部実装の改良による自動再実行の高速化 • Database Native Transaction Guard • Resumable Cursor 接続ドライバの整理統合 • JDBC Driver • Oracle Data Provider for .NET (ODP.NET) Application Continuity Copyright © 2024, Oracle and/or its affiliates 38

Slide 39

Slide 39 text

ありがとうございました。 Copyright © 2024, Oracle and/or its affiliates 39

Slide 40

Slide 40 text

2024年9月26日Oracle Database Technology Night #82セッション中にいただいた質問を掲載しています。 ご質問 23ai から Unmanaged が非推奨とのことですが、Unmanaged でしか使用できない、機能はありますでしょうか。 回答 Oracle固有機能のクラスで使えないものがあります。 しかし、一般的なアプリケーションではこれら固有のクラスが必要になることはほとんどありません。 各ドライバで使用できないクラスのリストは以下のマニュアルをご参照ください。 https://docs.oracle.com/cd/G11854_01/odpnt/intro004.html#GUID-75DC70F1-8F24-4190-B4EE-F2E03DFB6ED2 Q&A Copyright © 2024, Oracle and/or its affiliates 40