Slide 1

Slide 1 text

Oracle Databaseのネットワーク接続 Oracle Database Technology Night #52 日下部明 日本オラクル株式会社 2022年1月27日

Slide 2

Slide 2 text

Safe harbor statement 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とする ものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することを確約 するものではないため、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリース、時期及び価格については、弊社の裁量により決定され、変 更される可能性があります。 2 Copyright © 2022, Oracle and/or its affiliates

Slide 3

Slide 3 text

Oracle Databaseのネットワーク接続 前半: 1台のサーバー内 後半: Oracle Real Application Clusters 3 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracle インスタンス host:port/service1 service1 データベース・クライアント service1 • 負荷分散 • 接続フェイルオーバー データベース・クライアント • サービスとは? • Oracleリスナー • Oracleインスタンス

Slide 4

Slide 4 text

Copyright © 2022, Oracle and/or its affiliates 4 前半 1台のサーバー内

Slide 5

Slide 5 text

Copyright © 2022, Oracle and/or its affiliates 5 Oracle Net Services Oracle Databaseのネットワーク・コンポーネントの総称

Slide 6

Slide 6 text

Oracle Databaseのネットワーク接続に関係するコンポーネントの総称 Oracle Databaseのネットワーク接続に関わるOracle NetプロトコルやOracleリスナー・プロセスなどのコンポーネ ントの総称をOracle Net Servicesという。 OracleクライアントからOracleサーバーへの接続だけでな く、 Oracleサーバー同士を接続するDatabase Linkや Data GuardなどもOracle Net Servicesの役割。 Oracle Net Services Copyright © 2022, Oracle and/or its affiliates 6 tnslsnr Oracleクライアント Oracle Net Services Database Link Data Guard Oracleインスタンス • 共有メモリー • バックグラウンド・プロセス Oracleリスナー・プロセス • 接続リクエスト受信 データベース • ファイルの集合

Slide 7

Slide 7 text

各種言語用のOracle接続ドライバ メジャーなほとんどの言語にOracle接続ドライバがある ほとんどの言語にOracle接続ドライバがある • Oracle Proprietary Drivers • Oracle Open Source Drivers • Third Party Open Source Drivers • 多くの言語用ドライバはC言語用のOracle Call Interface (OCI)の上に実装されている Oracleプリコンパイラ 各言語のソース・コードにSQLを埋め込むとOracleにアク セスするOCIのAPIに変換したコードを出力するコンパイラ • Pro*C • Pro*COBOL 7 Copyright © 2022, Oracle and/or its affiliates 言語 API C OCI, ODBC, ODPI-C C++ OCCI Java JDBC .NET ODP.NET Node.js node-oracledb Python cx_Oracle PHP OCI8, PDO_OCI R ROracle Erlang erloci Perl DBD::Oracle Ruby ruby-oci8 Rust rust-oracle Go goracle, go-oci8 Julia Oracle.ji

Slide 8

Slide 8 text

Oracle Call Interfaceをベースとする接続ドライバ Copyright © 2022, Oracle and/or its affiliates Third Party Open Source Drivers Oracle Open Source Drivers Oracle Call Interface (OCI) Typically from Oracle Instant Client ZIPs or RPMs ODPI-C Also used by custom apps Python cx_Oracle Node.js node-oracledb Go godror Julia Oracle.jl Rust rust- oracle PHP OCI8 PHP PDO_OCI R ROracle Go go-oci8 Erlang oranif Perl DBD:: Oracle Ruby ruby- oci8 Oracle Call Interface, Oracle C++ Call Interface, ODBC, JDBC, ODP.NET, Pro*C, Pro*COBOL, SQLJ, OLE DB, OLE DB for OLAP Oracle Proprietary Drivers

Slide 9

Slide 9 text

Copyright © 2022, Oracle and/or its affiliates 9 Oracle Net Servicesはクライアントとサーバーのプラットフォームの組み合わせを選ばない マルチ・プラットフォーム Windows x64 Linux x86-64 Solaris SPARC Solaris x86 HP-UX AIX zLinux Windows x64 Linux x86-64 Solaris SPARC Solaris x86 HP-UX AIX zLinux Oracleクライアント Oracleサーバー Oracle Net

Slide 10

Slide 10 text

接続できるバージョンの組み合わせ クライアントとサーバーのバージョンが離れすぎるとサポートされない • My Oracle Support Doc ID 207303.1 (Client / Server Interoperability Support Matrix for Different Oracle Versions)に接続可能なクライアントとサーバーのバージョンの組み合わせが記載されている • Oracle7.3.4から最新リリースまでのすべての組み合わせが参照できる • バージョンが離れすぎると接続できなくなる 10 Copyright © 2022, Oracle and/or its affiliates クライアント サーバー 21c 19c 18c 12.2.0 12.1.0 11.2.0 21c Yes Yes Yes Yes Yes No 19c Yes Yes Yes Yes Yes Yes※ 18c Yes Yes Yes Yes Yes Yes※ 12.2.0 Yes Yes Yes Yes Yes Yes※ 12.1.0 Yes Yes Yes Yes Yes Yes 11.2.0 No Yes※ Yes※ Yes※ Yes Yes ※ Patch Set Release 11.2.0.3 もしくは11.2.0.4のみ Supported Extend Support Market Driven Support

Slide 11

Slide 11 text

Copyright © 2022, Oracle and/or its affiliates 11 Oracle Databaseにネットワーク経由で接続

Slide 12

Slide 12 text

Oracle Databaseサーバーの接続先を指定する記法 「サービス」に接続するという概念 接続記述子(Connect Descriptor) • Oracle Netの全パラメータを指定することが可能な記法 • これをあらかじめ定義して別名をつけておくファイルがtnsnames.ora 簡易接続(EZCONNECT) • Layer 4以下のプロトコルをTCP/IPに決め打ちし簡略化した記法 • 本番システムの高可用性構成(RACやData Guard)では使用しない 簡易接続プラス(EZCONNECT Plus) 19c以降 • EZCONNECTに接続記述子のパラメータを指定できるように拡張した記法 • 高可用性構成でも使用可能 12 Copyright © 2022, Oracle and/or its affiliates (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = hostname) (PORT = port)) (CONNECT_DATA = (SERVICE_NAME = service) ) ) hostname:port/service tnslsnr service Oracleリスナー hostname:port サービス service hostname:port/service?transport_connect_timeout=30

Slide 13

Slide 13 text

Oracleクライアントは「サービス」に接続する データベースのワークロードを抽象化した概念 13 Copyright © 2022, Oracle and/or its affiliates サービス Oracleインスタンスの名前 • INSTANCE_NAME • SID (ORACLE_SID) データベースの名前 • PDB_NAME • DB_UNIQUE_NAME • DB_NAME PDB1 PDB2 PDB3 service2 service3 Oracleクライアント host:port/service1 service1 データベースのワークロードを抽象化した概念 Oracleインスタンスの名前でもなくデータベースの名前でもない Oracle インスタンス

Slide 14

Slide 14 text

CDB 「サービス」で接続するデータベースを区別する データベースごとに一意なサービス名を持っている 14 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracleクライアント Non-CDB Oracle インスタンス1 Oracle インスタンス2 service1 service2 PDB2 PDB3 service3 host:port/service1 host:port/service2 サービス データベースごとに一意 Oracleリスナー・プロセス 1つのネットワーク・ポートで複数のサービスに対応

Slide 15

Slide 15 text

ネットワーク接続リクエストを受けるOracleリスナー・プロセスと実行エンジンのOracleインスタンスが独立 Oracle Databaseアーキテクチャ Copyright © 2022, Oracle and/or its affiliates 15 tnslsnr oracle oracle LGWR DBWn Oracleクライアント System Global Area (共有メモリー領域) Oracleリスナー・プロセス ネットワーク接続リクエストを受ける Oracleサーバー・プロセス SQL処理の主体 System Global Area 共有メモリー領域 バックグラウンド・プロセス 内部処理 データベース ストレージ上のファイル群 Oracleインスタンス

Slide 16

Slide 16 text

