本記事では、OceanBaseにおけるデータベース接続の仕様について説明します。
接続プールを使用する場合は、接続の最大アイドル時間を設定する必要があります。
フロントエンドプログラムがデータベースまたはデータベースプロキシ層に接続する際、JDBCでは接続タイムアウトを1秒に設定し、失敗時の再接続メカニズムを備えることを推奨します。また、失敗時の再接続には間隔時間を設ける必要があります。
プログラム側のログには、データベース接続に関する標準的なOceanBaseエラーコードおよび接続先のデータベース情報(IPアドレス、ポート、データベースユーザー名など)を記録する必要があります。これはDBAによる障害調査に利用されます。
接続プールを使用するフロントエンドプログラムでは、業務要件に応じて初期接続数、最小接続数、最大接続数を設定する必要があります。タイムアウト時間は30秒に設定し、接続検出またはアイドルタイムアウト、および接続回収メカニズム(最大3600秒)を設定することを推奨します。
プログラム側で使用するデータベース接続用のSOバンドル、JARバンドル、およびクライアントデータベースのバージョンは、オンラインデータベースサーバーのバージョンと互換性がある必要があります。
DB切り替えについて、
use <dbname>の実行は推奨されません。Connection.setCatalog(dbname)インターフェースの使用を推奨します。ReadOnlyの設定について、
set session transaction readonlyの実行は推奨されません。Connection.setReadOnly(xx)インターフェースの使用を推奨します。単一のトランザクションステートメント(単一SQLトランザクションステートメントまたは複数SQLのトランザクションステートメント)を実行する前には、必ず
getConnectionを再度実行し、実行後にはclose connectionを実行する必要があります。1つのプロシージャ内で複数のトランザクションを実行することはできません。使用方法は以下のとおりです:getConnection、単一トランザクションステートメントの実行、close connection。特に説明が必要なのは、OceanBaseは現在、単一のトランザクションがそのライフサイクル全体を単一のサーバー上で完了することを制限しているためです。つまり、トランザクションは単一のサーバーで開始・実行・終了されます。Aサーバーで開始されたトランザクションがBサーバーでも有効であるとは保証されません。Java Connectorにおいて具体的に影響する点としては、現在の接続がトランザクション中の場合、次のSQLは前のサーバーにルーティングされるしかなく、他のサーバーへのルーティング切り替えはできません。現在の接続がトランザクション外の場合は、次のSQLに基づいて最適なサーバーにルーティングされます。