Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle Database 23ai 新機能#4 Application Continuity

Oracle Database 23ai 新機能#4 Application Continuity

2024年9月26日開催 Oracle Database Technology Night#82 
Application ContinuityのOracle Database 23ai新機能を紹介した資料です。

oracle4engineer

October 02, 2024
Tweet

Video

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. アプリケーションは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
  2. トランザクションの途中で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
  3. トランザクションは異常終了する トランザクションの途中で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
  4. セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  5. セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  6. 再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  7. 再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  8. 再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  9. 再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  10. 再接続 セッションが切断されても自動再接続&更新トランザクション自動再実行 アプリケーション・コンティニュイティ アプリケーション 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
  11. 再接続 再実行完了するまで待たされる アプリケーション・コンティニュイティの課題 アプリケーション 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
  12. 再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 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
  13. 更新トランザクションを自動再実行してもよいか? • 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
  14. COMMITがエラーになったらトランザクションは完了していない? アプリケーション Oracle接続ドライバ COMMIT COMMIT Oracleサーバー COMMIT LGWR ログ・ライター・プロセス オンラインREDOログ・ファイル

    COMMIT COMMITがオンラインREDOログ・ファイルに書き込み完了: していない → トランザクション未完了 → ロールバック していた → トランザクション完了 未完了 完了 ? Copyright © 2024, Oracle and/or its affiliates 19
  15. 再接続 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
  16. トランザクション・ガード機能の高速化 • トランザクション処理を再実行する前にトランザクション・ガードの機能でトランザクション状態を確認する。 • トランザクション状態を管理する内部的な動作の高速化。 21cまで • トランザクション状態を管理する内部的な表(LTXID_TRANS表)がある • SQLで操作

    • 更新するとREDOログが生成される 23ai • トランザクション状態の管理方式を変更 • 更新してもREDOログが生成されない • 動作の高速化 Database Native Transaction Guard TXN_UID STATE … トランザクション状態 Copyright © 2024, Oracle and/or its affiliates 22
  17. データベース・サービスの設定 • (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
  18. PARSE → EXECUTE → FETCH SQL文の実行過程 PARSE 結果集合 対応関係の定義 インターフェース

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

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

    対応関係の定義 インターフェース SQL実行計画 SQL文を解析してSQL実行計画を自動合成 アルゴリズム実装 SQL実行計画を実行 入力 出力 結果集合から行を逐次読み出す 集合 実行 SQL実行計画 読み出し 結果集合 Copyright © 2024, Oracle and/or its affiliates 27
  21. FETCHの再実行をどこから始めるか Resumable Cursor 結果集合の先頭からFETCHも再実行していた 結果集合 FETCH FETCH FETCH FETCH FETCH

    FETCH FETCH FETCH カーソルを再実行前の位置まで進めてからFETCH 結果集合 カーソル位置 カーソル位置 21cまで 23ai Copyright © 2024, Oracle and/or its affiliates 29
  22. 再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 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
  23. 再接続 内部実装の改良による再実行処理の高速化 アプリケーション・コンティニュイティ 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 再実行開始前倒し
  24. JDBC Driver • jarファイルの統合 Oracle Data Provider for .NET (ODP.NET)

    • 接続ドライバの整理 • Core • Managed • Unmanaged 接続ドライバの整理統合 Copyright © 2024, Oracle and/or its affiliates 33
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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