1本の物理コネクションが1つのOracleサーバー・プロセスと直結 専用サーバー(Dedicated Server)接続 - 最も基本的な接続形態 Copyright © 2022, Oracle and/or its affiliates 16 tnslsnr oracle LGWR DBWn Oracleクライアント System Global Area (共有メモリー領域) Oracleリスナー・プロセス ネットワーク接続リクエストを受ける (1) Oracleリスナー・プロセスに接続リクエスト着信 (2) 指定されたサービスに該当するOracleインスタンスを照合 (3) Oracleリスナー・プロセスがOracleサーバー・プロセスを fork & fork & exec (4) Oracleリスナー・プロセスが確立した物理コネクションは Oracleサーバー・プロセスが引き継ぐ (1) (3) (4) (2)

Slide 17

Slide 17 text

一般的なネットワーク・ロードバランサーとは指定の方向が逆 ネットワーク・ロード・バランサー ロード・バランサーの設定で後段のインスタンス群を指定 Oracle Database インスタンスの設定でOracleリスナー・プロセスを指定 設定方向の違い Copyright © 2022, Oracle and/or its affiliates 17 Load Balancer host1:port host2:port : hostn:port host1 host2 hostn tnslsnr tnslsnr host1:port1 host2:port2 host2:port2 instance1 instance2 host2:port2

Slide 18

Slide 18 text

Oracleインスタンス側の設定で使用するOracleリスナーを指定する 動的サービス登録 Copyright © 2022, Oracle and/or its affiliates 18 CDB2 tnslsnr データベース Oracle インスタンス LREG 初期化パラメータ listener.ora Oracleリスナーの設定はリスニングするアドレスの情報のみ Oracleインスタンスのパラメータ LREG(Lister REGistration) プロセスがサービス情報を登録 LISTENER_name = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = port)) ) ) LOCAL_LISTENER = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = port)) ※ 直接ADDRESS句を記述するのではなくtnsnames.oraファイルにエイリアスを定義してもよい

Slide 19

Slide 19 text

Oracleリスナー・プロセスが認識しているサービス: ノード・リスナー lsnrctl servicesコマンド • 1つのOracleリスナー・プロセスに複数のサービスが登録されている • サービス → インスタンス → ハンドラ の階層構造 • ハンドラとは接続形態(専用サーバー接続など)によって異なるプロセスの種類 19 Copyright © 2022, Oracle and/or its affiliates $ lsnrctl services [リスナー名] (中略) サービス"pdb19a.jp.oracle.com"には、1件のインスタンスがあります。 インスタンス"rac19a2"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready LOCAL SERVER サービス"pdb19asvcrel.jp.oracle.com"には、1件のインスタンスがあります。 インスタンス"rac19a2"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready LOCAL SERVER tnslsnr service instance handler service instance handler

Slide 20

Slide 20 text

データ・ディクショナリに登録されている Oracleインスタンスが持っているサービス Copyright © 2022, Oracle and/or its affiliates 20 SQL> select con_id,name,NETWORK_NAME from v$active_services 2 order by con_id; CON_ID NAME NETWORK_NAME ---------- -------------------- -------------------- 1 rac19aXDB rac19aXDB 1 rac19a.jp.oracle.com rac19a.jp.oracle.com 1 SYS$USERS 1 SYS$BACKGROUND 3 svcpdb19a svcpdb19a 3 svcpdb19atac svcpdb19atac 3 pdb19a pdb19a SQL> select con_id,name,NETWORK_NAME from v$active_services 2 order by con_id; CON_ID NAME NETWORK_NAME ---------- -------------------- -------------------- 3 pdb19a pdb19a 3 svcpdb19a svcpdb19a 3 svcpdb19atac svcpdb19atac ルート・コンテナに接続すると 全サービスが見える PDBに接続するとそのPDB のサービスのみが見える

Slide 21

Slide 21 text

Oracle Netの名前空間のドメイン名DB_DOMAINで修飾される Oracleリスナーに登録されるサービス名 Copyright © 2022, Oracle and/or its affiliates 21 SQL> select con_id,name,NETWORK_NAME from v$active_services 2 order by con_id; CON_ID NAME NETWORK_NAME ---------- -------------------- -------------------- 1 rac19aXDB rac19aXDB 1 rac19a.jp.oracle.com rac19a.jp.oracle.com 1 SYS$USERS 1 SYS$BACKGROUND 3 svcpdb19a svcpdb19a 3 svcpdb19atac svcpdb19atac 3 pdb19a pdb19a ルート・コンテナに接続すると 全サービスが見える データ・ディクショナリのサービス名にOracleインスタンスの 初期化パラメータDB_DOMAINで修飾したものが Oracleリスナーに登録されるサービス名 tnslsnr データ・ディクショナリ DB_DOMAIN =jp.oracle.com svcpdb19a.jp.oracle.com svcpdb19a

Slide 22

Slide 22 text

接続に関する典型的なエラー ORA-12514 Copyright © 2022, Oracle and/or its affiliates 22 tnslsnr データ・ディクショナリ DB_DOMAIN =jp.oracle.com svcpdb19a.jp.oracle.com svcpdb19a sqlplus $ sqlplus user/password@host:port/svcpdb19a ORA-12514:リスナーは接続記述子でリクエストされたサービスを現在認識していません 接続リクエストはOracleリスナーに届いたが、指定されたサービス名と合致するものがない 接続で指定しなければらなないのはOracle Net上の名前

Slide 23

Slide 23 text

Oracleリスナーに登録されるデフォルト・サービス名 サービス名のデフォルト値は(プラガブル)データベース名を継承する Copyright © 2022, Oracle and/or its affiliates 23 DB_NAME DB_UNIQUE_NAME SERVICE_NAMES DB_DOMAIN • CREATE DATABASE で指定する名前 • データベースを構成するファイルが持つ名前 • 管理操作上指定するデータベース名 • ディレクトリ名やコマンドでの指定 • サービス名のデフォルト値 • アプリケーションからの接続には使用しない PDB_NAME tnslsnr プラガブル・データベース ルート・コンテナ (またはNon-CDB構成) デフォルト値は継承 デフォルト値は継承 CREATE DATABASEの名前 CREATE PLUGGABLE DATABASEの名前

Slide 24

Slide 24 text

データベース名の階層 DB_NAMEとDB_UNIQUE_NAME Copyright © 2022, Oracle and/or its affiliates 24 REDOログ リカバリ REDOログ リカバリ 更新 プライマリ・データベース スタンバイ・データベース スタンバイ・データベース DB_UNIQUE_NAME=A1 DB_UNIQUE_NAME=A2 DB_UNIQUE_NAME=A3 Data Guardフィジカル・スタンバイの全データベースはデータ・ブロック内の構造まで全く同じになる。 DB_NAME=A 管理操作上 区別する名前は一意 データベースのファイル群 が持っている名前は共通 DB_NAME=A DB_NAME=A DB_UNIQUE_NAME DB_NAME

Slide 25

Slide 25 text

DB_UNIQUE_NAME 管理操作上区別するデータベース名 Oracleインスタンスのトレースファイル群 $ORACLE_BASE/diag/rdbms/DB_UNIQUE_NAME/SID/trace/ ASM上のOracle Managed Fileのディレクトリ構造 +ASM_DISKGROUP/DB_UNIQUE_NAME/... srvctlコマンド srvctl start database -db DB_UNIQUE_NAME 25 Copyright © 2022, Oracle and/or its affiliates

Slide 26

Slide 26 text

特殊なサービスがある Oracleリスナーに登録されないサービス Copyright © 2022, Oracle and/or its affiliates 26 SQL> select con_id,name,NETWORK_NAME from v$active_services 2 order by con_id; CON_ID NAME NETWORK_NAME ---------- -------------------- -------------------- 1 rac19aXDB rac19aXDB 1 rac19a.jp.oracle.com rac19a.jp.oracle.com 1 SYS$USERS 1 SYS$BACKGROUND 3 svcpdb19a svcpdb19a 3 svcpdb19atac svcpdb19atac 3 pdb19a pdb19a ルート・コンテナに接続すると 全サービスが見える SYS$USERS サービス名を指定せずに接続したセッションが属するサービス 例 $ sqlplus / as sysdba SYS$BACKGROUND Oracleインスタンスのバックグラウンド・プロセスが属するサービス

Slide 27

Slide 27 text

