データベース接続切断の問題を乗り越える方法

データベース サーバーがリブートしたり、あるいはネットワーク障害が発生したりすると、データベースのコネクションプール内のすべてのコネクションが切断され ます。この問題を解決するには、通常 Confluence の再起動が必要になります。

しかし、単純な SQL クエリの実行によって、データベースのコネクションプール内のコネクションを有効にすることができます。プール内で切断されたデータベースコネクションが検出されると、新しいものが作成されてこれに置き替えられます。

これを行うため、Confluence はデータベース接続に検証クエリを指定することができます。新しいインストールでは既定で有効化 されていますが (Confluence 6.5 以降)、古い Confluence バージョンからアップグレードした場合は、次の手順でこれを手動で有効化することを選択できます。 

データベースに対するバリデーション クエリ SQL の決定

各データベースの種類におけるバリデーション クエリは、それぞれ若干異なる SQL 構文の条件を有しています。バリデーション クエリは、コネクションプールから接続が取得される度に実行されるため、可能な限りシンプルなものが望まれます。

各バリデーションクエリに推奨されるバリデーションクエリを以下に紹介します。:

データベースタイプ

バリデーションクエリ

MySQL

select 1

Microsoft SQL Server

select 1

Oracle

select 1 from dual

PostgreSQL

select 1

直接 JDBC 接続を使用してバリデーション クエリを有効化する

Confluence がデータベースのコネクションプール内のデータベースコネクションを確実に有効にするには:

  1. Confluence を停止します。 
  2. <home-directory>confluence.cfg.xml ファイルを編集します。
  3. 対象のデータベースに次のプロパティを挿入します。 

    PostgreSQL、SQL Server、および MySQL の場合
    <property name="hibernate.c3p0.preferredTestQuery">select 1</property>
    Oracle の場合
    <property name="hibernate.c3p0.preferredTestQuery">select 1 from dual</property>
  4. confluence.cfg.xml を保存します。
  5. Confluence 5.10.3 以前を使用している場合、データベースの検証クエリーを含む、以下の システム プロパティ を追加する必要があります。
    例: 

    -Dc3p0.preferredTestQuery="select 1"
  6. Confluence を再起動します。 

これで、データベースのコネクションプールにおける全ての接続が完全に失われても、Confluence を再起動させる事無く接続を回復できます。

データソース接続を使用してバリデーション クエリを有効化する

Confluence がデータベースのコネクションプール内のデータベースコネクションを確実に有効にするには:

  1. Confluence を停止します。

  2. <installation-directory>/conf/server.xml ファイル (またはデータソースを構成している場所) を編集します。
  3. データ ソースについての Resource 要素を見つけ、下記の PostgreSQL の例のように、「validationQuery」パラメーターを追加します。データベース タイプに適切な値を与えるようにしてください。 

    server.xml (抜粋)
    ... 
    <Resource name="jdbc/confluence" auth="Container" type="javax.sql.DataSource"
              username="postgres"
              password="postgres"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://localhost:5432/yourDatabaseName"
              maxTotal="60"
              maxIdle="20"
              validationQuery="select 1" />
    ...
  4. conf/server.xml を保存します。

  5. Confluence を再起動します。

これで、データベースのコネクションプールにおける全ての接続が完全に失われても、Confluence を再起動させる事無く接続を回復できます。

最終更新日: 2021 年 2 月 2 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.