本記事では、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に基づいて最適なサーバーにルーティングできます。