プロセスの持つ属性をグループ化してリソース管理 SGAにアタッチしているプロセスはなんらかのサービスに属している Copyright © 2022, Oracle and/or its affiliates 27 oracle oracle 共有メモリー領域 (System Global Area) LGWR DBWn プロセス ($ORACLE_HOME/bin/oracle) サービス (セッションが持つ属性) service1 SYS$BACKGROUND Oracleサーバー・プロセス バックグラウンド・プロセス

Slide 28

Slide 28 text

(g)V$SESSIONビューにSERVICE_NAME列がある サービスはセッションの属性 Copyright © 2022, Oracle and/or its affiliates 28 SQL> select service_name,program from v$session; SERVICE_NAME PROGRAM -------------------- -------------------------------------------------- ... ... SYS$BACKGROUND [email protected] (LCK1) SYS$BACKGROUND [email protected] (RECO) SYS$BACKGROUND [email protected] (MMNL) SYS$BACKGROUND [email protected] (SMCO) SYS$BACKGROUND [email protected] (ARC0) SYS$BACKGROUND [email protected] (M002) SYS$BACKGROUND [email protected] (W004) SYS$USERS [email protected] (TNS V1-V3) SYS$BACKGROUND [email protected] (Q006) SYS$BACKGROUND [email protected] (QM05) SYS$BACKGROUND [email protected] (W00E) ... ...

Slide 29

Slide 29 text

AWRレポート サービスごとの統計が出る 29 Copyright © 2022, Oracle and/or its affiliates

Slide 30

Slide 30 text

サービスでリソース制御する例: Oracle Autonomous Database リソース制限が異なる複数のサービスがあらかじめ定義されている Autonomous Databaseインスタンス(1個のプラガブル・データベース)作成時点で、接続サービスが複数定義されている。 • リソース・マネージャのコンシューマ・グループにマッピングされ、 同時実行性や並列処理等を制御 インスタンス接続時に、接続サービスを選択するだけでリソース制御が可能。 30 Copyright © 2022, Oracle and/or its affiliates 接続サービス platform 概要 パラレル制御 同時実行 セッション数 リソース割り当て (SHARES*2) TPURGENT ATP only 最も優先度の高い処理向け 手動設定 300 x OCPUs 12 TP ATP only 汎用的な処理向け シリアル 300 x OCPUs 8 HIGH ADW/ATP 大量データを扱う処理向け 自動 3 4 MEDIUM ADW/ATP 大量データを扱いつつも、 同時実行数も多い処理向け 自動 1.25 x OCPUs 2 LOW ADW/ATP 優先度が低い処理向け シリアル 300 x OCPUs 1 *1 : 同時に接続できるセッション数はOCPUに比例し、OCPU辺り300セッション *2 : サービス間でのCPU配分の相対的な優先度を示す。デフォルト値からの変更は可能 *3 : 5分以上アイドル状態の続くセッションは自動的に切断される

Slide 31

Slide 31 text

Copyright © 2022, Oracle and/or its affiliates 31 デフォルト・サービス アプリケーションからの接続には使用しないサービス

Slide 32

Slide 32 text

デフォルト・サービスをアプリケーションからの接続には使用しない アプリケーションからの接続には追加のサービスを作成する マニュアル: Oracle Database 19c Multitenant管理者ガイド https://docs.oracle.com/cd/F19136_01/multi/administering-pdbs-with-sql-plus.html#GUID-5A2471BC- 8501-4E38-BD28-7EE182F3B3A7 32 Copyright © 2022, Oracle and/or its affiliates 15.2.2.1.2 デフォルトおよびユーザー定義のサービス PDBを作成すると、PDBの新しいデフォルト・サービスが自動的に作成されます。 各データベース・サービス名は、1つのCDB内で一意である必要があり、特定のリスナーからアクセスされるインスタンスを持 つすべてのCDBのスコープ内で一意である必要があります。デフォルト・サービスの名前はPDBと同じになります。このサー ビスは、ユーザーが管理できず、管理タスクにのみ使用する必要があります。 アプリケーションには常にユーザー定義のサービスを使用します。これは、ユーザー定義のサービスはアプリケーションの要件 に適合するようにカスタマイズできるためです。デフォルトのPDBサービスをアプリケーションに使用しないことをお薦めします。

Slide 33

Slide 33 text

Oracleインスタンスとデータベースの状態遷移 Copyright © 2022, Oracle and/or its affiliates 33 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 制御ファイル 初期化パラメータ CDB PDB

Slide 34

Slide 34 text

Oracleインスタンスとデータベースの状態遷移 Copyright © 2022, Oracle and/or its affiliates 34 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 REDOログ・ファイル データファイル 初期化パラメータ CDB PDB

Slide 35

Slide 35 text

Oracleインスタンスとデータベースの状態遷移 Copyright © 2022, Oracle and/or its affiliates 35 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - OPEN MOUNT Oracle インスタンス Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 REDOログ・ファイル 5. オンラインREDOログ・ファ イルとデータファイルをオー プン 6. PDBはMOUNT状態 データファイル 初期化パラメータ CDB PDB

Slide 36

Slide 36 text

Oracleインスタンスとデータベースの状態遷移 Copyright © 2022, Oracle and/or its affiliates 36 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - OPEN MOUNT Oracle インスタンス Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 REDOログ・ファイル 5. オンラインREDOログ・ファ イルとデータファイルをオー プン 6. PDBはMOUNT状態 データファイル OPEN OPEN Oracle インスタンス 7. PDBをオープン プラガブル・データベース 初期化パラメータ CDB PDB

Slide 37

Slide 37 text

Oracleインスタンスとデータベースの状態遷移 Copyright © 2022, Oracle and/or its affiliates 37 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - OPEN MOUNT OPEN OPEN Oracle インスタンス Oracle インスタンス Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 データ・ディクショナリ REDOログ・ファイル 5. オンラインREDOログ・ファ イルとデータファイルをオー プン 6. PDBはMOUNT状態 8. データ・ディクショナリに登 録された追加のサービスを 起動 データファイル OPEN OPEN Oracle インスタンス 7. PDBをオープン プラガブル・データベース 初期化パラメータ CDB PDB

Slide 38

Slide 38 text

各サービス名が最初にOracleリスナーに登録されるタイミング デフォルト・サービス名が登録されるのはMOUNT状態 Copyright © 2022, Oracle and/or its affiliates 38 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - OPEN MOUNT OPEN OPEN Oracle インスタンス Oracle インスタンス Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 CDBデフォルト・サービス名 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 データ・ディクショナリ REDOログ・ファイル 5. オンラインREDOログ・ファ イルとデータファイルをオー プン 6. PDBはMOUNT状態 8. データ・ディクショナリに登 録された追加のサービスを 起動 データファイル OPEN OPEN Oracle インスタンス 7. PDBをオープン プラガブル・データベース tnslsnr SERVICE_NAMES PDB_NAME service PDBデフォルト・サービス名 追加したサービス 初期化パラメータ CDB PDB

Slide 39

Slide 39 text

Oracleリスナー経由でMOUNT状態のデータベースに接続する SYSユーザーのパスワード・ファイルはデータベースの外側にある 通常ユーザーで接続試行 通常ユーザーの認証情報はSYSTEM表領域に格納され ているのでOPEN状態でないと接続不可 SYSユーザーで接続試行 SYSユーザーの認証情報はパスワード・ファイルに格納さ れておりOPEN以外の状態でも接続可能 39 Copyright © 2022, Oracle and/or its affiliates $ sqlplus user/password@tnsalias SQL*Plus: Release 21.0.0.0.0 - Production on 月 1月 24 21:35:45 2022 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. ERROR: ORA-01109: データベースがオープンされていません。 ユーザー名を入力してください: $ sqlplus sys/password@tnsalias as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on 月 1月 24 21:36:51 2022 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 に接続されました。 SQL>

Slide 40

Slide 40 text

Oracleリスナー経由でMOUNT状態のデータベースに接続する MOUNT状態でのネットワーク接続が必要な場合がある Recovery Manager (RMAN) RMANで一貫性バックアップを取得 Data Guardフィジカル・スタンバイ REDOログの転送先はデフォルト・サービス名 40 Copyright © 2022, Oracle and/or its affiliates CDB2 tnslsnr データベース Oracle インスタンス rman $ rman target sys/password@tnsalias プライマリ・データベース スタンバイ・データベース MOUNT MOUNT OPEN READ WRITE REDOログ

