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

Oracle Database 21c 新機能概要

Oracle Database 21c 新機能概要

従来バージョンとの違いから特徴、操作イメージ等をそれぞれ記載しています。
(2021/11-12のTechNightでご紹介した資料を取り纏めたものになります。)

oracle4engineer

December 17, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2021, Oracle and/or its affiliates 3 グローバリゼーション 新元号の和暦のサポート

    Unicode 12.1のサポート タイムゾーン・データのゼロ・ダウンタイム・アップグレード
  2. ⽇本の和暦にて、新元号の令和(2019年5⽉1⽇に発効)をサポート 21.3 より前のバージョンにおいても、パッチ適⽤にて新元号の令和をサポート* 実⾏例 以前のバージョンでの出⼒結果 21.3での出⼒結果 新元号の令和のサポート 4 SQL> select

    2 to_char(to_date('2019/04/30','yyyy/mm/dd'),'EEYY"年"MM"月"DD"日"','NLS_CALENDAR=''Japanese Imperial''') "2019/04/30", 3 to_char(to_date('2019/05/01','yyyy/mm/dd'),'EEYY"年"MM"月"DD"日"','NLS_CALENDAR=''Japanese Imperial''') "2019/05/01" from dual; 2019/04/30 2019/05/01 --------------------- --------------------- 平成31年04月30日 令和01年05月01日 Copyright © 2021, Oracle and/or its affiliates *⽇本の元号の変更⽅法について (Doc ID 2416596.1) 2019/04/30 2019/05/01 --------------------- --------------------- 平成31年04月30日 平成31年05月01日
  3. • 前提 • サマータイムのルールに変更があった場合、タイム・ゾーン・データ付きタイムスタンプをアップグレードする必要がある • これまで、タイム・ゾーン・データ付きタイムスタンプのアップグレードにはダウンタイムが発⽣していた • 概要 • DBMS_DSTパッケージを使⽤したアップグレードは、任意のタイミングで1回再起動がする必要があるが、

    アップグ レード・ウィンドウを OPEN モードで実施可能になった • utltz_*スクリプトを使⽤したアップグレードにおいて、プロセスの実⾏中は、データベースが複数回⾃動的に再起動 され、アプリケーションはデータベース内のタイム・ゾーン・データの問合せや挿⼊は不可となっている タイムゾーン・データのゼロ・ダウンタイム・アップグレード Copyright © 2021, Oracle and/or its affiliates 6
  4. DBMS_DSTパッケージを使⽤する場合 これまでは、ダウンタイムが発⽣していた 1. 最新バージョンのタイム・ゾーン・ファイルをインストール 2. 準備ウィンドウを開始し、アップグレードの対象を確認 3. 準備ウィンドウを終了 4. データベースを停⽌

    5. UPGRADE モードでデータベースを起動 6. アップグレード・ウィンドウを開始 7. OPEN モードでデータベースを再起動 8. すべての表内のタイム・ゾーン・データ付きタイムスタン プデータをアップグレード 9. アップグレード・ウィンドウを終了 任意のタイミングのデータベース再起動で実施可能に 1. 最新バージョンのタイム・ゾーン・ファイルをインストール 2. 準備ウィンドウを開始し、アップグレードの対象を確認 3. 準備ウィンドウを終了 4. TIMEZONE_VERSION_UPGRADE_ONLINE 初 期化パラメータを true に設定 5. OPEN モードでデータベースを再起動 6. アップグレード・ウィンドウを開始 7. すべての表内のタイム・ゾーン・データ付きタイムスタン プデータをアップグレード 8. アップグレード・ウィンドウを終了 • あ タイム・ゾーン・データのアップグレード⼿順について Copyright © 2021, Oracle and/or its affiliates 7 アップグレードが必要な 表のロックし、 ダウンタイムが発⽣ 任意のタイミングの 再起動のみ
  5. Copyright © 2021, Oracle and/or its affiliates 8 管理系の新機能 読取り専⽤のOracleホームのデフォルト

    Oracle JVMセキュリティの強化 SQL*Netの診断機能の向上 Oracle Databaseの診断機能の強化 動的な順序キャッシュ・サイズ変更 Oracle Grid Infrastructureホームへのパッチ適⽤と切り替え
  6. Read-Write Oracleホームのディレクトリ構成 10 /u01/app/oracle/ admin/ audit/ cfgtoollogs/ checkpoints/ diag/ oradata/

    product /19.0.0 /dbhome_1/ assistants/ dbs/ install/ log/ network/ rdbms/ … ORACLE_HOME ORACLE_BASE ORACLE_BASE_HOME ORACLE_BASE_CONFIG Copyright © 2021, Oracle and/or its affiliates
  7. Read-only Oracleホームのディレクトリ構成 11 ORACLE_BASE_HOME /u01/app/oracle/ … dbs/ initorcl.ora orapworcl spfileorcl.ora

    … … homes/ OraDB21_home1/ assistants/ dbs/ install/ log/ network/ rdbms/ … … product /21.0.0 /dbhome_1/ assistants/ dbs/ install/ log/ network/ rdbms/ … ORACLE_BASE_CONFIG ORACLE_BASE ORACLE_HOME Copyright © 2021, Oracle and/or its affiliates
  8. 新しいORACLE_BASE_HOMEとORACLE_BASE_CONFIGディレクトリ ORACLE_BASE_HOME • ユーザー固有のファイル、インスタンス固有のファイル、ログファイルなどを配置 • 例) rdbms、network、log ディレクトリなど • Read-only

    Oracle ホーム構成︓ORACLE_BASE_HOME= ORACLE_BASE/Homes/<HOME_NAME> • Read-Write Oracle ホーム構成(従来)︓ORACLE_BASE_HOME = ORACLE_HOME ORACLE_BASE_CONFIG • 構成ファイルを配置 • 例) dbs ディレクトリ • ORACLE_BASE_CONFIG/dbs に含まれる各ファイルには $ORACLE_SID が含まれる • Read-only Oracle ホーム構成︓ORACLE_BASE_CONFIG = ORACLE_BASE • Read-Write Oracle ホーム構成(従来)︓ORACLE_BASE_CONFIG = ORACLE_HOME 読取り専⽤のOracleホームのデフォルト 12 Copyright © 2021, Oracle and/or its affiliates
  9. Read-Write および Read-only Oracleホームのディレクトリ・パスの⽐較例 読取り専⽤のOracleホームのデフォルト 13 ディレクトリ Read-only Oracleホーム時のパス Read-Write

    Oracleホーム時のパス ORACLE_BASE /u01/app/oracle /u01/app/oracle ORACLE_HOME /u01/app/oracle/product/21.0.0/dbhome_1 /u01/app/oracle/product/19.0.0/dbhome_1 ORACLE_BASE_HOME <ORACLE_BASE>/homes/HOME_NAME /u01/app/oracle/homes/OraDB21Home1 <ORACLE_HOME> /u01/app/oracle/product/19.0.0/dbhome_1 ORACLE_BASE_CONFIG <ORACLE_BASE> /u01/app/oracle <ORACLE_HOME> /u01/app/oracle/product/19.0.0/dbhome_1 Network <ORACLE_BASE_HOME>/network /u01/app/oracle/homes/OraDB21Home1/network <ORACLE_HOME>/network /u01/app/oracle/product/19.0.0/dbhome_1/netwo rk dbs <ORACLE_BASE_CONFIG>/dbs /u01/app/oracle/dbs <ORACLE_HOME>/dbs /u01/app/oracle/product/19.0.0/dnhome_1/dbs Copyright © 2021, Oracle and/or its affiliates
  10. 現在 Read-Write または Read-only のどちらの構成か確認する⽅法 orabasehomeコマンドおよびorabaseconfigコマンドの出⼒結果を⽐較 同⼀であれば、従来型のファイル・パス、異なれば、Read-only Oracleホームのファイルパス orabasehomeコマンドを実⾏すると、現在の ORACLE_HOME_BASE

    のパスを表⽰ orabaseconfigコマンドを実⾏して得られるORACLE_BASE_CONFIG のパスを表⽰ 従来型の出⼒例(19c) 読取り専⽤のOracleホームのデフォルト 14 $ $ORACLE_HOME/bin/orabasehome /u01/app/oracle/homes/OraDB21000_home1 $ $ORACLE_HOME/bin/orabasehome /u01/app/oracle/product/19.0.0/dbhome_1 $ $ORACLE_HOME/bin/orabaseconfig /u01/app/oracle/product/19.0.0/dbhome_1 $ $ORACLE_HOME/bin/orabaseconfig /u01/app/oracle Copyright © 2021, Oracle and/or its affiliates
  11. PATH_PREFIX句、PDB_OS_CREDENTIALパラメータ 以下の2つのパラメータもロックダウン・プロファイルで指定可能 • CREATE PLUGGABLE DATABASE⽂のPATH_PREFIX句 • PDBに関連付けられたディレクトリ・オブジェクトのファイル・パスを指定したディレクトリおよびサブディレクトリに制限 • PDB_OS_CREDENTIAL初期化パラメータ

    • OSプロセスをフォークする際のOSユーザー識別⼦を指定するものです ロックダウン・プロファイルは、プラガブル・データベース(PDB)とコンテナ・データベース(CDB)での特定の操作や機能を 制限するメカニズムで、以前のリリースより、次のパラメータはロックダウン・プロファイルで実装済 • OS_ACCESS • NETWORK_ACCESS • JAVA • JAVA_RUNTIME • JAVA_OS_ACCESS Oracle JVMセキュリティの強化 Copyright © 2021, Oracle and/or its affiliates 15
  12. これまでのバージョンでは、SQL*Net接続に、クライアントからOracle Connection Manager (CMAN)へ、その後サー バーへなどの複数のホップがある場合は、既存のログおよびトレースからの診断情報の関連付けは困難 21cでは、CONNECTION_ID_PREFIXを利⽤してアプリケーション固有のIDを接続識別⼦(CONNECTION_ID)に追加 可能になり、トレースおよびログでネットワーク接続ごとに⼀意に識別することが可能 SQL*Netの診断機能の向上 Copyright ©

    2021, Oracle and/or its affiliates 16 net_service_name= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=...) (ADDRESS=...)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) ((CONNECTION_ID_PREFIX=AAAAA))) “Exception in thread "main" java.sql.SQLRecoverableException: ORA12506, TNS:listener rejected connection based on service ACL filtering (CONNECTION_ID=AAAAAAovDT/bCGfJngU892xAph8g==)”
  13. 注意ログ(Attention Log) アクションが必要なクリティカル・イベントに関する情報に すばやくアクセスが可能 メッセージはXMLやJSON形式で下記の情報を含む • メッセージのタイプ(Error/Warning/Notification など) • 緊急度(Immediate/Soon/Deferrable/Information)

    • 対象のユーザー • 原因や対策 ログファイルの出⼒先 $ADR_HOME/trace/attention_インスタンス名.log V$DIAG_ALERT_EXTビューによりSQLでも参照も可能 AHF(TFA)や他ツールとの連携も可能 出⼒ログ例 { "ERROR" : "Shutting down ORACLE instance (abort) (OS id: 3806)", "URGENCY" : "IMMEDIATE", "INFO" : "Shutdown is initiated by oraagent.bin@ntdb21c (TNS V1-V3). ", "CAUSE" : "A command to shutdown the instance was executed", "ACTION" : "Check alert log for progress and completion of command", "CLASS" : "CDB Instance / CDB ADMINISTRATOR / AL-1002", "TIME" : "2021-09-13T22:04:26.080+00:00" } { "NOTIFICATION" : "Starting ORACLE instance (normal) (OS id: 8044)", "URGENCY" : "INFO", "INFO" : "Additional Information Not Available", "CAUSE" : "A command to startup the instance was executed", "ACTION" : "Check alert log for progress and completion of command", "CLASS" : "CDB Instance / CDB ADMINISTRATOR / AL-1000", "TIME" : "2021-09-21T01:29:17.127+00:00" } Oracle Databaseの診断機能の強化 Copyright © 2021, Oracle and/or its affiliates 17
  14. 10秒おきに順序の使⽤率を計算し、次の10秒間に使⽤される順序番号を予測して動的にキャッシュ量を増減 (最⼩値は順序作成時に CACHE 句に指定した値) ※RU 19.10 から同機能を利⽤可能 メリット • 順序を使⽤するワークロードのパフォーマンス向上

    動的な順序キャッシュ・サイズ変更 Copyright © 2021, Oracle and/or its affiliates 18 <SEQ_Aの定義> SQL> CREATE SEQUENCE SEQ_A 2 START WITH 1 3 INCREMENT BY 1 4 NOMAXVALUE 5 NOCYCLE 6 CACHE 10; oracle Oracleサーバー・プロセス SQL> SELECT SEQ_A.NETXTVAL FROM DUAL; メモリ 2, 3, 4, 5, 6, 7, 8, 9, 10 RU 19.9 以前 メモリ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,・・・ RU 19.10 以降 順序の使⽤率を 10秒おきにチェック
  15. • 概要 • 運⽤中のOracle Grid Infrastructureホームを 同じリリースの異なるRUのOracle Grid Infrastructureホームに切り替えることができるように •

    例えば、以下のような切り替えが可能 • RU適⽤前環境から適⽤済み環境へ • 個別パッチ適⽤前環境から適⽤済み環境へ • RAC構成の場合ローリングアップグレードが可能 • メリット • 運⽤中の環境とパッチ適⽤済みの環境とをコマンドで切り替えることができるようになったことで よりシンプルにOracle Grid Infrastructureホームへのパッチ適⽤を可能に Oracle Grid Infrastructureホームへのパッチ適⽤と切り替え Copyright © 2021, Oracle and/or its affiliates 19 Oracle Grid Infrastructure 21.3 Oracle Grid Infrastructure 21.X $ mkdir -p /u01/app/21.X.0/grid $ chown grid:oinstall /u01/app/21.X.0/grid $ cd /u01/app/21.X.0/grid $ unzip -q download_location/grid.zip $ /u01/app/21.X.0/grid/gridSetup.sh –switchGridHome [-applyRU 適用するパッチの場所] [-applyOneOffs コンマ区切りの個別パッチの場所]
  16. Copyright © 2021, Oracle and/or its affiliates 20 SecureFiles 21c

    (21.3) New Features LOB領域のフラグメンテーション解消について
  17. BASICFILES と SECUREFILES SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its

    affiliates 22 管理領域 チャンク チャンク チャンク チャンク LOBセグメント BASICFILE 管理領域 チャンク LOBセグメント SECUREFILE 固定サイズのチャンクで管理 チャンクは⾃動的に調整される (連続領域を利⽤した性能重視の実装) Large Object
  18. SecureFiles (LOBセグメント) 細分化の要因とは︖ (あくまでサンプル・イメージです) SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or

    its affiliates 23 管理領域 *1 管理領域 *1 *2 *3 *4 連続した領域の確保 複数の領域に跨る Shrink コマンドによりメタデータを整え、 領域確保をより効率的にする LOBデータの削除でチャンクが解放されるが、新たに登録されるデータが そのサイズと異なる場合、チャンクが細分化される (⼤きな連続領域を持つチャンクが減る) ➡ 領域の拡張による連続領域を持つチャンクの確保 ➡ 細分化された複数チャンクによる分散格納
  19. LOBを持つ表を作成した場合の表領域 USERS 表領域内のオブジェクト (SQL Developer) SecureFiles領域管理の理解 Copyright © 2021, Oracle

    and/or its affiliates 24 USERS2 表領域にSecureFiles カラム(col1) 1つを持つ表T1を作成 -> ⾃動的に LOBINDEX と LOBSEGMENT が作成される (SecureFiles において LOBINDEXは重複の排除に使⽤される) 管理領域 使⽤チャンク 空きチャンク 使⽤チャンク 空きチャンク 空きチャンク 21.3 新機能であるSecureFilesのデフラグは、 空きチャンク情報を整理し、取得し易くする ことで領域確保時の性能を保つ
  20. 演習: SecureFile LOBの縮⼩のシナリオ SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its

    affiliates 27 CLOBの更新に伴い、 使⽤されなくなるチャンク チャンクの状態を、デフラグコマンドの実⾏と共に以下から確認する - 表領域に含まれるオブジェクト情報 - v$securefile_shrink - DBMS_SPACE.SPACE_USAGE (ノート部に詳細を記載)
  21. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 1. 検証⽤の表領域およびオブジェクトの作成 (USERS2表領域 / 表 T1) USERS2表領域に格納されているオブジェクト

    CREATE TABLE t1 ( col1 CLOB) LOB(col1) STORE AS SECUREFILE TABLESPACE users2; INSERT INTO t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 28
  22. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 2. 初期段階の更新処理 UPDATE t1 SET col1=col1||col1||col1||col1||col1||col1||col1||col1; UPDATE

    t1 SET col1=col1||col1||col1||col1||col1||col1||col1||col1; commit; SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 29 初期段階で更新された領域 更新後、解放されるチャンク
  23. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 2. 初期段階の更新処理 3. フラグメンテーションの解消① SQL> ALTER TABLE

    hr.t1 MODIFY LOB(a) (SHRINK SPACE); Table T1が変更されました。 SQL> SELECT * FROM v$securefile_shrink; SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 30 約 1.3MB 7 block の解放
  24. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 4. ⼤容量を対象とした更新 ➡ 表領域のオブジェクトを確認 SEGMENT_SIZE_BLOCKS = 43040

    USED_BLOCKS = 33312 EXPIRED_BLOCKS = 9471 UNEXPIRED_BLOCKS = 0 SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 33
  25. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 5. フラグメンテーションの解消② SQL> ALTER TABLE hr.t1 MODIFY

    LOB(a) (SHRINK SPACE); Table T1が変更されました。 SQL> SELECT * FROM v$securefile_shrink; 表領域のオブジェクトを確認 SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 34 4272 block の解放 312MB->273MB へ
  26. 演習: SecureFile LOBの縮⼩のテスト・シナリオ 5. フラグメンテーションの解消② ➡ 表領域のオブジェクトを確認 SEGMENT_SIZE_BLOCKS = 43040

    USED_BLOCKS = 33312 EXPIRED_BLOCKS = 9471 UNEXPIRED_BLOCKS = 0 SecureFiles領域管理の理解 Copyright © 2021, Oracle and/or its affiliates 35 SEGMENT_SIZE_BLOCKS = 34976 USED_BLOCKS = 33312 EXPIRED_BLOCKS = 1425 UNEXPIRED_BLOCKS = 0 SecureFilesセグメント内の 割当て済および解放済の領域のオンライン・デフラグメンテーション
  27. Copyright © 2021, Oracle and/or its affiliates 37 SQL の新機能

    SQL set演算⼦の拡張 式での初期化パラメータのサポート SQL DDL⽂のプレースホルダ SQLマクロ
  28. ANSI SQLで定義されているすべてのキーワードがサポートされるようになった 新しい演算⼦として下記2つが使⽤可能 • EXCEPT [ALL] • INTERSECT [ALL] メリット

    • 完全な ANSI 準拠により、他のデータベース・ベンダーとの互換性が⾼くなり Oracle Database への移⾏が容易になった SQL set演算⼦の拡張 Copyright © 2021, Oracle and/or its affiliates 38
  29. EXCEPT [ALL] は、2つのテーブルの⾏の差分を抽出する事が可能 機能としては MINUS [ALL]に相当する EXCEPT [ALL] Copyright ©

    2021, Oracle and/or its affiliates 39 SQL> SELECT count(*) FROM (SELECT product_id FROM inventories EXCEPT SELECT product_id FROM order_items); COUNT(*) ---------- 84 実⾏例︓ データ取得の範囲イメージ テーブルA テーブルB
  30. INTERSECT [ALL]は、指定した表の重複データのみを抽出する事が可能 ALLを指定していない場合、同⼀値のデータは1⾏にまとめて表⽰される INTERSECT [ALL] Copyright © 2021, Oracle and/or

    its affiliates 40 SQL> SELECT count(*) FROM (SELECT product_id FROM inventories INTERSECT SELECT product_id FROM order_items); COUNT(*) ---------- 124 実⾏例︓ データ取得の範囲イメージ テーブルA テーブルB
  31. 初期化パラメータの設定値を計算式で設定できるようになった 式での初期化パラメータのサポート Copyright © 2021, Oracle and/or its affiliates 41

    SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ------------ ------------------------------ sga_max_size big integer 1000M sga_target big integer 1000M … SQL> ALTER SYSTEM SET SGA_TARGET = 'sga_max_size*80/100'; システムが変更されました。 SQL> show parameter sga_target NAME TYPE VALUE ------------------------------------ ------------ ------------------------------ sga_target big integer 800M 実⾏例︓SGA_TARGET パラメータを SGA_MAX_SIZE の 80% を指定して設定 ※設定対象となっているパラメータを計算式に埋め込むのはNG SQL> ALTER SYSTEM SET SGA_TARGET=‘SGA_TARGET * 80/100’; ALTER SYSTEM SET SGA_TARGET=‘SGA_TARGET * 80/100’ * ERROR at line 1: ORA-00922: missing or invalid option
  32. 使⽤例︓CREATE USER ⽂ SQL DDL⽂のプレースホルダ Copyright © 2021, Oracle and/or

    its affiliates 43 CREATE USER :!username IDENTIFIED BY :!password DEFAULT TABLESPACE example QUOTA 10M ON example PROFILE app_user PASSWORD EXPIRE; OCIプレースホルダを使⽤したDDL⽂ OCIStmtPlaceholderSubstitute(stmthp, "username", strlen("username"), "scott", strlen("scott"), OCI_DEFAULT); OCIStmtPlaceholderSubstitute()関数の例
  33. SQL開発者が、複雑な処理を SQL⽂のどこでも使⽤可能なマクロにカプセル化することができるようになった SQL Macros の使い⽅は下記2つ • スカラー式︓複雑なSQL式を簡単にカプセル化 SELECT リスト, WHERE/HAVING,

    GROUP BY/ORDER BY句で使⽤ • テーブル式︓FROM句で使⽤されるSQLをカプセル化 メリット • SQLオプティマイザがコードを変換し、効率的な処理を実現 • 他のデータベースに存在する関数の単純な書き直しメカニズムを提供 • スカラー式のマクロが使⽤されているWHERE句は、Exadataのストレージ側のWHERE句評価にプッシュダウン可能 SQLマクロ Copyright © 2021, Oracle and/or its affiliates 44
  34. CREATE FUNCTION strpos(str VARCHAR2, sub_str VARCHAR2) RETURN VARCHAR2 SQLMACRO(SCALAR) IS

    BEGIN RETURN ‘INSTR(str, sub_str)’; END; / SQLマクロは、データベースの移⾏プロジェクトに役⽴つ 例えば、PostgreSQL から Oracle Database へ移⾏する場合、STRPOS()関数などの書き直しが必要だったが、 SQLマクロを使う事で、STRPOSをINSTRに変換するSQLマクロを作成する事で、移⾏に伴うSQL⾃体の書き直し が不要になる SQLマクロ(スカラー式) Copyright © 2021, Oracle and/or its affiliates 45 実⾏例︓strops が呼び出された際に内部的に instr で実⾏する SQL マクロ
  35. SQLマクロ(テーブル式) Copyright © 2021, Oracle and/or its affiliates 46 テーブル式マクロは、以下のことが可能になった:

    • Parameterized views • マクロ定義の中でクエリで使⽤された表は直される • 上記のような表からselecされた⾏は、引数に渡される • 返されたクエリの”形”は、(通常)直される • Polymorphic views • 返されたクエリの形はランタイムで決定される • クエリに渡されたインプットテーブルは、マクロから返される • スカラー値の引数とともに、1つ以上の引数を持つことができる
  36. create or replace function total_sales (zip_code varchar2) return varchar2 SQL_MACRO(TABLE)

    is begin return q'{ select cust.cust_postal_code as zip_code, sum(amount_sold) as revenue from sh.customers cust, sh.sales s where cust.cust_postal_code = total_sales.zip_code and s.cust_id = cust.cust_id group by cust.cust_postal_code order by cust.cust_postal_code }'; end; / SELECT * FROM total_sales('60332'); SQLマクロ(テーブル式) ① Parameterized Views Copyright © 2021, Oracle and/or its affiliates 47
  37. SQLマクロ(テーブル式) ② Polymorphic Views Copyright © 2021, Oracle and/or its

    affiliates 48 SELECT * FROM row_sampler(t=>sh.customer, pct=>15); create or replace function row_sampler (t dbms_tf.table_t, pct number default 5) return varchar2 SQL_MACRO(TABLE) as begin return q'{select * from t order by dbms_random.value fetch first row_sampler.pct percent rows only}'; end; /
  38. Copyright © 2021, Oracle and/or its affiliates 49 PL/SQLの新機能 新しいPL/SQLイテレータ構造体

    新しいプラグマSUPPRESSES_WARNING_6009 PL/SQL修飾式の機能拡張 ユーザー定義タイプのPL/SQLタイプ属性
  39. PL/SQLが拡張され、ループおよび修飾式で新しいイテレータを使⽤して反復制御をプログラミングできるようになった 新しいPL/SQLイテレータ構造体 Copyright © 2021, Oracle and/or its affiliates 50

    メリット • ループの内容がわかりやすく効率的 機能概要 • 19cまではループ内容によって作りこみが必要だった • 21cから下記ケースでのループが可能にになった 1. ステップ範囲の繰返しコントロール 2. 単⼀式の繰返しコントロール 3. コレクションの繰返しコントロール 4. カーソルの繰返しコントロール
  40. 停⽌述語の条件が True になるまでループを繰り返す事が可能になった 例︓単⼀式の繰返しコントロール この例ではイテランドが1で始まり、ⅰの値が 100 を越えるまで i * 2

    が繰り返し評価する 単⼀式の繰返しコントロール Copyright © 2021, Oracle and/or its affiliates 52 SQL> set serveroutput on SQL> BEGIN 2 FOR i IN 1, REPEAT i*2 WHILE i < 100 LOOP 3 DBMS_OUTPUT.PUT_LINE(i); 4 END LOOP; 5 END; 6 / 1 2 4 8 16 32 64
  41. 繰り返しコントールにより、コレクションから導出されるイテランド⽤の値のシーケンスを⽣成する 例︓VALUES OF・・・指定したコレクションの要素順に値を出⼒ この例ではコレクション・ベクトルの[11, 10, 34]からの値を出⼒ コレクションの繰返しコントロール① Copyright © 2021,

    Oracle and/or its affiliates 53 SQL> set serveroutput on SQL> DECLARE 2 TYPE intvec_t IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; 3 vec intvec_t := intvec_t(3 => 10, 1 => 11, 100 => 34); 4 BEGIN 5 FOR i IN VALUES OF vec LOOP 6 DBMS_OUTPUT.PUT_LINE(i); 7 END LOOP; 8 END; 9 / 11 10 34
  42. 繰り返しコントールにより、コレクションから導出されるイテランド⽤の値のシーケンスを⽣成する 例︓INDICES OF・・・索引の値を出⼒ この例では、コレクション・ベクトルの[1, 3, 100]の索引を出⼒している コレクションの繰返しコントロール② Copyright © 2021,

    Oracle and/or its affiliates 54 SQL> set serveroutput on SQL> DECLARE 2 TYPE intvec_t IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; 3 vec intvec_t := intvec_t(3 => 10, 1 => 11, 100 => 34); 4 BEGIN 5 FOR i IN INDICES OF vec LOOP 6 DBMS_OUTPUT.PUT_LINE(i); 7 END LOOP; 8 END; 9 / 1 3 100
  43. 繰り返しコントールにより、コレクションから導出されるイテランド⽤の値のシーケンスを⽣成する 例︓PAIRS OF・・・指定したコレクションの索引と要素のペアを出⼒ この例ではⅰ に要素、j に索引値を格納し、そのペア(10 => 3、11 => 1、34

    => 100)を出⼒ コレクションの繰返しコントロール③ Copyright © 2021, Oracle and/or its affiliates 55 SQL> set serveroutput on SQL> DECLARE 2 TYPE intvec_t IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; 3 vec intvec_t := intvec_t(3 => 10, 1 => 11, 100 => 34); 4 result intvec_t; 5 BEGIN 6 result := intvec_t(FOR i,j IN PAIRS OF vec INDEX j => i); 7 FOR i,j IN PAIRS OF result LOOP 8 DBMS_OUTPUT.PUT_LINE(i || '=>'|| j); 9 END LOOP; 10 END; 11 / 10=>3 11=>1 34=>100
  44. カーソルの繰返しコントロールは、明⽰カーソルまたは暗黙カーソルによって返されるレコードのシーケンスを⽣成する 例︓この例は、繰返しコントロールによる動的SQLからのすべてのレコードの⽣成を⽰す これにより、employee_idが103未満のすべての従業員のlast_nameおよびemployee_idを出⼒ 停⽌述語がTRUEの場合にループ本体が実⾏される カーソルの繰返しコントロール Copyright © 2021, Oracle and/or

    its affiliates 56 SQL> DECLARE 2 cursor_str VARCHAR2(500) := 'SELECT last_name, employee_id FROM hr.employees ORDER BY last_name'; 3 TYPE rec_t IS RECORD (last_name VARCHAR2(25), 4 employee_id NUMBER); 5 BEGIN 6 FOR r rec_t IN VALUES OF (EXECUTE IMMEDIATE cursor_str) WHEN r.employee_id < 103 LOOP 7 DBMS_OUTPUT.PUT_LINE(r.last_name || ', ' || r.employee_id); 8 END LOOP; 9 END; 10 / De Haan, 102 King, 100 Kochhar, 101
  45. SUPPRESSES_WARNING_6009 プラグマを使⽤する事で、 PLW-06009 の発⽣を抑⽌する事が可能 新しいプラグマ SUPPRESSES_WARNING_6009 Copyright © 2021, Oracle

    and/or its affiliates 57 メリット • より堅牢なエラー処理が可能になり、カプセル化およびモジュール化が改善される 機能概要 • 19cまでは EXCEPTION ⽂中に RAISE⽂もしくはRAISE_APPLICATION_ERRORの指定が必須であり、 指定していない場合は PLW-06009 が発⽣していた • 21cから SUPPRESSES_WARNING_6009 プラグマを指定する事で、より細かなユーザ定義のエラーハンド リングが可能となった
  46. 例︓ユーザ定義エラー ORA-2000 ‘Unexpected error raised’ をプロシージャp1 で定義し、 プロシージャ p2 の

    EXCEPTION ⽂で p1 を呼び出す 新しいプラグマ SUPPRESSES_WARNING_6009 Copyright © 2021, Oracle and/or its affiliates 58 CREATE PROCEDURE p1 AUTHID DEFINER IS PRAGMA SUPPRESSES_WARNING_6009(p1); BEGIN RAISE_APPLICATION_ERROR(-20000, 'Unexpected error raised'); END; / CREATE PROCEDURE p2 AUTHID DEFINER IS BEGIN DBMS_OUTPUT.PUT_LINE('In procedure p2'); EXCEPTION WHEN OTHERS THEN p1; END p2; /
  47. 修飾式で使⽤するための以下の 3つの新しいイテレータ選択アソシエーションのタイプが追加された。 • 基本イテレータ選択アソシエーション • 索引イテレータ選択アソシエーション • シーケンス・イテレータ選択アソシエーション メリット •

    修飾式にてイテレータの⽣成が簡単に実装する事が可能になり、プログラムのわかりやすさと⽣産性が向上する 機能概要 • 19cまではユーザ独⾃に作りこみが必要だった • 21cから上記イテレータ選択アソシエーションを使⽤する事で PL/SQL修飾式の機能拡張 Copyright © 2021, Oracle and/or its affiliates 59
  48. 基本イテレータ選択アソシエーションは、イテランド値ごとに式が評価されコレクションに追加される。 このとき、イテランド値が索引として使⽤される。 基本イテレータ選択アソシエーション Copyright © 2021, Oracle and/or its affiliates

    60 SQL> declare 2 type vec is table of pls_integer index by pls_integer; 3 result vec; 4 begin 5 result := vec(FOR i IN 1..5 => 2*i); 6 for i in result.first .. result.last loop 7 dbms_output.put_line(result(i)); 8 end loop; 9 end; 10 / 2 4 6 8 10 この例では、 1〜5をそれぞれ2倍した値を コレクション “result” に格納
  49. イテランド値ごとに索引式と値式が評価され、拡張された値が拡張された索引を使⽤してコレクションに追加される。 索引イテレータ選択アソシエーション Copyright © 2021, Oracle and/or its affiliates 61

    SQL> declare 2 type vec is table of varchar2(3); 3 result vec; 4 begin 5 result := vec(for i in 10..21 by 2 index i/2 => i); 6 for i in result.first .. result.last loop 7 dbms_output.put_line(result(i)); 8 end loop; 9 end; 10 / 10 12 14 16 18 20 この例では、 10〜21を2ずつカウントアップし、そのうち の偶数値のみをコレクション “result” に格納
  50. 索引イテレータ選択アソシエーションは、値のシーケンスをコレクションの末尾に追加できる。 イテランド値ごとに値式が評価され、コレクションの末尾に追加される シーケンス・イテレータ選択アソシエーション Copyright © 2021, Oracle and/or its affiliates

    62 SQL> declare 2 type vec is table of pls_integer index by pls_integer; 3 result vec; 4 v1 vec :=vec(for i in 1..3 => i); 5 v2 vec :=vec(for i in 4..6 => i); 6 begin 7 result := vec(for v in values of v1, reverse values of v2 sequence => v); 8 for i in result.first .. result.last loop 9 dbms_output.put_line(result(i)); 10 end loop; 11 end; 12 / 1 2 3 6 5 4 この例では、下記2つのコレクション結合結果を result に格納 ・ 1,2,3が格納されているコレクション v1 ・4,5,6が格納されているコレクション v2の逆順
  51. PLS_INTGER、BOOLEAN などのユーザー定義タイプの作成が可能になった ユーザー定義タイプのPL/SQLタイプ属性 Copyright © 2021, Oracle and/or its affiliates

    63 メリット • Oracleのオブジェクト指向プログラミング・モデルに従ったプログラムを開発する場合に便利 機能概要 • 永続不可オブジェクト型に BOOLEAN や PLS_INTEGER などの PL/SQL スカラー・データ型が指定可能
  52. 例1︓PLS_INTGER 型のユーザー定義タイプを作成する ユーザー定義タイプのPL/SQLタイプ属性 Copyright © 2021, Oracle and/or its affiliates

    64 SQL> CREATE TYPE objplsint AS OBJECT (I PLS_INTEGER) NOT PERSISTABLE; 2 / Type created. 例2︓BOOREAN 型のユーザー定義タイプを作成する SQL> CREATE TYPE objbool AS OBJECT (I BOOLEAN) NOT PERSISTABLE; 2 / Type created.
  53. Copyright © 2021, Oracle and/or its affiliates 65 JSONの新機能 JSON型︓新しいJSONデータ型

    JSON_TRANSFORM関数 SQL/JSON構⽂の改善 JSON⽤複数値インデックス ビューの作成および仮想列の追加の拡張 JSONスカラー(RFC8259サポート) 古いクライアントとバイナリJSONの互換性/ネイティブJSONデータ型のJDBCサポート
  54. CREATE TABLE J_PURCHASEORDER ( id INTEGER PRIMARY KEY, po_document JSON

    ); JSONを最適化して保存する新しいSQLデータ型 バイナリJSON型 • SQL、PL/SQLで利⽤可能な新しいデータ型 • OCI, JDBCでネイティブ・サポート • OSONをベース – 最適化されたバイナリ表現 • ⾃⼰完結型フォーマット • ⾼速フィールド・ルックアップ • 部分更新可能 • スキャンはテキストより最⼤10倍⾼速 • 更新はテキストより最⼤10倍⾼速 Oracle Databaseプラットフォームと統合 • Parallel Query • RAC • GoldenGate • … • ⾼度なセキュリティ機能を利⽤可能 • VPD、暗号化など • JSONと他のデータを⼀度に管理可能 • Converged Databaseによる運⽤の簡素化 JSON型 Copyright © 2021, Oracle and/or its affiliates 66
  55. 例︓JSON型を利⽤した表の作成とデータの挿⼊ JSON型 Copyright © 2021, Oracle and/or its affiliates 67

    -- 表を作成 SQL> create table customers(id number, created timestamp, cdata JSON); -- 構成を確認 SQL> desc customers; Name Null? Type ------- ----- ------------ ID NUMBER CREATED TIMESTAMP(6) CDATA JSON -- データを投⼊ SQL> insert into customers values (1,systimestamp,'{"name":"Atif","address":{"city":"San Mateo"}}'); commit;
  56. 例︓JSON型の検索 JSON型 Copyright © 2021, Oracle and/or its affiliates 68

    -- ドット表記を使った検索 SQL> select c.cdata.address.city.string() from customers c; C.CDATA.ADDRESS.CITY.STRING() -------------------------------------------------------------------------------- San Mateo -- JSON_VALUE関数を利⽤ SQL> select JSON_VALUE(cdata, '$.address.city') from customers; JSON_VALUE(CDATA,'$.ADDRESS.CITY') -------------------------------------------------------------------------------- San Mateo }
  57. JSONデータを格納できる他のデータ型との⽐較 他のデータ型(VARCHAR2/CLOB/BLOB) • 19c以前のバージョンで利⽤ • 指定したデータ型の形式で格納 • 整形されたJSONデータであることは保証されない。整 形されたJSONかどうかはIS_JSON関数で確認が必 要(制約を省略するとドット表記構⽂を使⽤して

    JSONデータをクエリできない) JSON型 • 21c以降で利⽤(初期化パラメータcompatible >20) • OracleでJSONを扱うために最適化されたバイナリJSON 形式(OSON)で保存 • 整形されたJSONデータであることが保証される • ドット表記構⽂でスカラー値へ変更するには項⽬メソッドを 使⽤ • JSON標準に含まれないSQLスカラーデータ型に対応する 拡張データ型の利⽤が可能 JSON型 Copyright © 2021, Oracle and/or its affiliates 69 21c以降の 推奨はJSON型
  58. 拡張データ型のサポート 拡張データ型としてJSON標準にない以下のSQLスカラーデータ型をサポートする • JSON標準はオブジェクト、配列、数値、⽂字列、ブール、NULL JSON型 Copyright © 2021, Oracle and/or

    its affiliates 70 拡張データ型 SQLスカラーデータ型 Binary RAW date DATE timestamp TIMESTAMP year-month interval INTERVAL YEAR TO MONTH day-second interval INTERVAL DAY TO SECOND double BINARY-DOUBLE float BINARY_FLOAT
  59. -- CUSTOMERS表からJSONオブジェクトを⽣成、なお、returningでJSON指定しない場合はVARCHAR2 SQL> select JSON_OBJECT(* returning JSON) from customers; JSON_OBJECT(*RETURNINGJSON)

    -------------------------------------------------------------------------------- {"ID":1,"CREATED":"2021-09-27T02:33:41.333275","CDATA":{"name":"Atif","address": -- ⽣成されたJSONオブジェクト(subQuery)から、CREATEDの型を確認 SQL> with subQuery as ( 2 select JSON_OBJECT(* returning JSON) jdata 3 from customers) 4 select s.jdata.CREATED.type() 5 from subQuery s; S.JDATA.CREATED.TYPE() -------------------------------------------------------------------------------- Timestamp 例︓拡張データ型 JSON型 Copyright © 2021, Oracle and/or its affiliates 71
  60. 変更のための新しい演算⼦ JSON_Transform • 既存の構⽂とセマンティクス(述語など)に従った新たな SQL/JSON演算⼦ • ⼀度の処理に複数の演算⼦の使⽤可能 (SET, APPEND, REMOVEなど)

    • 指定した順序で適⽤ • アトミック型(エラーが発⽣した場合はすべて無効) • 部分的な更新をサポート • JSON型ではログサイズを削減することに最適化(ディスク上で部分的なアップデート) • SELECT内で利⽤する場合はクライアントに送信前にデータを変更 • 例︓クライアントにJSONを送信する前に個⼈情報のデータを削除する JSON_TRANSFORM関数 Copyright © 2021, Oracle and/or its affiliates 72
  61. 使⽤可能な変更操作とハンドラ JSON_TRANSFORM関数 Copyright © 2021, Oracle and/or its affiliates 73

    各操作の後に対象となるデータのパス式を指定する。またオプションで各操作で許可されるハンドラが存在。 キーワード 説明 操作 REMOVE 対象となる⼊⼒データを削除 KEEP 対象となる⼊⼒データ以外を削除 RENAME 対象となるフィールドの名前を変更 SET 対象となるデータに値を設定 (≒UPSERT) REPLACE 対象となるデータの値を置き換え INSERT 対象となる場所に値を挿⼊ APPEND 対象となる配列の末尾に値を追加(配列への挿⼊) ハンドラ ON EXISTING パス式がデータと⼀致した場合の動作を指定(ERROR/IGNORE/REPLACE/REMOVE) ON MISSING パス式がデータと⼀致しない場合の動作を指定(ERROR/IGNORE/CREATE) ON NULL 結果がNULLの場合に⾏う動作を指定(NULL/ERROR/IGNORE/REMOVE)
  62. 例︓SET、RENAME、APPENDを実⾏ JSON_TRANSFORM関数 Copyright © 2021, Oracle and/or its affiliates 74

    update customers set cdata = JSON_Transform (cdata, SET '$.lastUpdated' = SYSTIMESTAMP, SET '$.address.zip' = 94402, RENAME '$.name' = 'firstName', APPEND '$.friends' = 'Beethoven' CREATE ON MISSING) 更新 -- JSON_SERIALIZEで確認 SQL> select JSON_Serialize(cdata PRETTY) from customers; JSON_SERIALIZE(CDATAPRETTY) -------------------------------------------- { "name" : "Atif", "address" : { "city" : "San Mateo" } } JSON_SERIALIZE(CDATAPRETTY) ---------------------------------------------------- { "address" : { "city" : "San Mateo", "zip" : 94402 }, "lastUpdated" : "2021-09-27T05:43:28.009609Z", "firstName" : "Atif", "friends" : [ "Beethoven" ] }
  63. JSON_DATA ---------------------------------------- { "empno" : 7839, "name" : "KING", "salary"

    : 5000, "department" : { "name" : "ACCOUNTING", "loc" : "NEW YORK" } } ※実際には1⾏で表⽰ SELECT JSON { 'empno' : empno, 'name' : ename, 'salary' : sal, 'department' : ( SELECT JSON { 'name' : dname, 'loc' : loc } FROM dept d WHERE d.deptno = e.deptno ) } AS JSON_DATA FROM emp e WHERE e.empno = 7839; JSONコンストラクタ ⼊⼒されたテキストのJSON値(リテラルのSQL⽂字列、VARCAHR2/CLOB/BLOB型データ)を解析し、JSONデータ 型インスタンスとして返す テキストJSONデータの解析(= WHERE条件のIS JSONと等価)およびJSON型への変換に利⽤ 例︓JSONテキストに似た構⽂を使⽤してSQLにてJSON型の値を作成(SQLでJSON-likeな構築構⽂) SQL/JSON構⽂の改善 Copyright © 2021, Oracle and/or its affiliates 76
  64. JSONコンストラクタ SQLでデータベース内の⾮JSONデータからJSONオブジェクトと配列を⽣成するときにも利⽤可能 • SQL/JSON関数JSON_OBJECTとJSON_ARRAYよりもJSON型指定が不要な分シンプルに記述できる • JSON(json_object( … ))またはjson_object( … RETURNING

    JSON) = JSON { … } • JSON(json_array( … )) またはjson_array( … RETURNING JSON) = JSON [ … ] SQL/JSON構⽂の改善 Copyright © 2021, Oracle and/or its affiliates 77 SQL> select JSON[1,2,'cat'] from dual; JSON[1,2,'CAT'] -------------------------------------------------------------------------------- [1,2,"cat"] SQL> select JSON(1,2,'cat’ returning JSON) from dual; JSON[1,2,'CAT’RETURUNINGJSON] -------------------------------------------------------------------------------- [1,2,"cat"]
  65. 例︓JSON_SCALAR関数 SQL/JSON構⽂の改善 Copyright © 2021, Oracle and/or its affiliates 79

    SQL> desc customers 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID NUMBER CREATED TIMESTAMP(6) CDATA JSON -- CREATED列(SQLスカラー値)をJSONスカラー値に変換 SQL> select json_scalar(created) from customers; JSON_SCALAR(CREATED) -------------------------------------------------------------------------------- "2021-09-27T02:33:41.333275“ -- JSONスカラー値の型を確認 SQL> select json_value(json_scalar(created),'$.type()') from customers; JSON_VALUE(JSON_SCALAR(CREATED),'$.TYPE()') -------------------------------------------------------------------------------- Timestamp
  66. SQL/JSONパス式の項⽬メソッドの追加 追加された項⽬メソッド • データ型変換︓float()、double()、binary()、ymInterval()、dsInterval() • 集計︓avg()、count()、minNumber()、maxNumber()、minString()、maxString()、sum() SQL/JSON構⽂の改善 Copyright © 2021,

    Oracle and/or its affiliates 80 集計の例 with jtab as (select JSON_Array(1,2,3,4,5,6) jcol from dual) select jtab.jcol[*].maxNumber() from jtab jtab; JTAB.JCOL[*].MAXNUMBER() ------------------------ 6 with jtab as (select JSON_Array(1,2,3,4,5,6) jcol from dual) select jtab.jcol[*].sum() from jtab jtab; JTAB.JCOL[*].SUM() ------------------ 21 with jtab as (select JSON_Array(1,2,3,4,5,6) jcol from dual) select jtab.jcol[*].avg() from jtab jtab; JTAB.JCOL[*].AVG() ------------------ 3.5
  67. JSON型と項⽬メソッド JSON型のJSON値はそのまま直接⽐較やGROUP / ORDERBY式で使⽤できないため、項⽬メソッドを使⽤ SQL/JSON構⽂の改善 Copyright © 2021, Oracle and/or

    its affiliates 81 -- JSON型インスタンスの直接⽐較はエラー SQL> select count(1)from customers c where c.cdata.address.zip > 12345; ORA-40796: invalid comparison operation involving JSON type value -- JSON型インスタンスでGROUP/ORDER BY式はエラー SQL> select count(1)from customers c group by c.cdata.address.zip; ORA-40796: invalid comparison operation involving JSON type value -- 項⽬メソッドでデータ型変換すれば実⾏できる SQL> select count(1) from customers c where c.cdata.address.zip.number() > 12345 2 group by c.cdata.address.zip.number(); COUNT(1) ---------- 1
  68. スカラー配列値の索引 JSON型に格納したJSONデータの⽂字列または数値の配列に対して複数値索引を作成可能 留意点 • JSON型に格納されたデータが対象 • 単⼀のスカラー値への索引作成も可能だが、性能⾯でB*Tree/bitmap索引利⽤を推奨 • 索引付けするデータのSQLデータ型を⽰すデータ変換項⽬メソッドを索引パス式に含めて作成 •

    問い合わせではWHERE句にJSON_EXISTSを使⽤する • onlyを含む項⽬メソッドを索引作成に使⽤した場合は同じ項⽬メソッドを使⽤する問い合わせのみ、onlyを含まない 項⽬メソッドの場合は、指定した型に変換できるスカラー値を対象にできる JSON⽤複数値索引 Copyright © 2021, Oracle and/or its affiliates 82 SQL> create multivalue index cust_zip_idx on customers c (c.cdata.address.zip.number())
  69. 例︓表に配列をもつデータを追加 複数値インデックス Copyright © 2021, Oracle and/or its affiliates 83

    -- データを追加 SQL> insert into customers values (2, systimestamp, '{"firstName":"Rodrigo", "address":[{"type":"home","city":"Sunnyvale","zip":94085}, {"type":"work","city":"Redwood Shores","zip":94065}]}'); 1⾏が作成されました。 --確認 SQL> select id,json_query(cdata,'$.address.zip' WITH CONDITIONAL WRAPPER) zip from customers; ID ZIP ---------- -------------------- 1 94402 2 [94085,94065
  70. 例︓複数値インデックスを作成し、検索 複数値インデックス Copyright © 2021, Oracle and/or its affiliates 84

    -- 索引の作成 SQL> create multivalue index cust_zip_idx on customers c(c.cdata.address.zip.number()); 索引が作成されました -- 実⾏計画の取得 set autotrace trace exp -- JSON_Existsを条件にしたSELECT⽂を実⾏ ※実⾏計画は後に記載 SQL> select id from customers c 2 where JSON_Exists(cdata, '$.address?(@.zip.number()==94065)'); ID ---------- 2
  71. 例︓実⾏計画の確認 複数値インデックス Copyright © 2021, Oracle and/or its affiliates 85

    実⾏計画 ---------------------------------------------------------- Plan hash value: 381260005 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 26 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| CUSTOMERS | 1 | 26 | 2 (0)| 00:00:01 | | 2 | HASH UNIQUE | | 1 | 26 | | | |* 3 | INDEX RANGE SCAN (MULTI VALUE) | CUST_ZIP_IDX | 1 | | 1 (0)| 00:00:01 | ---------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access(JSON_QUERY("CDATA" /*+ LOB_BY_VALUE */ FORMAT OSON , '$.address.zip.number()' RETURNING NUMBER ASIS WITHOUT ARRAY WRAPPER ERROR ON ERROR NULL ON EMPTY NULL ON MISMATCH MULTIVALUE)=94065) Note ----- - dynamic statistics used: dynamic sampling (level=2)
  72. DBMS_JSON.CREATE_VIEWの引数追加 Autonomous Databaseでのみ提供されていた以下の引数が利⽤できるようになり、マテリアライズド・ビューやパスを指 定したサブセットでのビューを作成可能 ビューの作成および仮想列の追加の拡張 Copyright © 2021, Oracle and/or

    its affiliates 86 引数名 説明 materialize プール値で、ビューがマテリアライズドかどうかを⽰す mvrefreshmode materializeがtrueのとき、リフレッシュ・モードを指定する path 展開するJSONフィールドのパス。JSONパス式の構⽂を使⽤ resolvenameconflicts 仮想列名で競合が発⽣した場合の解決の有無。デフォルトはfalse(解決なし) colnameprefix ビュー列名に対する接頭辞の指定 mixedcasecolumns ビュー列名の⼤⽂字/⼩⽂字の区別を指定
  73. 例︓マテリアライズドビューの作成と定義の確認 ビューの作成および仮想列の追加の拡張 Copyright © 2021, Oracle and/or its affiliates 87

    -- MVIEWの作成 declare dg clob; --データガイド⽤の変数 begin select json_dataguide(cdata,dbms_json.FORMAT_HIERARCHICAL) into dg from customers; dbms_json.create_view ( viewname => ‘MV_CUSTOMERS’, --MVIEW名 tablename=> ‘CUSTOMERS’, --JSON列を含む表名 jcolname => ‘CDATA’, --対象表のJSON列名 dataguide=> dg, materialize => true); end; / -- 情報の確認 SQL> select mview_name,query,refresh_mode,refresh_method from user_mviews; MVIEW_NAME QUERY REFRESH_M REFRESH_ ------------- ---------------------------- --------- -------- MV_CUSTOMERS SELECT RT."ROWID" ROW_ID, RT STATEMENT FAST SQL> select * from mv_customers; ROW_ID CREATED ID name city ------------------ ------------------------- ----- ---- ----------- AAASvnAAMAAAGw+AAA 21-10-29 17:27:28.053211 1 Atif San Mateo
  74. 新しいJSON RFCのサポート(トップレベルのスカラー値を許可) RFC8259をサポートし、JSONドキュメントのトップレベルで スカラー値を利⽤可能 • 以前はRFC4627 • 初期化パラメータcompatible>20の設定が必要 • RFC8259サポートにした場合も、テキストJSONに対して

    以前の動作(トップレベルのスカラー値の不許可)を設定 できる • IS JSON演算⼦のDISALLOW SCALARSを指定 RFC8259サポート Copyright © 2021, Oracle and/or its affiliates 88 -- サンプルデータを投⼊ create table whatsJson (val varchar2(30)); insert into whatsJson values(‘1’); insert into whatsJson values(‘true’); insert into whatsJson values(‘“true”’); insert into whatsJson values(‘null’); insert into whatsJson values(‘dog’); insert into whatsJson values(‘“cat”’); insert into whatsJson values(‘{}’); insert into whatsJson values(‘[]’); -- RFC8259(トップレベルのスカラー値OK) select val from whatsJson where val is json; 1 "true" true null "cat" {} [] select val from whatsJson where val is NOT json; dog -- 以前のRFCを強制(トップレベルのスカラー値を不許可) select val from whatsJson where val is json (DISALLOW SCALARS); {} []
  75. プログラミング⾔語のクライアントドライバーについて 以前のバージョンのクライアントも利⽤可能だが21c以上のドライバ利⽤を強く推奨 • 21cより前のバージョンでは⾃動的にテキストJSONに変換され、JSON型の機能や性能のメリットを⽣かせないため JDBCの場合は、21cで新しいJSON型を操作するためのoracle.sql.jsonパッケージを提供 • 特⻑ • IS JSONのチェックが不要

    • 拡張JSON型のサポート • JDBC21cのJSONパーサーによる最適化 • パッケージ詳細とサンプル • https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/sql/json/package-summary.html 以前のバージョンのクライアントと新しいJSON型の互換性 Copyright © 2021, Oracle and/or its affiliates 89
  76. OSON (Oracle Binary Json Format)とは OracleDatabaseサーバーとOracleDatabaseクライアントの両⽅でクエリと更新を⾏うために最適化されたOracleのバイ ナリJSON形式 メリット • クエリ性能の向上

    • 効率的な更新 • ストレージの削減 • エンコーディング不要(ネイティブエンコーディング) • サーバーとクライアントの両⽅で利⽤ Appendix)JSON型 Copyright © 2021, Oracle and/or its affiliates 90
  77. 例︓PL/SQLでの利⽤ Appendix) JSON型 Copyright © 2021, Oracle and/or its affiliates

    91 drop function upgradeCustomer; --関数を作成 create or replace function upgradeCustomer(customer JSON) return JSON as obj JSON_Object_T; begin obj := JSON_Object_T(customer); if obj.has('status') then obj.put('status','platinum with pink sprinkles'); else obj.put('status','silver'); end if; return obj.to_JSON; end; / select JSON_Serialize(upgradeCustomer(cdata)) from customers c where c.cdata.name.string() = 'Atif'; {"name":"Atif","address":{"city":"San Mateo"},"status":"silver"}
  78. Copyright © 2021, Oracle and/or its affiliates 92 AutoUpgrade の新機能

    AutoUpgradeによるデータベース・アップグレード時のData Guard操作の⾃動化 AutoUpgradeによるOracle RACデータベースのアップグレードに必要なステップの⾃動化 AutoUpgradeによる⾮CDBからPDBへのアップグレードおよび変換の⾃動化 AutoUpgradeによる切断/接続アップグレードを使⽤したPDBのアップグレードの⾃動化 Oracle DatabaseによるAutoUpgradeを使⽤したデータベース・アップグレードの⾃動化
  79. Data Guard環境でAutoUpgradeがより使いやすく • 概要 • Data Guard環境においてAutoUpgradeがより使いやすくなった • これまでのバージョンではData Guard

    Brokerに関する操作を⼿動で⾏う必要があったが、 AutoUpgradeの最新バージョンではツール側で⾃動的に有効/無効化が可能に • メリット • 最新のAutoUpgradeを利⽤することで以前のバージョンよりもユーザの介⼊要素が少なくなり 管理者の⼯数削減や作業ミスを低減 • 多くのデータベースを⼀括でアップグレードする場合に特に有効 AutoUpgradeによるデータベース・アップグレード時のData Guard操作の⾃動化 Copyright © 2021, Oracle and/or its affiliates 94
  80. Data Guard環境でAutoUpgradeを利⽤する場合の概要⼿順 1. プライマリ、スタンバイに新しいバージョンのOracleホームをインストール 2. プライマリでAutoUpgradeを実⾏しデータベースをアップグレード このときAutoUpgradeが以下を⾃動設定 • REDO転送をDEFER(遅延)に設定 •

    Broker構成の場合アップグレード中はTRANSPORT-OFFに設定 3. スタンバイにて新しいOracleホームへの変更作業を実施 (環境変数の変更、tnsnames.ora、ブローカー構成ファイルなどを新しいOracleホームへコピー) 4. スタンバイデータベースにて構成とサービスをアップグレード srvctl upgrade database –db $ORACLE_UNQNAME -oraclehome $ORACLE_HOME 5. スタンバイデータベースを有効化し起動 6. REDO転送を再開 参考︓ AutoUpgradeによるData Guard環境のアップグレード Copyright © 2021, Oracle and/or its affiliates 95
  81. • AutoUpgradeは⾃動的にData Guard構成を検出 • Config Fileに特別な指定をする必要はない • AutoUpgrade実⾏中はスタンバイへの REDO転送を⾃動的に停⽌ •

    アップグレード後に⼿動でREDO転送を再開する 実⾏⼿順動画 実⾏⼿順ブログ記事 https://dohdatabase.com/2021/01/05/how-to- upgrade-with-autoupgrade-and-data-guard/ 参考︓AutoUpgradeによるData Guard環境のアップグレード Copyright © 2021, Oracle and/or its affiliates 96 YouTubeリンク
  82. • 概要 • Oracle Real Application Clusters (Oracle RAC)環境においてAutoUpgradeがより使いやすくなった •

    AutoUpgrade 19.7以前はすべてのノードのインスタンスを⼿動でシャットダウンする必要があったが、 AutoUpgrade が⾃動実⾏してくれるようになった • Oracle Database 21cの新機能マニュアルに記載されているがAutoUpgrade 19.8以降ですでに利⽤可能 • メリット • 最新のAutoUpgrade を利⽤することで以前のバージョンよりもユーザの介⼊要素が少なくなり 管理者の⼯数削減や作業ミスを低減 • 多くのデータベースを⼀括でアップグレードする場合に特に有効 AutoUpgradeによる Oracle RACデータベースのアップグレードに必要なステップの⾃動化 Copyright © 2021, Oracle and/or its affiliates 97
  83. • AutoUpgradeは⾃動的にOracle RAC構成を検出 • Oracle RAC、Oracle RAC One Nodeに対応 •

    全ノードのインスタンスをシャットダウンするためダウンタイムが発⽣ • 対応OSはLinuxまたはUNIXベースのシステム Windowsは未対応 • Oracle Grid InfrastructureのアップグレードはAutoUpgradeの対象外 参考︓AutoUpgradeによるOracle RAC環境のアップグレード Copyright © 2021, Oracle and/or its affiliates 98
  84. 以下の⼿順をAutoUpgradeが⾃動実⾏する 1. 全データベース・インスタンスをシャットダウン 2. インスタンスの⾃動起動を無効化 3. インスタンスがOracle RACクラスタ・メンバーであった場合、 cluster_databaseパラメータをFALSEに設定しインスタンスをアップグレードモードで起動 4.

    Oracle Databaseホームバイナリをアップグレード 5. srvctl upgrade databaseの実⾏ 6. srvctl enable databaseの実⾏ 7. cluster_databaseパラメータをTRUEに設定 8. データベース・インスタンスを起動 9. 2node⽬以降のOracle Databaseホームバイナリアップグレード、データベース・インスタンスを起動 参考︓Oracle RAC環境におけるAutoUpgradeの動作 Copyright © 2021, Oracle and/or its affiliates 99
  85. • 概要 • AutoUpgradeを利⽤して⾮CDBからPDBへの変 換、およびアップグレードを⾃動化することが可能 • 前提条件 • ターゲットがOracle Database

    21cの場合、 AutoUpgrade実⾏前にターゲットCDBの 作成が必須 • ソース⾮CDBのデータベース名は変更できずその ままPDB名となる • AutoUpgrade実⾏後に⾮CDB構成への ロールバックは不可 実⾏前のバックアップ取得を推奨 • 実⾏イメージ 1. ターゲットCDBの情報をコンフィグファイルに 記載しAutoUpgradeを実⾏ 2. ターゲットデータベースでPDBへ変換 3. PDBをアップグレード AutoUpgradeによる⾮CDBからPDBへのアップグレードおよび変換の⾃動化 Copyright © 2021, Oracle and/or its affiliates 100 旧バージョン 新バージョン
  86. • 概要 • AutoUpgradeを利⽤してソースデータベースの CDBからPDBをUnplugし ターゲットデータベースへPlug後に アップグレードが可能 • 前提条件 •

    暗号化された表領域を持つPDBでの利⽤不可 • AutoUpgrade実⾏後にロールバックは不可 実⾏前のバックアップ取得を推奨 • 実⾏イメージ 1. ソースPDB、ターゲットCDBの情報をコンフィグファ イルに記載しAutoUpgradeを実⾏ 2. ソースからターゲットへPDBをUnplug/Plug 3. PDBをアップグレード AutoUpgradeのUnplug/Plugによるアップグレードの⾃動化 Copyright © 2021, Oracle and/or its affiliates 101 旧バージョン 新バージョン
  87. Copyright © 2021, Oracle and/or its affiliates 102 オブジェクト管理の⾃動化に関する新機能 ⾃動索引付けの拡張

    ⾃動索引最適化 ⾃動マテリアライズド・ビュー ⾃動SQLチューニング・セット ⾃動ゾーン・マップ ⾃動⼀時表領域縮⼩ ⾃動UNDO表領域縮⼩
  88. ⾃動索引とは • 19cからの新機能 • アプリケーション・ワークロードを監視して、⾃動的に索引の作成や削除などの管理を⾏う • 従来⼿作業で実施していた索引の作成・検証・評価・有効化・削除といったプロセスを機械的に反復実施 これまでは⾃動索引付けの対象をスキーマレベルで指定していたが、表レベルで細かく指定(含める・除外する)できる ようになった •

    引き続きスキーマレベルでの指定も可能 • スキーマレベルと表レベルとで設定に差がある場合は表レベルの設定が優先される (スキーマ単位では⾃動索引は無効にするが、特定の表のみで⾃動索引を有効にするケース等) • 設定⽅法(例) ⾃動索引付けの拡張 Copyright © 2021, Oracle and/or its affiliates 104 21c * Autonomous Database, Exadata, ExaCS, ExaCCにて利⽤可能 (2021/10時点) -- 自動索引の有効化 EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT’); -- スキーマ単位で無効化を指定 EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_SCHEMA', 'SH', FALSE); EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_SCHEMA', 'HR', FALSE); -- 表単位で有効化を指定 EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_TABLE','SH.PRODUCTS',TRUE);
  89. マテリアライズド・ビュー(MV)とは • クエリの結果セットを事前に保持し、 検索処理時間の短縮を図るスキーマ・オブジェクト これまで⼿動で実施していたワークロードの監視から、MVおよびMVログの作成、 メンテナンスを⾃動で実施できるように • バックグラウンドタスクにより、ワークロードの特性を監視・分析 • SQLのパフォーマンスを向上させる空のMVの候補をInvisibleで作成

    • 実際のクエリを使ってオプティマイザがバックグランドで評価 • ⼤幅な性能向上が⾒込めるマテリアライズド・ビューのみ適⽤ • 最適なリフレッシュ⽅法を⾃動で判断し切り替え アプリケーションのパフォーマンスを透過的に向上 ⾃動マテリアライズド・ビュー 概要 Copyright © 2021, Oracle and/or its affiliates 105 21c マテリアライズド・ビュー Analyse Verify Implement Refresh * Autonomous Database, Exadata, ExaCS, ExaCCにて利⽤可能 (2021/10時点)
  90. DBMS_AUTO_MV.CONFIGURE プロシージャによる各種設定 ⾃動マテリアライズド・ビュー DBMS_AUTO_MVパッケージ Copyright © 2021, Oracle and/or its

    affiliates 106 21c パラメータ名 概要 AUTO_MV_MODE ⾃動マテリアライズド・ビューを使⽤するかどうかを設定 IMPLEMENT : 有効、OFF: 無効 (デフォルト)、REPORT ONLY: レポートのみ AUTO_MV_MAINT_TASK ⾃動マテリアライズド・ビューの⾃動メンテナンス (リフレッシュ、評価、削除)を実⾏するかどうかを指定 ENABLE : 有効、DISABLE : 無効、CLEANUP_AND_DISABLE:全ての⾃動マテリアライズドビューを削除しタスクを無効化 AUTO_MV_SCHEMA スキーマ単位で有効/無効を指定 AUTO_MV_APP_MODULE アプリケーション・モジュール単位で有効/無効を指定 AUTO_MV_RETENTION ⾃動マテリアライズド・ビューの有効期限。⼀定期間利⽤がない場合、⾃動削除。1⽇から373⽇で指定可能(Default : 373⽇) AUTO_MV_ANALYZE_WORKLOAD_MIN_TIME ⾃動マテリアライズド・ビューの作成対象となるクエリの最⼩時間(秒単位)で、これを下回るクエリは、考慮対象外 0から3600までの任意の整数で指定(Default : 120秒) AUTO_MV_ANALYZE_WORKLOAD_WINDOW ⾃動マテリアライズド・ビューを検証する際の最⼤時間(時間単位)。1から8760の任意の整数で指定(Default : 24時間) AUTO_MV_ANALYZE_REPORT_RETENTION AUTO_MV_VERIFY_REPORT_RETENTION AUTO_MV_MAINT_REPORT_RETENTION 各レポートの保持期間。0から90⽇で指定可能(Default : 31⽇) AUTO_MV_DEFAULT_TABLESPACE ⾃動マテリアライズド・ビューが作成される表領域 (Default : NULL) AUTO_MV_TEMP_TABLESPACE ⾃動マテリアライズド・ビューの作成・リフレッシュ時に利⽤する⼀時表領域 (Default : NULL) AUTO_MV_SPACE_BUDGET ⾃動マテリアライズド・ビューが利⽤する領域のサイズ(%) デフォルト表領域を利⽤時のみ
  91. ゾーン・マップとは • データの格納情報をユーザー・オブジェクトとして保持 • 指定されたカラムデータの最⼩値・最⼤値 • 問合せの述語に基づき、処理に不要なデータ・ブロックに対するRead IOを削減(プルーニング) • アプリケーションに透過的に性能向上を実現

    • Exadata Storage Indexに類似 • 索引、パーティション、SmartScan、Storage Indexといった機能と併⽤可能 • パーティション・オプションが必要 これまでは⼿動で対象列を選択し作成していたが、⾃動で作成、メンテナンスできるようになった • デフォルトは無効 • 単⼀の表に対するゾーンマップが対象 • 1時間毎に⾃動バックグラウンドタスクが実⾏される ⾃動ゾーンマップ 概要 Copyright © 2021, Oracle and/or its affiliates 108 21c * Autonomous Database, Exadata, ExaCS, ExaCCにて利⽤可能 (2021/10時点)
  92. SQLチューニング・セット(SQL Tuning Set : STS)とは • SQLの実⾏計画やパフォーマンス・メトリック、その他関連する統計情報を格納するデータベース・オブジェクト • パフォーマンス・チューニング・アドバイザやSPMに対するインプット情報などに利⽤する これまでは⼿動による取得が必要だったが、定期的に⾃動取得できるようになった

    • DBMS_AUTO_TASK_ADMINプロシージャにて、メンテナンス・タスク(Auto STS Capture Task)の有効化、 無効化を設定 • Auto STS Capture Taskは15分ごとに実⾏される • ステータスの確認 • DBA_AUTOTASK_SCHEDULE_CONTROLビュー、もしくはDBA_AUTOTASK_SETTINGSビュー(21c以降)の TASK_NAME列における’Auto STS Capture Task’で確認 • ⾃動索引利⽤時には必須の機能 • デフォルトで有効 • 19c にバックポート済みで、19.7以降で利⽤可能(デフォルト無効) • Autonomous Database(19c)で利⽤可能(デフォルト有効) ⾃動SQLチューニング・セット Copyright © 2021, Oracle and/or its affiliates 111 21c * Tuning Packオプションが必要
  93. ⾃動データ最適化(ADO)とは • 表/表領域単位でポリシーを設定し、データの圧縮レベルの変更を⾃動化する機能 これまで⾃動データ最適化(ADO)は表/表領域単位での指定だったが、索引も指定できるようになった • ADOポリシーを適⽤することで、別の表領域へのセグメントの移動や圧縮、再構築を⾃動化できるように • アプリケーションの性能を維持しつつ、索引によるストレージ領域の消費を抑制可能 索引の⾃動最適化 Copyright

    © 2021, Oracle and/or its affiliates 112 21c *1 : 表データ・索引の利⽤状況(アクセスパターンや頻度)を⾃動追跡する機能 *2 : ヒートマップに基づき、ADOポリシーに従って⾃動で索引をメンテナンスする ヒートマップ(*1)の 有効化 ADOポリシーの 策定 ADOポリシーを 索引に適⽤ ⾃動実⾏(*2) 図︓最⼩限の設定で⾃動的に最適化 * Advanced Compression Optionが必要 (2021/10時点)
  94. UNDO表領域はトランザクションによっては肥⼤化する可能性がある • ⾃動拡張がONの場合、期限切れでない領域は再利⽤せずにデータファイルを拡張する • 通常そこまでの領域は利⽤しないと⾔った場合、その領域は無駄になってしまう • もしくは、 UNDO表領域にサイズ上限を設け、UNDOデータの有効期限を設定(UNDO_RETAINTION) • ⼤規模なトランザクションを実⾏すると、UNDO領域の不⾜によるエラーが⽣じる場合あり

    これまでは肥⼤化したUNDO表領域をリサイズするか再作成していた 期限切れのUNDOデータをバックグランドで⾃動削除し、可能であればデータファイルを⾃動縮⼩するように • UNDO表領域の肥⼤化による領域の無駄を抑制 • より⼤規模なトランザクションを実⾏できる可能性 UNDO表領域の⾃動縮⼩ Copyright © 2021, Oracle and/or its affiliates 114 21c * Enterprise Edition以上で利⽤可能。ただし認定クラウド環境では利⽤不可 (2021/10時点)
  95. Copyright © 2021, Oracle and/or its affiliates 115 Multitenant 新機能

    詳細︓⾮CDBおよびCDBの使⽤ (⾮CDB構成がサポート対象外に) PDBアプリケーション同期化の拡張構⽂ Oracle MultitenantのDRCPの拡張 データベースとのネームスペースの統合 MAX_IDLE_BLOCKER_TIMEパラメータ DBCAでのPDBのタイムゾーン・サポート
  96. ⾮CDB構成がサポート対象外に • 概要 • ⾮CDB構成はOracle Database 21cではサポート対象外 • Oracle Universal

    InstallerおよびDBCAを使⽤して⾮CDB Oracle Databaseインスタンスを作成不可に • マルチテナント・コンテナ・データベースは、 Oracle Database 21cで唯⼀サポートされているアーキテクチャとなる 詳細: ⾮CDBおよびCDBの使⽤ Copyright © 2021, Oracle and/or its affiliates 117 non-CDB構成 CDB構成 12c 〜 19c 21c 〜 • 12cからnon-CDB構成は⾮推奨 • Non-CDB構成のサポートは19cまで • 21c以降ではCDB構成のみサポートされる
  97. 12.2新機能の再確認 • R12.2 からの新機能 • 共通メタデータおよびデータ共有の仕組み • バージョニングされたセットのプロビジョニング アプリケーション・コンテナと実装例 Copyright

    © 2021, Oracle and/or its affiliates 118 https://docs.oracle.com/cd/F19136_01/multi/overview-of-the-multitenant-architecture.html#GUID-8C2E6389-7AFF-4071-8948-E44372E66050 PDB CDB-root AP CDB A PDB PDB B CDB PDB PDB C AP = D Application Container の構成要素 A B C Application Container 概略図 Application D app_root CDB-ROOT app_pdb
  98. 留意点 • 共有リンクオブジェクト変更は Alter … begin/end で⾏う alter pluggable database

    application MYFIRSTAPP begin install ‘1.0’; 変更処理 〜 alter pluggable database application MYFIRSTAPP end install ‘1.0’; • 変更後、アプリケーションPDBで sync する alter pluggable database xxx application MYFIRSTAPP sync; ※ sync しない AP-PDB は古い version で運⽤が継続される →検証・開発などで効果的 →version 管理は重要! アプリケーション・コンテナと実装例 Copyright © 2021, Oracle and/or its affiliates 119 Application ver. 1.0 更新した Application ver. 2.0 sync! ver. 1.0 ver. 1.0 ver. 2.0
  99. • 機能概要 • ALTER PLUGGABLE DATABASE APPLICATION … SYNC⽂を使⽤することで、 アプリケーションPDBのバージョンやパッチ・レベルをアプリケーション・ルートと同期可能

    このSYNC句にて複数のアプリケーションPDB名を指定することが可能に • メリット • Oracle Database 21cより前のリリースでは複数のアプリケーションPDBに対して同期を⾏いたい場合、 それぞれのアプリケーションPDBに対してALTER PLUGGABLE DATABASE APPLICATION … SYNC⽂ を発⾏する必要があった 21c以降では⼀⽂で複数のアプリケーションPDB名を指定して同期化可能 PDBアプリケーション同期化の拡張構⽂ Copyright © 2021, Oracle and/or its affiliates 120 SQL> ALTER PLUGGABLE DATABASE APPLICATION app1, app2 SYNC; Pluggable database altered.
  100. データベース・ネスト • 機能概要 • データベース・ネスト(DbNest)はデータベースインスタンスを 同じホストで実⾏されている他のデータベース アプリケーションから分離することができる機能 • CDBとPDBはそれぞれ“ネスト”とよばれる独⾃のコンテナ環境に 存在しLinuxの機能を使って管理される

    • Linux: Namespaces, Cgroups, Capabilities, SECComp filtering • 各PDBネスト内のLinuxプロセスは独⾃のプロセスIDを持ち 他のネスト内のPDBにアクセスすることは不可 • メリット • Linux固有のコンテナ機能を⽤いて、CDBやPDBを階層化することで 従来のマルチテナント環境にない分離性を実現 • よりセキュアな構成を実現可能に データベースとのネームスペースの統合 Copyright © 2021, Oracle and/or its affiliates 121 OPERATING SYSTEM PDB 1 Nest PDB 2 Nest PDB 3 Nest CDB Nest https://docs.oracle.com/en/database/oracle/oracle-database/21/dbseg/dbnest.html#GUID-BEE0A670-F46F-49DC-819B-6191361A6C8E
  101. 初期化パラメータの有効化、構成ファイルの作成をすることでDbNestを有効化する • 初期化パラメータ • 構成ファイル • ファイルシステム分離を実現するためにマウントするディレクトリの ホワイトリスト、ブラックリストをテキストファイルで作成 DbNestの有効化 Copyright

    © 2021, Oracle and/or its affiliates 122 パラメータ 説明 DBNEST_ENABLE DbNest有効、無効化の管理を⾏うためにCDBルートに設定する • NONE︓DbNestの無効化(デフォルト) • CDB_RESOURCE_PDB_ALL︓すべてのPDBにネストを有効化しCDBはリソース のみのネストを有効化 ※use_dedicated_brokerパラメータが有効化されていることが前提 DBNEST_PDB_FS_CONF 構成ファイルの場所を指定するためにCDBルートに設定 DBNEST_NO_DEFAULT /home/oracle/MYCDB/$PDB DBNEST_NO_FS_ROOT_MODE /usr/local/bin /bin/usr/bin nest_whitelist.txt nest_blacklist.txt
  102. Oracle Databaseが⾃動的にネストの作成、管理、および削除を⾏う Oracle Databaseによるネストの管理 Copyright © 2021, Oracle and/or its

    affiliates 123 •インスタンス起動時にCDBルートの親ネストを作成 •PDBごとに1つの⼦ネストを作成 •CREATE PLUGGABLE DATABASEコマンドで作成されたPDBの⼦ネストの作成を⾃動的にトリガー 作成 •PDBへの最初のログイン時にCDBがPDBの⼦ネストをオープン オープン •CPUカウントが変更された場合、ResourceManagerがネスト構成を⾃動的に更新 アップデート •PDBもしくはCDBルートからPDBをクローズするとバックグラウンドプロセスがPDB⼦ネストをクローズ クローズ •PDBが削除もしくはUnplugされるとPDB⼦ネストを削除 •データベースインスタンスがシャットダウンされるとCDBの親ネストを削除 削除
  103. • 機能概要 • MAX_IDLE_BLOCKER_TIMEパラメータを使⽤することで必要なリソースを保持している セッションがアイドル状態になってから、終了候補になるまでの時間(分数)をPDBごとに設定することが可能に • メリット • Oracle Database

    21cより前のリリースではMAX_IDLE_TIMEパラメータを指定することで、 すべてのアイドル・セッションに対する制限を設定することが可能だった • 21c以降では、MAX_IDLE_BLOCKER_TIMEパラメータを⽤いてロックを保持したままのセッションや プロセス数をインスタンス上限まで使⽤するようなセッションに対して 制限をかけることが可能になったことで柔軟なセッション制限を実現 MAX_IDLE_BLOCKER_TIMEパラメータ Copyright © 2021, Oracle and/or its affiliates 124 SQL> ALTER SYSTEM SET MAX_IDLE_BLOCKER_TIME = 600 ; System altered.
  104. • 機能概要 • Database Configuration Assistant (DBCA)のサイレント・モードにおいて -createPluggableDatabaseおよび-configurePluggableDatabaseコマンドの オプションで-pdbTimezoneパラメータを使⽤することで PDBのタイム・ゾーンを指定可能に

    DBCAでのPDBのタイム・ゾーン・サポート Copyright © 2021, Oracle and/or its affiliates 125 $ dbca -silent createPluggableDatabase ¥ -sourceDB DB_SID1 ¥ -pdbName PDB1 -pdbTimezone Asia/Tokyo
  105. ポイントとなる新機能(基本機能) • ⾃動インメモリの拡張 • IM列ストアの格納(ポピュレート、削除、圧縮)が⾃動管理になった • すべてのデータがインメモリ化できない(IMデータを特定できない)システムでも簡単に使⽤できる • インメモリ・ハイブリッド・スキャン •

    ⼀つの表に対するスキャンをIM列ストアと⾏ストアの両⽅にアクセスできる • 表すべてをIM列ストアに格納できない場⾯(頻繁にアクセスしない列を除外できる) • インメモリ外部表の拡張 • インメモリ外部表のパーティション化(ハイブリッド・パーティション化)が可能になった • ⼤規模な外部表を必要とするシステムで⾼速化したい • インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) • SIMDベクター命令を使⽤した⾼速IM結合が可能になった • 結合⾏が多い(ブルーム・フィルタであまり削減されない)SQLでも⾼速に処理したい場⾯ Oracle Database 21c における Oracle DBIM強化 Copyright © 2021, Oracle and/or its affiliates. 128
  106. ポイントとなる新機能(新しいデータ型) • インメモリ・フル・テキスト列 • DBIMでTEXT分析がサポートされた • TEXT分析を⾼速に処理するような場⾯ • インメモリのSpatialサポート •

    DBIMで空間分析がサポートされた • 空間分析を⾼速に処理するような場⾯ • JSONデータ型のサポート • JSONのIMフル・テキスト検索 (JSON_TEXTCONTAINS演算⼦) が可能になった • JSONを⾼速に検索処理するような場⾯ Oracle Database 21c における Oracle DBIM強化 Copyright © 2021, Oracle and/or its affiliates. 129
  107. ポイントとなる新機能(有効レベル) • Database In-Memoryベース・レベル (INMEMORY_FORCE=BASE_LEVEL) • DBIMライセンスを購⼊しなくても試すことができるようになった • 事前にDBIMの効果を調べたいような場⾯ •

    CellMemoryレベル(INMEMORY_FORCE=CELLMEMORY_LEVEL) • IM列ストアを有効にしなくてもCellMemory機能が使⽤できるようになった • ExadataでDBIMを使⽤するような場⾯ この機能は19c Release Update (19.8) にもバックポートされている Oracle Database 21c における Oracle DBIM強化 Copyright © 2021, Oracle and/or its affiliates. 130
  108. IM列ストアの格納(ポピュレート、削除、圧縮)が⾃動管理になった メリット • 今までインメモリ化するデータの選択が必要だったが、⾃動インメモリが強化され、 ⾃⼰管理のIM列ストアが可能になりました 機能概要 • 使⽤パターンを追跡し、⾃動的にオブジェクトのポピュレート、退避、列の圧縮 を⾏う(ヒートマップに似ているがONにする必要はない) •

    外部表とハイブリッド・パーティション表はサポートしていない 利⽤イメージ • 初期化パラメータINMEMORY_AUTOMATIC_LEVELをHIGHにすることで、 IM列ストア内のオブジェクトを⾃動的に管理する(PDBレベルで可能) • 表にINMEMORY句を指定する必要はない • ⾃動的に INMEMORY MEMCOMPRESS AUTO に設定される • INMEMORY句が設置されている場合はそれが保持される • NO INMEMORYを⼿動で INMEMORY MEMCOMPRESS AUTO に設定可能 • INMEMORY_AUTOMATIC_LEVEL=HIGHでないとエラー ⾃動インメモリの拡張 Copyright © 2021, Oracle and/or its affiliates. 131 インメモリ列ストア アクティブ・セグメントは⾃動的に 列ストアにポピュレートします ⾮アクティブ・セグメン トは列ストアから削 除されます 利⽤頻度の低い列データは ⾃動的に圧縮されます
  109. 設定 初期化パラメータINMEMORY_AUTOMATIC_LEVEL • OFF(デフォルト) • ⾃動インメモリは無効、12cR2 (12.2.0.1) と同じ動作(ADOインメモリポリシーにて⾃動的なインメモリ化/インメモリ退去が可能) • LOW(18cから)

    • ポピュレートでメモリ不⾜の場合に、IM列ストアからコールドセグメントを削除した上で新規セグメントをポピュレートする(インメモリ PRIORITYがNONEのセグメントのみ⾃動削除の対象となるが、ADOインメモリポリシー条件が有効なセグメントは削除対象外) • MEDIUM(18cから) • LOWの動作に加え、以前にメモリ不⾜でポピュレート未完了だったホットセグメントが先にポピュレートされるよう最適化される • HIGH(21cから) • MEDIUMの動作に加え、INMEMORY句が未設定のセグメントをINMEMORY MEMCOMPRESS AUTOに設定して、コールド 列に対しての圧縮制御(より⾼い圧縮レベルへの変更など)を⾏う • テストでは最初の圧縮レベルが常にQUERY LOWであった PRIORITYがNONE (デフォルト) のセグメントが⾃動メモリ管理の対象になる(NONE以外のセグメントは⾃動削除の対 象外なのでポピュレートする領域を確保できない) • NONE以外 (CRITICAL, HIGH, MEDIUM, LOW) のポピュレートは、オブジェクト・アクセスとは関係ない(優先順位でキューに 格納され、起動後に領域があればNONEより前にポピュレートする) ⾃動インメモリの拡張 Copyright © 2021, Oracle and/or its affiliates. 132
  110. 設定 ⾃動インメモリのチェック間隔の制御 • DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETERプロシージャで使⽤状況統計のチェック間隔を設定する • 統計ウィンドウ(AIM_STATWINDOW_DAYS定数)を7⽇間に設定する場合 (デフォルトは1⽇) • DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETERプロシージャで間隔を確認する ⾃動インメモリの拡張

    Copyright © 2021, Oracle and/or its affiliates. 133 EXEC DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, 7); SQL> VARIABLE w_interval NUMBER SQL> EXEC DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :w_interval); SQL> PRINT w_interval W_INTERVAL ----------------------------- 1
  111. 関連ビュー DBA_INMEMORY_AIMTASKSビュー (⾃動インメモリ・タスクによる決定を追跡) • タスクを作成⽇順に表⽰する DBA_INMEMORY_AIMTASKDETAILSビュー(タスクに関連する詳細) • Task_id=1のタスクに関する詳細を確認する ⾃動インメモリの拡張 Copyright

    © 2021, Oracle and/or its affiliates. 134 SQL> SELECT task_id, TO_CHAR(creation_time,'DD-MON-YY hh24:mi:ss') AS create_time, state FROM DBA_INMEMORY_AIMTASKS ORDER BY create_time; TASK_ID CREATE_TIME STATE ---------- --------------------------- ---------- 1 11-JUN-19 12:11:09 DONE 2 11-JUN-19 12:15:12 DONE 3 11-JUN-19 12:17:12 DONE 4 11-JUN-19 12:19:12 DONE ... SQL> SELECT * FROM DBA_INMEMORY_AIMTASKDETAILS WHERE object_owner = 'SH' and task_id = 1; TASK_ID OBJECT_ OBJECT_NAME SUBOBJECT_NAM ACTION STATE ---------- ------- ------------------ ------------- ------------- –-------- 1 SH CAL_MONTH_SALES_MV EVICT DONE 1 SH CHANNELS EVICT DONE 1 SH COSTS COSTS_Q1_1998 POPULATE SCHEDULED 1 SH COSTS COSTS_Q1_1999 POPULATE SCHEDULED ...
  112. 動作例(INMEMORY_AUTOMATIC_LEVEL=HIGH設定時) ⾃動インメモリの拡張 SQL> SELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION INMEMORY_PRIORITY FROM

    DBA_TABLES WHERE TABLE_NAME LIKE‘TAB%’; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS INMEMORY -------------------------- --- -------- ----------------- -------- TAB1 NO ENABLED FOR QUERY LOW HIGH TAB2 NO DISABLED TAB3 NO DISABLED SQL> ALTER SYSTEM SET INMEMORY_AUTOMATIC_LEVEL = HIGH; System altered. SQL> SELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION INMEMORY_PRIORITY FROM DBA_TABLES WHERE TABLE_NAME LIKE 'TAB%'; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS INMEMORY -------------------------- --- -------- ----------------- -------- TAB1 NO ENABLED FOR QUERY LOW HIGH TAB2 NO ENABLED AUTO TAB3 NO ENABLED AUTO Copyright © 2021, Oracle and/or its affiliates. 135
  113. 動作例(⾃動削除&ポピュレーションの実⾏時) ⾃動インメモリの拡張 Copyright © 2021, Oracle and/or its affiliates. 136

    SQL> select segment_name,partition_name,bytes_not_populated,populate_status from v$im_segments; SEGMENT_NAME PARTITION_NAME BYTES_NOT_POPULATED POPULATE_STAT ------------------------------ ------------------------------ ------------------- ------------- NUM_PART PARTITION03 259031040 OUT OF MEMORY NUM_PART PARTITION02 0 COMPLETED NUM_PART PARTITION01 0 COMPLETED SQL> alter system set INMEMORY_AUTOMATIC_LEVEL=HIGH scope=memory; System altered. SQL> select count(*) from num_part partition(partition04); COUNT(*) ---------- 85196850 SQL> select segment_name,partition_name,bytes_not_populated,populate_status from v$im_segments; SEGMENT_NAME PARTITION_NAME BYTES_NOT_POPULATED POPULATE_STAT ------------------------------ ------------------------------ ------------------- ------------- NUM_PART PARTITION04 0 COMPLETED NUM_PART PARTITION01 0 COMPLETED 3つ⽬のパーティションがメモリ不⾜により 全てインメモリ化できず(4つ⽬以降の パーティションもインメモリ化されない) ⾃動管理を有効にしたところ、メモリ不⾜ とならず既存の(アクセス頻度の低い) パーティションを追い出してインメモリ化
  114. SELECT Invoice FROM Sales WHERE Price > 1000; ⼀つの表に対するスキャンをIM列ストアと⾏ストアの両⽅にできる メリット

    • 今までIMスキャンするには、問合せの列すべてがIM列ストアに格納する 必要があったが、めったにアクセスしない⼤きな列は除外することが可能 になった(例えば、画像、ドキュメントなど) 機能概要 • 問合せを論理的に分割 (IM列ストアに対する部分、⾏ストアに対する 部分) して⾏うことで、インメモリ分析によるコスト効率の⾼いアプローチ を提供する (10倍以上のパフォーマンス向上) • IM列ストアを使⽤した⾼速なスキャン&フィルタ • 述語にはINMEMORY列のみを指定する必要がある • フィルタ後に⾏ストアから必要な列値を取得 利⽤イメージ • IMスキャンで使⽤する述語フィルタの列はIM列ストアに格納し、 頻繁にアクセスしない列 (選択リスト列) は⾏ストアに格納する インメモリ・ハイブリッド・スキャン Copyright © 2021, Oracle and/or its affiliates. 137 ID Item Price Invoice 5 Camera $200 6 Laptop $2000 7 Phone $500 8 LED TV $3000 ⾏ストア (バッファ・キャッシュ) SALES表 ID 5 6 7 8 インメモリ列ストア SALES表 Invoice列を除外 Item Camera Laptop Phone LED TV Price $200 $2000 $500 $3000 1. Priceの列ストアを 使⽤したスキャンとフィルタ <JS ON> 2. Invoiceを ⾏ストアからフェッチ
  115. Min 1 Max 3 Min 4 Max 7 Min 8

    Max 12 Min 13 Max 15 なぜインメモリ・スキャンが⾼速なのか? インメモリ・ハイブリッド・スキャン Copyright © 2021, Oracle and/or its affiliates. 138 C1 C2 C4 C5 C6 C3 ポイント1: 集計に必要なカラムのみアクセス+ 効果的な圧縮技術により圧縮した状 態で検索が可能 (ディクショナリ圧縮) ポイント3: 最新のプロセッサで搭載されている SIMDにより高速スキャン ポイント2: インメモリ・ストレージ索引により 最小限のIMCUのみスキャン 例) where storeid > 8 ベクター・レジスタ 複数の データを ロード 一度の命令で 全ての値を ベクター演算 CPU CA CA CA CA NAME ID AUDI 0 BMW 1 CADILLAC 2 PORSCHE 3 TESLA 4 VW 5 where NAME = ‘BMW’ where NAME = 1 共通ディクショナリ
  116. 実⾏計画 インメモリ・ハイブリッド・スキャンは実⾏計画で確認する • TABLE ACCESS INMEMORY FULL (HYBRID) と出⼒される •

    列col1がIM列ストアに格納されていない場合 インメモリ・ハイブリッド・スキャン Copyright © 2021, Oracle and/or its affiliates. 139 SQL> ALTER TABLE t4 INMEMORY NO INMEMORY (col1); -- 列の除外 SQL> select TABLE_NAME,COLUMN_NAME,INMEMORY_COMPRESSION from V$IM_COLUMN_LEVEL where TABLE_NAME='T4'; TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION -------------------- -------------------- -------------------------- T4 ID DEFAULT T4 COL1 NO INMEMORY T4 COL2 DEFAULT SQL> SELECT SUM(col1) FROM t4 WHERE id < 1000; ----------------------------------------------------- | Id | Operation | Name | ----------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | |* 2 | TABLE ACCESS INMEMORY FULL (HYBRID)| T4 | ----------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("ID"<1000) SQL> SELECT SUM(id) FROM t4 WHERE col1 < 2; ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | |* 2 | TABLE ACCESS FULL| T4 | ----------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("COL1"<2)
  117. インメモリ外部表のパーティション化が可能になった メリット • ⾏ストアに格納したくない分析データをパーティション化することができるように なった 機能概要 • パーティション外部表やハイブリッド・パーティション表に対するINMEMORY句 が、表レベルとパーティション・レベルの両⽅でサポートされた •

    IM外部表の問合せには初期化パラメータQUERY_REWRITE_INTEGRITYを stale_toleratedに設定する必要がある (外部表アクセスになる) • インメモリ外部表では以下がサポートされない • column句、distribute句、priority句などの ⼀部のINMEMORY副字句 • 結合グループ(圧縮状態で結合可能) • IM式(計算結果を格納した仮想列) • IM算術最適化(ネイティブ・バイナリのNUMBERデータ) • Active Data GuardインスタンスのDISTRIBUTE ... FOR SERVICE句 インメモリ外部表の拡張 Copyright © 2021, Oracle and/or its affiliates. 140 インメモリ列ストア
  118. 利⽤イメージ • 外部表作成時にINMEMORY句を指定する • 対象セグメントをポピュレートする (19cから全表スキャンで 可能に) • インメモリ外部表を問い合せるセッションでは、 初期化パラメータQUERY_REWRITE_INTEGRITYを

    stale_toleratedに設定する インメモリ外部表の拡張 141 SQL> CREATE TABLE ex_tab1 2 (col1 VARCHAR2(100), col2 VARCHAR2(100)) 3 ORGANIZATION EXTERNAL (中略) -- 通常の外部表定義と同じ 18 INMEMORY; Table created. SQL> SELECT COUNT(*) FROM ex_tab1; -- ポピュレート SQL> SELECT SUM(col1) FROM ex_tab1; Execution Plan ------------------------------------------------------- | Id | Operation | Name | Rows | ------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | SORT AGGREGATE | | 1 | | 2 | EXTERNAL TABLE ACCESS FULL| EX_TAB1 | 1180 | -------------------------------------------------------- SQL> alter session set query_rewrite_integrity=stale_tolerated; Session altered. SQL> SELECT SUM(col1) FROM ex_tab1; Execution Plan ---------------------------------------------------------------- | Id | Operation | Name | Rows | ---------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | SORT AGGREGATE | | 1 | | 2 | EXTERNAL TABLE ACCESS INMEMORY FULL| EX_TAB1 | 1180 | ---------------------------------------------------------------- Copyright © 2021, Oracle and/or its affiliates.
  119. 関連ビュー 次のビューに列 (INMEMORY、INMEMORY_COMPRESSION) が追加され指定内容が確認できる • USER_XTERNAL_PART_TABLES(パーティション化外部表のオブジェクト・レベルの情報) • 表レベルでのINMEMORY句指定(ALL/DBA_XTERNAL_PART_TABLESには含まれない) • INMEMORY列(ENABLED:使⽤可能,

    DISABLED:使⽤禁⽌, NONE:未指定) • INMEMORY_COMPRESSION列(圧縮レベル) • USER/ALL/DBA_XTERNAL_TAB_PARTITIONS(パーティション化外部表のパーティション・レベルの情報) • パーティション・レベルでのINMEMORY句指定(表レベル指定も反映される) • INMEMORY列(ENABLED:使⽤可能, DISABLED:使⽤禁⽌) • INMEMORY_COMPRESSION列(圧縮レベル) インメモリ外部表の拡張 142 SQL> ALTER TABLE ex_tab1 INMEMORY; SQL> select TABLE_NAME, INMEMORY, INMEMORY_COMPRESSION 2 from USER_XTERNAL_PART_TABLES where TABLE_NAME = 'EX_TAB1'; TABLE_NAME INMEMORY INMEMORY_COMPRESS -------------------- -------- ----------------- EX_TAB1 ENABLED FOR QUERY LOW Copyright © 2021, Oracle and/or its affiliates. SQL> select PARTITION_NAME, INMEMORY, INMEMORY_COMPRESSION 2 from USER_XTERNAL_TAB_PARTITIONS where TABLE_NAME = 'EX_TAB1'; PARTITION_NAME INMEMORY INMEMORY_COMPRESS -------------------- -------- ----------------- P1 ENABLED FOR QUERY LOW P2 ENABLED FOR QUERY LOW
  120. SIMDベクター命令を使⽤した⾼速IM結合が可能になった メリット • 今まで結合はスキャンとブルーム・フィルタだけがSIMDベクター命令を使⽤してい たが、ハッシュ結合の⼀致処理もできるようになり、⾼速化できるSQLが増えた (インメモリ結合処理が5〜10倍⾼速化) 機能概要 • インメモリ・ディープ・ベクトル化は複雑なSQL操作を最適化するSIMDベースのフ レームワーク(これを活⽤してハッシュ結合を⾼速化したのがインメモリ・ベクター

    結合) • 1つのSIMDベクター命令で表スキャンと結合⼀致処理を複数⾏で⾏う • 結合処理(Build/Probe)をIM列形式で評価するためにスキャン操作にプッシュ・ダウンする • 次のインメモリ機能の使⽤を妨げるものではない(同時に利⽤できる) • ブルーム・フィルタ、結合グループ、インメモリ列圧縮、 IM動的スキャン (軽量スレッドを使⽤したパラレル・スキャン)、 Aggregationプッシュダウン (集計をプッシュ・ダウンしてスキャン操作でベクトル化) など • 初期化パラメータINMEMORY_DEEP_VECTORIZATIONをFALSEで無効化 できる(デフォルト有効) インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) Copyright © 2021, Oracle and/or its affiliates. 143 # SIMD最適化 ブルーム・フィルタ SIMD最適化ハッシュ表 (ベクター処理単位に ロードされたハッシュ表) Build インメモリ列ストア 表スキャンと⼀致処理 をベクター単位で⾏う Probe データのスキャン とフィルタ
  121. ブルーム・フィルタ (ジョイン・フィルタ) とは LINEORDER 例︓ クリスマス・イブの売上合計を集計 DATE_DIM D_date=‘2013-12-24’ Datekey 合計値

    (結合完了後に) ジョイン・フィルタ インメモリ固有の機能ではないが インメモリ・スキャンで⾮常に効果的 Datekey is 20131224 Datekey Amount D_date インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) Copyright © 2021, Oracle and/or its affiliates. 144 対象⾏数を結合前 (スキャン時) に削減することで ハッシュ結合処理を⾼速化する 1. ジョイン・フィルタと呼ばれるフィルタを列スキャン を使⽤して作成 Ø DATE_DIM表のD_DATE=‘2013-12-24’ に該当 するDatekey(結合列) をリスト(BitVector) 2. 作成したジョイン・フィルタの条件に合う売上表 のAMOUNTの合計値を計算 Ø ジョイン・フィルタ(BitVector)を追加のフィルタとし てLINEORDER表の列スキャンを⾏う Ø 結合を完了してからAMOUNT列の合計値を算 出 SELECT SUM(amount) FROM lineorder lo ,date_dim d WHERE lo.datekey = d.datekey AND d.d_date='2013-12-24';
  122. 利⽤イメージ インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) Copyright © 2021, Oracle and/or its affiliates.

    145 SQL> show parameter INMEMORY_DEEP_VECTORIZATION NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ inmemory_deep_vectorization boolean TRUE SQL> CREATE TABLE t1 (id NUMBER,col1 VARCHAR2(10),col2 VARCHAR2(20)); … SQL> ALTER TABLE t1 INMEMORY; SQL> SELECT COUNT(*) from t1; SQL> CREATE TABLE t2 (id NUMBER,col1 VARCHAR2(10),col2 VARCHAR2(20)); … SQL> ALTER TABLE t2 INMEMORY; SQL> SELECT COUNT(*) FROM t2; SQL> select SEGMENT_NAME,SEGMENT_TYPE,INMEMORY_COMPRESSION from v$im_segments; SEGMENT_NAME SEGMENT_TYPE INMEMORY_COMPRESS -------------------- ------------------ ----------------- T1 TABLE FOR QUERY LOW T2 TABLE FOR QUERY LOW SQL> SELECT /*+ MONITOR no_px_join_filter(t1) */ COUNT(*) FROM t1,t2 WHERE t1.col1 = t2.col1;
  123. 実⾏時に決定されるため実⾏計画では情報が得られない • SQL監視の「HASH JOIN」操作の双眼鏡アイコンをクリックして 「その他の情報」ウィンドウで調べる(結合グループと同じ調べ⽅) • DeepVec Hash Joinsの値が1の場合にIMベクター結合が使⽤されている •

    DeepVec Hash Join Flagsはディープ・ベクトル化でどのような最適化を ⾏ったかを⽰す内部統計 確認⽅法(SQL監視) インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) Copyright © 2021, Oracle and/or its affiliates. 146
  124. 同様の情報をSQLでも取得可能 • SQL監視の他の表⽰情報も同じように取得可能 確認⽅法(SQLで取得) インメモリ・ディープ・ベクトル化 (インメモリ・ベクター結合) Copyright © 2021, Oracle

    and/or its affiliates. 147 VARIABLE B_SQLID VARCHAR2(13); BEGIN SELECT PREV_SQL_ID INTO :B_SQLID FROM V$SESSION WHERE SID=USERENV('SID'); END; / SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR_XML(sql_id=>:B_SQLID). EXTRACT(q'#//operation[@name='HASH JOIN']/rwsstats/stat[@id='11']#'). GETCLOBVAL(2,2) "DeepVec_Hash_Join" FROM DUAL; DeepVec_Hash_Join -------------------------------------------------- <stat id="11">1</stat>
  125. DBIMでテキスト分析がサポートされた メリット • リレーショナル+テキストの問合せがインメモリのみで実⾏できるようになっ た (3倍⾼速) 機能概要 • テキスト列にインメモリ上のテキスト索引 (転置インデックス:$I表)

    を追加 し、CONTAINS演算⼦ (通常のテキスト検索) を使⽤したテキストの⾼ 速インメモリ検索を可能にする • ディスク上のテキスト索引 (CONTEXT索引) を置き換える • テキスト索引が存在すると索引アクセスになる • MEMCOMPRESS句は無効です • JSONデータ型のJSON_TEXTCONTAINS演算⼦も可能に 利⽤イメージ • テキスト列にINMEMORY TEXT句を設定する • MAX_STRING_SIZE=EXTENDEDが必要 (最⼤32,767バイト) • INMEMORY_VIRTUAL_COLUMNS=ENABLE (明⽰的にINMEMORYを 指定していないユーザ定義の仮想列もポピュレートされる) インメモリ・フル・テキスト列 148 インメモリ列ストア 名前 John Ram Emily Sara テキスト 索引 履歴書 (Text) 「PhD(博士号)」の学位を持ち履歴書に 「database」の記載がある求職者を探す Words .. .. .. .. database .. .. 学位 PhD BS MS MS Copyright © 2021, Oracle and/or its affiliates.
  126. 単語がどの⽂章に出現するかをまとめたマッピング情報 • 従来の索引(Bツリーなど)とは異なり、以下の表と索引 から構成される索引セット (これをドメイン索引という) • $I表 (トークンとその出現位置、出現数などが格納される メインとなる表) •

    $X索引 ($I表のTOKEN_TEXT, TOKEN_FIRST, TOKEN_TYPE列に対する複合Bツリー索引) • $R表 (DOCIDからROWIDへのマッピング表) • $K表 (ROWIDとDOCIDの対応表) • $N表 (⾏が削除された場合、そのDOCIDが格納される) • PARAMETERS句で索引付けプリファレンスを指定する Oracle TextのCONTAINS演算⼦(CONTEXT索引の構造) インメモリ・フル・テキスト列 ▪$X索引 $I表の複合索引 (Bツリー索引) ▪$R表 DOCID è ROWID ▪$K表 ROWID è DOCID ▪$N表 DELETEされた DOCID ▪元表 テキスト列 çè ROWID ▪$I(トークン表) トークン çè DOCID ID TEXT 1 Oracle Database 2 Linux 3 Oracle Text トークン 出現位置 Oracle 1-1 3-1 Database 1-2 Linux 2-1 Text 3-2 Copyright © 2021, Oracle and/or its affiliates. 149 CREATE INDEX … INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS(<プリファレンス>); プリファレンス・クラス 説明 DATASTORE データの格納場所を指定 FILTER プレーン・テキストを抽出する⽅法を指定 SECTION GROUP セクション問合せを使⽤可能にする LEXER テキストの⾔語を指定 STOPLIST 含めない語句 (theなど) を指定 WORDLIST ステミング問合せおよびファジー問合せの拡張⽅法 STORAGE 索引表のstorage句を指定
  127. Oracle TextのCONTAINS演算⼦ Oracle TextのCONTAINS演算⼦を使⽤して単純な語句を問合せることができる • サンプルSQL (求職者テーブルから履歴書テキストに「database」がある「PhD(博⼠号)」の学位を持つものを検索する) • インメモリ・フル・テキスト検索が有効の場合 •

    テキスト列の検索式では、次のCONTAINS検索演算⼦のみがサポートされている • AND (&)、OR (|)、NOT (~)、NEAR (;) • CONTAINS(“履歴書”, ‘database & jave’, 10) > 0 • JSON列の問合せ(JSON_TEXTCONTAINS演算⼦)では、次のCONTAINS検索演算⼦もサポートされている • HASPATH、INPATH インメモリ・フル・テキスト列 Copyright © 2021, Oracle and/or its affiliates. 150 CONTAINS(<IMテキスト列>, <検索式> [,<スコアラベル>]) > 0 ※ 戻り値スコア(全文検索条件が含まれる割合)は0~100の範囲の整数値(0はその行に一致する検索結果がない) ※ <スコアラベル>は、生成されたスコアを識別するために使用する(SELECTリスト、ORDER BY、GROUP BYで SCORE演算子を使用していない場合は不要) SELECT …, SCORE(10) FROM "求職者" WHERE "学位" = 'PhD' AND CONTAINS("履歴書", 'database', 10) > 0 ;
  128. 利⽤イメージ (INMEMORY TEXT句) INMEMORY TEXT句にはテキスト列とそれに対するポリシーを指定する • ポリシー • カスタム索引付けポリシーを指定する(省略するとデフォルト・ポリシーが使⽤される) •

    テキスト内容をどのように解釈するかを指定(プリファレンス・クラスの⼀部) • カスタム索引付けポリシー • CTX_DDL.CREATE_POLICYプロシージャで作成する • filterパラメータとwordlistパラメータはサポートされない • section_groupパラメータはNULL_SECTION_GROUP(デフォルト)またはPATH_SECTION_GROUP(JSON_ENABLEがTRUE)のみサポート • lexerパラメータはBASIC_LEXER(デフォルト)のみサポート(⽇本語対応レクサーは使⽤できない) • BASIC_LEXERは空⽩で区切られた単語を使⽤する⾔語から⽤語を抽出するためのレクサー • ポリシーを変更するには⼀度無効にしてから再び有効にする必要がある インメモリ・フル・テキスト列 Copyright © 2021, Oracle and/or its affiliates. 151 INMEMORY TEXT (<テキスト列> [USING <ポリシー>], …) SQL> ALTER TABLE t3 NO INMEMORY TEXT (col2); SQL> EXEC CTX_DDL.CREATE_POLICY('test_policy', … ); SQL> ALTER TABLE t3 INMEMORY TEXT (col2 USING 'test_policy');
  129. 利⽤イメージ (CONTAINS演算⼦でインメモリ・スキャン) インメモリ・フル・テキスト列 Copyright © 2021, Oracle and/or its affiliates.

    152 SQL> CREATE TABLE t3 (id NUMBER, col1 NUMBER, col2 VARCHAR2(1000)) ; … SQL> ALTER TABLE t3 INMEMORY; SQL> ALTER TABLE t3 INMEMORY TEXT (col2); SQL> SELECT COUNT(*) FROM t3; -- ポピュレート SQL> SELECT column_name, sql_expression FROM v$im_imecol_cu i, dba_objects o WHERE i.objd = o.data_object_id AND o.object_name = 'T3'; COLUMN_NAME SQL_EXPRESSION --------------------------------------------- --------------------------------------------- SYS_IME_IVDX_9F2A608837694FE5BF4C21835934EE49 SYS_CTX_MKIVIDX("COL2" RETURNING RAW(32767)) SQL> SELECT id FROM t3 WHERE CONTAINS(col2, 'Oracle') > 0; --------------------------------------------------- | Id | Operation | Name | Rows | --------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | |* 1 | TABLE ACCESS INMEMORY FULL| T3 | 100 | --------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - inmemory(SYS_CTX_CONTAINS2("COL2" , 'Oracle' , "T3"."SYS_IME_IVDX_9F2A608837694FE5BF4C21835934EE49")>0) filter(SYS_CTX_CONTAINS2("COL2" , 'Oracle' , "T3"."SYS_IME_IVDX_9F2A608837694FE5BF4C21835934EE49")>0) IM仮想列 (テキスト索引)
  130. DBIMで空間分析がサポートされた メリット • 空間索引 (Rツリー索引) を使⽤しない空間問合せが 可能に (最⼤10倍⾼速) • 分析Rツリー索引のメンテナンスは不要

    機能概要 • 空間列に対するインメモリ上のSpatialサマリー仮想列 (ジ オメトリの近似値) を追加し、SDO_FILTER演算⼦ (空間 フィルタ操作) などを使⽤した⾼速インメモリ空間検索を可 能にする • SIMDベクター・スキャンを使⽤して⾼速にフィルタリング • 空間分析のための空間索引の置き換え 利⽤イメージ • 空間列にINMEMORY SPATIAL句を指定する インメモリのSpatialサポート Copyright © 2021, Oracle and/or its affiliates. 153 追加のIM列 インメモリ列ストア 区画 番号 095040390 095040310 095040250 095040260 Spatial Summary Spatial Details ユーティリティ・バルブ はどの区画にありま すか︖ California 区画 アドレス 300 Oracle Pkwy 400 Oracle Pkwy 500 Oracle Pkwy 600 Oracle Pkwy ⽶国の⼟地区画 140ミリオンを検索
  131. 空間演算⼦(⼀部) 説明 SDO_FILTER 2つの空間データの重なりをMBRで簡易判定 (⼀次フィルタ) ⼤量の空間データを絞り込むのに有⽤ SDO_NN 与えた空間データと最も近い空間データの⾏を順に返す SDO_NN_DISTANCE 上記で得られるジオメトリとの距離を返す(SDO_NNと併せて使う補助演算⼦)

    SDO_WITHIN_DISTANCE 2つのジオメトリの距離が指定範囲内かを判定 SDO_JOIN 空間結合⽤の演算⼦ SDO_RELATE 2つのジオメトリの位相関係を判定する汎⽤の演算⼦ この演算⼦ではパラメータで位相関係を与えて判定するが、位相関係ごとの専⽤ 演算⼦SDO_ANNYCONNECT, SDO_CONTAINSなども⽤意されている 空間検索処理と空間索引 (2段階フィルタ処理によるクエリ処理) 空間索引とはRツリーのドメイン索引 • ジオメトリを囲む最⼩の矩形(MBR)をツリー構造で管理 • これによりジオメトリの関係性の判定時に対象を絞り込める • 最⼤4次元まで対応 (デフォルトは2次元) インメモリのSpatialサポート 154 2次元のジオメトリ (空間データ) MBR(最⼩境界矩形) ・MAX(x,y) MIN(x,y)・ 8 9 7 6 5 4 3 2 1 a b c d R S root a b c d ジオメトリへのポイント R S Rツリー root 実体は以下で構成される ・ MDRT_XXXX$ という表 ・ MDRS_XXXX$ というシーケンス (索引内のID採番に使⽤される) 索引名とのマッピングはUSER_SDO_INDEX_METADATAビューで確認可能 Copyright © 2021, Oracle and/or its affiliates. 空間データ 1次 フィルタ 空間データ 2次 フィルタ 空間索引の利⽤ 結果データ コストの⾼い厳密な空間 判定演算の範囲をMBRを ベースとした空間索引で ⾼速に絞り込む CREATE INDEX … (<空間列>) INDEXTYPE IS MDSYS.SPATIAL_INDEX [PARAMETERS(…)]; 1 9
  132. 利⽤イメージ (空間表に対する空間問合せ) • 19cまで(空間索引を作成して検索する) • 21c(INMEMORY SPATIAL句を指定するのみ) • 各次元の最⼤値と最⼩値の仮想列を⾃動的に作成 インメモリのSpatialサポート

    Copyright © 2021, Oracle and/or its affiliates. 155 INSERT INTO user_sdo_geom_metadata … ALTER TABLE cola_markets INMEMORY INMEMORY SPATIAL(shape); SELECT * FROM cola_markets WHERE sdo_filter(shape, :x) = 'TRUE'; CREATE TABLE cola_markets (…, shape SDO_GEOMETRY); … INSERT INTO user_sdo_geom_metadata VALUES ('cola_markets’, 'shap', SDO_DIM_ARRAY( SDO_DIM_ELEMENT('X', 0, 20, 0.005), SDO_DIM_ELEMENT('Y', 0, 20, 0.005)), NULL); -- ジオメトリのメタデータを定義 COMMIT; CREATE INDEX cola_spatial_idx ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; SELECT * FROM cola_markets WHERE sdo_filter(shape, :x) = 'TRUE'; ------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID | COLA_MARKETS | |* 2 | DOMAIN INDEX (SEL: 0.000000 %)| COLA_SPATIAL_IDX | ------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 – access("MDSYS"."SDO_FILTER"("C"."SHAPE","MDSYS"."SDO_GEOMETRY"(2003, NULL,NULL,"SDO_ELEM_INFO_ARRAY"(1,1003,3),"SDO_ORDINATE_ARRAY" (4,6,8,8)))='TRUE') 各次元の名前、上限値、 下限値、許容差
  133. 利⽤イメージ (SDO_FILTER演算⼦でインメモリ・スキャン) インメモリのSpatialサポート Copyright © 2021, Oracle and/or its affiliates.

    157 SQL> CREATE TABLE cola_markets (mkt_id NUMBER PRIMARY KEY, name VARCHAR2(32), shape SDO_GEOMETRY); … SQL> INSERT INTO user_sdo_geom_metadata VALUES('cola_markets', 'shape', SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, 0.005), 2 SDO_DIM_ELEMENT('Y', 0, 20, 0.005)), NULL); SQL> COMMIT; SQL> ALTER TABLE cola_markets INMEMORY; SQL> ALTER TABLE cola_markets INMEMORY SPATIAL(shape); SQL> SELECT COUNT(*) FROM cola_markets; -- ポピュレート SQL> SELECT column_name,sql_expression FROM v$im_imecol_cu i,dba_objects o WHERE i.objd = o.data_object_id AND o.object_name = 'COLA_MARKETS'; COLUMN_NAME SQL_EXPRESSION --------------------------------------------- --------------------------------------------- SYS_IME_SDO_D05103A9F2124F55BF9C3C15A4512E87 SDO_GEOM_MIN_X(SYS_OP_NOEXPAND("SHAPE")) SYS_IME_SDO_6D2C60D2D8644FA8BF3D4E22D76C48E7 SDO_GEOM_MAX_X(SYS_OP_NOEXPAND("SHAPE")) SYS_IME_SDO_BF1884A56A084FF9BF49D38285AD73A3 SDO_GEOM_MIN_Y(SYS_OP_NOEXPAND("SHAPE")) SYS_IME_SDO_B996119FE7284F98BFFB307399EF6AE0 SDO_GEOM_MAX_Y(SYS_OP_NOEXPAND("SHAPE")) SYS_IME_SDO_9B572C8911B64F54BFF5260BF00B7B6E SDO_GEOM_MIN_Z(SYS_OP_NOEXPAND("SHAPE")) SYS_IME_SDO_00A3472BC3454F8DBF911F6AA8333CAF SDO_GEOM_MAX_Z(SYS_OP_NOEXPAND("SHAPE")) IM仮想列 (Spatial)
  134. 利⽤イメージ (SDO_FILTER演算⼦でインメモリ・スキャン) • 問合せウィンドウ(左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作⽤するジオメトリを選択する インメモリのSpatialサポート Copyright © 2021, Oracle and/or

    its affiliates. 158 SQL> SELECT c.mkt_id, c.name FROM cola_markets c 2 WHERE SDO_FILTER(c.shape, SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(4,6, 8,8))) = 'TRUE’; ----------------------------------------------------------- | Id | Operation | Name | Rows | ----------------------------------------------------------- | 0 | SELECT STATEMENT | | 200 | |* 1 | TABLE ACCESS INMEMORY FULL| COLA_MARKETS | 200 | ----------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("C"."SYS_IME_SDO_6D2C60D2D8644FA8BF3D4E22D76C48E7">=SDO_GEOM_MIN_X("M DSYS"."SDO_GEOMETRY"(2003,NULL,NULL,"SDO_ELEM_INFO_ARRAY"(1,1003,3),"SDO_ORDINATE_A RRAY"(4,6,8,8)))-5.0000000050000005E-003D AND "C"."SYS_IME_SDO_D05103A9F2124F55BF9C3C15A4512E87"<=SDO_GEOM_MAX_X("MDSYS"."SDO_GEO METRY"(2003,NULL,NULL,"SDO_ELEM_INFO_ARRAY"(1,1003,3),"SDO_ORDINATE_ARRAY"(4,6,8,8) ))+5.0000000050000005E-003D AND "C"."SYS_IME_SDO_B996119FE7284F98BFFB307399EF6AE0"> =SDO_GEOM_MIN_Y("MDSYS"."SDO_GEOMETRY"(2003,NULL,NULL,"SDO_ELEM_INFO_ARRAY"(1,1003, 3),"SDO_ORDINATE_ARRAY"(4,6,8,8)))-5.0000000050000005E-003D AND "C"."SYS_IME_SDO_BF1884A56A084FF9BF49D38285AD73A3"<=SDO_GEOM_MAX_Y("MDSYS"."SDO_GEO METRY"(2003,NULL,NULL,"SDO_ELEM_INFO_ARRAY"(1,1003,3),"SDO_ORDINATE_ARRAY"(4,6,8,8) ))+5.0000000050000005E-003D)
  135. JSONのIMフル・テキスト検索が可能になった メリット • JSON検索索引 (実態はテキスト索引) を使⽤しない ⾮定型問合せやフル・テキスト問合せが可能に 機能概要 • 最適化されたバイナリJSON形式(OSON)を⽤いた最⼤8K

    のインラインで格納された新しいJSONデータ型列 • JSONコンテンツへの問合せでは⾃動的にOSON形式が使わ れる (例. movie.nameに“Rogue”を含む映画を検索) • JSONパス式を解析せずに評価でき、SIMD命令処理が可能 (索引を使⽤せずに⾼速検索が可能) • 仮想列や関数ベースの索引に対するIM式 (事前処理結果) もIM列ストアに格納できる • JSONコンテンツへのIM問合せでJSON_TEXTCONTAINS がサポート • JSON_TEXTCONTAINSはTEXTキーワードが必要 • JSON検索索引が存在すると索引アクセスになる JSONデータ型のサポート Copyright © 2021, Oracle and/or its affiliates. 162 リレーショナル インメモリ仮想列 OSON形式 インメモリ列ストア { "Theater":"AMC 15", "Movie":”Rogue One", "Time“:2017-01-09 18:45", "Tickets":{ "Adults":2 } } Relational Virtual JSON
  136. データ型の⽐較 VARCHAR2、CLOB、BLOBデータ型 • 最⼤32,767バイトのJSONドキュメント全体を仮想列と してOSON形式でポピュレート可能 • JSONパス式を解析せずに評価でき、SIMD処理が可能 • "IS JSON"チェック制約が該当カラムに必要

    • MAX_STRING_SIZE=EXTENDEDが必要 • インメモリ問合せはJSON_TABLE, JSON_QUERY, JSON_VALUE, JSON_EXISTSをサポート • 仮想列や関数ベースの索引に対するIM式 (事前処理 結果) もIM列ストアに格納できる • INMEMORY_VIRTUAL_COLUMNS=ENABLE (明⽰的に INMEMORYを指定していない仮想列もポピュレートされる) • JSON_TEXTCONTAINSはJSON検索索引がないと 使⽤できない JSONデータ型 • 最⼤8Kバイトのインライン格納されたOSON形式をそ のままIM列ストアにポピュレートされる • SIMD命令で⾼速問合せ可能 (インラインLOBでないと IM列ストアに格納されない) • MAX_STRING_SIZEや"IS JSON" 制約が不要 • 最⼤32,767バイトのJSONドキュメント全体を仮想列 のOSON形式でもポピュレート可能 • MAX_STRING_SIZE=EXTENDEDが必要 • これまでの関数以外に、JSON_TEXTCONTAINSを 使⽤したフル・テキスト検索をサポート (インメモリ・フル・ テキスト列を使⽤) • MAX_STRING_SIZE=EXTENDEDが必要 JSONデータ型のサポート Copyright © 2021, Oracle and/or its affiliates. 163
  137. • VARCHAR2データ型(IM仮想列でのフィルタ) SQL> CREATE TABLE t1 (id NUMBER, col1 NUMBER,

    col2 VARCHAR2(2000) 2 CHECK (col2 IS JSON)) ; … SQL> SELECT column_name, sql_expression FROM v$im_imecol_cu i, dba_objects o 2 WHERE i.objd = o.data_object_id AND o.object_name = 'T1'; COLUMN_NAME SQL_EXPRESSION --------------------------------------------- ------------------------------- SYS_IME_OSON_95A9B02CBCB64F3FBFDE8DD6E79B7309 OSON("COL2" FORMAT JSON , 'ime' RETURNING RAW(32767) NULL ON ERROR) SQL> SELECT col2 FROM t1 WHERE JSON_VALUE(col2, …) = 1600; --------------------------------------------------- | Id | Operation | Name | Rows | --------------------------------------------------- | 0 | SELECT STATEMENT | | 20 | |* 1 | TABLE ACCESS INMEMORY FULL| T1 | 20 | --------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - inmemory(JSON_VALUE("COL2" FORMAT JSON , '$.PONumber' RETURNING NUMBER NULL ON ERROR , "T1". "SYS_IME_OSON_95A9B02CBCB64F3FBFDE8DD6E79B7309")=1600) filter(JSON_VALUE("COL2" FORMAT JSON , '$.PONumber' RETURNING NUMBER NULL ON ERROR , "T1". "SYS_IME_OSON_95A9B02CBCB64F3FBFDE8DD6E79B7309")=1600) 利⽤イメージ(JSONデータの問合せ) パス式”PONumber”が1600のものを選択する • JSONデータ型(IM列でのフィルタ) • JSONデータからパス式“PONumber”が1600のものを選択 JSONデータ型のサポート Copyright © 2021, Oracle and/or its affiliates. 165 SQL> CREATE TABLE t2 (id NUMBER, col1 NUMBER, col2 JSON) ; … SQL> SELECT col2 FROM t2 2 WHERE JSON_VALUE(col2,'$.PONumber' RETURNING NUMBER) = 1600; --------------------------------------------------- | Id | Operation | Name | Rows | --------------------------------------------------- | 0 | SELECT STATEMENT | | 20 | |* 1 | TABLE ACCESS INMEMORY FULL| T2 | 20 | ---------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - inmemory(JSON_VALUE("COL2" /*+ LOB_BY_VALUE */ FORMAT OSON , '$.PONumber' RETURNING NUMBER NULL ON ERROR)=1600) filter(JSON_VALUE("COL2" /*+ LOB_BY_VALUE */ FORMAT OSON , '$.PONumber' RETURNING NUMBER NULL ON ERROR)=1600)
  138. パス式”LineItem.Part.Description”に‘Magic’が含まれる発注書を検索する SQL> CREATE TABLE t2 (id NUMBER, col1 NUMBER, col2

    JSON) ; … SQL> ALTER TABLE t2 INMEMORY; SQL> ALTER TABLE t2 INMEMORY TEXT (col2); SQL> SELECT COUNT(*) FROM t2; -- ポピュレート SQL> SELECT column_name, sql_expression FROM v$im_imecol_cu i, dba_objects o WHERE i.objd = o.data_object_id AND o.object_name = 'T2'; COLUMN_NAME SQL_EXPRESSION --------------------------------------------- ------------------------------------------------------------------- SYS_IME_OSON_0C5E4CB28BF04FCEBFCADB991EF4A9C7 OSON("COL2" FORMAT OSON , 'ime' RETURNING RAW(32767) NULL ON ERROR) <- OSONデータ SYS_IME_IVDX_5E57CC8A68684FE7BF86B26C9C507A13 SYS_CTX_MKIVIDX(“COL2” RETURNING RAW(32767)) <- テキスト索引 SQL> SELECT col2 FROM t2 WHERE JSON_TEXTCONTAINS(col2, '$.LineItems.Part.Description', 'Magic'); --------------------------------------------------- | Id | Operation | Name | Rows | --------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | |* 1 | TABLE ACCESS INMEMORY FULL| T2 | 100 | --------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - inmemory(SYS_CTX_CONTAINS2("T2"."COL2" /*+ LOB_BY_VALUE */ , '(Magic) INPATH (/LineItems/Part/Description)' , "T2"."SYS_IME_IVDX_5E57CC8A68684FE7BF86B26C9C507A13")>0) filter(SYS_CTX_CONTAINS2("T2"."COL2" /*+ LOB_BY_VALUE */ , '(Magic) INPATH (/LineItems/Part/Description)' , "T2"."SYS_IME_IVDX_5E57CC8A68684FE7BF86B26C9C507A13")>0) 利⽤イメージ(フル・テキスト検索) JSONデータ型のサポート Copyright © 2021, Oracle and/or its affiliates. 166
  139. DBIMライセンスを購⼊しなくても試すことができるようになった(19c RU(19.8) にもバックポート) メリット • DBIMライセンスを購⼊しなくてもDBIMの価値を確認できるよう になった 機能概要/利⽤イメージ • 初期化パラメータINMEMORY_FORCEをBASE_LEVELにす

    ることで、インメモリ機能を以下の範囲で試すことができる • INMEMORY_SIZEが16GB以内 (1インスタンスあたり、CDBレベル で設定する必要がある)、QUERY LOWの圧縮レベル • 以下は利⽤できない • ⾃動インメモリ、列の除外(表の全ての列がポピュレートされる)、 CELLMEMORY • Authorized Cloud Environments (認定クラウド環境) では 利⽤できない Database In-Memoryベース・レベル Copyright © 2021, Oracle and/or its affiliates. 168 System Global Area (SGA) Large Pool Log Buffer Shared Pool In-Memory Area (Max 16GB) Other Buffer Cache
  140. IM列ストアを有効にしなくてもCellMemoryが使⽤できるようになった(19c RU(19.8) にもバックポート) メリット • オーバーヘッドを発⽣させることなくCellMemory機能を使⽤できるようになった 機能概要/利⽤イメージ • インメモリ列ストアを有効にすることなくCellMemory機能を利⽤可能に (すべてのDBIMデータ型がExadata

    Flash Cache上で利⽤可能に) • INMEMORY_FORCE=CELLMEMORY_LEVEL • INMEMORY_SIZE=0 • 0より⼤きいとINMEMORY_FORCE=DEFAULと同じ動作になる • オンプレミスExadataシステムのみ有効 • Smart Scan時にFlash Cache上にDBIM形式でポピュレートする CellMemoryレベル Copyright © 2021, Oracle and/or its affiliates. 169 In-Memory Columnar scans In-Flash Columnar scans Up to 25.6 TB Flash per Server
  141. 次のインメモリ機能はOracle Database Enterprise Editionで利⽤可能に変更された (Non-Exadataでも利⽤可能に) • ⾃動インメモリ • インメモリ外部表 •

    Memoptimized Rowstore ライセンスの変更 Copyright © 2021, Oracle and/or its affiliates. 170 18c 19c 21c EE EE-ES DBCS EE-EP ExaCS /CC EE EE-ES DBCS EE-EP ExaCS /CC EE EE-ES DBCS EE-EP ExaCS /CC ⾃動インメモリ N Y Y Y Y Y Y Y Y Y Y Y インメモリ外部表 N Y N Y N Y N Y Y Y Y Y Memoptimized Rowstore N Y N Y N Y N Y Y Y Y Y EE︓Oracle Database Enterprise Edition EE-ES︓Engineered Systems (Oracle Database Appliance以外) DBCS EE-EP︓DBCS EE-Extreme Performance ExaCS/CS︓Exadata CS/CC
  142. Copyright © 2021, Oracle and/or its affiliates 171 Clusterware 新機能

    Clusterware REST API キャッシュ・フュージョン強化 DBCAでのRACのデータベース管理ポリシーの変更 クラスタウェア内のリソースとしてのPDBの統合 プラガブル・データベース・クラスタ・リソース
  143. REST API にて Oracle Clusterwareコマンドライン・インタフェースがサポートされた Oracle Clusterwareコマンドライン・インタフェースに基づいたREST APIベースの管理により、リモートの物理的な場所 またはローカルにプロビジョニングされたOracle Cloudでのクラスタ管理が簡略化可能

    Clusterware REST API Copyright © 2021, Oracle and/or its affiliates 172 メリット • クラスタウェアコマンドラインI/FのREST対応 • リモートからの操作性の向上 機能概要 • 19cまではRHP機能を中⼼に提供されていた (現在は FPP : Fleet Patching and Provisioning) • 21cからクラスタウェア操作へ拡充 https://docs.oracle.com/en/database/oracle/oracle-database/21/cwadd/rest-apis-clusterware.html#GUID- 96E10786-6EA6-45A9-ABF3-B8A119243011
  144. Clusterware REST API Copyright © 2021, Oracle and/or its affiliates

    173 $ curl -k -X GET https://<SCAN_NAME>:<PORT>/grid/cmd/v1/cmd/ --user admin:<PASSWORD> { "name":"cmd","homes": [ {"homeName":"OraGI21Home1","path":"/u01/app/21.3.0/grid"}, {"homeName":"OraDB21Home1","path":"/u01/app/oracle/product/21.0.0/dbhome_1"} ], "jobs": [ {"rel":"canonical","md/v1/cmd/jobs","mediaType":"application/vnd.oracle.resource+json;type=collection"}, ... href":"https://ptvmscan-01.jp.oracle.com:5700/grid/c } 例︓ORACLE_HOMEの情報取得コマンド $ curl –k –X POST ¥ > https://<SCAN_NAME>:<PORT>//grid/cmd/v1/cmd/exec ¥ > '-H "accept: text/plain,text/javascript,application/json"' ¥ > '-H "content-type: application/vnd.oracle.resource+json;type=singular"' --user admin:myAdminPasswd ¥ > ‘-d {“command” : [“crsctl”, “stat”, “res”, “-t”], “runAsUser”:“<OSユーザ>”, “userPassword”:“<OSユーザのパスワード>"}' { "runAsUser": "grid", "jobId": "vYqd35gHVBihMfCEXfo66kDjUseRwM74_u_4hu_bxicHCvWiap7AMljo51g6APOwclIs7POKcIoUOgwlZZNDmQ", "command": [ "crsctl", ... 例︓ジョブ作成
  145. Clusterware REST API Copyright © 2021, Oracle and/or its affiliates

    174 $ curl -k -X GET https://<SCAN_NAME>:<PORT>/grid/cmd/v1/cmd/jobs/<JOBのID> --user admin:myAdminPasswd { "runAsUser": "grid", "jobId": "vYqd35gHVBihMfCEXfo66kDjUseRwM74_u_4hu_bxicHCvWiap7AMljo51g6APOwclIs7POKcIoUOgwlZZNDmQ", "command": [ "crsctl", "stat", "res", "-t" ], "nodeName": "ptvm02", "output": "--------------------------------------------------------------------------------¥n Name Target State Server State details ¥n --------------------------------------------------------------------------------¥n Local Resources¥n --------------------------------------------------------------------------------¥ nora.LISTENER.lsnr¥n ONLINE ONLINE ptvm01 STABLE¥n ... ora.scan3.vip¥n 1 ONLINE ONLINE ptvm01 STABLE¥n --------------------------------------------------------------------------------¥n", "processId": 3255199, "processStatus": 0, "timeStart": "2021-09-21T00:02:29", "timeFinish": "2021-09-21T00:02:30", "jobExpiry": 3600, "status": "Completed", 例︓ジョブのステータス確認
  146. メリット • マルチテナント環境にて、特定PDBの動作に影響を受けて 他のPDBがダウンしにくくなった 機能概要 • 19c 以前はキャッシュフュージョン時にメッセージの破損等を 検知した場合は ORA-600

    が発⽣する その際、LMSプロセスがクラッシュする事で他のPDBも影響 を受けていた • 21c からは不⼀致を検知した場合、ブロック要求を再試⾏ するように変更され、LMSプロセスがクラッシュしにくくなった Cache Fusion Hardening (21c) Instance1 Instance2 LMS LMS Cache Fusion キャッシュ・フュージョン強化 Copyright © 2021, Oracle and/or its affiliates 6 PDB1 PDB1 PDB2 PDB2
  147. PDBの起動管理ポリシー Copyright © 2021, Oracle and/or its affiliates 176 PDBの起動管理ポリシーとして、下記2種類が指定可能となった

    • ⾃動 (デフォルト) ホストマシン再起動時、データベースは再起動前の実⾏状態へ戻す形で順次起動 • ランク(最⾼5、最低1) データベース・ホスト・コンピュータの再起動時、 データベースは⾼ RANK 設定の PDB を優先して順次起動 また、障害発⽣時に全CDBを起動する為に必要なリソースが不⾜した場合、 RANKの低いPDBを停⽌し、 ⾼RANKの PDB 稼働を優先 指定⽅法 • DBCA で Database 作成時に指定 • srvctl modify database コマンドで変更 $ srvctl modify database –db <db_unique_name> -policy RANK
  148. ランクの指定時の動作イメージ PDBの起動管理ポリシー Copyright © 2021, Oracle and/or its affiliates 177

    RANK3 RANK2 RANK1 ②ノード障害発⽣時 例︓ノードのCPU数:4 各PDBのCPU_COUNT:2 必要となるCPUが不⾜する場合 RANKの低いPDBを停⽌ ③複数CDB環境でノード障害発⽣時 例︓ノードのCPU数:4、 各CDBのCPU_COUNT :2 RANK3 RANK2 RANK1 ①DB再起動時 RANKの⾼いPDBを 優先して起動 RANK3 RANK2 RANK1 必要となるCPUが不⾜する場合RANK の低いPDBが属するCDBを停⽌
  149. DBCAでのRACのデータベース管理ポリシーの変更 Copyright © 2021, Oracle and/or its affiliates 178 メリット

    • PDBに対してランクをつける事が可能になる RANK 管理 ポリシーが選択できるようになった 機能概要 • PDB毎にランク付け(1~5)を⾏う事で、再起動時にランク の⾼いPDBが属するCDBを優先起動 dbca のサイレントモード時も指定可能 dbca -createDatabase -gdbName global_database_name … [-managementPolicy [AUTOMATIC|RANK]] ※デフォルトは AUTOMATIC
  150. クラスタウェア内のリソースとしてのPDBの統合 Copyright © 2021, Oracle and/or its affiliates 179 メリット

    • PDBが独⽴したCluster Resourceとなり、インスタンス の起動状況が確認可能に • PDBに紐づくサービスによる制御に加え、クラスタ管理コマン ドからPDB単位での制御が可能になった 機能概要 • 19cまでは個別にPDBの起動状況を確認する必要があった • 21cからは 上記に加え srvctl コマンドで制御可能 利⽤イメージ • EMCCおよびSQLコマンドラインI/F以外からの操作 • 起動/停⽌/状態確認の各操作が容易になる ORCL ORCLPDB1 ORCL ORCL ORCLPDB 1
  151. プラガブル・データベース(PDB)クラスタ・リソースを使⽤すると、PDBリソースを直接マッピングおよび制御可能 これにより、Oracle RACデータベース内のPDBをより厳重で効果的に制御できるようになった ※ポリシー管理データベースでは利⽤不可 プラガブル・データベース・クラスタ・リソース Copyright © 2021, Oracle and/or

    its affiliates 181 --PDB 起動 [grid@dbcs21c1 ~]$ srvctl start pdb -db orcl213 -pdb ORCL213PDB1 --PDB 停⽌ [grid@dbcs21c1 ~]$ srvctl stop pdb -db orcl213 -pdb ORCL213PDB1 -stopoption immediate --特定ノードのみ PDB 起動 [grid@dbcs21c1 ~]$ srvctl start pdb -db orcl213 -pdb ORCL213PDB1 -node dbcs21c1 --クラスタリソースの無効化 [grid@dbcs21c1 ~]$ srvctl disable pdb -db orcl213 -pdb ORCL213PDB1 --クラスタリソースの有効化 [grid@dbcs21c1 ~]$ srvctl enable pdb -db orcl213 –pdb ORCL213PDB1 コマンド実⾏例 ORCL213 ORCL213PDB1
  152. Copyright © 2021, Oracle and/or its affiliates 182 Data Guard

    新機能 Active Data Guard - スタンバイの結果キャッシュ PDBリカバリ分離 Data Guard Broker遠隔同期インスタンス作成 ファスト・スタート・フェイルオーバーのコールアウト 標準化されたData Guard Brokerのディレクトリ構造 Oracle Database 21c Data Guardのサポートが終了した機能
  153. 繰り返し実⾏される問合せのレスポンスを向上 SQL問合せ結果キャッシュ • SQL問合せの結果セットを共有プールに格納 • ブロックの再読取りおよび結果の再計算という多くのリソースを消費する操作を⾏う必要がなくなる • 結果の構成に使⽤されているデータの更新が⾏われた場合、そのキャッシュは⾃動的に無効化される PL/SQLファンクション結果キャッシュ •

    ファンクションの結果セットを共有プールに格納 サーバー結果キャッシュ Copyright © 2021, Oracle and/or its affiliates 183 Oracle Databaseインスタンス ORDERS ORDER_ITEMS PRODUCT_INFORMATION CUSTOMERS SQL問合せ結果キャッシュ キャッシュ済みの結果が 返され、⾼速レスポンス 1. SELECT 2. SELECT 初回アクセス時に SQL問合せの結果 セットをキャッシュ
  154. スタンバイ・データベースでもサーバー結果キャッシュが利⽤可能に。 Active Data Guardのスタンバイ・データベースでサーバー結果キャッシュを保持し、 レポートやその他のスタンバイへ繰り返し実⾏される問合せのパフォーマンス向上 表のRESULT_CACHE属性をSTANDBY ENABLEに設定にすることで機能有効化 問合せに複数表が関係する場合、問合せに含まれるすべての表で結果キャッシュの有効化が必要 ・表作成時の設定 ・既存表の属性変更

    Active Data Guard - スタンバイの結果キャッシュ Copyright © 2021, Oracle and/or its affiliates 184 ALTER TABLE <テーブル名> RESULT_CACHE (STANDBY ENABLE); CREATE TABLE <テーブル名> (<列名> <列型>,…) RESULT_CACHE(STANDBY ENABLE); Oracle Databaseインスタンス ORDERS ORDER_ITEMS PRODUCT_INFORMATION CUSTOMERS SQL問合せ結果キャッシュ 1. SELECT 2. SELECT ORDERS ORDER_ITEMS PRODUCT_INFORMATION CUSTOMERS 同期・⾮同期 プライマリ・データベース スタンバイ・データベース
  155. Data Guard Brokerから遠隔同期インスタンスの作成、追加可能に 遠隔同期インスタンスを利⽤することで、⻑距離間のData Guard構成でのデータ損失をゼロにすることが可能 これまでData Guard Brokerを利⽤する場合、遠隔同期インスタンスを作成後にADD FAR_SYNCコマンドで Data

    Guard Broker構成に追加が必要 Data Guard BrokerからCREATE FAR_SYNCコマンドにより遠隔同期インスタンスの作成、追加可能 Data Guard Broker遠隔同期インスタンス作成 Copyright © 2021, Oracle and/or its affiliates 186 実⾏例 DGMGRL> CREATE FAR_SYNC bostonfs AS CONNECT IDENTIFIER IS "bostonfs_conn_str" PARAMETER_VALUE_CONVERT "boston","bostonfs" SET LOG_FILE_NAME_CONVERT "boston","bostonfs" SET DB_RECOVERY_FILE_DEST "$ORACLE_HOME/dbs/" SET DB_RECOVERY_FILE_DEST_SIZE "100G" RESET UNDO_TABLESPACE; プライマリ・データベース スタンバイ・データベース 同期 ⾮同期 遠隔同期インスタンス
  156. 遠隔同期インスタンスを利⽤する場合に、同期だけでなく、⾮同期(最⼤パフォーマンス・モード)での転送が可能になり、 新しい構成パターンを選択可能 最⼤パフォーマンス・モードでのData Guard遠隔同期インスタンス Copyright © 2021, Oracle and/or its

    affiliates 187 保護モード 遠隔同期インスタンスの REDO送信のサポート フィジカル・スタンバイの サポート ロジカル・スタンバイの サポート 最⼤保護 いいえ はい いいえ 最⼤可⽤性 はい はい はい 最⼤パフォーマンス はい はい はい プライマリ・データベース スタンバイ・データベース 同期 ⾮同期 遠隔同期インスタンス ⾮同期
  157. fsfocallout.oraの設定パラメータ パラメータ 説明 FastStartFailoverPreCallout FSFO実施前に実⾏されるコールアウト・スクリプトを指定 FastStartFailoverPreCalloutTimeout コールアウト・スクリプトのタイムアウト値(秒) FastStartFailoverPreCalloutSucFileName スクリプトが正常に実⾏されたことを⽰すsucファイル FastStartFailoverPreCalloutErrorFileName

    プリコールアウト・スクリプトが作成するエラーファイルの名前 FastStartFailoverActionOnPreCalloutFailure タイムアウト値経過後にsucファイルが存在しない場合、またはエ ラーファイルが検出された場合に、オブザーバーが取るアクションを 指定 FastStartFailoverPostCallout FSFO実施後に実⾏されるコールアウト・スクリプトを指定 ファスト・スタート・フェイルオーバーのコールアウト Copyright © 2021, Oracle and/or its affiliates 189 コールアウト・スクリプトは、構成ファイル(fsfocallout.ora)と同じ場所に配置
  158. # The pre-callout script that is run before fast-start failover

    is enabled. FastStartFailoverPreCallout=fsfo_precallout # The timeout value (in seconds) for pre-callout script FastStartFailoverPreCalloutTimeout=1200 # The name of the suc file created by the pre-callout script. FastStartFailoverPreCalloutSucFileName=fsfo_precallout.suc # The name of the error file that the pre-callout script creates FastStartFailoverPreCalloutErrorFileName=precallout.err # Action taken by observer if the suc file does not exist after FastStartFailoverPreCalloutTimeout seconds # or if an error file is detected before FastStartFailoverPreCalloutTimeout seconds passed FastStartFailoverActionOnPreCalloutFailure=STOP # The post-callout script that is run after fast-start failover succeeds FastStartFailoverPostCallout=fsfo_postcallout fsfocallout.ora 設定例 Copyright © 2021, Oracle and/or its affiliates 190 正常終了時に出⼒されるファイル名 タイムアウトまでの時間(秒) FSFO開始前に実⾏するスクリプト スクリプトエラー時に出⼒されるファイル名 正常終了しなかった場合の対応 FSFO完了後に実⾏するスクリプト
  159. クライアント側ファイルの$DG_ADMINサブディレクトリの内容 Copyright © 2021, Oracle and/or its affiliates 192 ディレクトリ名

    配置されるファイル admin オブザーバ構成ファイル(observer.ora) config_ConfigurationSimpleName/log オブザーバ・ログ・ファイル(observer_hostname.log) config_ConfigurationSimpleName/dat オブザーバ・ランタイム・データ・ファイル(fsfo_hostname.dat) config_ConfigurationSimpleName/callout コールアウト構成ファイル(fsfocallout.ora) コールアウト前スクリプト コールアウト後スクリプト コールアウト前成功ファイル ConfigurationSimpleNameプロパティ 次のルールを使⽤して初期値が設定 • ブローカ構成名(名前が30⽂字以下で有効な⽂字が含まれる場合) • ブローカ構成名の最初の30⽂字(名前が30⽂字を超え、最初の30⽂字に有効な値が含まれる場合) • DB_UNIQUE_NAME 21cより前のバージョンでは明⽰的に指定することは不可
  160. Data Guard Brokerにより、ファスト・スタート・フェイルオーバー(FSFO)構成に関する問題を検出可能 フェイルオーバー実施前に問題点を検証し、問題点をレポート VALIDATE FAST_START FAILOVERコマンドを使⽤すると、以下のような問題点を検出 • 設定が正しくないファスト・スタート・フェイルオーバー・パラメータ •

    ファスト・スタート・フェイルオーバーの有効化または開始を妨げる問題 • ファスト・スタート・フェイルオーバーの開始後に実⾏されたアクションに影響する問題 • ブローカ構成の安定性に影響を与える可能性がある問題 • ファスト・スタート・フェイルオーバーのコールアウト構成スクリプトに関する問題 ファスト・スタート・フェイルオーバー構成の検証 Copyright © 2021, Oracle and/or its affiliates 193 DGMGRL> VALIDATE FAST_START FAILOVER;
  161. DGMGRL> VALIDATE FAST_START FAILOVER; Fast-Start Failover: Enabled in Potential Data

    Loss Mode Protection Mode: MaxPerformance Primary: North_Sales Active Target: South_Sales Fast-Start Failover Not Possible: Fast-Start Failover observer not started Post Fast-Start Failover Issues: Flashback database disabled for database ‘dgv1’ Other issues: FastStartFailoverThreshold may be too low for RAC databases. Fast-start failover callout configuration file “fsfocallout.ora” has the following issues: Invalid lines foo=foo The specified file "./precallout" contains a path. 構成検証例 Copyright © 2021, Oracle and/or its affiliates 194 コールアウト構成スクリプトの問題 ブローカ構成の安定性に影響を与える可能性がある問題 FSFO開始後に実⾏されたアクションに影響する問題
  162. Data Guard Broker構成でプライマリ・データベースとして使⽤するデータベースをMAAの推奨値に従って作成可能 下記のパラメータを指定 db_unique_name︓ DB_UNIQUE_NAMEの値 directory-location︓FRAの場所 Size︓FRAの容量 broker-config-file-1-location︓Data Guard

    Brokerの構成ファイル保存場所 broker-config-file-2-location︓Data Guard Brokerの構成ファイル保存場所 アーカイブ・ログ・モード、強制ロギング、フラッシュバックデータベースが有効化され、RMANによるアーカイブログ削除ポリ シーがSHIPPED TO ALL STANDBYに設定されるなど、その他下記のパラメータについても最⼤可⽤性アーキテクチャ (MAA)向けの推奨値に従って設定 DB_FILES、LOG_BUFFER、DB_BLOCK_CHECKSUM、DB_BLOCK_CHECKSUM、 DB_LOST_WRITE_PROTECT、DB_FLASHBACK_RETENTION_TARGET、PARALLEL_THREADS_PER_CPU、 DG_BROKER_START PREPARE DATABASE FOR DATA GUARDコマンド Copyright © 2021, Oracle and/or its affiliates 195
  163. 以前までのリリースで⾮推奨だったData Guard Brokerのパラメータが21cより⾮サポート ArchiveLagTarget LsbyMaxEventsRecorded DataGuardSyncLatency LsbyMaxServers LogArchiveMaxProcesses LsbyMaxSga LogArchiveMinSucceedDest

    LsbyPreserveCommitOrder LogArchiveTrace LsbyRecordAppliedDdl StandbyFileManagement LsbyRecordSkipDdl DbFileNameConvert LsbyRecordSkipErrors LogArchiveFormat LsbyParameters LogFileNameConvert Oracle Database 21c Data Guardのサポートが終了した機能 Copyright © 2021, Oracle and/or its affiliates 197
  164. Copyright © 2021, Oracle and/or its affiliates 198 Sharding シャード・データベースへのアクセス⽤のJDBC

    DataSource フェデレーテッド・シャーディング ⼀元化されたバックアップおよびリストア シャーディング・アドバイザ
  165. シャード・ディレクタ • Global Data Servicesソフトウェア • 各シャードへの接続のルーティングを⾏うインスタンス • 構成・管理処理の実⾏ シャード・カタログ

    • Global Data Servicesのカタログ・データベース • シャード・データベースの構成情報や構成・管理タスク を保持するリポジトリ・データベース シャード • パーティショニングされたデータを保持する(プラガブル) データベース シャード・データベース • シャードの集合 Oracle Database Shardingの構成要素 Copyright © 2021, Oracle and/or its affiliates 199 シャード・ディレクタ シャード・カタログ シャード シャード・データベース
  166. シャードは「データベース」であって「サーバー・ノード」ではない シャード • パーティショニングされたデータを保持する(プラガブル) データベース • Oracle Databaseの⽂脈では「データベース」とはスト レージ上のデータの集合のこと •

    RACは1つの「データベース」を複数のサーバー・ノードで 共有する構成でありShardingとも組み合わせ可能 • 1つのシャードがExadata Full Rackである構成も可能 • 1つのシャード(≒データベース)の可⽤性を⾼める構成 はMaximum Availability Architecture(MAA)の 話そのもの • Real Application Clusters • Automatic Storage Management • Active Data Guard • ... Oracle Database Shardingの構成要素 Copyright © 2021, Oracle and/or its affiliates 200 シャード1 シャード・データベース シャード2 シャードn
  167. 各シャードが持つデータの排他と重複を使い分ける設計が必要 Sharded Table (シャード表) • パーティショニングされた表 • 全シャードが排他的にデータを持つ • 定義はパーティション表とほぼ同じ

    • RANGE • LIST • CONSISTENT HASH • これらの複合(コンポジット・パーティショニング) Duplicated Table (重複表) • パーティショニングできない表 • 全シャードが同じデータを持つ • シャード・カタログが持つデータがレプリケートされる • ⾼頻度の更新は想定していない 各シャードへのデータのパーティショニング Copyright © 2021, Oracle and/or its affiliates 201 シャード・カタログ シャード シャード 重複 排他
  168. クライアントはシャード・ディレクタに接続リクエストを発⾏する (1) Oracleクライアントはシャード・ディレクタに接続リクエス トを発⾏ (2) シャード・ディレクタはどのシャードがどのパーティションを 担当しているか把握している (3) 接続リクエストをリダイレクト コネクション・プールも使⽤可能。

    Oracle製コネクション・プールはどの物理コネクションがどの シャードに接続されているか区別してプールできる。 • Universal Connection Pool for Java(UCP) • OCI Session Pool • Oracle Data Provider for .NET(ODP.NET) クライアントからの接続 Copyright © 2021, Oracle and/or its affiliates 203 シャード・ディレクタ シャード・カタログ シャード シャード・データベース Oracleクライアント (1) (2) (3) (3)
  169. 1つのシャード内で完結させるのが基本 単⼀シャード・クエリー • シャーディング・キーでシャードを特定できる • 1つのシャードに接続して実⾏される • オンライン・トランザクション処理は基本的にこれを想定 マルチ・シャード・クエリー •

    複数シャードにまたがるSQL • シャード・カタログ・データベースに接続して実⾏される • 集計・分析処理 シャーディングでのSQL実⾏ Copyright © 2021, Oracle and/or its affiliates 204 シャード・カタログ シャード シャード Oracleクライアント Oracleクライアント
  170. シャーディング・キーを指定してコネクションを取得 シャーディング・キーを指定するとその値に対応するシャードに接続 19cまでのクライアントからのアクセス⽅法 Copyright © 2021, Oracle and/or its affiliates

    206 //Java OracleDataSource ods = new OracleDataSource(); OracleShardingKey sdkey = ods.createShardingKeyBuilder() .subkey("Customer_Name_XYZ", JDBCType.VARCHAR) .build(); // シャーディング・キーを⽣成 Connection con = ods.createConnectionBuilder() .shardingKey(sdkey) .build(); // シャーディング・キーを指定してコネクションをプールから取得 ... // SQL実⾏ con.commit(); con.close(); // コネクションをプールに返却 (1) (2)
  171. シャーディング・キーをSQLから⾃動判別 どのシャードに接続するかはSQLから⾃動判別する。 個別シャードへのアクセスとマルチ・シャード・クエリーを区別する必要もない。 シャーディング・データソース(JDBC thin driver) Copyright © 2021, Oracle

    and/or its affiliates 207 // プロパティでシャーディング属性をtrueにする Properties prop = new Properties(); prop.setProperty("oracle.jdbc.useShardingDriverConnection", "true"); ... // SQLからシャーディング・キーを⾃動判別して適切なコネクションを取得 OracleConnection conn = ds.getConnection(); PreparedStatement statement = conn.prepareStatement(!"#$#%&'(')*+,',-."/0*1.&02$#'34565'71'8'9!); statement.setInt(1, 15); ResultSet rs = statement.executeQuery(); (1) (2)
  172. 1つのシャードは1つのデータベース Oracle Database 19c 個別のシャード(データベース)を個別にバックアップ Oracle Database 21c シャード・ディレクタのgdsctlコマンドでバックアップを集中 管理可能

    ⼀元化されたバックアップおよびリストア Copyright © 2021, Oracle and/or its affiliates 209 シャード・ディレクタ シャード シャード シャード・カタログ シャード・カタログ
  173. gwsadvコマンドで分析対象に接続 分析対象データベースに直接接続 スキーマ情報を別のデータベースに移して接続 シャーディング・アドバイザ Copyright © 2021, Oracle and/or its

    affiliates 212 gwsadv gwsadv 分析対象データベース 分析対象データベース スキーマ情報 $ expdp ... !"#$%#$&'%$()($(*"#+, ワークロード情報(AWRスナップショット) -.+/012"3(!+%*4"'%56789:5;79<=5;>6?@A6B:CD
  174. SQL実⾏計画からジョインする関係を調べる SQL> ALTER SYSTEM SET statistics_level=all; SQL> grant create session

    to sharding_advisor_user; SQL> grant alter session to sharding_advisor_user; SQL> grant select on v_$sql_plan to sharding_advisor_user; SQL> grant select on v_$sql_plan_statistics_all to sharding_advisor_user; SQL> grant select on gv_$sql_plan to sharding_advisor_user; SQL> grant select on gv_$sql_plan_statistics_all to sharding_advisor_user; SQL> grant select on DBA_HIST_SQLSTAT to sharding_advisor_user; SQL> grant select on dba_hist_sql_plan to sharding_advisor_user; SQL> grant select on dba_hist_snapshot to sharding_advisor_user; シャーディング・アドバイザに必要な権限 Copyright © 2021, Oracle and/or its affiliates 213
  175. gwsadvコマンドで分析対象データベースに接続 $gwsadv -n hostName:port -s serviceName -u username -p password

    -c -w シャーディング・アドバイザのコマンド Copyright © 2021, Oracle and/or its affiliates 214 gwsadvコマンドのオプション 意味 [-n nodeName[:portnum]] 接続先のネットワーク情報 [-s serviceName] -u username 接続先のユーザー/パスワード -p password [-c] ワークロードの取得 (分析にSQL実⾏計画を使⽤) V$SQL_PLAN_STATISTICS_ALLから取得 [-awr_snap_begin timestamp] AWRスナップショットから取得 [-awr_snap_end timestamp] –w 分析にワークロードを使⽤する [sch=(schema1, schema2, …)] 分析対象スキーマ [-tab importantTabsFile] 分析対象表(を限定する)
  176. gwsadvコマンドを実⾏ シャーディング・アドバイザ実⾏例 Copyright © 2021, Oracle and/or its affiliates 215

    [oracle@jphppt07 (db21d) bin 22:55]$ $ORACLE_HOME/bin/gwsadv -n hostname:port -s servicename.db_domain -u user -p password -c -w -t /home/oracle/shardingadvisor/trc/gwsadvtrc1.trc ********** WELCOME TO THE SHARDING ADVISOR ********** Sharding Advisor: Release 20.0 - Development on ⾦ 11⽉ 19 2021 10:55:11 Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved. ** Sharding is a database scaling technique based on horizontal partitioning ** ** of data across multiple independent physical databases, called shards. ** ** The sharding advisor will analyze your schema and workload and ** ** recommend sharding configurations that are best suited for the workload. ** ** The advisor will recommend how to construct table families, and ** ** specify which tables to shard and which tables to duplicate. ** ** A Sharded Table is a table that is partitioned into smaller and ** (省略)
  177. gwsadvコマンドを実⾏するとアドバイス結果を格納する表が作成される シャーディング・アドバイザ実⾏例 Copyright © 2021, Oracle and/or its affiliates 216

    SQL> select table_name from user_tables where table_name like 'SHARDINGADVISOR%'; TABLE_NAME ---------------------------------------------------------------------- SHARDINGADVISOR_CONFIGDETAILS SHARDINGADVISOR_CONFIGURATIONS SHARDINGADVISOR_ECPREDS SHARDINGADVISOR_IMPORTANT_TABS SHARDINGADVISOR_PREDS SHARDINGADVISOR_QUERYTYPES • SHARDED/DUPLICATED表の個数 • シングル/マルチ・シャード・クエリーの個数 • SHARDED表の構成 • DUPLICATED表の構成 • シングル・シャード・クエリー • マルチ・シャード・クエリー
  178. SHARDINGADVISOR_CONFIGDETAILS表 - 各候補の構成 シャーディング・アドバイザ実⾏例 Copyright © 2021, Oracle and/or its

    affiliates 217 SELECT rank, chosenbyuser, numshardedtables as stabs, sizeofshardedtables as sizestabs, numduplicatedtables as dtabs, sizeofduplicatedtables as sizedtabs, numsingleshardqueries as numssq, nummultishardqueries as nummsq, numcrossshardqueries as numcsq, cost FROM SHARDINGADVISOR_CONFIGDETAILS ORDER BY rank; RANK CHO STABS SIZESTABS DTABS SIZEDTABS NUMSSQ NUMMSQ NUMCSQ COST ---------- --- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 1 Y 2 94517 9 2143864 12 2 0 337 2 2 108302 9 2006018 9 5 0 484 3 3 156206 8 1526974 8 6 0 533 この例では3つの候補がある SHARDED表の個数 DUPLICATED表の個数 クロス・シャード・クエリーの個数 マルチ・シャード・クエリーの個数 シングル・シャード・クエリーの個数
  179. SHARDINGADVISOR_CONFIGURATIONS表 - どの表をSHARDED/DUPLICATEDにするか シャーディング・アドバイザ実⾏例 Copyright © 2021, Oracle and/or its

    affiliates 218 SELECT rank, tableName as tname, tabletype as type, tablelevel as tlevel, parent, shardby as shardBy, shardingorreferencecols as cols, unenforceableconstraints, sizeoftable FROM SHARDINGADVISOR_CONFIGURATIONS ORDER BY rank, tlevel, tname, parent; RANK TNAME TYP TLEVEL PARENT SHARDBY COLS ---------- ------------------------------ --- ---------- -------------------- ---------- ------------------------- 1 SOE.CUSTOMERS S 1 HASH CUSTOMER_ID 1 SOE.ADDRESSES S 2 SOE.CUSTOMERS REFERENCE ADD_CUST_FK 1 SOE.CARD_DETAILS D NONE 1 SOE.INVENTORIES D NONE 1 SOE.LOGON D NONE 1 SOE.ORDERENTRY_METADATA D NONE 1 SOE.ORDERS D NONE 1 SOE.ORDER_ITEMS D NONE 1 SOE.PRODUCT_DESCRIPTIONS D NONE 1 SOE.PRODUCT_INFORMATION D NONE 1 SOE.WAREHOUSES D NONE RANK TNAME TYP TLEVEL PARENT SHARDBY COLS ---------- ------------------------------ --- ---------- -------------------- ---------- ------------------------- 2 SOE.CUSTOMERS S 1 HASH CUSTOMER_ID 2 SOE.ORDERS S 2 SOE.CUSTOMERS REFERENCE ORDERS_CUSTOMER_ID_FK 2 SOE.ADDRESSES D NONE 2 SOE.CARD_DETAILS D NONE 2 SOE.INVENTORIES D NONE 2 SOE.LOGON D NONE 2 SOE.ORDERENTRY_METADATA D NONE 2 SOE.ORDER_ITEMS D NONE 2 SOE.PRODUCT_DESCRIPTIONS D NONE 2 SOE.PRODUCT_INFORMATION D NONE 2 SOE.WAREHOUSES D NONE RANK TNAME TYP TLEVEL PARENT SHARDBY COLS ---------- ------------------------------ --- ---------- -------------------- ---------- ------------------------- 3 SOE.CUSTOMERS S 1 HASH CUSTOMER_ID 3 SOE.ADDRESSES S 2 SOE.CUSTOMERS REFERENCE ADD_CUST_FK 3 SOE.ORDERS S 2 SOE.CUSTOMERS REFERENCE ORDERS_CUSTOMER_ID_FK 3 SOE.CARD_DETAILS D NONE 3 SOE.INVENTORIES D NONE 3 SOE.LOGON D NONE 3 SOE.ORDERENTRY_METADATA D NONE 3 SOE.ORDER_ITEMS D NONE 3 SOE.PRODUCT_DESCRIPTIONS D NONE 3 SOE.PRODUCT_INFORMATION D NONE 3 SOE.WAREHOUSES D NONE SHARDED/DUPLICATED SHARDED表の階層 SHARDED表の親表 パーティショニングの種類 パーティショニング列 候補
  180. SHARDINGADVISOR_QUERYTYPES表 - どのSQLがシングル/マルチ・シャード・クエリーになるか シャーディング・アドバイザ実⾏例 Copyright © 2021, Oracle and/or its

    affiliates 219 SELECT * FROM SHARDINGADVISOR_QUERYTYPES ORDER BY SHARDINGCONFIGURATIONNUM; SHARDINGCONFIGURATIONNUM SQLID QUERYTYPE ------------------------ -------------------- -------------------- 1 5g00dq4fxwnsw UNABLE TO CLASSIFY 1 g1znkya370htg SINGLE SHARD QUERY 1 34mt4skacwwwd MULTI SHARD QUERY 1 2yp5w5a36s5xv SINGLE SHARD QUERY 1 28tr1bjf4t2uh MULTI SHARD QUERY 1 200mw76ta6n1r MULTI SHARD QUERY 1 1g81wda9ax75a SINGLE SHARD QUERY 1 0sh0fn7r21020 MULTI SHARD QUERY 1 6k3uuf3g8pwh6 SINGLE SHARD QUERY 1 6z0abpz6gj9tt MULTI SHARD QUERY 1 7xvcq2ssufqtb MULTI SHARD QUERY 1 982zxphp8ht6c SINGLE SHARD QUERY 1 a9cv97h3dazfh UNABLE TO CLASSIFY 1 agpj33kr5p9cf UNABLE TO CLASSIFY 1 amaapqt3p9qd0 SINGLE SHARD QUERY 1 bk8kh6zduvqxx SINGLE SHARD QUERY 1 4h624tuydrjnh SINGLE SHARD QUERY SHARDINGCONFIGURATIONNUM SQLID QUERYTYPE ------------------------ -------------------- -------------------- 2 5g00dq4fxwnsw UNABLE TO CLASSIFY 2 4h624tuydrjnh SINGLE SHARD QUERY 2 34mt4skacwwwd MULTI SHARD QUERY 2 2yp5w5a36s5xv SINGLE SHARD QUERY 2 28tr1bjf4t2uh SINGLE SHARD QUERY 2 200mw76ta6n1r SINGLE SHARD QUERY 2 1g81wda9ax75a SINGLE SHARD QUERY 2 0sh0fn7r21020 SINGLE SHARD QUERY 2 6k3uuf3g8pwh6 SINGLE SHARD QUERY 2 g1znkya370htg SINGLE SHARD QUERY 2 bk8kh6zduvqxx SINGLE SHARD QUERY 2 amaapqt3p9qd0 SINGLE SHARD QUERY 2 agpj33kr5p9cf UNABLE TO CLASSIFY 2 a9cv97h3dazfh UNABLE TO CLASSIFY 2 982zxphp8ht6c SINGLE SHARD QUERY 2 7xvcq2ssufqtb SINGLE SHARD QUERY 2 6z0abpz6gj9tt MULTI SHARD QUERY SHARDINGCONFIGURATIONNUM SQLID QUERYTYPE ------------------------ -------------------- -------------------- 3 g1znkya370htg SINGLE SHARD QUERY 3 200mw76ta6n1r MULTI SHARD QUERY 3 28tr1bjf4t2uh MULTI SHARD QUERY 3 2yp5w5a36s5xv SINGLE SHARD QUERY 3 34mt4skacwwwd MULTI SHARD QUERY 3 4h624tuydrjnh SINGLE SHARD QUERY 3 5g00dq4fxwnsw UNABLE TO CLASSIFY 3 bk8kh6zduvqxx SINGLE SHARD QUERY 3 amaapqt3p9qd0 SINGLE SHARD QUERY 3 agpj33kr5p9cf UNABLE TO CLASSIFY 3 a9cv97h3dazfh UNABLE TO CLASSIFY 3 982zxphp8ht6c SINGLE SHARD QUERY 3 7xvcq2ssufqtb MULTI SHARD QUERY 3 6z0abpz6gj9tt SINGLE SHARD QUERY 3 6k3uuf3g8pwh6 SINGLE SHARD QUERY 3 1g81wda9ax75a SINGLE SHARD QUERY シングル/マルチ・シャード・クエリー SQL ID 候補
  181. 新しい性質を持ったメモリー・デバイス Intel Optane Persistent Memory (PMEM) • メモリー・スロットにDRAMの代わりに刺す不揮発性メモリー • CPUからメモリーとしてアクセス可能

    • Intel Cascade Lake以降で対応 Oracle Database 19c RU19.12 Memory Speed Filesystem • メモリー・スロットに刺すPMEMをメモリーとしてアクセスする • ファイルI/Oを置き換える Oracle Database 21c 永続メモリー・データベース • メモリー・スロットに刺すPMEMをメモリーとしてアクセスする • PMEMにデータベースのファイルがある • DRAM上のSGAにキャッシュする動作が変わる 不揮発性メモリーに最適化したデータベース Copyright © 2021, Oracle and/or its affiliates 221 SCSI controller DRAM PMEM HDD Flash Memory CPU DDR4 PCIe 永続メモリー・データベース
  182. 0.1 1 10 100 1000 10000 100000 1000000 10000000 100000000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) Persistent Memory以前 アクセス時間と容量 Copyright © 2021, Oracle and/or its affiliates 222 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns DRAM 64GB 100ns Flash Memory 6TB 20000ns HDD 14TB 5000000ns 不揮発性デバイス CPUからメモリーとしてアクセス 1GHzの1clock → 1 1K 1M 1G 1T 1P
  183. 0.1 1 10 100 1000 10000 100000 1000000 10000000 100000000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) Persistent MemoryはCPUからメモリーとしてアクセス可能かつ不揮発性という新しい性質を持つ アクセス時間と容量 Copyright © 2021, Oracle and/or its affiliates 223 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns DRAM 64GB 100ns Flash Memory 6TB 20000ns HDD 14TB 5000000ns 不揮発性デバイス CPUからメモリーとしてアクセス PMEM 128GB 300ns 1GHzの1clock → Persistent Memory 1 1K 1M 1G 1T 1P
  184. CPUからメモリーとしてアクセスかつ不揮発性 CPUからメモリーとしてアクセス • メモリー・スロットに搭載 • 不揮発性 Flash Memoryよりもかなり⾼速(1/10のアクセス時間) • DRAM

    (100ns) < PMEM (300ns) << Flash Memory (20000ns) • DRAMよりは低速 DRAMよりも⼤容量(×2〜4倍) • DRAM (64GB) < PMEM (128GB) << Flash Memory (6TB) • メモリー・スロットを半分明け渡す(DRAM容量が半分に減る) Intel Optane Persistent Memory Copyright © 2021, Oracle and/or its affiliates 224 SCSI controller DRAM PMEM HDD Flash Memory CPU DDR4 PCIe
  185. PMEMのメモリー・モジュール1枚はDRAMの4倍の容量がある 参考: DDR4 メモリー・モジュール1枚の容量 Copyright © 2021, Oracle and/or its

    affiliates 225 DRAM PMEM 参考: Exadata X8M 32GB Exadata X8MのDRAMの標準 64GB Exadata X8MのDRAMのMemory Expansion Kit 128GB 128GB Exadata X8MストレージのPMEMは128GB DIMM 256GB 512GB
  186. Direct Access for files (DAX) 従来ストレージと同じ • 従来と同じファイルI/O • ファイルとしてアクセス

    Filesystem DAX • DAX対応ファイル・システム • ファイル&メモリーとしてアクセス • Persistent Memory Database Device DAX • デバイス・ファイル • メモリーとしてアクセス • Exadata Storage OSレベルでのPMEMへのアクセス⽅法(AppDirect Mode) Copyright © 2021, Oracle and/or its affiliates 226 Filesystem DAX Filesystem process read() write() process read() write() /dev/dax process mmap() mmap()
  187. PMEMに作成したDAXファイル・システムにメモリーとしてアクセス Oracle Memory Speed File System • Oracle Database 19c

    RU19.12 • データベースのファイル群に⾼速にアクセス • ファイルI/Oをメモリー・アクセスに置き換え Persistent Memory Database • Oracle Database 21c • Directly Mapped Buffer Cache • PMEMはSGAバッファ・キャッシュの延⻑ • バッファ・キャッシュにブロックをコピーするのではなく、 PMEM上のブロックに直接アクセスする場合がある Oracle Databaseの2つのPMEM対応機能 Copyright © 2021, Oracle and/or its affiliates 227 process DRAM DRAM PMEM SGA (バッファ・キャッシュ) PGA process DRAM DRAM PMEM SGA (バッファ・キャッシュ) PGA データファイル データファイル
  188. PMEMにI/Oリクエストではなくメモリーとしてアクセス Oracle Database 21c 永続メモリー・データベース Copyright © 2021, Oracle and/or

    its affiliates 228 PMEM DAX Filesystem backing file データベースのファイル群 DAXファイル・システムのファイル PMEMアクセス⽤の抽象階層 PMEM対応ファイル・システム process OracleインスタンスのOSプロセス process メモリーとして アクセス OS階層 Oracle階層 PMEM Filestore
  189. PMEMアクセス⽤の抽象階層 PMEM Filestoreを作成する 1. DAX Filesystem作成 2. PMEM Filestore作成 3.

    データベース作成 初期化パラメータ PMEM_FILESTORE=db1_pmemfs CREATE DATABASE または RMANでリストア 永続メモリー・データベースの構成 Copyright © 2021, Oracle and/or its affiliates 229 !"#$%#&'(#(&)*+#,%-"#&./01234356 (-78%'-*8%&9:;0:./:./01234356ʼ <$!=*8>)*+# 9:;0:./16?@ABC4:./0ʼ ,*D#&E%& <+-!=&,*D#&F=& $7%-#G%#8H&-8&8#G%&0I>&($G,*D#&J%K # mkfs -t xfs /dev/pmem0 # mount -o dax /dev/pmem0 :;0:./:./01234356 PMEM DAX Filesystem backing file DAXファイル・システムのファイル PMEMアクセス⽤の抽象階層 PMEM対応ファイル・システム PMEM Filestore データベースのファイル群
  190. 容量を拡張する余地がない 例: Oracle Server X8 Intel Cascade Lake • 6ch/CPUソケット

    • 2DIMMs/ch 1ソケットあたり12のメモリー・スロット 2ソケット・マシンのメモリー・スロットは合計24 メモリー・スロットにデータベース本体がある Copyright © 2021, Oracle and/or its affiliates 230 メモリー・スロット CPUソケット
  191. メモリー・スロットの拡張性の低さ • DRAM容量が半分に減る • 容量拡張性がない • 容量上限がFlash Memoryより低い データの配置場所からくる制限 •

    共有ストレージ・クラスタ不可 • RAC不可 • ⽔平スケール・アウトはシャーディングを構成 • ストレージの冗⻑化不可 • メモリーはインターリーブ・アクセス(≒RAID 0) • Data Guardでレプリケーションを構成 メモリー・スロットにデータベース本体がある Copyright © 2021, Oracle and/or its affiliates 231 DDR4 6ch 2DIMMs/ch PMEM DRAM
  192. Oracle DatabaseでのPMEMの使⽤ Copyright © 2021, Oracle and/or its affiliates 232

    Exadata Persistent Memory Database PMEMの配置 スケール・アウト・ストレージのキャッシュ データベース・サーバーのデータベース本体 容量上限 PMEMはキャッシュ・メモリー • データベース本体はFlash Memoryまたは HDD • スケール・アウトで容量増設可能 PMEMがデータベース本体 • データベース・サイズの上限に影響 • 実質的に容量増設できない ストレージの冗⻑化 ASMによる多重化 • Data Guardとの組み合わせも可能 単体では不可 • Data Guardによるレプリケーションが必要 スケール・アウト RAC • スキーマ変更なしで可能 シャーディング • パーティショニング設計必須
  193. スケール・アウト・ストレージの低レイテンシーなキャッシュ・メモリーとしてPMEMを使⽤している Exadata X8M Copyright © 2021, Oracle and/or its affiliates

    233 ストレージ DBサーバー CPU メモリー Copyright © 2020, Oracle and/or its affiliates 233 デバイス High Capacity Model Extreme Flash Model PMEM 128GB×12=1.5TB 128GB×12=1.5TB Flash Memory 6.4TB×4=25.6TB 6.4TB×8=51.2TB Hard Disk 14TB×12=168TB - ストレージ・サーバー1台あたりのストレージ・デバイス DBサーバーのDRAMをPMEMの ために減らす必要はない ストレージ・サーバーを増設すれば PMEMキャッシュの総量も増加
  194. データへのアクセス可能な範囲の違い Oracle Database Sharding • 各シャードは⾃⾝のストレージにのみアクセス可能 • オンライン・トランザクション処理向け • 分析・集計処理⽤途には向いていない

    • 全シャードにまたがる並列処理も可能であるが シャード間データ交換能⼒がない • フル・パーティション・ワイズ・ジョインが前提 Oracle Real Application Clusters • 全DBサーバーが全ストレージのデータにアクセス可能 • オンライン・トランザクション処理 • 分析・集計処理 • SQL実⾏計画の途中の段階でのノード間データ 交換能⼒があるためフル・パーティション・ワイズ・ ジョインできないパターンにも対応可能 クラスタ・アーキテクチャ Copyright © 2021, Oracle and/or its affiliates 234 DBサーバー ストレージ DBサーバー ストレージ
  195. Copyright © 2021, Oracle and/or its affiliates 250 Oracle Database

    21c (21.3) New Features for GoldenGate GoldenGate 連携のために実装された Database 新機能
  196. Database 21c (21.3) の GoldenGate向け新機能 ü Oracle GoldenGate⽤の表レプリケーションのサポートの強化 ü GoldenGateおよびXStreamによるJSONデータ型のサポート

    ü ⾃動CDRの拡張 GoldenGate 21.3 Copyright © 2021, Oracle and/or its affiliates 251 GoldenGate 21.3 / 21.1 新機能 (for Oracle のみ) ü Automatic Extract of tables with supplemental logging is supported ü Oracle native JSON datatype is supported ü Automatic CDR for Oracle Database 21c is available ü Unified Build Support ü Kerberos Authentication is supported ü Oracle Cloud Infrastructure Key Management Service integration is available ü Autonomous Database Extract is supported ü Replicat Compatibility Constraint ü Large DDL (greater than 4 MB) replication is supported ü Certificate management is available from the Microservices Architecture Web UI ü Support for multiple client certificates for wss protocol is available ü DB_UNIQUE_NAME with heartbeat table ü DB_UNIQUE_NAME with trail file header ü Oracle GoldenGate Upgrade Simplification ü Partition Name Filtering ü Bounded Recovery Checkpoint Performance ü Active Data Guard (ADG) Redirection ü New Replicat parameter INCLUDETAG 本資料の対象
  197. DDL to enable OGG to start/stop capturing a table 表レプリケーションのサポート

    • Oracle 21c以上が必要 • CREATE または ALTER TABLE DDL コマンドの⼀部として実⾏可能 • 初期状態では無効 • 表 にENABLE LOGICAL REPLICATIONを設定すると、サプリメンタル・ロギングが有効になり、⾃動キャプチャが起動される Syntax Create table foo (pk_col number primary key, b varchar(200)) enable logical replication • DBA_OGG_AUTO_CAPTURED_TABLES / USER_OGG_AUTO_CAPTURED_TABLES で確認 ----------------------------- • TRANLOGOPTIONS INTEGRATEDPARAMS (enable_auto_capture Y) • INFO EXTRACTで各Extractの設定を確認できる 252 Copyright © 2021, Oracle and/or its affiliates Auto Capture Support (Database 21c) GoldenGate 21c 側で設定
  198. • Native JSON support (Database 21c) • OracleネイティブJSONデータタイプのサポート Oracle GoldenGateのキャプチャおよび適⽤プロセスは、Oracle

    Database 21c以降でサポートされている、 新しいネイティブJSONデータタイプをサポート • ⾃動 CDR の機能拡張 – Earliest timestamp, Delete always wins, Site Priority resolution 254 Copyright © 2021, Oracle and/or its affiliates Changes to OGG for Oracle
  199. ルールベースの競合解決機能 ⾃動 CDR とは︖ CDR - Conflict Detection & Resolution

    255 update … ▲ ▲ ▲ where key=‘P001’ update … ◎ ◎ where key=‘P001’ 競合が発⽣ OGG 業務に沿った 処理⽅式を実装 CDRによる競合解決 ソース側でのキャプチャ時に、Before Image(変更前イメージ)とAfter Image(変更後イメージ)をTrailに格納し、Replicatでターゲット側に適⽤する 際に競合を解決 1) 2)Trail 3) 4) Before Image After Image ルール Insert ( ) Update Before Image Update Delete Before Image Delete OVERWRITE( ) IGNORE( ) DISCARD( ) USEMAX[EQ]( ) USEMIN[EQ] ( ) レプリケーション Copyright © 2021, Oracle and/or its affiliates
  200. ルールベースの競合解決機能 レプリケーション中のデータ (レコード内容は同⼀性を維持) ⾃動 CDR とは︖ CDR - Conflict Detection

    & Resolution 256 Column Before update After update ID 1 1 NAME Essentials of Oracle GoldenGate Essentials of Oracle GoldenGate AUTOHR Taro Aoyama Taro Aoyama IN_STOCK 1000 1500 LAST_UPD_TS 24-JAN-15 04.41.40.900990 PM 24-JAN-15 05.41.40.900990 PM Column Before update After update ID 1 1 NAME Essentials of Oracle GoldenGate Essentials of Oracle GoldenGate AUTOHR Taro Aoyama Dr. Taro IN_STOCK 1000 800 LAST_UPD_TS 24-JAN-15 04.41.40.900990 PM 24-JAN-15 06.41.40.900990 PM 24-JAN-15 5:41 24-JAN-15 6:41 業務上の処理として • IN_STOCK カラムは正味の値とする • IN_STOCK 以外は最新データを保持する ルール Copyright © 2021, Oracle and/or its affiliates
  201. ルールベースの競合解決機能 IN-STOCK は正味の値にする ⾃動 CDR とは︖ CDR - Conflict Detection

    & Resolution 257 Column Before update After update ID 1 1 NAME Essentials of Oracle GoldenGate Essentials of Oracle GoldenGate AUTOHR Taro Aoyama Dr. Taro IN_STOCK 1000 1500-200=1300 LAST_UPD_TS 24-JAN-15 04.41.40.900990 PM 24-JAN-15 06.41.40.900990 PM Column Before update After update ID 1 1 NAME Essentials of Oracle GoldenGate Essentials of Oracle GoldenGate AUTOHR Taro Aoyama Dr. Taro IN_STOCK 1000 800+500=1300 LAST_UPD_TS 24-JAN-15 04.41.40.900990 PM 24-JAN-15 06.41.40.900990 PM 1000 1500 1000 800 +500 -200 -200 +500 ルールに従って • IN_STOCK カラムは正味の値とする • IN_STOCK 以外は最新データへ置き換える ルールに従って • IN_STOCK カラムは正味の値とする • IN_STOCK 以外は最新データなのでそのまま Copyright © 2021, Oracle and/or its affiliates
  202. Replicat パラメータのサンプル [参考資料] Replicatプロセスの設定 replicat r_rep userid ogg_user, password ogg_user

    assumetargetdefs map sample.book, target sample.book, COMPARECOLS (ON UPDATE ALL), RESOLVECONFLICT ( UPDATEROWEXISTS, (delta_res_method, USEDELTA, COLS (IN_STOCK)), (max_res_method, USEMAX (LAST_UPD_TS), COLS (NAME, AUTHOR,LAST_UPD_TS)), (DEFAULT, IGNORE)); RESOLVECONFLICT 以降で、競合解決のルールを記述 COMPARECOLS Update競合を検知するために使⽤する列を指定。 このシナリオでは全ての列を⽐較する。要件に応じて列の 絞り込みやDelete競合の検知(ON DELETE)も可能 UPDATEROWEXISTS ⾏が存在するUpdate競合の解決ルール IN_STOCK列は正味の値を適⽤ NAME, AUTHOR, LAST_UPD_TSは、LAST_UPD_TS列の 値が⼤きい⽅(より最新のデータ)を適⽤ DEFAULT デフォルトの挙動(無視) Copyright © 2021, Oracle and/or its affiliates 258
  203. GoldenGate 12.3 からの実装 ユーザアプリケーションの変更を必要としない Oracle ⽤ CDR ( 競合検出および解決機能 )

    アプリケーション表⽰の変更なし • データベースによって不可視タイムスタンプ列が⾃動的に作成され管理される • 挿⼊、更新、および削除を判別 削除は、Delete Tombstone ログ・テーブルを使⽤して⾏が削除されたかどうかを判別 • LOB 列変更の競合を検出する機能 • Oracle Database は、必要な列に対する補⾜ログを⾃動的に構成 不可視タイムスタンプ列は、CDR によって⾃動適⽤ • GoldenGate パラメータファイルに CDR / REPERROR パラメータを指定する必要はない • 最後のレコードが有効 【要件】 • ソースおよびターゲットのデータベースは、Oracle Database 12.2〜 • Integrated Extract 構成 • Integrated Replicat または、Parallel Integrated Replicat 構成 Automatic Conflict Detection & Resolution ( Auto CDR ) 259 Copyright © 2021, Oracle and/or its affiliates
  204. Automatic Conflict Detection & Resolution ( Auto CDR ) 260

    CDR Auto CDR v12.3 Auto CDR 21c Insert Conflict ✔ ✔ ✔ Delete Conflict ✔ ✔ ✔ Update Conflict ✔ ✔ ✔ Delta Resolution ✔ ✔ ✔ Insert-Update / Delete Conflict - ✔ ✔ Column Group Conflicts - ✔ ✔ Piecewise LOB Update - ✔ ✔ Earliest timestamp resolution - - ✔ Delete always win - - ✔ Site priority resolution - - ✔ https://docs.oracle.com/en/middleware/goldengate/core/21.3/oracle-db/automatic-conflict-detection-and-resolution2.html#GUID-EB3D5499-7F28-45B6-A64E-53BF786E32A5 https://docs.oracle.com/cd/F22974_01/oracle-db/automatic-conflict-detection-and-resolution2.html#GUID-4E475E42-AAEB-4D7F-9FED-EFED63C8A39A ※ 18c,19c では競合種類に⼤きな仕様拡張は無し Copyright © 2021, Oracle and/or its affiliates Copyright © 2021, Oracle and/or its affiliates
  205. Copyright © 2021, Oracle and/or its affiliates 261 Oracle Automatic

    Storage Management(ASM)/ Oracle ASM Cluster File System(ACFS) ASMの新機能 • フレックス・ディスク・グループでの異なるCDBへのPDBクローニング • ファイル・グループ・テンプレート • フレックス・ディスク・グループと拡張ディスク・グループのためのパリティ保護の強化 • ASMCA で既存のNAS構成上にFlex ASM の構成が可能に ACFSの新機能 • ACFSの⾃動縮⼩ • レプリケーション計画外フェイルオーバー • Oracle ACFSファイル・ベースのスナップショット • 混合セクター・サポート
  206. 1. フレックス・ディスク・グループでの異なるCDBへのPDBクローニング • Point-in-Timeデータベース・クローニング機能で、PDBの別CDBへのクローンが可能に 2. ファイル・グループ・テンプレート • ファイル・グループ作成時にテンプレートを使⽤することで、事前設定済のプロパティを利⽤可能 3. フレックス・ディスク・グループと拡張ディスク・グループのためのパリティ保護の強化

    • パリティの冗⻑化(DOUBLE)をサポート 4. ASMCA で既存のNAS構成上にFlex ASM の構成が可能に • NFS(ネットワーク・ファイル記憶域)で構成されている環境にフレックスASMを asmca でインストール可能 Oracle Database 21c ASMの新機能 Copyright © 2021, Oracle and/or its affiliates 262
  207. フレックス・ディスク・グループとファイル・グループ ASM フレックス・ディスク・グループ概要(おさらい) Copyright © 2021, Oracle and/or its affiliates

    263 DG : HIGH = Protected FG : HIGH = Protected QG : 上限の設定 ファイル・グループは Redundancy / Stripingともに動的に変更する事が可能 Redundancy : HIGH <-> MIRROR <-> UNPROTECTED Striping: FINE<->CORASE 従来からのディスク・グループ フレックス・ディスク・グループ
  208. Oracle Database 21c ASMの新機能 • ASM フレックス・ディスク・グループを使⽤したPoint-in-Timeデー タベース・クローニング機能で、PDBの別CDBへのクローンが可能 に •

    これまでは同⼀CDB内でのみクローン可能(18c-) • ASM フレックス・ディスク・グループにより、物理的な記憶域レイアウトを 意識せずに、データベース(PDB)としてのクローンが可能 • ASM フレックス・ディスク・グループのクローニング機能を利⽤しない、異なる CDB間のPDBクローニング⾃体は従来から可能(スナップショット・コピーPDB) • クローンされるデータ・ファイルは、同⼀のディスク・グループ内に属する必要があ る • テストおよび開発環境の迅速なクローニングが可能 • ASMの1つ以上の冗⻑コピーを分割して、迅速なクローン作製(分 割ミラー) • データファイルのみのコピー • 分割後、クローン元に対する更新はクローン先には影響しない • クローン元と先で、異なる冗⻑レベルを設定可能 • クォータ・グループは、クローン元と先で同⼀ 1. フレックス・ディスク・グループでの異なるCDBへのPDBクローニング Copyright © 2021, Oracle and/or its affiliates 264 CDB 1 CDB 2 PDB S PDB T PDB S フレックス・ディスク・グループ PDB S クォータ・グループ
  209. Oracle Database 21c ASMの新機能 • PDBクローンの⽤意 • ASMインスタンスでコピーのステータスを確認 • クローン先のCDB$ROOTでクローン元へのDB

    LINKを作成 • PDBクローンのコピーおよび分割 • クローンしたPDBのファイル・グループの確認 1. フレックス・ディスク・グループでの異なるCDBへのPDBクローニング Copyright © 2021, Oracle and/or its affiliates 265 SQL> ALTER PLUGGABLE DATABASE Mysales PREPARE MIRROR COPY <ミラーコピーの名前> FOR DATABASE <クローン先CDB> SQL> CREATE PLUGGABLE DATABASE <クローン先のPDB名> FROM <DB LINK名> USING MIRROR COPY <ミラーコピーの名前> $asmcmd> lsfg SQL> SELECT * FROM V$ASM_DBCLONE_INFO; SQL> CREATE DATABASE LINK <DB LINK名> CONNECT TO c##dbl_user IDENTIFIED BY <パス ワード> USING ‘<クローン元CDBのサービス名>';
  210. Oracle Database 21c ASMの新機能 • フレックス・ディスク・グループのファイル・グループのテンプレートが作成可能 • ファイル・グループ作成時にテンプレートを使⽤することで、事前設定済のプロパティを利⽤可能 • 事前に定義したテンプレートを使⽤することで、不要なリバランスを防ぐことが可能

    • テンプレートを使⽤しない場合、作成されたファイル・グループのデフォルトのプロパティを変更する際にリバランスが実⾏される • テンプレート作成 • テンプレートを利⽤したファイル・グループの追加 • テンプレート利⽤の確認(spfile) 2. ファイル・グループ・テンプレート Copyright © 2021, Oracle and/or its affiliates 266 SQL> ALTER DISKGROUP <ディスク・グループ名> ADD FILEGROUP <テンプレート名> TEMPLATE SET 'datafile.redundancy'='HIGH'; SQL> ALTER DISKGROUP <ディスク・グループ名> ADD FILEGROUP <ファイル・グループ名> DATABASE NONE FROM TEMPLATE <テンプレート名>; DB_FILE_CREATE_DEST = +DATA(FG$<テンプレート名>)
  211. Oracle Database 21c ASMの新機能 • パリティの冗⻑化(DOUBLE)をサポート • パリティ冗⻑性(PARITY)は19cから実装 • データを2台以上のディスクに分散して書き込み、データ修

    復⽤のパリティ・データをさらに別のディスクに書き込む⽅式 • データ保護と領域の効率化 • ミラーリングに⽐べてオーバーヘッドを削減できるが、複数のハード ウェア障害時のデータ損失のリスクが増える → パリティ・データを⼆重(2台)に書き込むことによって、耐障害 性を向上 • アーカイブ・ログやバックアップセットなど、頻繁な更新を必要とし ない書き込みが1回のデータに限定(データファイルなどは⾮サポー ト) • 5つ以上の障害グループが必要 • ファイル・グループのREDUNDANCYプロパティで指定 • パリティ保護(PARITYおよびDOUBLE)を指定してファイルを 作成した場合、そのファイルの冗⻑性は変更不可 3. フレックス・ディスク・グループと拡張ディスク・グループのためのパリティ保護の強化 Copyright © 2021, Oracle and/or its affiliates 267 1 2 3 P 4 data extents + parity extents P REDUNDANCY=DOUBLE data extents + data extents Secondary 1 2 3 4 4 3 1 2 1 2 4 3 REDUNDANCY=HIGH パリティ冗⻑化のファイル・グループ ⾼冗⻑性のファイル・グループ
  212. • NFS(ネットワーク・ファイル記憶域)で構成されている環境に Flex ASMをASMCAでインストール可能 • NFSストレージからOracle ASMへの移⾏が簡単に • 従来は別環境にOracle ASMをインストール・構築してからデータベースをすべて移動する必要があった

    • 構成⽅法 • Oracle Clusterware のインストールをした後に、Oracle ASM Configuration Assistant (ASMCA)をサイレン ト・モードで実⾏して、Oracle Cluster Registry(OCR)と投票ディスクの置き場にNASを使⽤して構成 4. ASMCA で既存のNAS構成上にFlex ASM の構成が可能に Copyright © 2021, Oracle and/or its affiliates 268
  213. 1. ACFSの⾃動縮⼩ • 実⾏中のワークロードへ影響なく⾃動的に縮⼩ 2. レプリケーション計画外フェイルオーバー • 障害発⽣時など切り替えが必要な際に、スタンバイがプライマリのロールを引き受けて切り替え可能 3. Oracle

    ACFSファイル・ベースのスナップショット • 個々のACFSファイルのスナップショットを効率的に作成 4. 混合セクター・サポート • 混合セクターのASM上に、ACFSの作成をサポート Oracle Database 21c ACFSの新機能 Copyright © 2021, Oracle and/or its affiliates 269
  214. Oracle Database 21c ACFSの新機能 • ボリュームに空き領域が⼗分にある場合、実⾏中のワークロードへ影響なく⾃動的に縮⼩される • Linux 環境でサポート •

    性能および領域使⽤率の最適化 • データ移⾏および関連するロックによる、実⾏中のワークロードへの影響やタイムアウトへの遅延は発⽣しない • ファイル・システムの使⽤量が50%で、前回のファイルシステム拡張以降もしくはmkfsの実⾏以降(新しいファイルシス テムの場合)でファイルシステム使⽤量が少なくとも80%の場合、ファイル・システムを25%まで縮⼩ • ⾃動縮⼩の操作は、ファイル・システムに対してバックグラウンドで実⾏される • 1時間に1回チェックが実⾏される。⾃動縮⼩が必要と検知されると、その⽇に⾃動縮⼩が実⾏されていない場合 に1時間以内に⾃動縮⼩が開始 1. ACFSの⾃動縮⼩ Copyright © 2021, Oracle and/or its affiliates 270
  215. Oracle Database 21c ACFSの新機能 • 障害発⽣時など切り替えが必要な際に、スタンバイがプライマリのロールを引き受けて切り替え可能 • 計画的フェイルオーバー(プライマリ・アップ)と計画外フェイルオーバー(プライマリ・ダウン)どちらでも実⾏可能 • 切り替えコマンドが実⾏されると、スタンバイからプライマリへ接続を試みる

    • プライマリが応答した場合(計画的フェイルオーバー) • スタンバイはプライマリと連携して、データ消失なしの計画的フェイルオーバーを実⾏ • データ損失を防ぐために、フェイルオーバー実⾏前にプライマリ側へのアプリケーションの更新を停⽌する必要がある • プライマリが応答しない場合(計画外フェイルオーバー) • スタンバイはプライマリがダウンしていると仮定して、計画外フェイルオーバーを実⾏。この場合、データ損失の可能性はあり • タイムアウト期間を指定すると、プライマリがオンラインになるかをタイムアウト期間まではチェックを試みる。指定しない場合、 チェックは1回 2. レプリケーション計画外フェイルオーバー Copyright © 2021, Oracle and/or its affiliates 271 $acfsutil repl failover [-T timeout] [snap_shot@]mount_point
  216. Oracle Database 21c ACFSの新機能 • 個々のACFSファイルのスナップショットを効率的に作成 • ファイル・システム内のすべてのファイルではなく、特定のファイルのみをスナップショットする • ACFSスナップショットはPoint-in-timeコピーのスパース・スナップショット(コピー・オン・ライト)

    • 個別のファイルを作成する点を除き、ファイルシステムのスナップショットと同様 • ユースケースは、仮想マシン(VM)イメージ・ファイルやPDBスナップショット・コピーなど 3. Oracle ACFSファイル・ベースのスナップショット Copyright © 2021, Oracle and/or its affiliates 272 $acfsutil fshare create <source_file_path> <destination_file_path> ACFS FS Snapshot ACFS FS ファイル・システムのスナップショット ファイル・ベースのスナップショット Snapshot
  217. Oracle Database 21c ACFSの新機能 • 混合セクターのASM上に、ACFSの作成をサポート • Oracle ACFS混合セクター・サポートによって、Oracle ACFSファイルシステムのLinuxプライマリ・ボリュームおよびア

    クセラレータ・ボリュームで、様々な論理セクター・サイズにすることが可能に • 512バイトおよび4096バイトなど、異なる論理セクター・サイズを混在させて使⽤可能 • COMPATIBLE.ADVM = 20.1 以上に設定 4. 混合セクター・サポート Copyright © 2021, Oracle and/or its affiliates 273
  218. ⾮サポート • Microsoft WindowsでのACFSの使⽤のサポート終了 • Oracle ACFSセキュリティ(Vault)およびACFS監査のサポート終了 • メンバー・クラスタでのOracle ACFSの使⽤(ACFSリモート)のサポート終了

    • SolarisおよびWindowsでのACFS暗号化のサポート終了 • ACFSレプリケーションREPV1のサポート終了 • REPV1(レプリケーション・プロトコル・バージョン1)は、12.2.0.1で導⼊されたスナップショット・ベースのレプリケーション・ バージョン2に置き換え ACFS 21c ⾮サポートになった機能 Copyright © 2021, Oracle and/or its affiliates 274
  219. Oracle Database 21c ⾃律型ヘルス・フレームワーク(Autonomous Health Framework) 関連新機能 1. ( Oracle

    Cluster Health Advisor)での Oracle Exadataのサポートの拡張 2. Oracle Cluster Health AdvisorでのSolarisのサポート 3. Oracle Cluster Health Monitorのローカル・モードのサポート 4. Oracle ORAchkおよびEXAchkでのREST APIのサポート 5. Oracle Trace File Analyzerのリアルタイムのヘルス・サマリー 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集のサポート 8. Oracle Database Quality of Service (QoS) Managementを⾃動的に有効にするためのサポート 7. リモート・グリッド・インフラストラクチャ管理リポジトリ(GIMR)でのOracleスタンドアロン・クラスタのサポート 9. グリッド・インフラストラクチャ管理リポジトリ(GIMR)の個別のOracleホームへのデプロイのサポート
  220. Autonomous Health Framework Copyright © 2021, Oracle and/or its affiliates

    277 • OS状態確認やGI/RAC環境の必須要件、 • ベスト・プラクティスをチェックし、レポーティング Cluster Verification Utility • Grid Infrastructure やデータベースが稼働 する環境全体の構成をレポーティング • ベスプラとの乖離や潜在的な既知問題を 確認可能 ORAchk・EXAchk • OSのメトリックを監視/収集 • 蓄積データは分析に活⽤でき、様々な機能で 使⽤される Cluster Health Monitor • クラスタノードおよびデータベースに関する性能問 題の根本原因、是正処置について早期に警告 Cluster Health Advisor • メモリの使⽤率に応じて接続を制御し、 アプリケーションからの処理を保護 • RAC環境でメモリ不⾜による障害を防⽌ Memory Guard • SLA担保の為に、システム全体のワーク ロードを監視 • 状態に応じてパフォーマンスレベルに合わせたリソー ス割り当てを⾃動的に⾏える Quality of Service Management • データベースのハングを検知した際に、原因をロジ カルに分析、解決可能な問題に対処 • ⾃動で解決して継続稼働と性能を保つ Hang Manager • Grid Infrastructure、データベースなどのログ 収集・分析をシンプルに⾏えるツール • 問題発⽣時の分析の迅速化を図る Trace File Analyzer 21cでの新機能が含まれる機能
  221. • 1. ( Oracle Cluster Health Advisor)での Oracle Exadataのサポートの拡張 •

    2. Oracle Cluster Health AdvisorでのSolarisのサポート • 3. Oracle Cluster Health Monitorのローカル・モードのサポート • 4. Oracle ORAchkおよびEXAchkでのREST APIのサポート • 5. Oracle Trace File Analyzerのリアルタイムのヘルス・サマリー • 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集のサポート • 8. Oracle Database Quality of Service (QoS) Managementを⾃動的に有効にするためのサポート • 7. リモート・グリッド・インフラストラクチャ管理リポジトリ(GIMR)でのOracleスタンドアロン・クラスタのサポート • 9. グリッド・インフラストラクチャ管理リポジトリ(GIMR)の個別のOracleホームへのデプロイのサポート Oracle Database 21c ⾃律型ヘルス・フレームワーク関連新機能 Copyright © 2021, Oracle and/or its affiliates 288
  222. Oracle Exadataシステムのパフォーマンスと可⽤性に関する問題を検出するOracle Cluster Health Advisorの機能が、 このリリースでは、Exadata固有のモデルの追加によって改善 Oracle Cluster Health Advisorでは、Oracle

    Databaseと機械学習を使⽤して開発されたノード・モデルを使⽤して、 パフォーマンスおよび可⽤性に関する問題を検出 Oracle Exadataシステムでのパフォーマンスおよび可⽤性に関する問題の検出が改善されたことで、Oracle Cluster Health AdvisorはOracle Databaseの可⽤性およびパフォーマンスの向上に役⽴つ。新しいExadata固有のモデルは、 Exadataエンジニアド・システムでCHAを実⾏すると⾃動的にロード 1. (Oracle Cluster Health Advisor での)Oracle Exadataのサポートの拡張 Copyright © 2021, Oracle and/or its affiliates 289
  223. クラスタとデータベースの潜在的な問題を発⾒ - 是正処置の通知 • デフォルトで有効化されており常に利⽤可能 • ノードとデータベースの性能問題を検知 • 新しい Exadata

    モデルの⾃動ロード • 最も⼀般的な RAC の問題の機械学習モデル • 早期警告アラートと是正措置の提供 • 感度向上のためのオンサイト・キャリブレーションをサポート • Enterprise Manager Cloud Control Incident Manager と通知に統合 • スタンドアローン・インタラクティブ GUI ツール • GI 19.7 以降での対応 Oracle Cluster Health Advisor (CHA)* Copyright © 2021, Oracle and/or its affiliates 290 OS Data DB Data CHM Node Health Prognostics Engine Database Health Prognostics Engine CHADDriver GIMR Exadata OS Model Exadata DB Model TFA Management VCN EMCC NEW! * CHA の利⽤には RAC または RAC One Node のオプション・ライセンスが必要です。
  224. 50以上の⼀般的なOracle RAC データベースとNode Problem のモデルを実装 • Long Control File Enqueue

    Wait • DB Log File IO Performance • Global Cache Log Sync • Long Waits for Global Cache Message Requests • DB Direct Read IO Performance • DB Checkpoint Performance • DB Single Block Read IO Performance • DB Global Cache Blocks Lost • DB CPU Utilization • DB Session Memory Consumption • DB Global Cache Server Utilization • ASM Disk Utilization • ASM Cluster-wide Disk Utilization • Private Network Latency • Private Network Utilization • Private Network Messages Dropped • Host CPU Utilization • その他。。 Exadata のパフォーマンス問題をリアルタイムに検知・分析 Copyright © 2021, Oracle and/or its affiliates 291
  225. EM Cloud Control でインシデントを作成 Exadata のパフォーマンス問題をリアルタイムに検知・分析 Copyright © 2021, Oracle

    and/or its affiliates 293 ASM Cluster-wide Disk Utilization on Host rwsb06 Database/Cluster rwsb0609-mb2 Instance. The Cluster Health Advisor(CHA) detected slower ... EMCC上でCHAによる根本原因の診断とアクションが表⽰される
  226. 3.1 Oracle Cluster Health Advisor Architecture Oracle Cluster Health Advisorでは、Oracle

    Solaris上のOracle Real Application Clusters (Oracle RAC)デプロ イメントがサポート Oracle SolarisのOracle Cluster Health Advisorサポートによって、Oracle RACデータベース・デプロイメントでパフォー マンスと可⽤性の問題を早期に検出および予防 2. Oracle Cluster Health AdvisorでのSolarisのサポート Copyright © 2021, Oracle and/or its affiliates 295
  227. • Oracle Cluster Health Monitorをローカル・モードで動作するよう構成し、GIMRをデプロイしていない場合でも oclumon dumpnodeviewコマンドを使⽤してオペレーティング・システム・メトリック・レポートが可能に • ローカル・モードでは、ローカル・ノード・データのみを取得 •

    ローカル・モードでは、GIMRをインストールしていないデプロイメントでのOracle Cluster Health Monitorの機能 は制限される • 以前のリリースのOracle Cluster Health Monitorでは、oclumon dumpnodeviewコマンドを使⽤してオペレー ティング・システム・メトリックをレポートするにはGIMRが必要 3. Oracle Cluster Health Monitorのローカル・モードのサポート Copyright © 2021, Oracle and/or its affiliates 296
  228. B.3 oclumon dumpnodeview local oclumon dumpnodeview local コマンドを使⽤して、ノード・ビューの形式でシステム監視サービスからログ情報を表⽰ ノート: oclumon

    dumpnodeview local コマンドはGIMRまたはMGMTDBに依存せず、構成されているGIMRに関係なくクラスタ状態モニ ター・データを返す 参考︓従来のコマンド 3. Oracle Cluster Health Monitorのローカル・モードのサポート Copyright © 2021, Oracle and/or its affiliates 297 oclumon dumpnodeview local [[([(-system | -protocols | -alert | -v)] | [(-cpu | -process | -procagg | -device | -nic | -filesystem | -nfs) [-detail] [-all] [-sort metric_name] [-filter string] [-head]]) [([-s start_time -e end_time] | -last duration)]] | [-h]] oclumon dumpnodeview [-allnodes | -n node1...] [-last duration | -s timestamp -e timestamp] [-i interval] [-v | [- system [-v2]] [-process] [-procag] [-device] [-filesystem] [-nic] [-advm] [-protocols] [-cpu] [-topconsumer] [- asminst_db] [-nfs]] [-format format type] [-dir directory [-append]]
  229. B.3 oclumon dumpnodeview local 3. Oracle Cluster Health Monitorのローカル・モードのサポート Copyright

    © 2021, Oracle and/or its affiliates 298 [root@jojodb01 ~]# /u01/app/21.0.0.0/grid/bin/oclumon dumpnodeview local ----------------------------------------------------------- Node : jojodb01 Clock : '2021-12-08 17.08.10+0900' ----------------------------------------------------------- SYSTEM: [CPU] pCpus[#]:2, cores[#]:24, vCpus[#]:48, cpuHT:Y, osName:Linux, chipName:Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz, usage[%]:1.58, system[%]:0.76, user[%]:0.81, nice[%]:0.0, ioWait[%]:0.01, steal[%]:0.0, cpuQ[#]:0, loadAvg1:0.93, loadAvg5:1.03, loadAvg15:0.93, intr[#/s]:12924, ctxSwitch[#/s]:19031 [MEMORY] totalMem[KB]:263578164, freeMem[KB]:179015868, avblMem[KB]:216733532, shMem[KB]:1664392, bufferAndCache[KB]:45276788, buffer[KB]:286372, cache[KB]:44990416, pgCache[KB]:42793456, slabReclaim[KB]:2196960, swapTotal[KB]:25165820, swapFree[KB]:25165820, hugePageTotal[#]:12460, hugePageFree[#]:170, hugePageSize[KB]:2048, swpIn[KB/s]:0, swpOut[KB/s]:0, pgIn[#/s]:26, pgOut[#/s]:451 [DEVICE] disks[#]:39, ioR[KB/s]:52, ioW[KB/s]:903, numIOs[#/s]:125 [NETWORK] nics[#]:5, rxTotal[KB/s]:81.16, txTotal[KB/s]:93.63, nicErrs[#/s]:0 [PROCESS] procs[#]:1597, procsOnCpu[#]:1, procsBlocked[#]:0, rtProcs[#]:108, procsInDState[#]:0, fds[#]:53472, sysFdLimit[#]:13631488 [NFS] nfs[#]:N/C TOPCONSUMERS:
  230. 2.11 Oracle REST Data Services (ORDS)の構成 ORDSを使⽤したRESTの構成 • デフォルトでは、Oracle REST

    Data Services (ORDS)は7080-7085の範囲で使⽤可能なポートを使⽤ • この範囲にポートがない場合、ORDSは終了し、RAT_ORDS_PORT環境変数の設定を求めるプロンプトが表⽰ • RAT_ORDS_PORTがすでに設定されている場合、ORDSはRAT_ORDS_PORT環境変数で指定されている ポートを使⽤ • デフォルトでは、ORDSは管理者ユーザーordsadminで設定 • RAT_ORDSADMIN_USER環境変数に別のユーザーを指定することでオーバーライド変更可能 • ORDSは、Oracle ORAchkおよびOracle EXAchkに応じて、ordsorachkまたはordsexachkという名前のnologin ユーザーとして起動 • すでに実⾏中のORDSを使⽤する場合、ユーザーはORDSを実⾏しているユーザーと同じユーザーを利⽤ 4. Oracle ORAchkおよびEXAchkでのREST APIのサポート Copyright © 2021, Oracle and/or its affiliates 300
  231. 2.11 Oracle REST Data Services (ORDS)の構成 既存のORDSインストールを使⽤したRESTの構成 1. orachk.jarファイルを既存のords.warファイルに追加: #

    exachk -ordssetup ords_war_dir -configdir config_dir • ords_war_dirは、ords.warファイルを含むディレクトリ • config_dirは、ORDS構成ファイルを格納するために指定できるオプションのディレクトリ。オプションのディレクトリを指定しない場合、構成ファイルは orda_war_dirディレクトリに格納 • -ordssetupコマンドの実⾏後にORDSを停⽌および再起動するには、orachk.jarファイルを既存のords.warファイルに追加 • ユーザーordsadminをords.warファイルに追加し、ordsadminに対してORAchk admin権限を付与 2. Oracle ORAchkまたはOracle EXAchkデーモンの起動 # exachk -d start -ords ords_war_dir • 完了後、ords_war_dir/log/ords_setup.logファイルを開いてREST URLの詳細を表⽰ 4. Oracle ORAchkおよびEXAchkでのREST APIのサポート Copyright © 2021, Oracle and/or its affiliates 301
  232. • Oracle Trace File Analyzerでは、リアルタイムのヘルス・サマリー・レポートが⽣成され、障害およびワークロードの問 題によるパフォーマンスの低下が表⽰ • Oracle ORAchkおよびOracle EXAchkで⽣成されるデプロイメント構成のステータス・スコアカードと同様に、Oracle

    Trace File Analyzerでは、操作ステータス⽤に容易に消費かつトラッキング可能なスコアリングも⽤意 • ヘルス・サマリーは、クラスタ全体からデータベース、インスタンス、サービスおよびハードウェア・リソースまでに分類された可 ⽤性、ヘルス、ワークロードおよび容量のカテゴリでのスコアから構成 5. Oracle Trace File Analyzerのリアルタイムのヘルス・サマリー Copyright © 2021, Oracle and/or its affiliates 321
  233. 14.2 Viewing System and Cluster Summary 5. Oracle Trace File

    Analyzerのリアルタイムのヘルス・サマリー Copyright © 2021, Oracle and/or its affiliates 322 [root@jojodb01 ~]# tfactl summary Executing Summary in Parallel on Following Nodes: Node : jojodb01 Node : jojodb02 LOGFILE LOCATION : /u01/app/grid/oracle.ahf/data/repository/suptools/jojodb01/summary/root/20211208171051/log/summary_command_20211208171051_jojodb01_186991.log Component Specific Summary collection : - Collecting CRS details ... Done. - Collecting ASM details ... Done. - Collecting ACFS details ... Done. - Collecting EXADATA details ... Done. - Collecting PATCH details ... Done. - Collecting LISTENER details ... Done. - Collecting NETWORK details ... Done. - Collecting OS details ... Done. - Collecting TFA details ... Done. - Collecting SUMMARY details ... Done. Remote Summary Data Collection : In-Progress - Please wait ... - Data Collection From Node - jojodb02 .. Done. Prepare Clusterwide Summary Overview ... Done cluster_status_summary 続く
  234. 14.2 Viewing System and Cluster Summary 5. Oracle Trace File

    Analyzerのリアルタイムのヘルス・サマリー Copyright © 2021, Oracle and/or its affiliates 323 続き COMPONENT STATUS DETAILS +-----------+---------+-------------------------------------------------------+ CRS PROBLEM .-----------------------------------------------. | CRS_SERVER_STATUS : ONLINE | | CRS_STATE : ONLINE | | CRS_INTEGRITY_CHECK : FAIL | | CRS_RESOURCE_STATUS : OFFLINE Resources Found | '-----------------------------------------------' ASM PROBLEM .-----------------------------. | ASM_DISK_SIZE_STATUS : OK | | ASM_BLOCK_STATUS : PASS | | ASM_CHAIN_STATUS : PASS | | ASM_INCIDENTS : PASS | | ASM_PROBLEMS : PASS | '-----------------------------' ACFS OFFLINE .-----------------------. | ACFS_STATUS : OFFLINE | '-----------------------' EXADATA PROBLEM .--------------------------------. | SWITCH_SSH_STATUS : CONFIGURED | | CELL_SSH_STATUS : CONFIGURED | | ENVIRONMENT_TEST : PASS | | LINKUP : PASS | | LUN_STATUS : NORMAL | | RS_STATUS : RUNNING | | CELLSRV_STATUS : RUNNING | | MS_STATUS : RUNNING | '--------------------------------' PATCH PROBLEM .---------------------------------------------------. | CRS_PATCH_CONSISTENCY_ACROSS_NODES : OK | | DATABASE_PATCH_CONSISTENCY_ACROSS_NODES : PROBLEM | '---------------------------------------------------'
  235. 14.2 Viewing System and Cluster Summary 5. Oracle Trace File

    Analyzerのリアルタイムのヘルス・サマリー Copyright © 2021, Oracle and/or its affiliates 324 続き LISTENER OK .-----------------------. | LISTNER_STATUS : OK | '-----------------------' NETWORK OK .---------------------------. | CLUSTER_NETWORK_STATUS : | '---------------------------' OS WARNING .----------------------------. | MEM_USAGE_STATUS : WARNING | '----------------------------' TFA OK .----------------------. | TFA_STATUS : RUNNING | '----------------------' SUMMARY OK .------------------------------------. | SUMMARY_EXECUTION_TIME : 0H:1M:47S | '------------------------------------' +-----------+---------+-------------------------------------------------------+ ### Entering in to SUMMARY Command-Line Interface ### tfactl_summary>list Components : Select Component - select [component_number|component_name] 1 => overview 2 => crs_overview 3 => asm_overview 4 => acfs_overview 5 => exadata_overview 6 => patch_overview 7 => listener_overview 8 => network_overview 9 => os_overview 10 => tfa_overview
  236. 14.2 Viewing System and Cluster Summary 5. Oracle Trace File

    Analyzerのリアルタイムのヘルス・サマリー Copyright © 2021, Oracle and/or its affiliates 325 tfactl_summary>5 CELLSRV HOSTNAME RS_STATUS LUN_STATUS LINKUP PRODUCT_NAME MS_STATUS ASM SWITCH_SSH CELL_SSH ENV_TEST +---------+----------+-----------+------------+--------+-----------------+-----------+--------+------------+------------+----------+ RUNNING jojodb01 RUNNING NORMAL PASS SUN SERVER X4-2 RUNNING ONLINE CONFIGURED CONFIGURED PASS RUNNING jojodb02 RUNNING NORMAL PASS SUN SERVER X4-2 RUNNING ONLINE CONFIGURED CONFIGURED PASS +---------+----------+-----------+------------+--------+-----------------+-----------+--------+------------+------------+----------+ tfactl_summary_exadataoverview>list Status Type: Select Status Type - select [status_type_number|status_type_name] 1 => exadata_clusterwide_status 2 => exadata_jojodb01 3 => exadata_jojodb02 tfactl_summary_exadataoverview>quit ### Exited From SUMMARY Command-Line Interface ### -------------------------------------------------------------------- REPOSITORY : /u01/app/grid/oracle.ahf/data/repository/suptools/jojodb01/summary/root/20211208171051/jojodb01 --------------------------------------------------------------------
  237. • Oracle Trace File Analyzerでは、複数の問題またはエラーを同時に検出した場合でも、複数のサービス・リクエスト・ データ収集を1つのコレクションにまとめる • サービス・リクエスト・データ収集モードの操作を使⽤すると、特定タイプの問題の診断に必要なログ・ファイルおよびト レース・ファイルのみを収集 •

    この最適化を使⽤しても、Oracle Trace File Analyzerでは、複数の問題またはエラーを同時に検出した場合は、 同じファイル・サブセットを収集 • この拡張により、複数のサービス・リクエスト・データ収集のコレクションが1つのコレクションにさらに最適化されるため、 重複が削除 • 問題の検出時、ファイルのローテーションまたはパージが⾏われる前にログ・ファイルおよびトレース・ファイルを収集するこ とが不可⽋ • ただし、ログ・ファイルおよびトレース・ファイルの収集にはリソース・オーバーヘッドが含まれますが、これらの問題によっ て⾮常に少なくなる可能性。 • このリリースでの拡張により、危機的なときに必要となるリソース・オーバーヘッドおよびディスク領域が減少 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集 (SRDC) のサポート Copyright © 2021, Oracle and/or its affiliates 326
  238. Oracle Trace File Analyzerサービス・リクエスト・データ収集(SRDC)を使⽤すると、適切な診断データを迅速に収集。 サービス・リクエスト・データ収集を実⾏する⼿順 $ tfactl diagcollect -srdc srdc_profile

    • コマンドを実⾏すると、クラスタ全体にわたって、過去n時間以内に更新されたすべての重要なログ・ファイルの切捨ておよび収集が実⾏されます。ログ収 集のデフォルト時間数はSRDCによって異なります。–last n h|dオプションを使⽤して、diagcollect期間を変更 • Oracleサポートでは、サービス・リクエスト・データ収集(SRDC)を実⾏するようにユーザーに依頼することがよくあります。SRDCは、発⽣した問題のタイプ によって異なります。SRDCは、問題を診断することを⽬的とした指⽰の集合である⼀連の⼤量データです。多くの様々なステップが必要になるため、 SRDCを⼿動で収集するのは困難 Oracle Trace File Analyzerでは、次の単⼀コマンドを使⽤してSRDC収集を実⾏ $ tfactl diagcollect [-srdc srdc_profile] [–sr sr_number] [-tag tagname] [-z filename] [-last nh|d | -from time -to time | -for date] [-database database] 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集 のサポート Copyright © 2021, Oracle and/or its affiliates 327
  239. 14.6 Oracle Trace File Analyzerサービス・リクエスト・データ収集(SRDC) 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ・収

    集(SRDC) のサポート Copyright © 2021, Oracle and/or its affiliates 328 [root@jojodb01 ~]# tfactl diagcollect TFA will collect diagnostics for the last 1 hour(s). Please enter the time of the incident [YYYY-MM-DD HH24:MI:SS], or <RETURN> to collect for the last 1 hour(s). (Q|q to Quit): Collecting data for the last 1 hours for all components... Collecting data for all nodes TFA is using system timezone for collection, All times shown in JST. Collection Id : 20211208171945jojodb01 Detailed Logging at : /u01/app/grid/oracle.ahf/data/repository/collection_Wed_Dec_08_17_19_48_JST_2021_node_all/diagcollect_20211208171945_jojodb01.log 2021/12/08 17:19:54 JST : NOTE : Any file or directory name containing the string .com will be renamed to replace .com with dotcom 2021/12/08 17:19:54 JST : Collection Name : tfa_Wed_Dec_08_17_19_47_JST_2021.zip 2021/12/08 17:19:54 JST : Collecting diagnostics from hosts : [jojodb01, jojodb02] 2021/12/08 17:19:55 JST : Scanning of files for Collection in progress... 2021/12/08 17:19:55 JST : Collecting additional diagnostic information... 2021/12/08 17:20:30 JST : Getting list of files satisfying time range [12/08/2021 16:19:54 JST, 12/08/2021 17:20:30 JST] 2021/12/08 17:20:40 JST : Collecting ADR incident files... 2021/12/08 17:22:28 JST : Completed collection of additional diagnostic information... 2021/12/08 17:22:31 JST : Completed Local Collection 2021/12/08 17:22:31 JST : Remote Collection in Progress... 続く
  240. 14.6 Oracle Trace File Analyzerサービス・リクエスト・データ収集(SRDC) 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集

    のサポート Copyright © 2021, Oracle and/or its affiliates 329 続き .------------------------------------. | Collection Summary | +----------+-----------+------+------+ | Host | Status | Size | Time | +----------+-----------+------+------+ | jojodb02 | Completed | 48MB | 150s | | jojodb01 | Completed | 56MB | 157s | '----------+-----------+------+------' Logs are being collected to: /u01/app/grid/oracle.ahf/data/repository/collection_Wed_Dec_08_17_19_48_JST_2021_node_all /u01/app/grid/oracle.ahf/data/repository/collection_Wed_Dec_08_17_19_48_JST_2021_node_all/jojodb01.tfa_Wed_Dec_08_17_19_47_JST_2021.zip /u01/app/grid/oracle.ahf/data/repository/collection_Wed_Dec_08_17_19_48_JST_2021_node_all/jojodb02.tfa_Wed_Dec_08_17_19_47_JST_2021.zip [root@jojodb01 ~]#
  241. Table 14-3 One Command Service Request Data Collections(利⽤可能な srdc_profile の⼀覧)

    6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集 のサポート Copyright © 2021, Oracle and/or its affiliates 330 Available SRDCs Type of Problem Collection Scope Auto Collection ahf Oracle ORAchk and Oracle EXAchk problems (to be run after running with -debug) Local only No dbacl Problems with Access Control Lists (ACLs) Local only No dbaqgen Problems in an Oracle Advanced Queuing Environment Local only No ︓ exservice Oracle Exadata: Storage software service or offload server service problems Local only No exsmartscan Oracle Exadata: Smart Scan not working problems Local only No
  242. 14.6 Oracle Trace File Analyzerサービス・リクエスト・データ収集(SRDC) 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集

    のサポート Copyright © 2021, Oracle and/or its affiliates 331 [root@jojodb01 ~]# tfactl diagcollect -srdc exservice Enter the Database Name [Required for this SRDC] : cdb1db1 Scripts to be run by this srdc: ipspack Components included in this srdc: DATABASE OS CRS NOCHMOS SUNDIAGCOMPUTE SUNDIAGCELL Collecting data for all nodes TFA is using system timezone for collection, All times shown in JST. Collection Id : 20211208172801jojodb01 Detailed Logging at : /u01/app/grid/oracle.ahf/data/repository/srdc_exservice_collection_Wed_Dec_08_17_28_04_JST_2021_node_all/diagcollect_20211208172801_jojodb01.log 2021/12/08 17:28:10 JST : NOTE : Any file or directory name containing the string .com will be renamed to replace .com with dotcom 2021/12/08 17:28:10 JST : Collection Name : tfa_srdc_exservice_Wed_Dec_08_17_28_03_JST_2021.zip 2021/12/08 17:28:10 JST : Collecting diagnostics from hosts : [jojodb01, jojodb02] 2021/12/08 17:28:12 JST : Scanning of files for Collection in progress... 2021/12/08 17:28:12 JST : Collecting additional diagnostic information... 2021/12/08 17:28:22 JST : Getting list of files satisfying time range [12/08/2021 13:28:10 JST, 12/08/2021 17:28:22 JST] 2021/12/08 17:28:32 JST : Collecting ADR incident files... 2021/12/08 17:59:08 JST : Completed collection of additional diagnostic information... 2021/12/08 17:59:13 JST : Completed Local Collection 2021/12/08 17:59:13 JST : Remote Collection in Progress... 続く
  243. 14.6 Oracle Trace File Analyzerサービス・リクエスト・データ収集(SRDC) 6. Oracle Trace File Analyzerでの効率的な複数のサービス・リクエスト・データ収集

    のサポート Copyright © 2021, Oracle and/or its affiliates 332 続き .-------------------------------------. | Collection Summary | +----------+-----------+------+-------+ | Host | Status | Size | Time | +----------+-----------+------+-------+ | jojodb02 | Completed | 79MB | 1858s | | jojodb01 | Completed | 87MB | 1863s | '----------+-----------+------+-------' Logs are being collected to: /u01/app/grid/oracle.ahf/data/repository/srdc_exservice_collection_Wed_Dec_08_17_28_04_JST_2021_node_all /u01/app/grid/oracle.ahf/data/repository/srdc_exservice_collection_Wed_Dec_08_17_28_04_JST_2021_node_all/jojodb02.tfa_srdc_exservice_Wed_Dec_08_17_28_03 _JST_2021.zip /u01/app/grid/oracle.ahf/data/repository/srdc_exservice_collection_Wed_Dec_08_17_28_04_JST_2021_node_all/jojodb01.tfa_srdc_exservice_Wed_Dec_08_17_28_03 _JST_2021.zip [root@jojodb01 ~]#
  244. 6.1 Oracle Database QoS Managementとは • Oracle Database Quality of

    Service (QoS) Managementでは、検出したサービスに基づいてデフォルトのポリ シー・セットを⾃動的に構成し、測定モードでモニタリングを開始 8. Oracle Database Quality of Service (QoS) Managementを⾃動的に有効に することのサポート Copyright © 2021, Oracle and/or its affiliates 333 mycluster-mb1
  245. 21cより前 1. EMCCまたはスクリプトを使⽤してクラスタ内の各DBで QoSMを有効化 2. EMCCでQuality of Service Management >

    Create Policy Setを選択 3. ユーザー名とパスワードを作成して、QoSMサーバーに ログイン 4. 6ステップのEMCCウィザードを使⽤してQoSM測定ポ リシーセットを作成 5. ポリシーセットをQoSMサーバーに送信 6. EMCCダッシュボードからクラスターのQoSMを有効化 7. リアルタイムのワークロードパフォーマンスが表⽰ 21c 以降 1. EMCCでQoSMダッシュボードを選択 2. ユーザーとパスワードを設定して、QoSMサーバーにロ グイン 3. リアルタイムのワークロードパフォーマンスを表⽰ Oracle 21c QoSM エンハンスメント – 測定モードでの有効化がデフォルトに Copyright © 2021, Oracle and/or its affiliates 334
  246. 従来バージョンでのメリット・デメリット メリット • リアルタイムおよび事後分析のための⾃律ヘルスメト リックを格納 • クラスターヘルスモニター(CHM) • クラスターヘルスアドバイザー(CHA) •

    DB QoS管理(QoSM) • デフォルトで72時間分を保持 • 最⼩化されたリソースフットプリント • ⾃動ライフサイクル管理が組み込み済 • ⾃動HAフェイルオーバーのサポート • DBA管理が不要 デメリット • 30GB 以上の共有ディスクが必要 • GI パッチとアップグレードの統合には、⼤幅に⻑いメンテナンス ウィンドウが必要 • リモート集中型ソリューションのみが、新しいクラスターメンバー の新たなインストールを必要 GIMR – Oracle Cluster Diagnosticsリポジトリ Copyright © 2021, Oracle and/or its affiliates 337 12.1 12.2+ 18.1+ 19.1+ 19.5+ 21.1 オプション 必須 オプション (New) ベストプラクティ スとして推奨
  247. デフォルトは新しいローカルの分かれたHomeへのインストール • 専⽤DB Homeへのインストール–ユーザーDB不要 • GIへのパッチ後に個別にパッチ/アップグレード可能 • GIMRホームディレクトリはoinstallユーザーが個別に所有 • HAフェイルオーバーを備えた単⼀のRAC対応インスタンス

    新しいリモートでの集中型GIMRサービスオプション • GIMRサービスのための⼀元化されたインフラストラクチャ・クラスタ • クラスタごとの個別のPDBを利⽤するアーキテクチャ • ファーストクラスのGIインストールオプション • ローカルGIMRリソースのフットプリントを削減 • 2バージョンの後⽅互換性と前⽅互換性 21c GIからの管理リポジトリ(GIMR)の新しい導⼊オプション Copyright © 2021, Oracle and/or its affiliates 338 Gridbase GI Home GIMR DB Home Local GI Deployment Oracle Domain Services Cluster 19c Database Cluster 21c Database Cluster GIMR Service
  248. GIMR バージョン21cでの再評価 Copyright © 2021, Oracle and/or its affiliates 339

    デメリット • 30GB 以上の共有ディスクが必要 • GI パッチとアップグレードの統合には、⼤幅に⻑ いメンテナンスウィンドウが必要 • リモート集中型ソリューションのみが、新しいクラス ターメンバーの新たなインストールを必要 21c ü新しい⼀元化されたGIMRはローカルフットプリン トを削減 ü新しいローカルGIMRホームまたはリモートGIMR により、GIのパッチ適⽤とアップグレードの影響を 排除 ü⼀元化されたDSC(Domain Service Cluster) GIMRは、スタンドアロンの21cおよび19cクラス ターをサポート
  249. Oracle® Database Learning Database New Features 21c F36089-15 August 2021

    https://docs.oracle.com/en/database/oracle/oracle-database/21/nfcon/index.html Autonomous Health Framework User’s Guide 21c F31833-01 November 2020 https://docs.oracle.com/en/database/oracle/oracle-database/21/atnms/index.html Autonomous Health Framework ユーザーズ・ガイド 21c F37724-01(原本部品番号:F31833-01) 2020年11⽉ https://docs.oracle.com/cd/F39414_01/atnms/index.html Oracle® Autonomous Health Framework Checks and Diagnostics User's Guide 21c F19065-25 November 2021 https://docs.oracle.com/en/engineered-systems/health-diagnostics/autonomous-health-framework/ahfug/index.html マニュアル Copyright © 2021, Oracle and/or its affiliates 341
  250. 1. フラッシュバック・データベースを実施することで、データファールを縮⼩する操作を元に戻す 以前 21.3以降 フラッシュバック・データベースがデータファイルの縮⼩の操作をサポート Copyright © 2020, Oracle and/or

    its affiliates 345 時間 SCN 12345 データファイルの 縮⼩ SCN 12345 へ フラッシュバック dbf dbf 時間 SCN 12345 データファイルの 縮⼩ SCN 12345 へ フラッシュバック dbf dbf
  251. 2. 保証付きリストア・ポイントが作成されているデータベースにて、データファイルの縮⼩を実施する 以前 21.3以降 フラッシュバック・データベースがデータファイルの縮⼩の操作をサポート Copyright © 2020, Oracle and/or

    its affiliates 346 保証付きリストア・ ポイントの作成 データファイルの 縮⼩ 時間 dbf dbf 保証付きリストア・ ポイントの作成 データファイルの 縮⼩ 時間 dbf dbf
  252. インカネーションをまたぐPDBポイント・イン・タイム・リカバリまたはフラッシュバック Copyright © 2020, Oracle and/or its affiliates 347 PDB

    単位で、インカネーションを再設定ができるようになり、他の PDB に影響なくポイント・イン・タイム・リカバリやフラッシュ バックが可能になった。 時間 PDB 単位で、 孤⽴したインカネーションへ設定 RMAN> RESET PLUGGABLE DATABASE TO INCARNATION 3; PDBのフラッシュバック操作の実⾏ - または - PDBのPoint-in-Timeリカバリの実⾏ PDB 1 PDB 2 他の PDB は影響を受けずに、それぞれのインカネーションを継続 時間
  253. データベース・ユーザーのパスワードを変更する際に、旧パスワードを使⽤できる猶予期間の指定が可能 アプリケーションが使⽤しているDBユーザーのパスワードを変更しなければならない場合に、古いパスワードによるアプリケー ションの停⽌リスクを回避し、スムーズなパスワード変更を実現 プロファイルでロールオーバー期間を指定する - PASSWORD_ROLLOVER_TIME ⽇数 ※時間の場合は、1/24(1時間)のような表記で記述する 段階的データベース・パスワード・ロールオーバー Copyright

    © 2021, Oracle and/or its affiliates 352 1. プロファイルの作成 (ロールオーバーは8時間に設定) CREATE PROFILE TestProfile LIMIT PASSWORD_ROLLOVER_TIME 8/24; 2. ユーザーの作成 CREATE USER UserA IDENTIFIED BY password1 PROFILE TestProfile; 3. Password1でログインが成功することを確認し、新しいパスワードに変更する ALTER USER UserA IDENTIFIED BY password2; 4. Password2でログインが成功 (※ロールオーバー期間内は、何度でもパスワード変更可能。その場合は最新のパスワードが有効) 5. ロールオーバーを明⽰的に終了したい場合は、以下のコマンドを実⾏する ALTER USER UserA EXPIRE PASSWORD ROLLOVER PERIOD;
  254. 監査のポリシーの即時有効化 - 監査ポリシーの変更は、変更を実⾏するセッション及びすべてのアクティブ・セッションに即時反映される 事前定義された監査ポリシーの追加 - ORA_STIG_RECOMMENDATIONS: STIG推奨の監査項⽬が定義済み - ORA_ALL_TOPLEVEL_ACTIONS: 権限を持つユーザーのすべてのトップ・レベル・アクションの監査

    - ORA_LOGON_LOGOFF: ログオンおよびログオフの監査 従来監査(Traditional Audit)の⾮推奨 - Auditコマンドで監査対象を指定し、AUDIT_TRAILパラメータでOS、XML、DBに出⼒先を指定する従来の 標準監査の機能は、21cからは正式に⾮推奨 統合監査(Unified Audit)に関する変更及び新機能 Copyright © 2021, Oracle and/or its affiliates 353
  255. データ分析にかかる変換コスト、データ移動コストの削減 • Oracle Database標準機能としてDB内で処理完結 • データの移動コストを最⼩化 • データ前処理 (変換/補完)、モデル⽣成が⾼速 •

    RやPythonのスクリプトをDB内で実⾏ • 分析サーバーを別途⽤意する必要なし システム化、実装のコストの削減 • MLモデルをDB内に⽣成 • そのままDBのデータに適⽤可能 • ⾼性能、スケーラブルでセキュアなプラットフォーム 機械学習をすべての⼈に • 機械学習ベースのソリューションを活⽤する すべての⼈をサポート • オープンソースパッケージを活⽤して、機能を拡張可能 Oracle Machine Learningの概要 Copyright © 2021, Oracle and/or its affiliates 355 Oracle Machine Learning OML Services * Model Deployment and Management, Cognitive Text OML4SQL SQL API OML4Py Python API OML4R R API OML Notebooks with Apache Zeppelin on Autonomous Database OML4Spark R API on Big Data Oracle Data Miner Oracle SQL Developer extension OML AutoML UI * Code-free AutoML interface on Autonomous Database * ADBのみ In-Database Machine Learning
  256. In-Database Machine Learning コンセプトと利点 Copyright © 2021, Oracle and/or its

    affiliates 356 オラクルの取り組み 従来の分析環境 RDBMSなどオリジナル・データの ある場所からデータをツール内に移動して分析を実⾏ データが存在する場所で 分析を実⾏ 分析 • モデリングのデータの準備・移動に時間や⼿間がかかる • データの絞り・サンプリングでモデル作成 • シングルスレッドが主流(マルチスレッドには⼯夫が必要) • ファイル等の持ち出しによるセキュリティの問題 • 複雑な環境に対応するスキルが必要 • 本番環境へのモデルのデプロイには様々な作業が必要 • データの移動が不要でモデリングに⼿間要らず • 全量分析が可能 • ⼿軽にマルチスレッドが可能 • DB内から外へデータを出さずに分析 • DBスキルと分析スキルのみで利⽤可能 • DB内のモデルはSQLで簡単に本番環境へ適応・更新 データ移動 分析 ? データ移動 Flat File
  257. 21c OML新機能リスト Copyright © 2021, Oracle and/or its affiliates 357

    OML4Py • PythonでIN DB機械学習を⾏うことが可能 • AutoMLで予測モデル作成を⾃動化 新アルゴリズム • MSET-SPRT (Multivariate State Estimation Technique- Sequential Probability Ratio Test) • 異常検知のセンサーや、IoTデータソースで、誤検知を最⼩化しつつ、微細な異常も検知 • XGBoost (eXtreme Gradient Boosting Trees) • ⾼い⼈気と精度を誇る 勾配ブースティングのアルゴリズム 拡張系 • ニューラルネットワーク アダムソルバー • 計算効率が⾼く、少量のメモリで⼤規模データに対応 • 確率的勾配降下法の⼀般的な拡張 • ニューラルネットワーク RELU 活性化関数 • 正規化線形活性化関数 (Rectified Linear activation function) • ⾼精度なモデルの学習が容易になる可能性がある • サポートベクターマシン、⼀般化線形モデル、ニューラルネットワーク、k平均法 • 予測詳細の質の向上
  258. Python から In-Database Machine Learning • 分析、機械学習プロセスの⾼速化 • データベースの処理性能を⽣かしたスケーラブルなデータ探索、準備、モデリング •

    Python環境へのデータ移動コスト、時間の低減 • AutoMLによるモデル作成の機械学習プロセスの⾃動化 Pythonをエンタープライズ⽔準で活⽤ • ⼤規模なビジネスデータへの機械学習の適⽤ • モデルやデータの不⽤意な流出を抑えるセキュリティ • ビジネスデータ活⽤のためのモデルデプロイメントをより迅速、容易に • 機械学習プロセスやモデルの運⽤をデータベースと統合可能 OML4Pyの利点 Copyright © 2021, Oracle and/or its affiliates 359 分析
  259. OML4Pyの主要な機能 Copyright © 2021, Oracle and/or its affiliates 360 1.

    プロキシオブジェクト と 透過層 • プロキシオブジェクト(oml.DataFrame) • DB内の表を Pandas DataFrameとして扱うためのインターフェイス • 透過層 • プロキシオブジェクトでDataFrameメソッドを利⽤すると、処理をSQLに内部変換しDB側で透過的に実⾏する 2. In-Databaseアルゴリズムの利⽤(呼び出し) • OML4SQLで提供されている機械学習アルゴリズムをPythonから呼び出し扱う。 (上記のoml.DataFrameが ⼊⼒データセットになる) 3. AutoML • In-Databaseアルゴリズムを利⽤した AutoML実装 4. 埋め込み実⾏( Embeded Execution ) • DatabaseからPythonを起動し、Pythonスクリプトを実⾏する機構
  260. OML4Pyのアーキテクチャ Copyright © 2021, Oracle and/or its affiliates 361 Python⾔語を使⽤した機械学習機能

    Python⾔語の処理を透過的にOracle Database内の処理に変換することで、⼤規模、かつ複雑な分析を実現します。 Database内処理に変換できない部分もDatabaseサーバー上でPythonプロセスを実⾏します。 R Engine R Engine Python Engine Other Python packages Pythonの処理をDatabase内の処理に変換・オフロード OML4Py Python Engine OML4Py SQL/ Python Python 結果 結果 Databaseサーバー内で外部プロセスとしてPythonを実⾏することも可能 Other Python packages の Pythonクライアント • PythonスクリプトをOracle Databaseで 実⾏するようにスクリプトを発⾏します。 • グラフの描画や処理フローの制御は、通常の Pythonの機能を利⽤し、クライアント側で実⾏ します。(1. プロキシオブジェクトと透過層) • 最適な機械学習モデルの構築を⽀援します (3.AutoML)。 Oracle Database内部での実⾏ • Pythonの関数をSQLに変換して実⾏します。 • Oracle Databaseの並列実⾏の仕組みを 活⽤し、⼤量のデータに対応します。 • Oracle Databaseの持つ統計関数、機械学習 機能(OML4SQL) を内部的に活⽤します (2.In-Databaseアルゴリズムの利⽤)。 Oracle Databaseの外部プロシージャで Pythonを実⾏(4.埋め込み実⾏) • データベースが複数のPythonのプロセスを データベースサーバー上に外部プロセスとして 起動します。 • SQLやPL/SQLからPythonのスクリプトを 呼び出し可能です。 分析者 Oracle Databaseサーバー 外部 プロセス 3.AutoML 3.AutoML 2.In-Database アルゴリズム 1.プロキシ オブジェクト 1.プロキシ オブジェクト 4.埋め込み実⾏
  261. AutoML – new with OML4Py Copyright © 2021, Oracle and/or

    its affiliates 362 ⾃動特徴量選択 – 最も予測に寄与する特徴量の 特定によって特徴量の数を削減 – パフォーマンスと精度の向上 ⾃動アルゴリズム 選択 ⼿あたり次第にアルゴリズ ムを探すよりも格段に速く ⾃動特徴量 選択 データノイズと特徴量の 数を削減 ⾃動モデル チューニング 正確性の向上に⼤きく貢献 ML Model ⾃動アルゴリズム選択 – モデルのクオリティを向上させること のできるデータベース内アルゴリズム を特定 – ⼿あたり次第のアルゴリズム探しよ りも格段に速く最適なアルゴリズム を選択 ⾃動モデルチューニング – アルゴリズムハイパーパラメータの ⾃動チューニング – ⼿作業や総当たりの最適パラ メータ探しが不要 データ テーブル
  262. インストール要件 OML4Pyインストール⼿順 Copyright © 2021, Oracle and/or its affiliates 363

    Python3.9.5~ Oracle Database 21c OS Oracle Linux x86-64 7.x or Oracle Linux x86-64 8.x dbca -configureOML4PY Python website Python-3.9.5.tgz ADB以外の環境下での OML4Pyの利⽤に際しては、 Python 3.9.5 以上のmake と database へ有効化作業が必要になります Pythonのインストール データベースの機能有効化
  263. Pythonセットアップ 1. 必要なyumパッケージをインストール yum install libffi-devel yum install openssl-devel yum

    install tk-devel yum install xz-devel yum install zlib-develServer 2. インストール確認 rpm -qa libffi-devel rpm -qa openssl-devel rpm -qa tk-devel rpm -qa xz-devel rpm -qa zlib-devel 3. Python-3.9.5.tgz(ソース)を Python公式Webサイトからダウンロード 4. 解凍 tar -xvzf /<解凍ファイルへのパス>/Python-3.9.5.tgz -C /<解凍先のパス>/ 5. 解凍したディレクトリに移動 cd /path_to_extracted_files/Python-3.9.5/ Copyright © 2021, Oracle and/or its affiliates 364 6. Pythonのmake ./configure --enable-shared --prefix=<Python-3.9.5インストール先のパス> make clean; make make altinstall 7. 環境変数の設定 export PYTHONHOME=<Python-3.9.5インストール先のパス> export PATH=$PYTHONHOME/bin:$PATH export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH 8. 必要なPythonパッケージをインストール pip3.9 install numpy==1.18.1 pip3.9 install pandas==0.25.3 pip3.9 install scipy==1.6.0 pip3.9 install matplotlib==3.1.2 pip3.9 install cx_Oracle==8.1.0 pip3.9 install scikit-learn==0.23.1 OML4Pyインストール⼿順
  264. Oracle Database 21c 準備 <Oracle Database 21cインスタンス新規作成の場合> 1. Oracle Database

    21cにOML4Pyサーバーをインストール dbca -configureOML4PY 2. ユーザー作成 sqlplus / as sysdba @pyquser.sql <user名> USERS TEMP unlimited pyqadmin Enter value for password: <type your password> 3. 作成したユーザー(oml_user)にグラント GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE MINING MODEL, EXECUTE ON CTXSYS.CTX_DDL to oml_user; GRANT PYQADMIN to oml_user; 4. OML4Pyサーバーの確認 sqlplus oml_user/<oml_user_password> BEGIN sys.pyqScriptCreate('TEST', 'def func():return 1 + 1'); END; / SELECT * FROM table(pyqEval(NULL, 'XML','TEST')); Copyright © 2021, Oracle and/or its affiliates 365 <Oracle Database 21cインスタンス作成済みの場合> 1. Oracle Database 21cにOML4Pyサーバーをインストール※PDB のSQL*Plusからpyqcfg.sqlを実⾏ sqlplus / as sysdba spool install.txt alter session set container=PDB1; ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; @$ORACLE_HOME/oml4py/server/pyqcfg.sql define permtbl_value = SYSAUX define temptbl_value = TEMP define orahome_value = /u01/app/oracle/product/21.3.0.0/dbhome_1 define pythonhome = /opt/Python-3.9.5 2. ユーザー作成 sqlplus / as sysdba @pyquser.sql <user名> USERS TEMP unlimited pyqadmin Enter value for password: <type your password> 3. oml_userにグラント GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE MINING MODEL, EXECUTE ON CTXSYS.CTX_DDL to oml_user; GRANT PYQADMIN to oml_user; 4. OML4Pyサーバーの確認 sqlplus oml_user/<oml_user_password> BEGIN sys.pyqScriptCreate('TEST', 'def func():return 1 + 1'); END; / SELECT * FROM table(pyqEval(NULL, 'XML','TEST')); oml_user = OML4Pyの管理ユーザー (PYQADMINを持つ) OML4Pyインストール⼿順
  265. 2種類のOML4Py Copyright © 2021, Oracle and/or its affiliates 366 主な違い

    Autonomous Database オンプレミス/Database Cloud Service 環境構築 不要 必要 使⽤可能 Pythonライブラリ 事前にセットされているPythonライブラリのみ 使⽤可能 ユーザが任意のPythonライブラリを追加可能 プログラミング インターフェイス OML Notebookのみ Jupyterなど⼀般的なインターフェイス (OML Notebookは使⽤不可) AutoML いずれも利⽤可能 AutoML UIの利⽤ 可能 不可 アプリへのデプロイ デプロイまでの連携が容易 デプロイまでの構築に⼀部配慮が必要 • 機械学習プロセスの即時⽴ち上げには、Autonomous Database版 • より⾃由な環境には、オンプレミス / Database Cloud Service版 ※Autonomous Database版は19cでも利⽤可能
  266. Pythonパッケージの追加が可能 Copyright © 2021, Oracle and/or its affiliates 367 •

    cycler • cython • joblib • kiwisolver • pyparsing • python_dateutil • pytz • scipy • six • setuptools • ADB版で利⽤可能なPythonパッケージ pip install <Pythonパッケージ> ※ADB版のOMLではpip install不可 ※pipはPythonパッケージをインストールするためのコマンド OML4Py必須 Pythonパッケージ • numpy • pandas • scipy • matplotlib • cx_Oracle • scikit-learn オンプレミス / Database Cloud Service版で利⽤可能なPythonパッケージ OML4Pyで利⽤可能なパッケージ
  267. MSET: Multivariate State Estimation Technique - Sequential Probability Ratio Test

    ( 多変量状態推定⼿法 - 逐次確率⽐検定 ) 原⼦⼒発電所や集中治療室等のクリティカルな環境で利⽤されている異常検出アルゴリズム。 【特⻑】 ・⾼い異常検出率 ・低い誤検出 (センサー単体の劣化や故障に引きずられにくい) 【向いている対象】 ・センシングを多⾯的、多重に⾏っている対象 ・状態が複雑な対象 Oracle Machine Learning 21c 新機能 異常検出アルゴリズム MSET-SPRT が追加されました Copyright © 2021, Oracle and/or its affiliates 14
  268. • 対象の系が多⾓的で複数のセンシング環境となっている • 誤検出を抑え、精度を確保するため • 異常の発⽣が稀 • 正常系データが⼀式( 考えられる全パターン)必要 •

    誤検出時のコスト/被害が⼤きい • 誤検出が低いメリットを享受しやすい • 異常発⽣時の被害が⼤きい • 誤検出を避けるために検出率を抑えることが難しい MSET-SPRT による異常検出に向いている対象 370 内部温度 内圧 ⽔ 圧 外 気 圧 振 動 対象とする系 内部温度 内圧 振 動 多様なセンサーからのデータ ※ 対象とする系に対する様々なデータから、 その系の正常時の状態を推定したモデルを作り上げ、 その推定されるモデルと現状の差を検定することで、 異常判定を⾏う構造 Copyright © 2021, Oracle and/or its affiliates
  269. MSET-SPRT アルゴリズム 371 MSET(多変量状態推定法) : 多変量データから状態を推定し、推測値を算出する SPRT(逐次確率⽐検定) : MSETで推測した値と実際の値の残差から異常・正常判定を⾏う MSET

    Model Diff SPRT 𝑥! 𝑥" 𝑥# " 𝑥! " 𝑥" " 𝑥# 実際の値 推測値 異常検出 補⾜︓アルゴリズムの構造 Copyright © 2021, Oracle and/or its affiliates
  270. OCI AI Service Anomaly Detection 概要 372 時系列データからの予測モデル構築とデプロイが可能な、フル・マネージドの異常検知MLサービス カスタマ・ベネフィット •

    統計、機械学習の専⾨家を必要としない、WebUIベースのかんたん ワークフロー • 基盤となるハードウェアが⾃動選択され、⼤規模なデータセットの学習 時間を⾃動最適化 • デプロイ環境までが含まれたフル・マネージド・サービス • Oracle Labs開発・特許取得済のアルゴリズムMSET2 ü 早期の異常検出 ü データの⾃動前処理機能(Intelligent Data Preprocessing) ユース・ケース 公益事業、⽯油・ガス、運輸、ヘルスケア、航空宇宙、製造、通信、銀、 保険、アドテク、Webビジネス、eコマースなどの様々なセクター における、資産の監視、保護、不正処理検出など ご参考 Copyright © 2021, Oracle and/or its affiliates
  271. Copyright © 2021, Oracle and/or its affiliates 373 Oracle Database

    21c Transactional Event Queues (TEQ)関連新機能
  272. Oracle Databaseに統合された堅牢で多機能なメッセージ・キューイング・システム • TEQへのエンキュー/デキュー、TEQと他のメッセージングシステム間のメッセージ伝播機能を提供 • 標準のデータベース機能(リカバリ、セキュリティなど)がサポートされる • データ駆動およびイベント駆動のアーキテクチャから求められる要件に対処 • あらゆる機能が⾃動化されたマネージドなサービス

    • データベースと統合してパフォーマンスを最適化 Oracle Advanced Queuing (AQ) / Oracle Transactional Event Queues (TEQ) とは Copyright © 2021, Oracle and/or its affiliates 374 メッセージを送信する側のクライアント メッセージを消費する側のクライアント Producer Consumer エンキュー デキュー Oracle TEQ TEQ 伝播 伝播 TEQ TEQ
  273. Oracle Databaseにビルトインされたイベント/メッセージング機能 Oracle Advanced Queuing (AQ) の歴史 Copyright © 2021,

    Oracle and/or its affiliates 376 Oracle8 Database Oracle8i Database Oracle Database 11g Oracle9i Database Oracle9i Database Release2 Oracle Database 12c, 18c, 19c Oracle Database 21c TEQ AQ Classic Queues Objects/ADTs; IOTs; Partitioning AQ Single Consumer Queues AQ Multi Consumer Queues Oracle Real Application Clusters AQ JMS Standard Support AQ Performance Optimizations Renamed Oracle Streams AQ Transactional Event Queues With Kafka Compatibility (For High Performance Messaging / Events DB) Oracle AQ Oracle AQ Single instance queue (For Simple workflows) AQ Sharded Queues AQ JMS Sharded Queues Renamed Back to Oracle AQ
  274. RACインスタンス2 AQシャード・キューの構成 • シャード・キューのアーキテクチャ (AQシャード・キュー) • キューは、キュー表がパーティション化されたシャードで処理される • 各エンキュー・セッションにシャードが1つ⾃動的に割り当てられる •

    このときアプリケーション開発者からは論理的に単⼀のキューに⾒える • RACクラスタの使⽤により、同時実⾏性の⾼いアーキテクチャに AQシャード・キューのアーキテクチャ Copyright © 2021, Oracle and/or its affiliates 378 キュー表 RACインスタンス1 ProducerC シャード1 RACインスタンス1に含まれるキュー表が 2つのシャードにパーティション化されて いる シャード2 キュー表 シャード1 ProducerA ProducerB Consumer Consumer Consumer AQシャード・キュー
  275. TEQ イベントストリームとは イベントストリーム(シャード)︓キュー表のパーティションで構成 • ⽔平分割による⾼い同時実⾏性とスループットを実現する • イベントストリームは⾃動でパーティション化 • インスタンス内にイベントストリームでエンキューセッションを分散 •

    インスタンス内にすべてのEvent Streamsのデキュー • ローカルデキューアがない場合にメッセージをクロスインスタンス転送 イベントストリームの同時実⾏性が向上 Copyright © 2021, Oracle and/or its affiliates 379 RACインスタンス2 キュー表 RACインスタンス1 ProducerC イベントストリーム1 イベントストリーム2 キュー表 イベントストリーム1 ProducerA ProducerB Consumer Consumer Consumer
  276. Apache Kafkaとは︖ • Apache Kafkaは、スケーラビリティに優れた分散メッセージキュー • 広く使⽤され、⼈気のあるオープンソースのイベントストリーミングおよびメッセージングシステム • 分散型のフォールトトレラントアーキテクチャで⼤量のデータを処理する機能を備える。 TEQ⽤のKafka

    Javaクライアント Copyright © 2021, Oracle and/or its affiliates 382 Producer Consumer Kafka Brokers • Broker︓Kafkaが稼働する 1 台のサーバー • Kafka Cluster︓Kafkaが実⾏されているサーバ(Broker)をグループ化したもの • Zookeeper︓Kafkaを管理するサーバ
  277. TEQがKafkaのインターフェースを持つように • Kafka APIアプリケーションとOracle APIアプリケーショ ンがメッセージの互換性を持つ • Kafka Java APIはOracle

    Databaseサーバーに接続し、メッ セージング・プラットフォームとしてTEQを使⽤可能 • KafkaをTEQに置き換えての使⽤が可能 • KafkaとTEQが相互にメッセージのやりとりできるように • Kafka Java APIを使⽤することでKafkaからTEQへ、TEQから Kafkaへ相互にメッセージを送れるように TEQ⽤のKafka Javaクライアント Copyright © 2021, Oracle and/or its affiliates 383 KafkaのAPIを使⽤してTEQへのエンキュー・デキューが可能に KafkaとTEQのメッセージのやり取りが透過的に Producer Consumer Producer Consumer Producer Consumer TEQ TEQ TEQ TEQ Producer Consumer API
  278. アーキテクチャ KafkaアプリケーションからTEQに接続する際の構成 TEQ⽤のKafka Javaクライアント Copyright © 2021, Oracle and/or its

    affiliates 384 Oracle Database JDBC Driver AQ-JMS APIs Kafka Java API request/ response calls invokes send /poll TEQ Kafka アプリケーション ojdbc8.jar aqapi.jar okafka.jar Oracleが提供するKafkaに 対応したAPI
  279. TEQモニタ・システムの構成 リアルタイムなパフォーマンス監視 Copyright © 2021, Oracle and/or its affiliates 386

    • TEQのメトリックを視覚的に取得可能 Oracle Database TEQ Prometheus Grafana Oracle Databaseから監視に 必要な情報を収集するための エージェント エクスポータを使⽤して収集 したメトリックを保管するサー バー Prometheusの情報を 使⽤してデータを視覚化 するプラットフォーム Prometheus の エクスポータ (oracledb_exporter) dockerコンテナ上で動作 TEQのメトリックを取得する データソースを 呼ぶ Grafanaで視覚化されたメトリック 次のようなメトリック情報を取得︓ ü ステータス ü キューの数 ü サブスクライバの数 ü エンキュー/デキューのスループット ü メッセージの数
  280. Grafanaの使⽤によりサマリーを視覚的に確認することが可能に TEQモニターではインスタンス・キュー・サブスクライバ・ディスク・グループを対象に次のサマリーを確認することが可能︓ • すべてのTEQ全体のサマリー • データベース・メトリックのサマリー • システム・メトリックのサマリー • TEQごとのサブスクライバのサマリー

    リアルタイムなパフォーマンス監視 Copyright © 2021, Oracle and/or its affiliates 387 ▲ システム・サマリー・ダッシュボード︓ システム・レベルのメトリックとキュー・レベルのメトリックを表⽰ (CPU使⽤率と使⽤メモリーなど) ▲ TEQサマリー・ダッシュボード︓ 全体的に集計されたTEQの統計情報(ステータス、キューの数、サ ブスクライバの数、エンキュー率/デキュー率、メッセージの数など) ▶ データベース・サマリー・ダッシュボード︓ 全体的なDBのパフォーマンスと統計情報
  281. Transactional Event Queuesの重要な概念 Copyright © 2021, Oracle and/or its affiliates

    390 メッセージング/ストリーミングテクノ ロジー 作成 構成 組合せ 対処⽅法 Transactional Event Queues Queue table Event Streams Partitions Offset AQ Sharded Queues (⾮推奨) Queue table Shards Subshards MessageID Apache Kafka Topic Partition Segment Offset OCI Streaming Stream Partition - Cursor JMS Queue/Topic No parallelism • Queue Table︓パーティション化された、メッセージのキューのみを追加 • Event Stream︓順序付けられたメッセージのコレクション。 プロデューサーとコンシューマーは、複数のイベントスト リームで同時に作業できます • Partitions︓効率的なメモリとディスク管理のためのイベントストリームの⼀部 • Offset︓コンシューマーがデキューするために使⽤するメッセージのアドレス • Enqueue︓キューテーブルにメッセージを⽣成します • Dequeue︓キューテーブルからのメッセージを消費する
  282. Transactional Event Queuesの新旧 命名法 Copyright © 2021, Oracle and/or its

    affiliates 391 メッセージのタイプ 19c以前の旧名称 21c以降の新名称 永続メッセージ PL / SQL、JMS、Cを使⽤したメッセージング⽤の単⼀ノードのデータ ベースキュー AQクラシック・キュー AQキュー 永続メッセージ イベントストリーミングとメッセージング⽤の並列キュー (Kafka Javaクライアントの追加) AQシャード・キュー TEQキュー バッファ済メッセージ AQクラシック・キュー AQバッファ・キュー Oracle Database Release 21cでは、TEQおよびAQに次の命名法が適⽤される ※現在、AQクラシック・キューを使⽤している場合は、キュー内の全順序を保持するイベント・ストリームが1つあるTransactional Event Queuesに移⾏ することを検討するか、複数のイベント・ストリーム(各イベント・ストリーム内でメッセージが順序付けされる)の活⽤を検討してください。
  283. Copyright © 2021, Oracle and/or its affiliates 392 Transactional Event

    Queues対応の Kafka Javaクライアントの構成
  284. Transactional Event Queues対応のKafka Javaクライアントの構成 2 Copyright © 2021, Oracle and/or

    its affiliates 394 前提条件 Oracle DatabaseのTEQに対応するKafka Javaクライアントを構成および実⾏するための前提条件を⽰します。 1. データベース・ユーザーを作成します。 2. 次のユーザー権限を付与します。 3. TEQを使⽤するための適切なデータベース構成パラメータを設定します。 4. LOCAL_LISTENERデータベース・パラメータを設定します。 grant connect, resource to user grant execute on dbms_aqadm to user grant execute on dbms_aqin to user grant execute on dbms_aqjms to user grant select_catalog_role to user set streams_pool_size=400M set LOCAL_LISTENER= (ADDRESS=(PROTOCOL=TCP)(HOST=<HOST NAME/ IP> )(PORT=<PORT NUMBER>))
  285. Transactional Event Queues対応のKafka Javaクライアントの構成 3 Copyright © 2021, Oracle and/or

    its affiliates 395 接続構成 • OKafkaライブラリは、JDBC Thinドライバを使⽤してOracle Databaseに接続 • Oracle Databaseへの接続にはPLAINTEXTプロトコルまたはSSLプロトコルを使⽤可能 ※Oracle Autonomous Transaction Processing (ATP) Databaseに対してKafkaアプリケーションを実⾏する場 合は、SSL構成のみがサポートされます。 < PLAINTEXTプロトコルを使⽤したJDBC接続 > Oracleインスタンスへの接続にユーザー名とパスワードを使⽤します。ユーザーはアプリケーションから次のプロパティを提供 する必要があります︓ ojdbc.propertiesファイルとojdbc.propertiesファイルの次のプロパティは、oracle.net.tns_adminに存在している必要 があります。 • oracle.service.name = <インスタンスで実⾏しているサービスの名前> • oracle.instance.name = <Oracle Databaseインスタンスの名前> • bootstrap.servers = <ホスト:ポート> • security.protocol= PLAINTEXT • oracle.net.tns_admin = <location of tnsnames.ora file> (jdbc接続⽂字列の解析⽤) • user = <nameofdatabaseuser> • password = <userpassword>
  286. Transactional Event Queues対応のKafka Javaクライアントの構成 4 Copyright © 2021, Oracle and/or

    its affiliates 396 接続構成 < SSLプロトコルを使⽤したJDBC接続 > ATP Databaseへの接続にSSLで保護された接続を使⽤するには、次のステップを実⾏します。 1. SSLセキュリティのためのJDBC Thinドライバ接続の要件は、次のとおりです。 • JDK8u162以降。 • oraclepki.jar、osdt_cert.jar、およびosdt_core.jar • 18.3 JDBC Thinドライバ以降(推奨) 2. Oracle Databaseインスタンスへの接続にJDBCのSSLセキュリティを利⽤するには、ユーザーは次のプロパティを指定 する必要があります。JDBCは、2通りの⽅法でOracle DatabaseへのSSLで保護された接続をサポートします。 • ウォレットの使⽤ • Javaキー・ストアの使⽤
  287. Copyright © 2021, Oracle and/or its affiliates 397 Transactional Event

    QueueとApache Kafkaの 相互運⽤性 • Apache KafkaからTEQへのメッセージ転送のステップ • TEQからApache Kafkaへのメッセージ転送のステップ
  288. • Oracle Transactional Event Queue (TEQ)により、イベントベースのアプリケーションが簡単に実装可能 • Apache Kafkaと⾼度に統合されており、Kafka APIを使⽤するアプリは、透過的にOracle

    TEQを操作可能 • Oracle TEQでは、TEQとKafkaの双⽅向の情報フローもサポートされるため、変更内容はほぼリアルタイムでTEQまた はKafkaで利⽤可能 Apache Kafka Connectについて • Kafkaとその他のシステムを統合するApache Kafkaに組み込まれているフレームワーク • Oracle TEQは、標準JMSパッケージおよび関連するJDBCのTransactionパッケージを提供することで、接続を確⽴ してトランザクション・データ・フローを完了 • Oracle TEQでは、標準のKafka JMSコネクタを構成することで、相互運⽤性を確⽴し、2つのメッセージング・システム 間のデータ・フローを完了 Transactional Event QueueとApache Kafkaの相互運⽤性 1 Copyright © 2021, Oracle and/or its affiliates 398
  289. 設定と前提条件 Kafka Connectは、Java Naming and Directory Interface (JNDI)とJMS標準インタフェースを使⽤して、Oracle TEQ⽤のJMS ConnectionFactoryインスタンスを作成し、TEQとの間でメッセージをエンキューまたはデキューします。

    前提条件を次に⽰します。 • Kafka Broker: Confluent Platform 3.3.0以降、またはKafka 0.11.0以降 • Connect: Confluent Platform 4.1.0以降、またはKafka 1.1.0以降 • Java 1.8 • Oracle TEQ JMS 1.1+クライアントのJar Transactional Event QueueとApache Kafkaの相互運⽤性 2 Copyright © 2021, Oracle and/or its affiliates 399
  290. Apache KafkaからOracle TEQへの接続(Confluent PlatformおよびCLIの例) Apache KafkaからTEQへのメッセージ転送のステップは、次のとおりです︓ 1. Oracle Databaseを起動します 2.

    TEQを設定します a. TEQユーザーを作成して、ユーザーに相応の権限を付与します。 b. TEQを作成および起動します。 Transactional Event QueueとApache Kafkaの相互運⽤性 3 Copyright © 2021, Oracle and/or its affiliates 400 CREATE USER <username> IDENTIFIED BY <password>; GRANT CONNECT, RESOURCE, AQ_ADMINISTRATOR_ROLE TO <username>; GRANT EXECUTE ON DBMS_AQ TO <username>; GRANT EXECUTE ON DBMS_AQADM TO <username>; -- alter table space privileges if needed BEGIN DBMS_AQADM.CREATE_SHARDED_QUEUE( queue_name => '<username>.<queuename>', multiple_consumers => FALSE, -- False: Queue True: Topic queue_payload_type => DBMS_AQADM.JMS_TYPE); DBMS_AQADM.START_QUEUE(queue_name => '<username>.<queuename>'); END; /
  291. Apache KafkaからOracle TEQへの接続(Confluent PlatformおよびCLIの例) Transactional Event QueueとApache Kafkaの相互運⽤性 4 Copyright

    © 2021, Oracle and/or its affiliates 401 3. Kafka Connect Sinkコンポーネントをインストールします 4. TEQのJarをKafka JMS Sink Connectorにインポートします 次のjarをJMS Sink Connectorのプラグイン・フォルダ(share/confluent-hub-components/confluentinc-kafka- connect-jms-sink/lib)にコピーします。この作業は、Connectワーカー・ノードごとに実⾏する必要があります。 また、ワーカーはTEQのjarを採⽤するために再起動する必要があります。 • aqapi.jar : TEQ JMSライブラリjar • ojdbc8.jar : Oracle JDBC Connectionライブラリjar • jta-1.1.jar : JTA: トランザクション・マネージャと分散トランザクション・システムに関与する要素との間の標準Javaインタ フェース 5. Confluent Platformを起動します # run from your Confluent Platform installation directory confluent-hub install confluentinc/kafka-connect-jms-sink:latest confluent local start
  292. Apache KafkaからOracle TEQへの接続(Confluent PlatformおよびCLIの例) Transactional Event QueueとApache Kafkaの相互運⽤性 5 Copyright

    © 2021, Oracle and/or its affiliates 402 6. JMS Sink Connectorを構成します: d jms-source.json { "name": "JmsSinkConnector", "config": { "connector.class": "io.confluent.connect.jms.JmsSinkConnector", "tasks.max": "1", "topics": "jms-messages", "java.naming.factory.initial": "oracle.jms.AQjmsInitialContextFactory", "java.naming.provider.url": <connection string>, "db_url": <connection string>, "java.naming.security.principal": <username>, "java.naming.security.credentials": <password>, "jndi.connection.factory": "javax.jms.XAQueueConnectionFactory", "jms.destination.type": "queue", "jms.destination.name": <queuename>, "key.converter":"org.apache.kafka.connect.storage.StringConverter", "value.converter":"org.apache.kafka.connect.storage.StringConverter", "confluent.topic.bootstrap.servers":"localhost:9092", "confluent.topic.replication.factor": "1" } }
  293. Apache KafkaからOracle TEQへの接続(Confluent PlatformおよびCLIの例) Transactional Event QueueとApache Kafkaの相互運⽤性 6 Copyright

    © 2021, Oracle and/or its affiliates 403 7. JMS Sink Connectorをロードします 8. Connectorステータスの事後チェックを実⾏します a. Confluent Platform管理を使⽤する場合: http://localhost:9021 の Confluent Platform管理に移動して、コネクタのステータスを確認します。 b. Confluent CLIを使⽤する場合 7. メッセージ転送をテストします Kafkaトピックにランダムなメッセージを⽣成します。 TEQのエンキュー済メッセージを確認します。 confluent local load jms -- -d jms-sink.json confluent local status jms seq 10 | confluent local produce jms-messages SELECT * FROM GV$PERSISTENT_QUEUES; SELECT * FROM GV$AQ_SHARDED_SUBSCRIBER_STAT;
  294. Oracle TEQからApache Kafkaへの接続(Confluent PlatformおよびCLIの例) TEQからApache Kafkaへのメッセージ転送のステップは、次のとおりです︓ 1. Oracle Databaseを起動します(前スライドに記述済) 2.

    TEQを設定します(前スライドに記述済) 3. Kafka Connect Sourceコンポーネントをインストールします 4. TEQのJarをKafka JMS Source Connectorにインポートします 次のjarをJMS Source Connectorのプラグイン・フォルダ(share/confluent-hub-components/confluentinc- kafka-connect-jms/lib)にコピーします。 • aqapi.jar : TEQ JMSライブラリjar • ojdbc8.jar : Oracle JDBC Connectionライブラリjar • jta-1.1.jar : JTA: トランザクション・マネージャと分散トランザクション・システムに関与する要素との間の標準Javaインタ フェース Transactional Event QueueとApache Kafkaの相互運⽤性 7 Copyright © 2021, Oracle and/or its affiliates 404 confluent-hub install confluentinc/kafka-connect-jms:latest
  295. Oracle TEQからApache Kafkaへの接続(Confluent PlatformおよびCLIの例) 5. Confluent Platformを起動します 6. JMS Source

    Connector jms-source.jsonを構成します Transactional Event QueueとApache Kafkaの相互運⽤性 8 Copyright © 2021, Oracle and/or its affiliates 405 confluent local start { "name": " JmsSourceConnector", "config": { "connector.class": "io.confluent.connect.jms.JmsSourceConnector", "kafka.topic": "jms-messages", "jms.destination.name": <queuename>, "jms.destination.type": "queue", "java.naming.factory.initial": "oracle.jms.AQjmsInitialContextFactory", "java.naming.provider.url": <connection string>, "db_url": <connection string>, "java.naming.security.principal": <username>, "java.naming.security.credentials": <password>, "confluent.license": "", "confluent.topic.bootstrap.servers": "localhost:9092" } }
  296. Oracle TEQからApache Kafkaへの接続(Confluent PlatformおよびCLIの例) 7. JMS Source Connectorをロードします 8. Connectorステータスの事後チェックを実⾏します(前スライドに記述済)

    9. メッセージ転送をテストします 前述のSink Connectorを使⽤してメッセージをTEQにエンキューし、Sink Connectorを⼀時停⽌してからSource Connectorを起動します。メッセージがTEQからデキューされ、Kafkaトピック内に⽣成されます。 Transactional Event QueueとApache Kafkaの相互運⽤性 9 Copyright © 2021, Oracle and/or its affiliates 406 confluent local load jms -- -d jms-source.json メッセージ転送の監視 Sink/Sourceコネクタのメッセージ転送は、両側から監視できます。 • Apache Kafka: http://localhost:9021 の Confluent Platform管理に移動して、統計についてのプロデューサ/コンシューマ・コン ソールを確認します。 • Oracle TEQ: TEQ Monitorシステムを起動してエンキュー率/デキュー率、TEQの深さ、および詳細なDB/システム・レベルの統計 情報を確認してください。
  297. PL/SQL APIでは、Transactional Event QueuesのJava Message Service (JMS)ペイロードに対してエンキュー操作 とデキュー操作を実⾏できるようになりました。同様に、PL/SQL配列APIがTransactional Event QueuesのJMSユー

    ザーに公開されています。JMSでは単⼀のJMS宛先で異機種間メッセージがサポートされているため、デキューでは5つの JMSメッセージ・タイプのいずれかが取得されますが、次に受信されるメッセージのタイプは予測できません。そのため、 PL/SQLの型の不⼀致でアプリケーション・エラーが発⽣することがあります。Oracleでは、アプリケーションが汎⽤タイプの AQ$_JMS_MESSAGEを使⽤してトランザクション・イベント・キューから常にデキューすることを提案します。 顧客は、PL/SQL APIを使⽤してTransactional Event QueuesのJMSペイロードをエンキューおよびデキューし、クライア ント/サーバーのラウンドトリップを回避できます。 Transactional Event QueuesのJMSペイロードに対するPL/SQLエンキューおよびデ キューのサポート Copyright © 2021, Oracle and/or its affiliates 407
  298. TEQには、次のネイティブ・サポートがあります。 • ⾮永続サブスクライバ • JMSペイロード • 優先順位 TEQは、永続メッセージと⾮永続メッセージの両⽅をサポート TEQは、JMSの要件を満たす2種類のサブスクライバをネイティブにサポートしています。 •

    ⾮永続サブスクライバ: これらのサブスクライバは、サブスクライバがアクティブ中にメッセージがパブリッシュされた場合のみ、選択されたトピックに ついてのメッセージを受信します。このサブスクリプションは、異なるセッション間で共有できません。 • 永続サブスクライバ: これらのサブスクライバは、サブスクライバが⾮アクティブ中にパブリッシュされたメッセージを含めて、トピックについてパブリッ シュされたすべてのメッセージを受信します。複数のデータベース・セッションで、同じサブスクリプションを共有できます。 ※⾮永続メッセージはメッセージ・キャッシュ内のメモリーに格納され、ディスクには格納されません。そのため、⾮永続メッセージは、インスタ ンスのクラッシュ時や停⽌時に失われます。 Transactional Event QueuesとネイティブJMSサポート 1 Copyright © 2021, Oracle and/or its affiliates 409
  299. • TEQは、JMSペイロードの格納にADTを使⽤しない • JMSメッセージは、データベースのスカラー列に格納される • TEXT、BYTES、MAP、STREAM、OBJECTなどのJMSメッセージ・タイプは、ペイロードのサイズとタイプに応じて、 キュー表のTEXT/RAWまたはCLOB/BLOBのスカラー列にJMSペイロードを格納します。 • JMSメッセージ・プロパティは、ユーザー定義プロパティに属性アクセス機能が定義されているキュー表のCLOB (SecureFile)列に格納されます。

    • ペイロードおよびユーザー・プロパティは、ADTとして格納されずに、RAW、VARCHAR2または保護ファイル列に格納さ れます。 • JMSヘッダー・プロパティおよびJMSプロバイダ情報は、それ⾃体のスカラー列に格納されます。 TEQでは、整数の優先順位の値が0 (最も低い優先度)から9 (最も⾼い優先度)の範囲でサポートされます。デフォルトは、 JMS標準で定義されているように4です。 Transactional Event QueuesとネイティブJMSサポート 2 Copyright © 2021, Oracle and/or its affiliates 410