DBMotoでOracleを利用したレプリケーションの際に、以下のエラーが発生することがあります。
ORA-12516: TNS: リスナーは、一致するプロトコル・スタックが使用可能なハンドラを検出できませんでした。
■原因
このエラーが発生する原因はいくつか考えられますが、その中の1つとして、DBMotoからOracleへの接続セッション数がOracle側の最大セッション数をオーバーしてしまう際にエラーが発生することがあります。
■対策
Oracle側のセッション数をオーバーしなければいいので、単純に回避方法は下記のどちらかです。
1. Oracle側の最大セッション数を大きくする
2. DBMotoからOracleへの接続セッション数を減らす
1については、Oracle のカーネルの見直しとマシンのメモリを考慮する必要がありますので簡単にはいかない可能性があります。
2については、レプリケーションをまとめて「グループ化」することで効率よくセッション数を減らすことが可能です。
ここでは2の「グループ化」についてご説明します。
■DBMotoのグループ化
DBMotoは、1レプリケーション=1セッションとなります。
レプリケーション対象テーブルが100あれば、100個のレプリケーションを作成することになります。
同時に100個のレプリケーションを動かした場合、最大で100セッションとなる可能性があります。
これだとOracleに高い負荷をかけてしまうことになりかねません。
そこで「グループ化」です。グループ化とは、複数のレプリケーションを1つにまとめることです。
レプリケーションをまとめれば、その分セッション数を減らすことが可能となります。
例えば、100個あるレプリケーションを10レプリケーション×10グループにすることで、
セッション数は最大10まで減らすことが可能となります。
以下の図をご覧ください。これはレプリケーション設定が3つの例です。
この場合はOracleに対して最大3セッションの接続が発生する可能性があります。
次に以下の図をご覧ください。これもレプリケーションが3つの例ですが、
3つのレプリケーションを1グループにまとめてあるので、セッション数は1つとなります。
このように、テーブル数(レプリケーション数)が多い場合には、グループ化を利用してセッション数を減らす運用が一般的です。
※参考:Oracleの最大セッション数を調べるSQL
select name, type, value
from V$SYSTEM_PARAMETER
where name = ‘processes’ or name = ‘sessions’
●参考記事:DBMotoが使うスレッド数の算出方法
http://blog.goo.ne.jp/hitsw/e/fbf02883f9704197af18ac49bf195867
関連したトピックス
- 評価版申請の際の注意点【リアルタイムレプリケーションツールDBMoto】
- Optionに関する解説(Ver6.5から)【リアルタイムレプリケーションツールDBMoto】
- AS/400でレプリケーションに必要なジャーナルが起動済みかを確認するためには?
- レプリケーションの設定【リアルタイムレプリケーションツールDBMoto】
- Database Performance Analyzer (旧Ignite)サーバから問題のあるセッションを切断
- Create Table Wizardを使用してのMySQLへのレプリケーション【リアルタイムレプリケーションツールDBMoto】
- MySQLがターゲットのDBの時の注意【リアルタイムレプリケーションツールDBMoto】
- HiT JDBC/400: IBM i (AS/400)対応のJDBCドライバ
- DBMoto5 FAQ: 2006-7【リアルタイムレプリケーションツールDBMoto】
- GlueSyncでNoSQL活用を加速:データモデリング編