Slide 41

Slide 41 text

デフォルト値はDB_UNIQUE_NAMEを継承 DB_DOMAIN Oracleリスナーに登録されるサービス名 デフォルト・サービスと追加したサービスを使い分ける Copyright © 2022, Oracle and/or its affiliates 41 DB_NAME DB_UNIQUE_NAME SERVICE_NAMES PDB_NAME tnslsnr プラガブル・データベース ルート・コンテナ (またはNon-CDB構成) デフォルト値はDB_NAMEを継承 CREATE DATABASEの名前 CREATE PLUGGABLE DATABASEの名前 service デフォルト・サービス • MOUNTでアクティブ • 管理系 追加したサービス • OPEN後にアクティブ • アプリケーション系 追加したサービス

Slide 42

Slide 42 text

CDB Oracleクライアントは「サービス」に接続する データベースごとに一意なサービス名を持っている Copyright © 2022, Oracle and/or its affiliates 42 tnslsnr Oracleクライアント Non-CDB Oracle インスタンス1 Oracle インスタンス2 service1 service2 PDB2 PDB3 service3 host:port/service1 host:port/service2 サービス データベースのワークロードを抽象化 Oracleリスナー・プロセス 1つのネットワーク・ポートで複数のサービスに対応 動的サービス登録 デフォルト・サービス • MOUNT状態でアクティブ • 管理系接続 追加したサービス • OPEN後にアクティブ • アプリケーション接続

Slide 43

Slide 43 text

Copyright © 2022, Oracle and/or its affiliates 43 後半 Oracle Real Application Clusters

Slide 44

Slide 44 text

1つのクライアントからの接続は1本のTCPコネクション 接続ロードバランス どのノードと接続するか 接続フェイルオーバー 障害ノードを避けて正常ノードと接続する RACは複数の物理サーバーから構成される Copyright © 2022, Oracle and/or its affiliates 44 データベース・クライアント データベース・サーバー データベース・クライアント データベース・サーバー service service

Slide 45

Slide 45 text

service 共有ストレージ・共有キャッシュ型クラスタ Oracle Real Application Clusters (RAC) Copyright © 2022, Oracle and/or its affiliates 45 ストレージ・ノード • ストレージ・デバイス コンピュート・ノード • CPU+メモリー • メモリーの一貫性を全自動で維持 全コンピュート・ノードは全ストレージにアクセス可能 データベース・クライアント • シングル・インスタンス構成と同じアクセス方法 • シングル・インスタンス構成と同様に データにアクセス可能 • インターフェースが変化しない ※RACの詳細は Oracle Database Technology Night #42

Slide 46

Slide 46 text

Copyright © 2022, Oracle and/or its affiliates 46 Oracle Real Application Clusters (RAC) のコンポーネント

Slide 47

Slide 47 text

Oracle Real Application Clusters (RAC)のコンポーネント Oracle Clusterwareによって起動・停止が管理される Copyright © 2022, Oracle and/or its affiliates 47 Clusterware Clusterware tnslsnr tnslsnr SCANリスナー tnslsnr Oracle インスタンス ASM インスタンス Oracle インスタンス ASM インスタンス データベース ストレージ上のファイル群 ノード1 ノード2 前半での説明 Oracleリスナー・プロセス ネットワーク接続リクエストを受ける SCANリスナー・プロセス ネットワーク接続リクエストを受ける Oracleインスタンス DBMS本体 ASMインスタンス クラスタ・ファイルシステム Oracle Clusterware クラスタ・メンバー管理 仮想IPアドレス OracleリスナーのIPアドレス

Slide 48

Slide 48 text

ソフトウェアのパッケージング Oracle Grid Infrastructure Copyright © 2022, Oracle and/or its affiliates 48 Oracle Clusterware Clusterware Oracle Database Oracle ASM RAC 11g Release 1まで tnslsnr Oracle Database Oracle tnslsnr シングル・インスタンス構成 • ASMインスタンスはOracleインスタン スを改造したもの • $ORACLE_HOME/bin/oracle

Slide 49

Slide 49 text

Oracle Grid Infrastructure ソフトウェアのパッケージング Oracle Grid Infrastructure Copyright © 2022, Oracle and/or its affiliates 49 ASM Clusterware Oracle Database Oracle Oracle Clusterware Clusterware Oracle Database Oracle ASM RAC 11g Release 1まで RAC 11g Release 2以降 tnslsnr tnslsnr tnslsnr Oracle Database Oracle tnslsnr シングル・インスタンス構成 • ASMインスタンスはOracleインスタン スを改造したもの • $ORACLE_HOME/bin/oracle Oracle Clusterwareに以下を同梱 • Oracleリスナー • ASMインスタンス

Slide 50

Slide 50 text

Oracle Real Application Clusters (RAC)のコンポーネント Oracle Clusterwareによって起動・停止が管理される Copyright © 2022, Oracle and/or its affiliates 50 Clusterware Clusterware tnslsnr tnslsnr SCANリスナー tnslsnr Oracle インスタンス ASM インスタンス Oracle インスタンス ASM インスタンス Oracleリスナー・プロセス ネットワーク接続リクエストを受ける データベース ストレージ上のファイル群 SCANリスナー・プロセス ネットワーク接続リクエストを受ける Oracleインスタンス DBMS本体 ASMインスタンス クラスタ・ファイルシステム Oracle Clusterware クラスタ・メンバー管理 仮想IPアドレス OracleリスナーのIPアドレス ノード1 ノード2 Oracle Database Oracle Grid Infrastructure

Slide 51

Slide 51 text

Oracle Grid Infrastructure Oracle Clusterware + Oracle Automatic Storage Management • インストールするソフトウェアの名前はOracle Grid Infrastructure • 機能階層としてはOracle ClusterwareとOracle Automatic Storage Management インストールのマニュアル • Grid Infrastructureインストレーションおよびアップグレード・ガイド for platform 機能のマニュアル • Clusterware管理およびデプロイメント・ガイド • Automatic Storage Management管理者ガイド Oracle Grid Infrastructure ASM Clusterware tnslsnr Copyright © 2022, Oracle and/or its affiliates 51

Slide 52

Slide 52 text

Oracleリスナーと仮想IPアドレス (Virtual IP address: VIP) OracleリスナーはVIPで接続リクエストを待ち受けている 仮想IPアドレス(Virtual IP address) • Oracle Clusterwareが起動と停止を管理 • Oracleリスナーが接続を待ち受けるIPアドレス • SCAN VIPとノードVIPの2種類がある 52 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス Oracle インスタンス ノード 1 ノード 2 service1 service1 tnslsnr tnslsnr tnslsnr SCANVIP 1 SCANVIP 2 SCANVIP 3 tnslsnr VIP 1 tnslsnr VIP 2 Single Client Access Name VIP (SCAN VIP) • クラスタを代表する接続リクエスト先のIPアドレス • 可用性のために複数のOracleリスナーが起動 ノードVIP (もしくは単にVIP) • 実際にセッションを確立するIPアドレス • 各ノードに固有のOracleリスナーが起動 • シングル・インスタンス構成のリスナーと同じ役割

Slide 53

Slide 53 text

サービス属性の設定 Oracle Clusterwareを操作するsrvctlコマンド 53 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス Oracle インスタンス ノード 1 ノード 2 service1 service1 Clusterware Clusterware srvctl (1) srvctlコマンド発行 (2) Oracle ClusterwareがOracleインスタンスに対して DBMS_SERVICEパッケージのプロシージャを実行 • srvctl add service ... • srvctl modify service ... • srvctl start service ... • デフォルト・サービスは操作不可 • DBMS_SERVICE.CREATE_SERVICE() • DBMS_SERVICE.MODIFY_SERVICE() • DBMS_SERVICE.START_SERVICE() • Oracle Grid Infrastructureがインストールされている 環境ではこれらのプロシージャを直接発行してはならない

Slide 54

Slide 54 text

サービス属性を設定できるのは追加したサービスのみ Oracle Clusterwareのsrvctlコマンド 54 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス Oracle インスタンス ノード 1 ノード 2 service1 service1 Clusterware Clusterware デフォルト・サービス (管理系接続) 追加したサービス (アプリケーション接続) • デフォルト・サービスは操作不可 • MOUNT状態以降で常にアクティブ • srvctlコマンドで操作可能 • OPEN状態でアクティブになる • 起動・停止 • Oracleインスタンスへの配置指定 • 接続ロード・バランス設定 • アプリケーション・コンティニュイティ SERVICE_NAMES PDB_NAME

