Oracle Database 12cとの連携でシステムの可用性がさらに向上──Oracle WebLogic Server 12c(12.1.2)の新機能1

Oracle Java & Developers編集部
2013-10-07 15:30:00
  • このエントリーをはてなブックマークに追加

2013年7月にリリースされたOracle WebLogic Server 12c(12.1.2)の目玉の1つは、Oracle Database 12cとの連携により、データベース関連の機能が大幅に強化されたことだ。5つの主な強化ポイントを紹介する。

Oracle Database 12cとの連携により、データベース関連機能が大幅に強化


日本オラクル Fusion Middleware事業統括本部ソリューション本部 Cloud Application Foundationソリューション部 シニアセールスコンサルタントの松林晶氏

 2013年7月にリリースされた「Oracle WebLogic Server 12c(12.1.2)」では、パッチセット・リリースであるのにもかかわらず、さまざまな機能強化が図られている。その中でも、Oracle WebLogic Serverならではの機能としてご注目いただきたいのが、「(Oracle Database 12cとの統合を柱とする)データベース連携機能」、「WebSocket対応機能」、「Oracle Coherenceとの連携機能」の3点だ。本企画では3回にわたり、それぞれの機能に関する強化ポイントを紹介していく。

 その初回として、今回はデータベース連携に関する強化点を紹介する。解説してくれたのは、日本オラクル Fusion Middleware事業統括本部ソリューション本部 Cloud Application Foundationソリューション部 シニアセールスコンサルタントの松林晶氏である。

 Oracle WebLogic Server 12c(12.1.2)の最大の目玉は、同じく7月にリリースされたOracle Database 12cとの統合が図られている点だ。それによって実現されるメリットとして、松林氏は次の5つを挙げる。

【Oracle WebLogic Server 12c(12.1.2)のデータベース連携関連新機能】

(1)アプリケーション処理の継続性向上(Application Continuity)
(2)コネクション・プーリングにおけるデータベース・リソース消費量の削減(Database Resident Connection Pooling)
(3)プラガブル・データベースへの対応と動的スイッチング
(4)サイトをまたいだクラスタリングのサポート(Global Data Services)
(5)Oracle Notification Serviceの自動設定(ONS Auto Configuration)

 以下、それぞれの具体的な内容を見ていこう。

(1)アプリケーション処理の継続性向上(Application Continuity)──Oracle RACの障害からアプリケーションを保護

 1つ目の強化ポイントは、障害などが起きた際にもアプリケーションの処理を継続して行う「アプリケーション継続性(Application Continuity)」が強化されたことだ。具体的には、可用性を高める目的からOracle Real Application Clusters(RAC)を使ってデータベースをクラスタ構成で運用しているシステムにおいて、アプリケーションの処理中にOracle RACノードの1つに障害が起きた際にも、ユーザー側にはエラー発生を通知することなく透過的に正常なノードへと処理を引き継ぐ機能が追加された。Application ContinuityはOracle Database 12cの新機能であり、それをOracle WebLogic Server 12c(12.1.2)でも使うことができるのだ。この機能を利用するにあたって既存アプリケーションのコードに変更を加える必要はない。


※クリックすると拡大画像が見られます

 これまでも、RACクラスタを構成するノードに障害が起きた際、他の正常稼働しているノードに接続先を切り替え、システムを止めることなく処理を継続することは可能であった。ただし、アプリケーションとの間でトランザクションが発生しているノードに障害が起きた場合には、生存ノードに対して再実行を行う処理を開発者側で作り込む必要があった (例外を捕捉して、ビジネス・ロジックを再実行するなど)。また、その際、データベースに対して2重に処理が発生しないように重複処理を避けるロジックを用意するなど、難易度の高いものであった。

 これに対して、Oracle WebLogic Server 12c(12.1.2)とOracle Database 12cの組み合わせでは、GridLinkデータソースと汎用データソースの双方に追加された新機能により、この再実行の処理が自動化される。クエリ実行中にFANイベントの通知や回復可能なエラーが発生した場合は、生存しているノードについて、データベースに対して行った処理を自動でリカバリするのだ。その際には、GridLinkデータソースがトランザクションIDを参照し、データベースに対する処理がすでにコミットされているかどうかを確認するため、一度コミットした処理が重複実行されることはない。この機能は参照と更新いずれのトランザクションにも対応する。


※クリックすると拡大画像が見られます

※クリックすると拡大画像が見られます

 この機能を利用する場合は、オラクルのサイトからOracle Database 12のJDBCドライバを入手し、Oracle WebLogic Serverに追加する必要がある。具体的には、データソース作成時に「Application Continuity」のドライバ・クラスを選択し、ドライバ・クラス名として「oracle.jdbc.replay.OracleDatabaseSourcelmpl」を指定すればよい。既存のアプリケーションに修正を加える必要のない点がポイントだ。

【Oracle Database 12cのJDBCドライバの入手先】

 「Application Continuityは、高い可用性が求められるアプリケーションを、Oracle RACのノード障害や計画停止から守るうえで非常に有効な機能です。これが標準機能として追加されたことが、Oracle WebLogic Server 12c(12.1.2)の大きな機能強化点の1つです」(松林氏)

 なお、この機能では処理のリトライ回数や、自動リプレイの有無を任意に設定することができる。コールバック関数を用意して、再実行の前に任意の処理を追加することも可能だ。

(2)コネクション・プーリングにおけるデータベース・リソース消費量の削減(Database Resident Connection Pooling)

 2つ目の強化ポイントは、「Database Resident Connection Pooling(DRCP)」をサポートした点だ。DRCPとは、Oracle Database 12cでデータベース・サーバ側に用意される接続プール機能である。

 Oracle Database 12Cでは、従来のJDBCコネクション・プールが抱えていた課題を解消するための機能強化が行われた。その課題とは、コネクション・プールにより、データベース側のリソース消費量が大きくなりがちだったことだ。

 「従来のJDBCコネクション・プールは、データベース接続時と切断時の処理オーバーヘッドが大きかったため、Oracle WebLogic Server側の接続プール数の最小値と最大値を同じ値にするなど設定の工夫により、この問題に対処していました。その結果、システムのピーク時と非ピーク時の接続処理数の差が大きなシステムでは、非ピーク時の接続プール数で大きな無駄が生じがちであり、その影響からアプリケーションのリソース拡張も行いづらい(ピーク時に合わせたキャパシティ設計では多くの無駄が生じるため)といった問題がありました」(松林氏)

 この問題を解消するためにOracle Database 11gから追加された機能がDRCPだ。


※クリックすると拡大画像が見られます

 DRCPでは、データベース側でもコネクションのためのリソースをプールする。そしてアプリケーション・サーバは、まずコネクション・ブローカに接続する。コネクション・ブローカとの接続コストは非常に低いため、データベース側のリソース消費量を抑えることができる。アプリケーション側からデータベースへの接続要求があった場合には、このブローカが、プールされたリソースの中からコネクションを割り当てるという動作を行う。これにより、データベース・サーバのリソース使用量を適正に保つと同時に、PHPなど接続プールの実装が難しい開発言語でもコネクション・プーリング機能を活用できるようになる。


※クリックすると拡大画像が見られます

※クリックすると拡大画像が見られます

 DRCPの機能を使用する場合は、Oracle Database 12c側でDRCPを有効にし、WebLogic Server管理コンソールでJDBCデータソース作成時に、プロパティ「oracle.jdbc.DRCPConnectionClass」に値を設定すればよい。すると、接続先のURLに「:POOLED」が自動的に付加され、この機能が利用できるようになる。