はじめに
VBAからOracleやSQL Serverなどのデータベースに接続していると、
「接続できなくなった」「動作が遅い」「突然 ‘接続制限に達しました’ のようなエラーが出た」
…という現象に遭遇したことはありませんか?
この記事では、VBA(ADO)からのDB接続数の上限や原因、各DBの制約と安定運用のための対処法を解説します。
VBA(ADO)からDBに接続する仕組み
VBAからOracleやSQL Serverに接続する場合、通常はADODB.Connectionオブジェクトを使います。
Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.Open "Provider=MSDAORA;Data Source=ORCL;User ID=ユーザー名;Password=パスワード"
この conn.Open
のたびに、DBサーバーにセッションが1つ張られます。
接続上限の仕組み
- 1. VBA自体には上限なし
VBA(Access)には厳密な接続上限はありませんが、同時に大量のConnectionやRecordsetを開きっぱなしにするとリソース不足で不安定になります。 - 2. 接続先DB(OracleやSQL Server)に上限あり
Oracle:sessions
パラメータで同時接続数の上限が決まっています(例:150セッション)。ADOからの接続も1セッションとしてカウントされます。SELECT value FROM v$parameter WHERE name = 'sessions';
この上限を超えると、次のようなエラーが発生します:
ORA-00018: maximum number of sessions exceeded
ORA-12516: TNS: listener could not find available handler with matching protocol stack - 3. SQL Serverの場合
user connections
設定で制限されます。SELECT @@MAX_CONNECTIONS
接続が無駄に残るとリソース消費やロックの問題が発生します。
よくある原因と対策
原因 | 説明 | 対策 |
---|---|---|
Connectionを開きっぱなし | 使用後に閉じないとセッションが残る | conn.Close+Set conn = Nothing を徹底 |
毎回新しいConnectionを作っている | 同じ接続を再利用せず無限に増える | 使い回し、またはConnection Poolingを検討 |
エラー時に接続が閉じられない | On Error中にCloseしない | 必ずCloseする構文にする |
コーディングベストプラクティス(VBA側)
接続・切断の基本形
Dim conn As ADODB.Connection Set conn = New ADODB.Connection On Error GoTo ErrH conn.Open "Provider=MSDAORA;Data Source=ORCL;User ID=user;Password=pass" ' ここでSQL実行など conn.Close Set conn = Nothing Exit Sub ErrH: MsgBox "エラー: " & Err.Description If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close Set conn = Nothing End If
よくある質問(FAQ)
Q. 複数ユーザーが同じAccessアプリでOracleに接続しているとき、接続数は合算される?
→ はい。全ユーザーからの合計セッション数がOracle側の上限に影響します。共有DBでは注意が必要です。
Q. ADOは接続プールしてくれる?
→ OLE DB Providerが対応していれば有効。ただし「同一接続文字列で再利用」しないとプールは活きません。
まとめ
- VBA(ADO)からの接続にはDB側の接続上限が適用される
- 特にOracleでは sessions に注意
- 接続の開きっぱなしは厳禁! 必ず Close+Set Nothing
- ユーザー数が多いシステムでは、接続の使い回しや切断タイミングを意識的に設計することが重要
関連キーワード(SEO対策)
- VBA DB接続数 上限
- Oracle ADO セッション数
- Access ADO 接続エラー
- VBA SQL Server 最大接続数
- ORA-00018 セッションエラー
- ADO 接続切り忘れ 対策
- VBA DB接続 パフォーマンス チューニング