Slide 55

Slide 55 text

Copyright © 2022, Oracle and/or its affiliates 55 接続ロードバランス

Slide 56

Slide 56 text

RACの接続ロード・バランス 物理コネクション確立のロード・バランスは2段階ある (1)接続リクエスト発行 クライアント側接続ロード・バランス 接続文字列のLOAD_BALANCE=ONは接続リクエスト を出す先の負荷分散。 複数あるSCANリスナーのどれに接続リクエストを発行する かが決まる。 (2)接続先リダイレクト サーバー側接続ロード・バランス SCANリスナーに接続リクエストを発行した場合は接続リ クエストが各ノード固有のOracleリスナーに負荷分散を考 慮してリダイレクトされる。 Oracleクライアントが実際に接続されるのはリダイレクト先 のノードのOracleインスタンス。 56 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracle インスタンス Oracle インスタンス tnslsnr ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー (1)接続リクエスト発行 Oracleクライアント (2)リダイレクト

Slide 57

Slide 57 text

接続リクエストを発行する先を決定する クライアント側ロード・バランス (Client-Side Load Balancing) Copyright © 2022, Oracle and/or its affiliates 57 Oracleクライアント tnslsnr scanvip1 tnslsnr tnslsnr scanvip2 scanvip3 接続リクエスト発行 接続先候補を複数記述しておくことができる • 複数のADDRESS句 • 接続試行先の候補はLOAD_BALANCEの設定に従う • FAILOVER=ON (デフォルト)が指定されている場合接続試行先に 失敗したら次の候補を試行する LOAD_BALANCE=ON • その下の階層の候補からランダムに1つを選択する LOAD_BALANCE=OFF (デフォルト) • 最も上から接続試行する (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip1) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip2) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip3) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) )

Slide 58

Slide 58 text

Single Client Access Name (SCAN) DNSで1つのSCANホスト名と複数のSCAN VIPが対応づけられる 58 Copyright © 2022, Oracle and/or its affiliates (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip1) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip2) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip3) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) DNSサーバー scanhost scanvip1 scanvip2 scanvip3 • SCANホスト名はDNSで複数のSCAN VIPに対応付けられ、クライアント側 接続ロード・バランスと接続時フェイルオーバーの試行先になる。 等価 (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanhost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) Oracleクライアント tnslsnr scanvip1 tnslsnr tnslsnr scanvip2 scanvip3 接続リクエスト発行

Slide 59

Slide 59 text

tnslsnr Oracle インスタンス Oracle インスタンス tnslsnr ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント (2)リダイレクト Single Client Access Name (SCAN)リスナーはどの サービスをどのOracleインスタンスが担当しているかを認 識している。 サービスがアクティブになっているOracleインスタンスに接 続リクエストをリダイレクトして負荷分散する。 RACの複数ノードに負荷分散 サーバー側接続ロード・バランス (Server-Side Connection Load Balancing) Copyright © 2022, Oracle and/or its affiliates 59 tnslsnr service1 instance1 instance2 service1の 接続先候補 (1)接続リクエスト発行

Slide 60

Slide 60 text

(2) リダイレクト指示 セッション確立とリダイレクト 動的サービス登録: Oracleリスナーの2つの役割 Copyright © 2022, Oracle and/or its affiliates 60 tnslsnr Oracle インスタンス LREG LOCAL_LISTENER tnslsnr REMOTE_LISTENER • セッション確立に使用するリスナーの指定 • 同一ノード内 • リダイレクトに使用するリスナーの指定 • 同一ノード内とは限らない • LOCAL_LISTENERの情報も登録される Oracleクライアント (1) 接続リクエスト発行 (3) 接続リクエスト発行

Slide 61

Slide 61 text

REMOTE_LISTENERでリダイレクト用Oracleリスナーを指定 動的サービス登録 Copyright © 2022, Oracle and/or its affiliates 61 tnslsnr Oracle インスタンス1 LREG LOCAL_LISTENER = (ADDRESS=(HOST=VIP1)(PORT=1521)) VIP 1 REMOTE_LISTENER =scanhost:1521 • LOCAL_LISTENERが指すのはノードVIPのリスナー • セッション確立に使用するリスナーの指定 • シングル・インスタンス構成の場合と同様の役割 • REMOTE_LISTENERが指すのはSCAN VIPのリスナー • リダイレクトに使用するリスナーの指定 • EZCONNECT記法でSCANホスト名を指す • LOCAL_LISTENERの情報も登録される scanhost scanvip1 scanvip2 scanvip3 DNSサーバー SCANリスナーはクラスタのどこかのノードで起動している tnslsnr tnslsnr tnslsnr SCANVIP 1 SCANVIP 2 SCANVIP 3

Slide 62

Slide 62 text

Oracle インスタンス3 LREG SCANリスナーにはすべてのOracleインスタンスの情報が登録される 動的サービス登録 Copyright © 2022, Oracle and/or its affiliates 62 Oracle インスタンス1 LREG Oracle インスタンス2 LREG REMOTE_LISTENER =scanhost:1521 全OracleインスタンスはSCANリスナーを 指している SCANリスナーに全Oracleインスタンスの 情報が登録される ノード1 ノード2 ノード3 tnslsnr tnslsnr tnslsnr SCANVIP 1 SCANVIP 2 SCANVIP 3 SCANリスナーはクラスタのどこかのノード で起動している

Slide 63

Slide 63 text

LOCAL_LISTENERとREMOTE_LISTENERがどこで設定されるか OracleインスタンスをNOMOUNT起動後にOracle Clusterwareが設定 Copyright © 2022, Oracle and/or its affiliates 63 Clusterware Clusterware tnslsnr tnslsnr SCANリスナー tnslsnr Oracle インスタンス ASM インスタンス Oracle インスタンス ASM インスタンス ノード1 ノード2 1. Oracle ClusterwareはOracleリスナーのリスニング・ポイントを 掌握している 2. OracleリスナーはVIPとセットで配置される 3. 初期化パラメータ「ファイル」にはLOCAL_LISTENERと REMOTE_LISTENERは設定されていない 4. Oracle ClusterwareによってNOMOUNT起動後にALTER SYSTEM SETで設定される 5. SCOPE=MEMORYなのでspfileには記録されない

Slide 64

Slide 64 text

LOCAL_LISTENERとREMOTE_LISTENERがどこで設定されるか OracleインスタンスをNOMOUNT起動後にOracle Clusterwareが設定 Copyright © 2022, Oracle and/or its affiliates 64 Oracle インスタンス Oracle インスタンス SHUTDOWN - NOMOUNT - MOUNT - OPEN MOUNT OPEN OPEN Oracle インスタンス Oracle インスタンス Oracle インスタンス 1. pfile/spfileを読んで SGA確保とプロセス起動 2. CONTROL_FILESで制 御ファイルの位置を認識 CDBデフォルト・サービス名 制御ファイル 3. 制御ファイルをオープン 4. オンラインREDOログ・ファ イルとデータファイルの位置 を認識 データ・ディクショナリ REDOログ・ファイル 5. オンラインREDOログ・ファ イルとデータファイルをオー プン 6. PDBはMOUNT状態 8. データ・ディクショナリに登 録された追加のサービスを 起動 データファイル OPEN OPEN Oracle インスタンス 7. PDBをオープン プラガブル・データベース tnslsnr SERVICE_NAMES PDB_NAME service PDBデフォルト・サービス名 追加したサービス 初期化パラメータ CDB PDB Clusterware ALTER SYSTEM SET LOCAL_LISTENER=... ALTER SYSTEM SET REMOTE_LISTENER=...

Slide 65

Slide 65 text

