(57)【要約】【課題】共用ディスククラスタ型のデータベース管理システムが備えている共用ディスクに対するデータアクセスを、障害発生の影響を有効に回避し且つ低負荷で実行可能にする。【解決手段】アプリケーションノードＢにおけるデータベースインスタンス振分制御管理部Ｂ２５が、通常のデータベースアクセスを実行する動作の過程でデータベースサーバコネクションプール部Ｂ２２全体の稼働状況を管理して、コネクションプール部Ｂ２２の状況に基づいてデータベースインスタンス振分管理テーブルＢ２３１に記録されている情報を書き換えて、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の稼動状態を管理する。【選択図】図１
2009110439.tif 000002
【特許請求の範囲】
【請求項１】
業務処理に係るデータを格納した共用ディスクと、この共用ディスクに格納されたデータへのアクセス処理を行うデータベースサーバインスタンスを有する複数のデータベースサーバノードと、利用者による操作に応じて業務処理要求を発行するクライアントノードと、この業務処理要求を受けて業務処理を実行する業務アプリケーションを有するアプリケーションサーバノードと、を備えたデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードは、前記データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルと、このデータベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスの中から前記業務アプリケーションに利用させるデータベースサーバインスタンスを選出する振分制御管理部とを備え、
前記振分制御管理部は、前記選出したデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするデータベースアクセスシステム。
【請求項２】
前記請求項１に記載のデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードにおける前記振分制御管理部は、前記データベースアクセスに対するエラーの発生に際して、当該アクセスのリトライを予め設定された回数実行し、このリトライが全て失敗した場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースアクセスに係るデータベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするデータベースアクセスシステム。
【請求項３】
前記請求項２に記載のデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードは、前記各データベースサーバインスタンスとの接続を予め確立してコネクションオブジェクトを生成し前記データベースサーバインスタンス毎に複数のコネクションオブジェクトをプーリングするデータベースコネクションプール部を備え、
前記振分制御管理部が、前記選出したデータベースサーバインスタンスに対応するコネクションオブジェクトを前記データベースコネクションプール部から取得して前記業務アプリケーションに利用させることを特徴とするデータベースアクセスシステム。
【請求項４】
前記請求項３に記載のデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードは、前記データベースサーバインスタンス毎に対応するコネクションオブジェクトの状態を示す情報が記録されたコネクション状態サマリ管理テーブルを備え、
前記振分制御管理部が、前記データベースアクセスのリトライが全て失敗した場合に、当該アクセスに用いたコネクションオブジェクトの状態を異常と判断して、前記コネクション状態サマリ管理テーブルに記録された係るデータベースサーバインスタンスの異常コネクション数の値に１を加算し、この異常コネクション数の値が予め設定された閾値を超えた場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするデータベースアクセスシステム。
【請求項５】
前記請求項４に記載のデータベースアクセスシステムにおいて、
前記振分制御管理部が実行するリトライの回数は、発生するエラーの内容毎に設定された回数であることを特徴とするデータベースアクセスシステム。
【請求項６】
前記請求項５に記載のデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードは、前記データベースインスタンス状態管理テーブルに稼動状態が異常であると記録されているデータベースサーバインスタンスに対して一定間隔でアクセスを試みて、接続に成功したデータベースサーバインスタンスは稼動状態が正常であると判断し、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が正常であるという内容に更新するタイマー監視部を備えたことを特徴とするデータベースアクセスシステム。
【請求項７】
前記請求項６に記載のデータベースアクセスシステムにおいて、
前記アプリケーションサーバノードは、前記共用ディスクに格納されたデータに設定されたプライマリキーに対応付けて前記データベースサーバインスタンスが優先順位を付して記録されたデータベースインスタンス振分管理テーブルを備え、
前記振分制御管理部は、前記データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスで尚且つ前記データベースインスタンス振分管理テーブルにおいて前記クライアントノードからの業務処理要求に含まれるプライマリキーに対応する優先順位の最も高いデータベースサーバインスタンスを前記業務アプリケーションに接続させるデータベースサーバインスタンスとして選出することを特徴とするデータベースアクセスシステム。
【請求項８】
共用ディスクへのアクセス処理を行うデータベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続し前記データベースサーバインスタンス経由でデータにアクセスして業務処理を実行する業務アプリケーションを有するアプリケーションサーバノードにおいて、
前記データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルと、このデータベースインスタンス状態管理テーブルに稼動状態が正常と記録されているデータベースサーバインスタンスの中から前記業務アプリケーションに利用させるデータベースサーバインスタンスを選出する振分制御管理部とを備え、
前記振分制御管理部が、前記選出したデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするアプリケーションサーバノード。
【請求項９】
前記請求項８に記載のアプリケーションサーバノードにおいて、
前記振分制御管理部が、前記データベースアクセスに対するエラーの発生に際して、当該アクセスのリトライを予め設定された回数実行し、このリトライが全て失敗した場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするアプリケーションサーバノード。
【請求項１０】
前記請求項９に記載のアプリケーションサーバノードにおいて、
前記各データベースサーバインスタンスとの接続を予め確立してコネクションオブジェクトを生成し前記データベースサーバインスタンス毎に複数のコネクションオブジェクトをプーリングするデータベースコネクションプール部と、前記データベースサーバインスタンス毎に対応するコネクションオブジェクトの状態を示す情報が記録されたコネクション状態サマリ管理テーブルとを備え、
前記振分制御管理部が、前記データベースアクセスのリトライが全て失敗した場合に、当該アクセスに用いたコネクションオブジェクトの状態を異常と判断して、前記コネクション状態サマリ管理テーブルに記録された係るデータベースサーバインスタンスの異常コネクション数の値に１を加算し、この異常コネクション数の値が予め設定された閾値を超えた場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするアプリケーションサーバノード。
【請求項１１】
前記請求項１０に記載のアプリケーションサーバノードにおいて、
前記データベースインスタンス状態管理テーブルに稼動状態が異常であると記録されているデータベースサーバインスタンスに対して一定間隔でアクセスを試みて、接続に成功したデータベースサーバインスタンスは稼動状態が正常であると判断し、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が正常であるという内容に更新するタイマー監視部を備えたことを特徴とするアプリケーションサーバノード。
【請求項１２】
前記請求項１１に記載のアプリケーションサーバノードにおいて、
前記共用ディスクに格納されたデータに設定されたプライマリキーに対応付けて前記データベースサーバインスタンスが優先順位を付して記録されたデータベースインスタンス振分管理テーブルを備え、
前記振分制御管理部が、前記データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスで尚且つ前記データベースインスタンス振分管理テーブルにおいてクライアントノードからの業務処理要求に含まれるプライマリキーに対応する優先順位の最も高いデータベースサーバインスタンスを前記業務アプリケーションに利用させるデータベースサーバインスタンスとして選出することを特徴とするアプリケーションサーバノード。
【請求項１３】
クライアントノードが利用者による操作に応じて業務処理要求を発行する業務処理要求ステップと、この業務処理要求に従ってデータベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続し前記データベースサーバインスタンス経由で共用ディスクにアクセスして業務処理を実行する業務処理実行ステップとを設け、
この業務処理実行ステップは、前記データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルを参照する状態管理テーブル参照ステップと、
前記データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスの中から前記業務処理の際に利用するデータベースサーバインスタンスを選出するインスタンス選出ステップと、
このインスタンス選出ステップにより選出されたデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新するテーブル情報更新ステップと、
を有することを特徴とするデータベースアクセス方法。
【請求項１４】
前記請求項１３に記載のデータベースアクセス方法において、
前記業務処理実行ステップは、前記データベースアクセスに対するエラーの発生に際して当該アクセスのリトライを予め設定された回数実行するリトライ実行ステップを有し、
前記テーブル情報更新ステップでは、前記リトライ実行ステップでのリトライが全て失敗した場合に、係るデータベースサーバインスタンスの稼動状態を異常と示すように前記データベースインスタンス状態管理テーブルに記録されている情報を更新することを特徴とするデータベースアクセス方法。
【請求項１５】
前記請求項１４に記載のデータベースアクセス方法において、
前記各データベースサーバインスタンスとの接続を予め確立してコネクションオブジェクトを生成し前記データベースサーバインスタンス毎に複数のコネクションオブジェクトをプーリングするプーリングステップを前記業務処理実行ステップ前に設け、
前記業務処理実行ステップは、前記インスタンス選出ステップで選出されたデータベースサーバインスタンスに対応するコネクションオブジェクトを前記プーリングした中から取得するコネクションオブジェクト取得ステップを有することを特徴とするデータベースアクセス方法。
【請求項１６】
前記請求項１５に記載のデータベースアクセス方法において、
前記テーブル情報更新ステップでは、前記リトライ実行ステップでのリトライが全て失敗した際に、用いたコネクションオブジェクトの状態を異常と判断し、予め記憶された係るデータベースサーバインスタンスの異常コネクション数の値に１を加算し、この異常コネクション数の値が予め設定された閾値を超えた場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とするデータベースアクセス方法。
【請求項１７】
前記請求項１６に記載のデータベースアクセス方法において、
前記データベースインスタンス状態管理テーブルに稼動状態が異常であると記録されているデータベースサーバインスタンスに対して一定間隔でアクセスを試みて、接続に成功したデータベースサーバインスタンスは稼動状態が正常であると判断し、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が正常であるという内容に更新するタイマー監視ステップを設けたことを特徴とするデータベースアクセス方法。
【請求項１８】
前記請求項１７に記載のデータベースアクセス方法において、
前記業務処理実行ステップは、前記共用ディスクに格納されたデータに設定されたプライマリキーに対応付けて前記データベースサーバインスタンスが優先順位を付して記録されたデータベースインスタンス振分管理テーブルを参照する振分管理テーブル参照ステップを有し、
前記インスタンス選出ステップでは、前記業務処理要求に含まれるプライマリキーに対応する優先順位の最も高いデータベースサーバインスタンスで且つ前記データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスを選出することを特徴とするデータベースアクセス方法。
【請求項１９】
データベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続し前記データベースサーバインスタンス経由で共用ディスクにアクセスして業務処理を実行する業務アプリケーション機能と、
前記データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルを参照し稼動状態が正常と記録されているデータベースサーバインスタンスの中から前記業務アプリケーション機能で利用するデータベースサーバインスタンスを選出するインスタンス選出機能と、
前記インスタンス選出機能により選出されたデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新するテーブル情報更新機能とをコンピュータに実行させることを特徴とするデータベースアクセス用プログラム。
【請求項２０】
前記請求項１９に記載のデータベースアクセス用プログラムにおいて、
前記データベースアクセスに対するエラーの発生に際し、予め設定された回数のリトライを実行するリトライ実行機能と共に、
前記テーブル情報更新機能を、前記リトライが全て失敗した場合に、係るデータベースサーバインスタンスの稼動状態が異常であるという内容に前記データベースインスタンス状態管理テーブルに記録されている情報を更新する機能として前記コンピュータに実行させることを特徴とするデータベースアクセス用プログラム。
【請求項２１】
前記請求項２０に記載のデータベースアクセス用プログラムにおいて、
前記各データベースサーバインスタンスとの接続を予め確立してコネクションオブジェクトを生成し前記データベースサーバインスタンス毎に複数のコネクションオブジェクトをプーリングするコネクションプーリング機能と共に、
前記インスタンス選出機能を、前記選出したデータベースサーバインスタンスに対応するコネクションオブジェクトを前記プーリングされた中から取得して前記業務アプリケーション機能で使用させる機能として前記コンピュータに実行させることを特徴とするデータベースアクセス用プログラム。
【請求項２２】
前記請求項２１に記載のデータベースアクセス用プログラムにおいて、
前記テーブル情報更新機能が、前記リトライ実行機能によるリトライが全て失敗した際に、用いたコネクションオブジェクトの状態を異常と判断して、予め記憶された係るデータベースサーバインスタンスの異常コネクション数の値に１を加算し、この異常コネクション数の値が予め設定された閾値を超えた場合に、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新する機能であることを特徴とするデータベースアクセス用プログラム。
【請求項２３】
前記請求項２２に記載のデータベースアクセス用プログラムにおいて、
前記データベースインスタンス状態管理テーブルに稼動状態が異常であると記録されているデータベースサーバインスタンスに対して一定間隔でアクセスを試み、接続に成功したデータベースサーバインスタンスは稼動状態が正常であると判断し、前記データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が正常であるという内容に更新するタイマー監視機能を前記コンピュータに実行させることを特徴とするデータベースアクセス用プログラム。
【請求項２４】
前記請求項２３に記載のデータベースアクセス用プログラムにおいて、
前記インスタンス選出機能が、前記共用ディスクに格納されたデータに設定されたプライマリキーに対応付けて前記データベースサーバインスタンスが優先順位を付して記録されたデータベースインスタンス振分管理テーブルを参照し、前記データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスで尚且つ前記データベースインスタンス振分管理テーブルにおいて業務処理要求に含まれるプライマリキーに対応する優先順位の最も高いデータベースサーバインスタンスを前記業務アプリケーション機能でデータベースアクセスに利用するデータベースサーバインスタンスとして選出する機能であることを特徴とするデータベースアクセス用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共用ディスククラスタ型のデータ管理システムを利用したデータベースアクセスシステム及びデータベースアクセス方法，データベースアクセス用プログラムに関する。
【背景技術】
【０００２】
共有データを管理しそのデータに対するアクセス要求に応答するデータベース管理システムにおいて、データが格納される１つの共用ディスクに対して複数のデータベースサーバインスタンスがアクセスする構成の共用ディスククラスタ型のデータベース管理システムがよく使用されている。共用ディスククラスタ型のデータベース管理システムがよく使用される理由は、データベースアクセス処理を行うデータベースサーバインスタンスを多重化することにより、システムの耐障害性や性能が向上するからである。
【０００３】
しかし、複数のデータベースサーバインスタンスから１つの共用ディスクにアクセスできる構成にはデメリットもある。複数のデータベースサーバインスタンスが同一のデータにアクセスするような場合、アクセスの競合が発生し、システムの性能が悪化する場合があるからである。これを防ぐ方式として、アプリケーション・パーティショニングという設計手法が導入されている。
【０００４】
アプリケーション・パーティショニングにはいくつかの実現手法があるが、典型的なものとして、同一のプライマリキーのデータに対しては同一のデータベースサーバインスタンス経由でアクセスするようにアプリケーションレベルでデータベースコネクションの取得を制御する方法がある。しかし、この方法を単にアプリケーションレベルで振分を行う方法としたのでは、共用ディスククラスタ型のデータベースの強みである耐障害性の強さを生かすことができないので、データベースサーバインスタンスの稼動状態を管理して、振分対象のデータベースサーバインスタンスが障害中の場合は、正常に稼動している他のデータベースサーバインスタンス経由でデータベースアクセスを行うといった仕組みが必要とされている。
【０００５】
このようなアプリケーション・パーティショニングの実現手法として、本発明者は既に特許文献１で１つの手法を開示している。特許文献１に開示された手法は、データベースサーバインスタンス振り分け制御部が、アクセス要求の対象であるデータに係るプライマリキーに基づいて利用するデータベースサーバインスタンスを決定するためのデータベースインスタンス振分管理テーブルと、データベースサーバインスタンスの稼動状態が正常であるか異常であるかを管理するデータベースインスタンス状態管理テーブルとを有し、定期的にデータベースサーバノードの稼動状態を監視してデータベースインスタンス状態管理テーブルの記録情報を変更するデータベースサーバインスタンス監視部と連携して、アプリケーションが利用するデータベースコネクションを振り分ける方法である。
【０００６】
この特許文献１に開示されたシステムは概略以下のように動作する。まず、業務アプリケーションはデータベースアクセスする際、利用するデータのプライマリキーに該当する情報をデータベースインスタンス振分制御部に渡す。データベースサーバインスタンス振り分け制御部は、データベースサーバインスタンス振り分け管理テーブルを参照し、プライマリキーの値に従ってデータベースアクセスに使用するデータベースサーバインスタンスの候補を選出する。更にその選出した中でデータベースインスタンス状態管理テーブルにおいて正常に稼動していると記録されているデータベースサーバインスタンスをチェックし、正常なデータベースサーバインスタンスのうち、優先度が高く定義されているデータベースサーバインスタンスに対するコネクションを業務アプリケーションに返却する。また、データベースインスタンス状態管理テーブルに記録される情報は、データベースサーバインスタンス監視部によって更新される。
【０００７】
【特許文献１】特開２００７−２０６９１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記した特許文献１に記載のシステムは、次のような問題点を有している。第一の問題点は、データベースインスタンス監視部のポーリング間隔の適切な設定が難しい点である。データベースインスタンス監視部は定期的に各データベースサーバインスタンスへのヘルスチェックを行う必要があるが、この監視間隔が短すぎる場合、システムの負荷が上がり問題となる。一方で、この監視間隔を長くしすぎると、データベースサーバインスタンスの障害検出が遅れ、データベースインスタンス状態管理テーブルの変更が遅れるため、データベースサーバインスタンス障害発生時のデータベース切替が遅れ、業務アプリケーションの障害時間が長くなる。この最適な設定が難しいという問題があった。
【０００９】
第二の問題点は、データベースサーバインスタンス監視部とデータベースサーバインスタンス状態監視テーブルの整合性を取ることが難しい点である。通常、データベースサーバインスタンス監視部は、独立した専用の監視ミドルウェア等に実装することが多いが、一方で、データベース振り分け制御部は、トランザクション処理を行うアプリケーションサーバ製品（ＢＥＡ社のＷｅｂＬｏｇｉｃ，ＮＥＣ社のＷｅｂＯＴＸなど）に実装されることが多く、データベース監視部とは独立したプロセスに実装されるケースが多い。こうした場合、データベースサーバがダウンして、データベース監視部がデータベース障害を検出しても、アプリケーションサーバ製品の停止中などの理由によりデータベースサーバインスタンス状態監視テーブルの状態が変更できない場合が生じてしまう。データベースサーバインスタンス監視部はデータベースサーバ障害検出時にのみ、データベースインスタンス状態管理テーブルの状態を変更するので、データベースインスタンス状態管理テーブルの更新が行われず、不整合が発生することがある。
【００１０】
第三の問題点は、障害の発生に弱い点である。通常、データベースアクセスでは各種障害時に多数のエラーが発生するが、そのエラーの多くは一時的な不具合によるものであり、実際によく使われるデータベースでは、エラーの７割程度は一時的な不具合によるものといわれている。一時的な不具合にも、業務アプリケーションにエラーを返却するデータベースアクセスシステムは、障害に弱くシステムの性能が低下しているといえるので、対策が必要とされる。
【００１１】
そこで、本発明は、上記関連技術の有する問題点を改善し、共用ディスククラスタ型のデータベース管理システムが備えている共用ディスクに対するデータアクセスを、障害発生の影響を有効に回避し且つ低負荷で実行可能にするデータベースアクセスシステムを提供することを、その目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明のデータベースアクセスシステムは、業務処理に係るデータを格納した共用ディスクと、この共用ディスクに格納されたデータへのアクセス処理を行うデータベースサーバインスタンスを有する複数のデータベースサーバノードと、利用者による操作に応じて業務処理要求を発行するクライアントノードと、この業務処理要求を受けて業務処理を実行する業務アプリケーションを有するアプリケーションサーバノードと、を備えたデータベースアクセスシステムであり、アプリケーションサーバノードは、データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルと、このデータベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスの中からクライアントノードからの業務処理要求に基づいて業務アプリケーションに利用させるデータベースサーバインスタンスを選出する振分制御管理部とを備え、この振分制御管理部は、選出したデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とする。
【００１３】
また、本発明のアプリケーションサーバノードは、共用ディスクへのアクセス処理を行うデータベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続しデータベースサーバインスタンス経由でデータにアクセスして業務処理を実行する業務アプリケーションを有し、データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルと、このデータベースインスタンス状態管理テーブルに稼動状態が正常と記録されているデータベースサーバインスタンスの中から業務アプリケーションに利用させるデータベースサーバインスタンスを選出する振分制御管理部とを備え、この振分制御管理部が、選出したデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新することを特徴とする。
【００１４】
次に、本発明のデータベースアクセス方法は、クライアントノードが利用者による操作に応じて業務処理要求を発行する業務処理要求ステップと、この業務処理要求に従ってデータベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続しデータベースサーバインスタンス経由で共用ディスクにアクセスして業務処理を実行する業務処理を実行する業務処理実行ステップとを設け、この業務処理実行ステップは、データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルを参照する状態管理テーブル参照ステップと、データベースインスタンス状態管理テーブルに稼動状態が正常であると記録されているデータベースサーバインスタンスの中から業務処理の際に利用するデータベースサーバインスタンスを選出するインスタンス選出ステップと、このインスタンス選出ステップにより選出されたデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合に、データベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新するテーブル情報更新ステップとを有することを特徴とする。
【００１５】
本発明のデータベースアクセス用プログラムは、共用ディスクへのアクセス処理を行うデータベースサーバインスタンスを有する複数のデータベースサーバノードのうちの１つと接続しデータベースサーバインスタンス経由でデータにアクセスして業務処理を実行する業務アプリケーション機能と、データベースサーバインスタンス毎にその稼動状態が正常か異常かを示す状態情報が記録されたデータベースインスタンス状態管理テーブルを参照し稼動状態が正常と記録されているデータベースサーバインスタンスの中から業務アプリケーション機能で利用するデータベースサーバインスタンスを選出するインスタンス選出機能と、インスタンス選出機能により選出されたデータベースサーバインスタンスを経由するデータベースアクセスに対してエラーが発生した場合にデータベースインスタンス状態管理テーブルに記録されている情報を当該データベースサーバインスタンスの稼動状態が異常であるという内容に更新するテーブル情報更新機能とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１６】
本発明は以上のように構成しているため、これにより、通常のデータベースアクセスを実行する動作の過程で当該アクセスに利用したデータベースサーバインスタンスの稼働状況を判断するので、複数あるデータベースサーバインスタンスの稼動状態をシステムに対して新たに負荷をかけることなく監視することができ、それにより、障害発生の影響を有効に回避し安定してデータベースアクセスを実行することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明における一実施形態を、図面を参照して説明する。
【００１８】
図１を参照すると、本実施形態は、利用者による操作に応じて業務処理要求を発行するクライアントノードＡ−１〜Ａ−ｎ（ｎは自然数）と、この業務処理要求を受けて業務処理を実行するアプリケーションサーバノードＢと、データベース処理を行うためのデータベース管理システムＣとから構成されているデータベースアクセスシステムである。
【００１９】
クライアントノードＡ−１〜Ａ−ｎのいずれかから発信された業務処理要求は、アプリケーションサーバノードＢで処理され、データベースサーバ管理システムＣにおいて実際にディスクに書き込まれる。
【００２０】
データベース管理システムＣは、データベース（ＤＢ）サーバノードＣ１−１，Ｃ１−２，Ｃ１−３及び共用ディスクＣ２，エラーコード定義ファイルＣ３を有している。データベース管理システムＣは、共用クラスタ型のデータベース管理システムであり、１つの共用ディスクＣ２に対して複数のデータベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３が同時にアクセス可能な構成である。
【００２１】
共用ディスクＣ２は、業務処理に係るデータＣ２１を格納する。共用ディスクＣ２においては、データＣ２１を記憶する際に、データＣ２１内の各データセットに設定したプライマリキーの値に基づいてデータ・パーティショニングをしておく。データ・パーティショニングとは、プライマリキーの値に基づいてデータの格納領域を区分けするデータベース管理の技術で、通常のデータベース管理システムの機能により実現可能である。
【００２２】
本実施形態では、図１に示すように、プライマリキーの値を１から５００まで設定し、プライマリキーの範囲を１００ごとに分離して、データ・パーティショニングを実現している。これにより、プライマリキーの値が１から１００までの範囲をパーティション１，１０１から２００までの範囲をパーティション２，２０１から３００までの範囲をパーティション３，３０１から４００までの範囲をパーティション４，４０１から５００までの範囲をパーティション５として、共用ディスクＣ２内のデータＣ２１を５つのパーティションに分割している。
【００２３】
データベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３それぞれは、共用ディスクＣ２に格納されたデータＣ２１へのアクセス処理を行うデータベース（ＤＢ）サーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３を有している。本実施形態では、データベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３それぞれが１つずつデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３を有しているが、１つのデータベースサーバノードに複数のデータベースサーバインスタンスを備えた構成でもよい。データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３は、処理要求されたデータを共用ディスクＣ２に書き込む機構であり、例えば、通常ＵＮＩＸ（登録商標）やＷｉｎｄｏｗｓ（登録商標）上のプロセスとして実装されている機構である。
【００２４】
エラーコード定義ファイルＣ３は、データベース管理システムＣで発生するエラーに対するエラーコードが定義されたファイルである。これはデータベース管理システムＣのベンダが提供する。
【００２５】
アプリケーションサーバノードＢは、クライアントノードＡ−１〜Ａ−ｎのいずれかから発信された業務処理要求を受けて業務処理を実行する業務アプリケーションＢ１と、業務処理を行うために必要なデータベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３へのコネクションを管理するデータベース（ＤＢ）インスタンス振分制御部Ｂ２と、データベースインスタンス振分制御部Ｂ２の振り分けポリシーを定義するデータベース（ＤＢ）サーバインスタンス振分定義情報ファイルＢ３と、データベースアクセス時に発生するエラーのエラーコードに対するリトライ回数を定義したエラーコード・リトライ定義ファイルＢ４と、データベースサーバノードの切替を行うための異常コネクション数の閾値を定義するデータベース（ＤＢ）切替閾値定義ファイルＢ５とを有している。
【００２６】
データベースインスタンス振分制御部Ｂ２は、業務アプリケーションＢ１と接続して情報の受け渡しをするデータベース（ＤＢ）コネクション取得インターフェースＢ２１と、データベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３それぞれに対応して複数のデータベースコネクションオブジェクトＢ２２２を事前にプーリングしておくデータベース（ＤＢ）コネクションプール部Ｂ２２と、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３のうちのどれと業務アプリケーションＢ１とを接続させるか決定し、データベースコネクションプール部Ｂ２２から対応するデータベースコネクションオブジェクトＢ２２２を取得して業務アプリケーションＢ１に渡すデータベース（ＤＢ）インスタンス振分制御管理部Ｂ２５と、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３のうちのどれに対応したデータベースコネクションオブジェクトＢ２２２を業務アプリケーションＢ１に渡すかを決定するためにデータベースインスタンス振分制御管理部Ｂ２５が参照する内部テーブル群であるデータベース（ＤＢ）振分制御管理テーブルＢ２３と、データベースサーバノードＣ１−１，Ｃ１−２，Ｃ１−３の障害時に一定間隔で復旧チェックを行うタイマー監視部Ｂ２６とを有している。
【００２７】
データベースコネクションプール部Ｂ２２は、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３へのコネクションの管理部であり、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３それぞれに対して、コネクション機能を持つデータベースコネクションオブジェクトＢ２２２を複数プーリングしている。これにより、１つのデータベースサーバインスタンスＣ１１−ｊ（ｊは１，２，３のいずれか１つ）は、多数のクライアントノードＡ−１〜Ａ−ｎからの要求に応じて処理を実行することができる。このデータベースコネクションオブジェクトＢ２２２は、データベースインスタンス振分制御部Ｂ２が起動した時に、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３それぞれとの接続を確立して生成される。
【００２８】
データベース振分制御管理テーブルＢ２３は、業務アプリケーションＢ１が利用するデータのプライマリキーとそのデータのアクセスに利用するデータベースサーバインスタンスＣ１１−ｊとが対応付けて記録されたデータベース（ＤＢ）インスタンス振分管理テーブルＢ２３１と、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の稼動状態が正常か異常かを示す状態情報が記録されたデータベース（ＤＢ）インスタンス状態管理テーブルＢ２３２と、データベースコネクションオブジェクトＢ２２２の個々の状態を示すデータベース（ＤＢ）コネクション状態管理テーブルＢ２３３と、データベースコネクション状態管理テーブルＢ２３３のサマリ情報を管理するデータベース（ＤＢ）コネクション状態サマリ管理テーブルＢ２３４と、エラーコード定義ファイルＢ４の情報をメモリに読み込んだエラーコード・リトライ定義テーブルＢ２３５とを有している。
【００２９】
図２にデータベースインスタンス振分管理テーブルＢ２３１の一例を示す。データベースインスタンス振分管理テーブルＢ２３１は、プライマリキー，プライマリデータベースサーバインスタンスＩＤ，セカンダリデータベースサーバインスタンスＩＤの３つの列を持つ。プライマリデータベースサーバインスタンスとは、通常、データにアクセスするデータベースサーバインスタンスで、セカンダリデータベースサーバインスタンスとは、プライマリデータベースサーバインスタンスが障害中の場合に、代わりにデータベースアクセスするデータベースサーバインスタンスである。
【００３０】
本実施形態では、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３のＩＤをそれぞれＤＢ１，ＤＢ２，ＤＢ３と設定しており、図２に示す例においては、プライマリキー「０〜１００」に対応するパーティションにアクセスするプライマリデータベースサーバインスタンスをＩＤ「ＤＢ１」のデータベースサーバインスタンスＣ１１−１に設定し、セカンダリデータベースサーバインスタンスをＩＤ「ＤＢ２」のデータベースサーバインスタンスＣ１１−２に設定したことを示している。
【００３１】
このデータベースインスタンス振分管理テーブルＢ２３１は、業務アプリケーションＢ１がデータＣ２１にアクセスする際、アクセスするデータのプライマリキーを指定し、そのプライマリキーの値に応じてデータベースアクセスに利用するデータベースサーバインスタンスＣ１１−ｊを決定するためのテーブルデータである。データベースインスタンス振分管理テーブルＢ２３１は、データベースインスタンス振分情報定義ファイルＢ３の内容をメモリに読み込んだテーブルである。
【００３２】
図３にデータベースインスタンス状態管理テーブルＢ２３２の一例を示す。データベースインスタンス状態管理テーブルＢ２３２は、データベースサーバインスタンスＩＤとデータベースサーバインスタンスの稼動状態との２つの列を持つ。データベースサーバインスタンスＩＤは、データベースインスタンス振分情報定義ファイルＢ３の内容を基に作成され、稼動状態は、正常又は異常の２つの状態のいずれか１つを示す。データベースインスタンス状態管理テーブルＢ２３２は、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３それぞれの稼動状態が正常か異常かを示す状態情報が記録されている。この稼動状態を示す情報はデータベースインスタンス振分制御管理部Ｂ２５によって変更される。
【００３３】
図４にデータベースコネクション状態管理テーブルＢ２３３の一例を示す。データベースコネクション状態管理テーブルＢ２３３は、データベースサーバインスタンスＩＤ，データベースサーバインスタンスに対するデータベースコネクションオブジェクトのＩＤであるデータベースコネクションオブジェクトＩＤと、その状態が正常か異常かを示す情報、の３つの列を持つ。データベースコネクションオブジェクトＩＤは、データベースコネクションオブジェクトＢ２２２が生成される際に割り当てられるＩＤである。データベースコネクションオブジェクトの状態を示す情報は、データベースインスタンス振分制御管理部Ｂ２５によって変更される。
【００３４】
図５にデータベースコネクション状態サマリ管理テーブルＢ２３４の一例を示す。データベースコネクション状態サマリ管理テーブルＢ２３４は、データベースサーバインスタンスＩＤ，全コネクション数，異常コネクション数，データベース切替閾値の４つの列を持つ。これは、データベースコネクション状態管理テーブルＢ２３３におけるデータベースコネクションオブジェクトＢ２２２の状態のサマリ情報を表すテーブルである。異常コネクション数とは、データベースサーバインスタンスＣ１１−ｊの個々に対応して生成された複数のデータベースコネクションオブジェクトＢ２２２のうち、異常状態にあるものの数を表す。また、データベース切替閾値とは、異常コネクションの数がデータベース切替閾値を超えたデータベースサーバインスタンスＣ１１−ｊについて、データベースインスタンス振分制御管理部Ｂ２５が、その稼動状態を異常と判断するための閾値である。このデータベース切替閾値は、データベース切替閾値定義ファイルＢ５より読み込んだ値であり、利用者の操作によって予めデータベース切替閾値定義ファイルＢ５に記録された値である。
【００３５】
図６にエラーコード・リトライ定義テーブルＢ２３５の一例を示す。エラーコード・リトライ定義テーブルＢ２３５は、エラーコード，リトライ回数の２つの列を持つ。これは、エラーコード・リトライ定義ファイルＢ４を読み込んでメモリ内に展開したテーブルである。
【００３６】
データベースインスタンス振分制御管理部Ｂ２５は、データベースインスタンス状態管理テーブルＢ２３１に稼動状態が正常であると記録されている中からクライアントノードＡ−ｎからの業務処理要求に基づいて業務アプリケーションＢ２に利用させるデータベースサーバインスタンスＣ１１−ｊを選出し、このデータベースサーバインスタンスＣ１１−ｊに対応するコネクションオブジェクトＢ２２２をデータベースコネクションプール部Ｂ２２から取得する。この選出したデータベースサーバインスタンスＣ１１−ｊを経由するデータベースアクセスに対してエラーが発生した場合に、エラーコード・リトライ定義テーブルＢ２３５を参照し、エラーコードに基づいた回数のリトライを実行する。
【００３７】
全てのリトライが失敗した場合、当該データベースアクセスに不具合ありと判断し、利用したコネクションオブジェクトＢ２２２の状態を異常と判断して、コネクション状態サマリ管理テーブルＢ２３４に記録された係るデータベースサーバインスタンスＣ１１−ｊの異常コネクション数の値に１を加算する。そして、この異常コネクション数の値がデータベース切替閾値を超えた場合には、そのデータベースインスタンス状態管理テーブルＢ２３１に記録されている情報を、そのデータベースサーバインスタンスＣ１１−ｊの稼動状態が「異常」であるという内容に更新する。
【００３８】
このように、本実施形態では、データベースインスタンス振分制御管理部Ｂ２５が、通常のデータベースアクセスを実行する動作の過程で、データベースサーバコネクションプール部Ｂ２２全体での稼働状況を管理して、データベースサーバコネクションプール部Ｂ２２の状況に基づいてデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の稼動状態を管理するため、システムに対して新たな負荷をかけずに、アプリケーション・パーティショニングを実現することができる。また、データベース管理システムＣから発信されるエラーコードを管理し、エラーコードに応じた回数のリトライを行うため、一時的な障害に強いシステムを構築している。
【００３９】
タイマー監視部Ｂ２６は、データベースインスタンス状態管理テーブルＢ２３１に稼動状態が「異常」であると記録されているデータベースサーバインスタンスＣ１１−ｊに対して一定間隔でアクセスを試みて、このアクセスにより接続を確立したデータベースサーバインスタンスＣ１１−ｊの稼動状態を正常と判断し、データベースインスタンス状態管理テーブルＢ２３１に記録されている情報を、このデータベースサーバインスタンスの稼動状態が「正常」であるという内容に更新する。
【００４０】
このように、稼動状態が「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊだけに対して定期的に監視することで、全てのデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３を定期的に監視する場合より、システムに対する負荷を抑えることができる。
【００４１】
ここで、本実施形態におけるデータベースコネクションプール部Ｂ２２と、データベースインスタンス振分制御管理部Ｂ２５と、タイマー監視部Ｂ２６とについては、その機能内容をプログラム化してコンピュータに実行させるように構成してもよい。
【００４２】
次に、本実施形態の各構成要素の関連について説明する。
【００４３】
共用ディスクＣ２においては、データＣ２１を記憶する際に、データＣ２１内の各データセットに設定したプライマリキーの値に基づいてデータ・パーティショニングをしておく。データ・パーティショニングとは、プライマリキーの値に基づいてデータの格納領域を区分けするデータベースの技術で、通常のデータベースの機能により実現可能である。図１の例では、プライマリキーの範囲を１から５００とし、プライマリキーの範囲を１００ごとに分離して、データ・パーティショニングを実現している。これにより、プライマリキーの値が１から１００までの範囲をパーティション１，１０１から２００までの範囲をパーティション２，２０１から３００までの範囲をパーティション３，３０１から４００までの範囲をパーティション４，４０１から５００までの範囲をパーティション５とすることにより、共用ディスクＣ２内のデータを５つのパーティションに分割することができる。
【００４４】
データベースインスタンス振分情報定義ファイルＢ３には、共用ディスクＣ２内の１つのパーティションに対して、そこにアクセスするためのデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３のいずれかが予め定義されている。本実施形態では、通常のデータベースアクセスに利用するものをプライマリデータベースサーバインスタンスとし、プライマリデータベースサーバインスタンスに障害がある場合に用いるものをセカンダリーデータベースサーバインスタンスとして、１つのパーティションに対して２つのデータベースサーバインスタンスＣ１１−ｊを定義しておく。このデータベースインスタンス振分情報定義ファイルＢ３の内容は、データベースインスタンス振分管理テーブルＢ２３１内に読み込まれる。
【００４５】
業務アプリケーションＢ１は、業務処理を実行する際、クライアントノードＡ−ｎからの業務処理要求に含まれたプライマリキーの値（店舗番号など）を指定してデータベースインスタンス振分制御部Ｂ２へデータベースコネクション取得要求を送信する。データベースインスタンス振分制御部Ｂ２におけるデータベースインスタンス振分制御管理部Ｂ２５は、データベースインスタンス振分管理テーブルＢ２３１を参照し、データベースコネクション取得インターフェースＢ２１を介して受けた要求に含まれるプライマリキーの値を基に対応するデータベースパーティションを選択し、共用ディスクＣ２にアクセスするためのデータベースサーバインスタンスＣ１１−ｊを決定する。
【００４６】
データベースインスタンス振分制御管理部Ｂ２５は、この決定したデータベースサーバインスタンスＣ１１−ｊの状態をデータベースインスタンス状態管理テーブルＢ２３２を参照して確認し、「正常」状態であれば、このデータベースサーバインスタンスＣ１１−ｊに対応するデータベースコネクションオブジェクトＢ２２２をデータベースコネクションプール部Ｂ２２から取得する。データベースインスタンス振分制御管理部Ｂ２５は、取得したデータベースコネクションオブジェクトＢ２２２を使用してデータベースサーバインスタンスＣ１１−ｊにアクセスを行い、正常に接続できた場合に、そのデータベースコネクションオブジェクトＢ２２２をデータベースコネクション取得インターフェースＢ２１を介して業務アプリケーションＢ１へ渡す。
【００４７】
業務アプリケーションＢ１は、取得したデータベースコネクションオブジェクトＢ２２２を使用してデータベースサーバインスタンスＣ１１−ｊに接続し、共用ディスクＣ２のデータＣ２１を参照／更新する。これにより、データベースサーバインスタンスが複数ある場合でも、データＣ２１のうちの特定のパーティションに属するデータにアクセスするデータベースサーバインスタンスＣ１１−ｊは特定のものとなり、データアクセス競合をなくすことができる。
【００４８】
データベースサーバインスタンスＣ１１−ｊがダウンしているなど、データベース管理システムＣに何らかの障害が発生している場合、データベースインスタンス振分制御管理部Ｂ２５がデータベースアクセスを行った時にエラーが発生する。この時、データベース管理システムＣは、エラーコード定義ファイルＣ３に定義されているエラーコードをデータベースインスタンス振分制御管理部Ｂ２５に返却する。このエラーコードは通常データベースサーバＣ１を提供するベンダによって定義されている。
【００４９】
エラーには、リトライ可能なエラーとリトライ不能なエラーがあるため、予めエラーコード・リトライ定義ファイルＢ４に、エラーコードと対応するリトライ回数を定義しておく。データベースインスタンス振分制御管理部Ｂ２５は、この定義されたリトライ回数だけデータベースアクセスをリトライする。リトライにより接続に成功したら、このコネクションオブジェクトＢ２２２を業務アプリケーションＢ１に渡す。リトライしても接続に失敗した場合、この該当するコネクションオブジェクトＢ２２２の稼動状態を「異常」であると示すようにデータベースコネクション状態管理テーブルＢ２３３に記録された情報を変更し、データベースコネクション状態サマリ管理テーブルＢ２３４における対応するデータベースサーバインスタンスＣ１１−ｊの異常コネクション数の値に１を加算する。
【００５０】
この特定のデータベースコネクションオブジェクトＢ２２２によるデータベースアクセスの失敗は、このデータベースコネクションオブジェクトＢ２２２に起因するものなのか（例えば、オブジェクトが壊れている）、データベースサーバインスタンスＣ１１−ｊやデータベースサーバノードＣ１−ｊに起因するものなのかの判別が困難である。そのため、異常コネクションの数が閾値を超えたデータベースサーバインスタンスＣ１１−ｊについて、その稼動状態を異常と判断するようにし、この異常コネクション数の閾値をポリシーとしてテータベース切替閾値定義ファイルＢ６に定義しておく。データベースインスタンス振分制御管理部Ｂ２５は、異常コネクション数がこの閾値を超えたデータベースサーバインスタンスＣ１１−ｊに関してその状態が異常であると判断し、データベースインスタンス状態管理テーブルＢ２３２におけるデータベースサーバインスタンスＣ１１−ｊの状態を「異常」に更新する。
【００５１】
データベースインスタンス振分制御管理部Ｂ２５は、業務アプリケーションＢ１からデータベースコネクション取得要求を受けた場合に、プライマリデータベースサーバインスタンスの状態が「異常」であるとデータベースインスタンス状態管理テーブルＢ２３２に記録されていれば、セカンダリデータベースサーバインスタンスに対応したデータベースコネクションオブジェクトＢ２２２を取得し業務アプリケーションＢ１へ返却する。これによりプライマリデータベースサーバインスタンスの障害時であっても、業務アプリケーションＢ１は業務処理を実行可能である。
【００５２】
また、データベースインスタンス振分制御管理部Ｂ２５は、データベースインスタンス状態管理テーブルＢ２３２においてデータベースサーバインスタンスＣ１１−ｊの状態を「異常」に変更した場合、これをタイマー監視部Ｂ２６へ通知する。
【００５３】
タイマー監視部Ｂ２６は、「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊへのデータベースアクセスを、一定時間毎に試みる。接続が確立した場合、タイマー監視部Ｂ２６は、データベースインスタンス状態管理テーブルＢ２３２における該当データベースサーバインスタンスＣ１１−ｊの状態を「正常」に更新し、データベースコネクションプール部Ｂ２２において、該当するデータベースサーバインスタンスＣ１１−ｊに対応するデータベースコネクションオブジェクトＢ２２２を再生成させる。
【００５４】
次に、本実施形態のデータベースアクセスシステムの全体動作について説明する。ここで、以下の動作説明は、本発明のデータベースアクセス方法の一実施形態となるので、データベースアクセス方法の各ステップを示して説明する。
【００５５】
業務処理開始前の事前作業について、図１を参照して説明する。共用ディスクＣ２にデータを格納する際、プライマリキーに基づいてデータ・パーティショニングをしておく。図１の例では、プライマリキーの範囲を１から５００として、プライマリキーの範囲を１００ごとに分離し、データ・パーティショニングを実現している。
【００５６】
また、システムの起動前に、データベースインスタンス振分情報定義ファイルＢ３を定義しておく。図７にデータベースインスタンス振分情報定義ファイルＢ３の一例を示す。図７に示すとおり、データベースインスタンス振分情報定義ファイルＢ３のフォーマットはプライマリキー，プライマリデータベースサーバインスタンスＩＤ，セカンダリデータベースサーバインスタンスＩＤ，である。データベースインスタンス振分情報定義ファイルＢ３を定義することで、データ・パーティショニングに係るプライマリキーの範囲に対して、その各範囲の領域にアクセスするプライマリデータベースサーバインスタンス及びセカンダリデータベースサーバインスタンスを設定する。
【００５７】
本実施形態では、共用ディスクＣ２にアクセスする３つのデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３にそれぞれにＩＤとしてＤＢ１，ＤＢ２，ＤＢ３を設定し、データベースインスタンス振分情報定義ファイルＢ３にはこれらを定義する。データベースインスタンス振分制御部Ｂ２は、データベースインスタンス振分情報定義ファイルＢ３の内容を読み込み、データベースインスタンス振分管理テーブルＢ２３１に展開する。従って、データベースインスタンス振分管理テーブルＢ２３１のフォーマットは、図２に示すように、データベースインスタンス振分情報定義ファイルＢ３と同じである。
【００５８】
データベースコネクションプール部Ｂ２２は、データベースインスタンス振分制御部Ｂ２が起動した時に、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３それぞれとの接続を確立してデータベースコネクションオブジェクトＢ２２２を
生成する。そして、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３それぞれに対して、複数のデータベースコネクションオブジェクトＢ２２２をプーリングしておく（プーリングステップ）。
【００５９】
次に、本実施形態のデータベースアクセスシステムの全体動作について、図８，９，１０のフローチャートを参照して詳細に説明する。
【００６０】
まず、クライアントノードＡ−１〜Ａ−ｎのいずれかが、各種業務情報の参照・更新など業務処理の要求をアプリケーションサーバノードＢへ開始し（図８のステップＳ０１）、アプリケーションサーバノードＢの業務アプリケーションＢ１へ処理要求を発行する（図８のステップＳ０２，業務処理要求ステップ）。
【００６１】
アプリケーションサーバノードＢにおける業務アプリケーションＢ１が、業務処理要求を受信し（図８のステップＳ１１）、業務ロジックを実行する（図８のステップＳ１２，業務処理実行ステップ）。業務ロジックとは、「利率を計算する」，「メッセージを加工する」など業務処理に特有な処理である。
【００６２】
業務アプリケーションＢ１が、業務処理を実行するため、データベースへの接続要求をデータベースインスタンス振分制御管理部Ｂ２５に送信する（図８のステップＳ１３）。このとき、アクセスするデータのプライマリキーの値を指定する。
【００６３】
データベースインスタンス振分制御管理部Ｂ２５が、業務アプリケーションＢ１からの要求を受信し（図８のステップＳ２１）、要求に含まれるプライマリキーの値に基づいて、どのデータベースサーバインスタンスＣ１１−ｊ経由でデータベースアクセスするかを決定する。そのため、データベースインスタンス振分制御管理部Ｂ２５は、データベースインスタンス振分管理テーブルＢ２３１を参照して、要求に含まれたプライマリキーがどのパーティションに入るかを確認する（図８のステップＳ２２，振分管理テーブル参照ステップ）。このとき、業務アプリケーションＢ１から渡されたプライマリキーに対応するパーティション情報がない場合は、業務アプリケーションＢ１にエラーを返却する（図８のステップＳ３１）。対応するパーティション情報がある場合は、これに対応するプライマリデータベースサーバインスタンスのステータスをデータベースインスタンス状態管理テーブルＢ２３２を参照して確認する（図９のステップＳ２４，状態管理テーブル参照ステップ）。
【００６４】
データベースインスタンス状態管理テーブルＢ２３２に、プライマリデータベースサーバインスタンスのステータスが「正常」と記録されている場合は、このプライマリデータベースサーバインスタンスをデータベースアクセスに利用するデータベースサーバインスタンスとして選出し（インスタンス選出ステップ）、データベースコネクションプール部Ｂ２２より、このプライマリデータベースサーバインスタンスに対応するデータベースコネクションオブジェクトＢ２２２を取得する（図９のステップＳ２６，コネクションオブジェクト取得ステップ）。
【００６５】
その後、データベースインスタンス振分制御管理部Ｂ２５が、取得したデータベースコネクションオブジェクトＢ２２２が正常に使えることを確認するため、このデータベースコネクションオブジェクトＢ２２２を使用してデータＣ２１にアクセスする（図９のステップＳ２７）。データベースアクセスに失敗した場合は、エラー処理ロジックを実行する（図９のステップＳ３２）。正常にデータベースアクセスができた場合は、データベースインスタンス振分制御管理部Ｂ２５が、このデータベースコネクションオブジェクトＢ２２２を業務アプリケーションＢ１へ返却する（図１０のステップＳ２９）。
【００６６】
そして、業務アプリケーションＢ１がデータベースコネクションオブジェクトＢ２２２を取得し（図１０のステップＳ１４）、このデータベースコネクションオブジェクトＢ２２２を使用して対応するデータベースサーバインスタンスＣ１１−ｊと接続を確立し、データＣ２１にアクセスしてデータを更新し（図１０のステップＳ１５）、結果を対応するクライアントサーバノードＡ−ｎへ返却する（図１０のステップＳ１６）。
【００６７】
一方、データベースインスタンス状態管理テーブルＢ２３２に、プライマリデータベースサーバインスタンスのステータスが「異常」と記録されていた場合には、データベースインスタンス状態管理テーブルＢ２３２を参照して、対応するセカンダリデータベースサーバインスタンスのステータスを確認する（図９のステップＳ４１）。
【００６８】
セカンダリデータベースサーバインスタンスのステータスが「正常」と記録されている場合、このセカンダリデータベースサーバインスタンスをデータベースアクセスに利用するデータベースサーバインスタンスとして選出し（インスタンス選出ステップ）、データベースコネクションプール部Ｂ２２からこのセカンダリデータベースサーバインスタンスに対応するデータベースコネクションオブジェクトＢ２２２を取得する（図９のステップＳ４３，コネクションオブジェクト取得ステップ）。
【００６９】
このデータベースコネクションオブジェクトＢ２２２を使用してデータベースアクセスを行い（図９のステップＳ４４）、正常にアクセスした場合は、この取得したデータベースコネクションオブジェクトＢ２２２を業務アプリケーションＢ１へ返却する（図１０のステップＳ２９）。データベースアクセスに失敗した場合は、エラー処理ロジックを実行する（図９のステップＳ５２）。
【００７０】
データベースインスタンス状態管理テーブルＢ２３２に、セカンダリデータベースサーバインスタンスの状態も「異常」と記録されていた場合は、業務アプリケーションＢ１へエラーを返却する（図９のステップＳ５１）。
【００７１】
図１１は、上述したエラー処理ロジックについて説明するフローチャートである。
【００７２】
エラー処理ロジックにおいては、まず、データベースインスタンス振分制御管理部Ｂ２５が、エラーコード・リトライ管理テーブルＢ２３５を参照して（図１１のステップＳ６１）、発生したエラーコードに対するリトライ回数を決定し（図１１のステップＳ６２）、リトライ回数を上限として、データベースアクセスを再実行（リトライ）する（図１１のステップＳ６３，リトライ実行ステップ）。
【００７３】
これが成功して接続が確立した場合は、データベースインスタンス振分制御管理部Ｂ２５が、使用したデータベースコネクションオブジェクトＢ２２２を業務アプリケーションＢ１に返却する（図１１のステップＳ６６）。全てのリトライに失敗した場合は、データベースコネクション状態管理テーブルＢ２３３に記録された情報を、該当コネクションオブジェクトＢ２２２の稼動状態が「異常」であるという内容に変更し（図１１のステップＳ７１）、データベースコネクション状態サマリ管理テーブルＢ２３４の該当するデータベースサーバインスタンスＣ１１−ｊに対応する異常コネクション数に１を加算して（図１１のステップＳ７２）、業務アプリケーションＢ１にエラーを返却する（図１１のステップＳ７４）。
【００７４】
異常コネクション数がデータベース切替閾値を超えた場合は、この対応するデータベースサーバインスタンスＣ１１−ｊの稼動状態を異常であると判断し、データベースインスタンス状態管理テーブルＢ２３２における該当データベースサーバインスタンスＣ１１−ｊの状態を「異常」に変更し（図１１のステップＳ８１，テーブル情報更新ステップ）、タイマー監視部Ｂ２６に該当データベースサーバインスタンスＣ１１−ｊのＩＤを通知し（図１１のステップＳ８２）、業務アプリケーションＢ１にエラーを返却する（図１１のステップＳ７４）。
【００７５】
これにより、次回以降、業務アプリケーションＢ１からデータベースコネクションの取得要求があった場合、データベースインスタンス状態管理テーブルＢ２３２に稼動状態を「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊ経由でのデータベースアクセスは行われない。
【００７６】
このように、本実施形態のシステムは、業務アプリケーションＢ１にデータベースサーバコネクションＢ２２２を返却する動作の過程でデータベースサーバコネクションプール部Ｂ２２全体での稼働状況を管理して、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の稼動状態を管理するため、データベースサーバインスタンス監視のヘルスチェック間隔の設定などしなくてよい。また、データベース管理システムＣから発信されるエラーコードを管理し、リトライを行うため、一時的な障害に強い。
【００７７】
次に、図１２を参照して、データベースインスタンス状態管理テーブルＢ２３２に稼動状態を「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊに対する復旧処理について説明する。
【００７８】
タイマー監視部Ｂ２６が、データベースインスタンス状態管理テーブルＢ２３２に稼動状態が「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊへ一定間隔でアクセスを実行する（図１２のステップＳ１０２）。アクセスが成功して接続が確立した場合、タイマー監視部Ｂ２６がデータベースインスタンス状態管理テーブルＢ２３２における該当データベースサーバインスタンスＣ１１−ｊの状態を「正常」に変更し（図１２のステップＳ１０４，タイマー監視ステップ）、データベースコネクションプール部Ｂ２２において該当データベースサーバインスタンスＣ１１−ｊに対するデータベースコネクションオブジェクトＢ２２２を再生成させ（図１２のステップＳ１０５）、該当データベースサーバインスタンスＣ１１−ｊに対する一定間隔のアクセスによるタイマー監視を終了する（図１２のステップＳ１０６）。
【００７９】
データベースアクセスが成功しなかった場合は、再度一定間隔後にデータベースアクセスを行う。
【００８０】
このように、稼動状態が「異常」と記録されたデータベースサーバインスタンスＣ１１−ｊだけに対して定期的に監視することで、全てのデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３を定期的に監視する場合より、システムに対する負荷を抑えることができる。
【００８１】
以上のように、本実施形態によれば、データベースインスタンス振分制御管理部Ｂ２５が、処理要求に含まれるプライマリキーの値に基づいてデータベースアクセスに利用するデータベースサーバインスタンスＣ１１−ｊを決定するので、データアクセス競合の発生頻度を抑えることができる。
【００８２】
また、データベースインスタンス振分制御管理部Ｂ２５が、通常のデータベースアクセスを実行する動作の過程でデータベースサーバコネクションプール部Ｂ２２全体の稼働状況を管理し、コネクションプール部Ｂ２２の状況に基づいてデータベースインスタンス振分管理テーブルＢ２３１に記録されている情報を書き換えてデータベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の稼動状態を管理するため、システムに対して新たな負荷をかけずに、データベースサーバインスタンスＣ１１−ｊそれぞれの稼働状況を監視することができ、これにより、安定してデータベースアクセスを実行することができる。
【００８３】
また、データベースインスタンス振分制御管理部Ｂ２５が、通常のデータベースアクセスを実行した結果に基づいて、データベースインスタンス状態管理テーブルＢ２３２に記録されている情報を書き換えるので、データベースサーバインスタンスＣ１１−１，Ｃ１１−２，Ｃ１１−３の実際の状態とデータベースインスタンス状態管理テーブルＢ２３２の情報との間に不整合が生じることを軽減している。また、データベース管理システムＣから発信されるエラーコードを管理し、エラーに対してアクセスのリトライを行うため、一時的な不具合に対して強く、耐障害性を有するシステムを構築している。
【００８４】
よって、本実施形態のデータベースアクセスシステムは、データアクセス競合の発生頻度が少なく、且つ障害に対する可用性の高いデータベースアクセスを実行することができる。
【図面の簡単な説明】
【００８５】
【図１】本発明にかかる一実施形態のデータベースアクセスシステムの構成を示すブロック図である。
【図２】図１に開示した実施形態におけるデータベースインスタンス振分管理テーブルの一例を示す図である。
【図３】図１に開示した実施形態におけるデータベースインスタンス状態管理テーブルの一例を示す図である。
【図４】図１に開示した実施形態におけるデータベースコネクション状態管理テーブルの一例を示す図である。
【図５】図１に開示した実施形態におけるデータベースコネクション状態サマリ管理テーブルの一例を示す図である。
【図６】図１に開示した実施形態におけるエラーコード・リトライ管理テーブルの一例を示す図である。
【図７】図１に開示した実施形態におけるデータベースインスタンス振分情報定義ファイルの一例を示す図である。
【図８】図１に開示した実施形態のデータベースアクセスシステムの全体の動作を示すフローチャートである。
【図９】図１に開示した実施形態のデータベースアクセスシステムの全体の動作を示すフローチャートである。
【図１０】図１に開示した実施形態のデータベースアクセスシステムの全体の動作を示すフローチャートである。
【図１１】図１に開示した実施形態のデータベースアクセスシステムの全体の動作におけるエラー処理ロジックについて示すフローチャートである。
【図１２】図１に開示した実施形態のデータベースアクセスシステムの全体の動作における復旧処理について示すフローチャートである。
【符号の説明】
【００８６】
Ａ−１〜Ａ−ｎ  クライアントノード
Ｂ  アプリケーションノード
Ｂ１  業務アプリケーション
Ｂ２  データベースインスタンス振分制御部
Ｂ３  データベースインスタンス振分情報定義ファイル
Ｂ４  エラーコード・リトライ定義ファイル
Ｂ５  データベース切替閾値定義ファイル
Ｂ２１  データベースコネクション取得インタフェース
Ｂ２２  データベースコネクションプール部
Ｂ２３  データベース振分制御管理テーブル
Ｂ２５  データベースインスタンス振分制御管理部
Ｂ２６  タイマー監視部
Ｂ２３１  データベースインスタンス振分管理テーブル
Ｂ２３２  データベースインスタンス状態管理テーブル
Ｂ２３３  データベースコネクション状態管理テーブル
Ｂ２３４  データベースコネクション状態サマリ管理テーブル
Ｂ２３５  エラーコード・リトライ定義テーブル
Ｃ  データベース管理システム
Ｃ１−１〜Ｃ１−３  データベースサーバノード
Ｃ２  共用ディスク
Ｃ１１−１〜Ｃ１１−３  データベースサーバインスタンス
Ｃ２１  データ
【図１】
2009110439.tif 000003
【図２】
2009110439.tif 000004
【図３】
2009110439.tif 000005
【図４】
2009110439.tif 000006
【図５】
2009110439.tif 000007
【図６】
2009110439.tif 000008
【図７】
2009110439.tif 000009
【図８】
2009110439.tif 000010
【図９】
2009110439.tif 000011
【図１０】
2009110439.tif 000012
【図１１】
2009110439.tif 000013
【図１２】
2009110439.tif 000014