Oracleリスナー・プロセスが認識しているサービス(SCANリスナー) lsnrctl servicesコマンド • サービス → インスタンス → ハンドラ の階層構造 • SCANリスナーには全Oracleの情報が登録される • 1つのサービスを担当する複数のOracleインスタンスがある • ハンドラにはリダイレクト先のLOCAL_LISTENERの情報も登録されている 65 Copyright © 2022, Oracle and/or its affiliates $ lsnrctl services SCANリスナー名 (中略) サービス"pdb19a.jp.oracle.com"には、2件のインスタンスがあります。 インスタンス"rac19a2"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=10.185.151.120)(PORT=1521)) インスタンス"rac19a3"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=10.185.151.122)(PORT=1521)) tnslsnr service instance service instance handler handler

Slide 66

Slide 66 text

Oracleリスナー・プロセスが認識しているサービス: ノード・リスナー (再掲) lsnrctl servicesコマンド • 1つのOracleリスナー・プロセスに複数のサービスが登録されている • サービス → インスタンス → ハンドラ の階層構造 • ハンドラとは接続形態(専用サーバー接続など)によって異なるプロセスの種類 66 Copyright © 2022, Oracle and/or its affiliates $ lsnrctl services [リスナー名] (中略) サービス"pdb19a.jp.oracle.com"には、1件のインスタンスがあります。 インスタンス"rac19a2"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready LOCAL SERVER サービス"pdb19asvcrel.jp.oracle.com"には、1件のインスタンスがあります。 インスタンス"rac19a2"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "DEDICATED" 確立:0 拒否:0 状態:ready LOCAL SERVER tnslsnr service instance handler service instance handler

Slide 67

Slide 67 text

Oracle インスタンス3 PMON すべてのOracleリスナーにすべてのOracleインスタンスの情報が登録される 参考: Oracle Real Application Clusters 11g Release 1までの構成 Copyright © 2022, Oracle and/or its affiliates 67 Oracle インスタンス1 PMON Oracle インスタンス2 PMON REMOTE_LISTENERは全リスナーを指 している ノード1 ノード2 ノード3 tnslsnr VIP 1 tnslsnr VIP 2 tnslsnr VIP 3 REMOTE_LISTENER = (ADDRESS_LIST= (ADDRESS=(HOST=VIP1)(PORT=1521)) (ADDRESS=(HOST=VIP2)(PORT=1521)) (ADDRESS=(HOST=VIP3)(PORT=1521))) LOCAL_LISTENER = (ADDRESS=(HOST=VIP3)(PORT=1521)) LOCAL_LISTENERはノード・リスナーを 指している(11g Release 2以降と同じ) すべてのOracleリスナーがセッション確立とリダイレクトの両方の役割を兼ねる

Slide 68

Slide 68 text

Oracle インスタンス3 PMON すべてのOracleリスナーにすべてのOracleインスタンスの情報が登録される 参考: Oracle Real Application Clusters 11g Release 1までの構成 Copyright © 2022, Oracle and/or its affiliates 68 Oracle インスタンス1 PMON Oracle インスタンス2 PMON ノード1 ノード2 ノード3 tnslsnr VIP 1 tnslsnr VIP 2 tnslsnr VIP 3 REMOTE_LISTENER = (ADDRESS_LIST= (ADDRESS=(HOST=VIP1)(PORT=1521)) (ADDRESS=(HOST=VIP2)(PORT=1521)) (ADDRESS=(HOST=VIP3)(PORT=1521))) LOCAL_LISTENER = (ADDRESS=(HOST=VIP3)(PORT=1521)) Oracleクライアント (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = vip1) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = vip2) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = vip3) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) • クライアントは全VIPを列挙する • EZCONNECT記法が使えない

Slide 69

Slide 69 text

tnslsnr Oracle インスタンス Oracle インスタンス tnslsnr ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント (2)リダイレクト サービスの負荷配分情報もリスナーに登録される REMOTE_LISTENERでSCANリスナーを指す サービスの属性 CLB_GOALとGOAL DBA_SERVICESなどの列 • CLB_GOAL: 物理コネクションの設定 • GOAL: ロード・バランシング・アドバイザの設定 サービスの設定 $ srvctl add service -db DB_UNIQUE_NAME -pdb PDB_NAME -service servicename -clbgoal 物理コネクションの設定 -rlbgoal ロード・バランシング・アドバイザの設定 リダイレクト先を決める負荷分散アルゴリズムはサービスの属性 サーバー側接続ロード・バランス (Server-Side Connection Load Balancing) Copyright © 2022, Oracle and/or its affiliates 69 (1)接続リクエスト発行

Slide 70

Slide 70 text

tnslsnr Oracle インスタンス Oracle インスタンス tnslsnr ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント (2)リダイレクト サーバー側接続ロード・バランス (Server-Side Connection Load Balancing) リダイレクト先を決める負荷分散アルゴリズムはサービスの属性 Copyright © 2022, Oracle and/or its affiliates 70 CLB_GOAL (物理コネクション) GOAL (アドバイザリ) LONG - 各インスタンスのセッション数を均等 SHORT SERVICE_TIME SQLコール時間最小化 THROUGHPUT SQLコール数最大化 NONE CPU負荷(アドバイザリなし) (1)接続リクエスト発行 • CLB_GOAL=LONGがデフォルトでセッション数均等化 • CLB_GOAL=SHORTはロード・バランシング・アドバイザに従う • アルゴリズムの指定ができるのは追加したサービスのみ

Slide 71

Slide 71 text

コネクション・プール Pool Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 サーバー側接続ロード・バランス設定の使い分け リダイレクト先を決める負荷分散アルゴリズムはサービスの属性 都度接続(コネクション・プールしない) 71 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 Oracleクライアント アプリケーション・サーバー tnslsnr SCAN リスナー tnslsnr CLB_GOAL=SHORTでアドバイザ に従ってリダイレクト先を選択 CLB_GOAL=LONGでセッション数 を均等にリダイレクトする

Slide 72

Slide 72 text

Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 ロード・バランシング・アドバイザ SQL実行性能を観測し最適な負荷配分比率のガイドを生成 Copyright © 2022, Oracle and/or its affiliates 72 OracleインスタンスがSQL実行性能を直接観測している GV$SERVICEMETRIC(_HISTORY)ビューの抜粋 列 説明 SERVICE_NAME サービス名 INST_ID Oracleインスタンス番号 DBTIMEPERCALL 1コール当たりの経過時間(マイクロ秒) CALLSPERSEC 1秒当たりのユーザー・コールの数 GOAL=SERVICE_TIME DBTIMEPERCALL最小化 GOAL=THROUGHPUT CALLSPERSEC最大化 database=orcl service=service1 { {instance=orcl2 percent=60 flag=UNKNOWN aff=FALSE} {instance=orcl1 percent=40 flag=UNKNOWN aff=FALSE} } timestamp=2012-07-06 13:19:12 各Oracleインスタンスへの最適なリクエスト比率を算出

Slide 73

Slide 73 text

コネクション・プール Pool Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 ランタイム接続ロード・バランス (Runtime Connection Load Balancing: RCLB) ロードバランシング・アドバイザの算出した負荷配分に従う 都度接続(コネクション・プールしない) 73 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 Oracleクライアント アプリケーション・サーバー ロードバランシング・アドバイザの比率 に従って物理コネクションを選択 スレッド tnslsnr SCAN リスナー tnslsnr ロードバランシング・アドバイザの比率 に従ってリダイレクト先を選択 CLB_GOAL=LONGでセッション数 を均等にリダイレクトする

Slide 74

Slide 74 text

高速アプリケーション通知 (Fast Application Notification: FAN) Oracle ClusterwareからOracleクライアントにメッセージ通知する仕組み ONS (Oracle Notification Service)プロセス • Oracle Clusterwareからクライアントへメッセージ伝搬を担う • コネクション・プールからONSプロセスに接続 • SQL実行用コネクションとは別 Fast Application Notification (FAN) • Oracle Clusterwareからクライアントにイベント通知 • Runtime Load Balancing (RLB)イベント • UP/DOWNイベント Oracle製コネクション・プールがFAN対応 • Universal Connection Pool for Java (UCP) • OCI Session Pool • ODP.NET Unmanaged Driver 74 Copyright © 2022, Oracle and/or its affiliates Connection Pool ノード 1 ノード 2 アプリケーション・サーバー Clusterware Clusterware ons ons FANイベント FANイベント

Slide 75

Slide 75 text

Copyright © 2022, Oracle and/or its affiliates 75 接続フェイルオーバー

Slide 76

Slide 76 text

新規コネクション確立時の接続リクエスト失敗 Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント 接続フェイルオーバー機能 確立済みコネクションの異常切断 76 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント oracle

Slide 77

Slide 77 text

新規コネクション確立時の接続リクエスト失敗 接続時フェイルオーバー (Connect-Time Failover: CTF) 77 Copyright © 2022, Oracle and/or its affiliates Oracleクライアント tnslsnr scanvip1 tnslsnr tnslsnr scanvip2 scanvip3 接続リクエスト発行 接続先候補を複数記述しておくことができる • 複数のADDRESS句 • 接続試行先の候補はLOAD_BALANCEの設定に従う • FAILOVER=ON (デフォルト)が指定されている場合接続試行先に 失敗したら次の候補を試行する LOAD_BALANCE=ON • その下の階層の候補からランダムに1つを選択する LOAD_BALANCE=OFF (デフォルト) • 最も上から接続試行する (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip1) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip2) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip3) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) )

Slide 78

Slide 78 text

SCANホスト名の指定は複数の接続先候補があると解釈される DNSで1つのSCANホスト名と複数のSCAN VIPが対応づけられる 78 Copyright © 2022, Oracle and/or its affiliates (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip1) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip2) (PORT = 1521)) (ADDRESS = (PROTOCOL = TCP) (HOST = scanvip3) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) DNSサーバー scanhost scanvip1 scanvip2 scanvip3 • SCANホスト名はDNSで複数のSCAN VIPに対応付けられ、クライアント側 接続ロード・バランスと接続時フェイルオーバーの試行先になる。 • EZCONNECT記法 scanhostname:port/serviceは LOAD_BALANCE=OFFかつFAILOVER=ONと解釈される 等価 (DESCRIPTION = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanhost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) Oracleクライアント tnslsnr scanvip1 tnslsnr tnslsnr scanvip2 scanvip3 接続リクエスト発行

Slide 79

Slide 79 text

確立済みコネクションの異常切断 (透過的)アプリケーション・コンティニュイティ / (Transparent) Application Continuity Copyright © 2022, Oracle and/or its affiliates 79 Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント oracle 1. 自動再接続 2. トランザクション状態の確認 3. トランザクション自動再実行 サービスの設定 srvctl modify service ... -failovertype TRANSACTION | AUTO 対応クライアント • JDBCリプレイ・ドライバ (+UCP) • OCI Session Pool • ODP.NET Unmanaged Driver ※これらのコネクション・プールはFAN対応クライアントでもある ※アプリケーション・コンティニュイティの詳細は Oracle Database Technology Night #39

Slide 80

Slide 80 text

Copyright © 2022, Oracle and/or its affiliates 80 ネットワーク越しの異常検出 TCPの異常系の挙動とその対処

Slide 81

Slide 81 text

新規コネクション確立時の接続リクエスト失敗 Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント 接続フェイルオーバー機能 (再掲) 確立済みコネクションの異常切断 81 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント oracle

Slide 82

Slide 82 text

新規コネクション確立時の接続リクエスト失敗 Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント 接続フェイルオーバー機能 (再掲) 確立済みコネクションの異常切断 82 Copyright © 2022, Oracle and/or its affiliates tnslsnr Oracle インスタンス1 Oracle インスタンス2 ノード 1 ノード 2 service1 service1 tnslsnr SCAN リスナー Oracleクライアント oracle 暗黙の前提 異常を検出したら、異常に対処する機能が発動する

Slide 83

Slide 83 text

異常を検出したら、異常に対処する機能が発動する Copyright © 2022, Oracle and/or its affiliates 83 異常を検出 異常に対処 • 接続時フェイルオーバー • アプリケーション・コンティニュイティ

Slide 84

Slide 84 text

異常を検出したら、異常に対処する機能が発動する Copyright © 2022, Oracle and/or its affiliates 84 異常を検出 異常に対処 • 接続時フェイルオーバー • アプリケーション・コンティニュイティ データベース・クライアント データベース・サーバー ネットワーク越しの異常検出

Slide 85

Slide 85 text

TCP/IPの異常系の挙動 (1) OS以下が正常でユーザー空間のプロセスが異常終了するとOSが応答する 新規コネクション確立時の接続リクエスト失敗 確立済みコネクションの異常切断 85 Copyright © 2022, Oracle and/or its affiliates tnslsnr sqlplus OS Hardware OS Hardware OS sqlplus SYN RST 一瞬で検出 oracle sqlplus OS Hardware OS Hardware OS sqlplus FIN 一瞬で検出

Slide 86

Slide 86 text

TCP/IPの異常系の挙動 (2) OS以下が異常で無応答になる場合 送信時 受信待ち時 86 Copyright © 2022, Oracle and/or its affiliates tnslsnr sqlplus OS Hardware OS Hardware OS connect() write() タイムアウト oracle sqlplus OS Hardware OS Hardware ずっと待ち read() ACKがない ので再送

Slide 87

Slide 87 text

Oracle Clusterwareによる正常性監視 OSを即時停止する場合がある Oracle Clusterware • インターコネクト・ネットワークと共有ストレージを介してOracle Clusterware同士が正常性確認を行っている • 異常検出の内容によってはOSを即時停止する場合 がある • OSが即時停止されるノード上のプロセスはTCP FINフラグを送信するチャンスもない • 通信相手からは無応答になる 87 Copyright © 2022, Oracle and/or its affiliates ノード 1 ノード 2 Clusterware Clusterware OS OS OS即時停止

Slide 88

Slide 88 text

Oracleリスナーと仮想IPアドレス (Virtual IP address: VIP) (再掲) OracleリスナーはVIPで接続リクエストを待ち受けている 仮想IPアドレス(Virtual IP address) • Oracle Clusterwareが起動と停止を管理 • Oracleリスナーが接続を待ち受けるIPアドレス • SCAN VIPとノードVIPの2種類がある 88 Copyright © 2022, Oracle and/or its affiliates Oracle インスタンス Oracle インスタンス ノード 1 ノード 2 service1 service1 tnslsnr tnslsnr tnslsnr SCANVIP 1 SCANVIP 2 SCANVIP 3 tnslsnr VIP 1 tnslsnr VIP 2 Single Client Access Name VIP (SCAN VIP) • クラスタを代表する接続リクエスト先のIPアドレス • 可用性のために複数のOracleリスナーが起動 ノードVIP (もしくは単にVIP) • 実際にセッションを確立するIPアドレス • 各ノードに固有のOracleリスナーが起動 • シングル・インスタンス構成のリスナーと同じ役割

Slide 89

Slide 89 text

仮想IPアドレスのフェイルオーバー ノード障害を検出するとOracle Clusterwareによって正常ノードに移動される Copyright © 2022, Oracle and/or its affiliates 89 ノード 1 ノード 2 SCANVIP 1 SCANVIP 2 VIP 1 VIP 2 Clusterware Clusterware SCANVIP 3 ノード 1 ノード 2 SCANVIP 1 SCANVIP 2 VIP 1 VIP 2 Clusterware Clusterware SCANVIP 3 フェイルオーバー

Slide 90

Slide 90 text

TCP/IPの異常系の挙動 (2) 仮想IPアドレスのフェイルオーバーによる対処 何かが送信されるとVIPがRST応答を返す Copyright © 2022, Oracle and/or its affiliates 90 送信時 tnslsnr sqlplus OS Hardware OS Hardware connect() write() 異常検出 RST OS Hardware VIPフェイルオーバー完了 VIPがアクティブになった後は 一瞬でRST応答を返す VIP ACKがない ので再送

Slide 91

Slide 91 text

TCP/IPの異常系の挙動 (3) TCP keepaliveによる受信待ちからの送信への変形 OS以下が異常で無応答になる場合 送信時 受信待ち時 91 Copyright © 2022, Oracle and/or its affiliates oracle sqlplus OS Hardware OS Hardware OS タイムアウト oracle sqlplus OS Hardware OS Hardware ずっと待ち read() ACKがない ので再送 keepalive プローブ送信 TCP keepalive有効化

Slide 92

Slide 92 text

Oracleクライアント側でのTCP keepalive有効化 ENABLE=BROKENとTCP keepaliveタイマーの調整 Copyright © 2022, Oracle and/or its affiliates 92 (DESCRIPTION = (ENABLE=BROKEN) (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP) (HOST = scanhost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = service_name) ) ) Oracleクライアント (1)接続記述子にENABLE=BROKENを追加するとTCP keepaliveが有効になる 異常検出 RST VIPフェイルオーバー完了 VIPがアクティブになった後は 一瞬でRST応答を返す VIP ACKがないので再送 最後の正常応答 TCP keepaliveタイマー デフォルト値 7200秒 (2)要調整 TCP keepalive probe

Slide 93

Slide 93 text

ノード 1 ノード 2 tnslsnr 1 SCAN VIP1 SCANリスナーのフェイルオーバー SCAN VIPがフェイルオーバーするとSCANリスナーもフェイルオーバーする Copyright © 2022, Oracle and/or its affiliates 93 Clusterware Clusterware ノード 1 ノード 2 tnslsnr 1 SCAN VIP1 Clusterware Clusterware フェイルオーバー tnslsnr 1 SCAN VIP1 • SCAN VIPとSCANリスナーはセットで正常ノードで起動する • フェイルオーバー先のノードで接続リクエストを受信

Slide 94

Slide 94 text

tnslsnr 2 tnslsnr 1 ノード 1 ノード 2 ノード・リスナーはフェイルオーバーしない ノードVIPがフェイルオーバーしてもノード・リスナーはフェイルオーバーしない Copyright © 2022, Oracle and/or its affiliates 94 Clusterware Clusterware VIP 1 VIP 2 ノード 1 ノード 2 Clusterware Clusterware • VIP 1のみフェイルオーバーする • ノード・リスナーはフェイルオーバーしない • VIP 1はRST応答を返すためだけにいる • ノード1が正常起動したらVIP 1はいつでもフェイルバックできる tnslsnr 2 tnslsnr 1 1 フェイルオーバー フェイルバック

Slide 95

Slide 95 text

Connection Pool TCP/IPの異常系の挙動 (2) 高速接続フェイルオーバーによる対処 Oracle ClusterwareからOracleクライアントにメッセージ通知する仕組み ONS (Oracle Notification Service)プロセス • Oracle Clusterwareからクライアントへメッセージ伝搬を担う • コネクション・プールからONSプロセスに接続 • SQL実行用コネクションとは別 Fast Application Notification (FAN) • Oracle Clusterwareからクライアントにイベント通知 • Runtime Load Balancing (RLB)イベント • UP/DOWNイベント Oracle製コネクション・プールがFAN対応 • Universal Connection Pool for Java (UCP) • OCI Session Pool • ODP.NET Unmanaged Driver 95 Copyright © 2022, Oracle and/or its affiliates ノード 1 ノード 2 アプリケーション・サーバー Clusterware Clusterware ons ons FANイベント DOWNイベントへの対応 高速接続フェイルオーバー FANイベント

Slide 96

Slide 96 text

Connection Pool TCP/IPの異常系の挙動 (2) 高速接続フェイルオーバーによる対処 高速接続フェイルオーバー (Fast Connection Failover: FCF) 96 Copyright © 2022, Oracle and/or its affiliates ノード 1 ノード 2 Clusterware Clusterware ons ons FANイベント (1) Oracle Clusterware • サービス停止/ノード停止を検出すると停止対象を記述した FAN DOWNイベントを発行 (2) FAN対応コネクション・プール • 各物理コネクションがどのサービス/Oracleインスタンス/ノード に接続しているか把握している • DOWNイベントに記述されている該当コネクションを破棄 • サーバー側の異常検出

Slide 97

Slide 97 text

異常を検出したら、異常に対処する機能が発動する ネットワーク越しの異常検出 Copyright © 2022, Oracle and/or its affiliates 97 異常を検出 異常に対処 • 接続時フェイルオーバー • アプリケーション・コンティニュイティ • TCP FIN/RST応答 • 仮想IPアドレス(VIP) • TCP keepalive • 高速接続フェイルオーバー(FCF)

Slide 98

Slide 98 text

サービスはデータベースのワークロードを抽象化した概念 Oracle Database 10gからの概念 Copyright © 2022, Oracle and/or its affiliates 98 Oracleバージョン 機能 Oracle9i • Real Application Clusters • サービスがクラスタ構成を抽象化 • Data Guard • DB_UNIQUE_NAME Oracle Database 10g Release 1 • サービスがデータベースのワークロードを抽象化 • Automatic Workload Repository • Oracle Clusterware • Automatic Storage Management • Fast Application Notification (JDBC thinドライバ) • 高速接続フェイルオーバー Oracle Database 10g Release 2 • Fast Application Notification (OCI/ODP.NET) • ランタイム接続ロード・バランス • セッション数均等化がデフォルト Oracle Database 11g Release 1 • Universal Connection Pool for Java Oracle Database 11g Release 2 • Oracle Grid Infrastructure • Single Client Access Name Oracle Database 12c Release 1 • Multitenant Architecture • アプリケーション・コンティニュイティ (JDBC thinドライバ) Oracle Database 12c Release 2 • アプリケーション・コンティニュイティ (OCI/ODP.NET)

Slide 99

Slide 99 text

Copyright © 2022, Oracle and/or its affiliates 99 サービスがデータベースのワークロードを抽象化

Slide 100

Slide 100 text

Oracle Autonomous Database Exadataをベースにして高度な抽象化がなされた自律型データベース・サービス Exadata上のプラガブル・データベース 指定する変数はOCPU数とストレージ容量のみ Oracle Computing Unit (OCPU) 1 OCPUは1CPU物理コアに相当 スケールアップかつスケールアウトを抽象化 • OCPU数に比例したCPU時間 • OCPU数に比例したメモリー容量 • OCPU数に比例したストレージ性能 無停止でOCPU数(リソース割り当て)を変更 100 Copyright © 2022, Oracle and/or its affiliates

Slide 101

Slide 101 text

サービスでリソース制御する例: Oracle Autonomous Database (再掲) リソース制限が異なる複数のサービスがあらかじめ定義されている Autonomous Databaseインスタンス(1個のプラガブル・データベース)作成時点で、接続サービスが複数定義されている。 • リソース・マネージャのコンシューマ・グループにマッピングされ、 同時実行性や並列処理等を制御 インスタンス接続時に、接続サービスを選択するだけでリソース制御が可能。 101 Copyright © 2022, Oracle and/or its affiliates 接続サービス platform 概要 パラレル制御 同時実行 セッション数 リソース割り当て (SHARES*2) TPURGENT ATP only 最も優先度の高い処理向け 手動設定 300 x OCPUs 12 TP ATP only 汎用的な処理向け シリアル 300 x OCPUs 8 HIGH ADW/ATP 大量データを扱う処理向け 自動 3 4 MEDIUM ADW/ATP 大量データを扱いつつも、 同時実行数も多い処理向け 自動 1.25 x OCPUs 2 LOW ADW/ATP 優先度が低い処理向け シリアル 300 x OCPUs 1 *1 : 同時に接続できるセッション数はOCPUに比例し、OCPU辺り300セッション *2 : サービス間でのCPU配分の相対的な優先度を示す。デフォルト値からの変更は可能 *3 : 5分以上アイドル状態の続くセッションは自動的に切断される

Slide 102

Slide 102 text

Oracle Autonomous Database Oracle Computing Unit(OCPU) の1変数にハードウェア・リソースを抽象化 102 Copyright © 2022, Oracle and/or its affiliates DBサーバー ストレージ Oracle Computing Unit (OCPU) • 1 OCPUは1CPU物理コアに相当 • スケール・アップかつスケール・アウトを抽象化 • OCPU数に比例したCPU時間 • OCPU数に比例したメモリー容量 • OCPU数に比例したストレージ性能 • 無停止でOCPU数(リソース割り当て)を変更 CPU メモリー Autonomous Databaseインスタンス • 1つのプラガブル・データベースのこと • OCPUに抽象化されたリソース割り当て • サービスでリソース制御 スケール・アップ スケール・アウト サービス • データベースのワークロードを抽象化 service

Slide 103

Slide 103 text

Thank you 103 Copyright © 2022, Oracle and/or its affiliates

Slide 104

Slide 104 text

Our mission is to help people see data in new ways, discover insights, unlock endless possibilities.

Slide 105

Slide 105 text

No content