INFO: 常見關於 ODBC 連接共用區的問題

本文曾發行於 CHT169470
本文已封存。本文係以「現狀」提供且不會再更新。
結論
本文包含部分最常見關於 ODBC 連接共用區的問題。
其他相關資訊
  1. 問:何謂 ODBC 連接共用區?

    答:連接共用區為 ODBC 3.0 中新增的功能之一。 連接共用區讓 ODBC 應用程式得以重複使用數個連線之一的連線。連線建立且亦成為共用連線之一以後,ODBC 應用程式在相同的共享環境 (henv) 即可重複使用同樣的驅動程式及連線,而不需經過完整的連線程序。然而,不同 henv 或驅動程式間不可重複使用連線。
  2. 問:我能以 2.x ODBC 驅動程式使用連接共用區嗎?

    答:只有版本 3.0 或更新的 ODBC 驅動程式管理員才支援連接共用區。驅動程式版本並無所謂。
  3. 問:如果驅動程式管理員支援連接共用區,我能以 Microsoft Access 驅動程式來啟用連接共用區嗎?

    答:您無法以 Microsoft Access 驅動程式使用連接共用區。Microsoft Access 驅動程式內部使用支援 apartment threaded model 的 Jet。換句話說,Jet 需要由相同的執行緒來處理連線與中斷連線的程序。如要啟用連接共用區,連線與中斷連線的程序必須由不同的執行緒來處理。此原則適用於所有使用 Jet 的 Microsoft Desktop 驅動程式。
  4. 問:我如何啟用 ODBC 應用程式中的連接共用區?

    答:ODBC 應用程式可以 SQL_ATTR_CONNECTION_POOLING 屬性呼叫 SQLSetEnvAttr,以啟用連接共用區。如需取得更多關於如何啟用 ODBC 應用程式中的連連接共用區,請參閱下列位於 Microsoft Knowledge Base 中的文件:
    164221How to Enable Connection Pooling in an ODBC Application
  5. 問:如果應用程式是以 Visual Basic 撰寫的,我如何啟用連接共用區?

    答:Visual Basic 或 ODBC 應用程式可呼叫 SQLSetEnvAttr 函數以啟用連接共用區。連線共用屬於程序層級的屬性,因此在 Visual Basic 應用程式中透過 ODBC 驅動程式管理員所建立的任何後續連線皆可使用連接共用區。 Visual Basic 應用程式可使用函式宣告及程式碼來啟用連接共用區。
          Declare Function SQLSetEnvAttr Lib "odbc32.dll" (ByVal henv As Long,      ByVal Attribute As Long, ByVal Value As Long, ByVal StringLength As      Long) As Integer      ' env attribute      Public Const SQL_ATTR_CONNECTION_POOLING = 201      Public Const SQL_ATTR_CP_MATCH = 202      ' values for SQL_ATTR_CONNECTION_POOLING      Public Const SQL_CP_ONE_PER_DRIVER = 1      Public Const SQL_IS_UINTEGER = -5      nstatus = SQLSetEnvAttr(0, SQL_ATTR_CONNECTION_POOLING,      SQL_CP_ONE_PER_DRIVER, SQL_IS_UINTEGER)      SQLAllocEnv...      SQLAllocConnect...      SQLConnect...      SQLDisConnect...      SQLFreeConnect...      SQLFreeEnv...
    如需取得更進一步的資訊,請按一下下列文件號碼以檢視位於 Microsoft Knowledge Base 中的文件:
    237844 HOW TO: Enable ODBC Connection Pooling in VB ADO Application
    228843 HOWTO: Implement Session Pooling from Visual Basic ADO Program
  6. 問:我如何啟用 OLE DB 應用程式中的連接共用區?

    答:OLE DB 應用程式可呼叫 SQLSetEnvAttr 來啟用連接共用區。

    如需取得更多關於如何啟用 OLE DB 應用程式中的連接共用區,請參閱下列位於 Microsoft Knowledge Base 中的文件:
    166083How to Enable Connection Pooling in an OLE DB Application
  7. 問:我如何啟用 Active Server Pages (ASP) 或 ActiveX Data Objects (ADO) 的連接共用區?

    答:包含 Active Server Pages 的 Microsoft Internet Information server (IIS) 3.0 版善用連接共用區。將 StartConnectionPool 值設為 1 即可啟用 IIS 使用者連接共用區。StartConnectionPool 位於 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\ASP \Parameters。 如需取得更進一步關於如何啟用 IIS 4.0 連接共用區,請按一下下列文件號碼以檢視位於 Microsoft Knowledge Base 中的文件:
    189410 HOW TO: HOWTO: Enable or Disable Connection Pooling in IIS 4.0
  8. 問:我該如何限制共用連線數?

    答:共用連線數由 ODBC 驅動程式管理員控制。ODBC 應用程式則無法加以控制。
  9. 問:我如何檢視共用連線數?

    答:您可以在連接共用區檢視連線數。 如需取得更進一步的資訊,請按一下下列文件號碼以檢視位於 Microsoft Knowledge Base 中的文件:
    216950 How to Enable ODBC Connection Pooling Performance Counters
    238442 ODBC Connection Pooling Object Disappears from PerfMon
    245543 INFO: ODBC Connection Pooling Counters in Performance Monitor
  10. 問:我該如何清除連接共用區中的連線?

    答:連線於連接共用區中的有效期限取決於 ODBC 驅動程式的 CPTimeout 內容。 超過逾時時間後,連線即會關閉且從共用連線中移除。ODBC 應用程式可使用 SQLConfigDriver 來變更 CPTimeout 的值,且此值適用於所有使用特定 ODBC 驅動程式的 ODBC 應用程式。CPTimeout 的預設值為 60 秒。
  11. 問:如果我的應用程式在 Microsoft Transaction Server 中執行,我是否必須明確啟用其連接共用區?

    答:如果您需透過 ODBC 驅動程式使用 ODBC 資料來源,Microsoft Transaction Server 即會啟用連接共用區;您不需要明確啟用其連接共用區。
  12. 問:如果連接共用區發生問題,我該怎麼辦? ODBC 驅動程式管理員偵測得到這樣的問題嗎?

    答:ODBC 3.0 不會檢查連線是否有問題,它仍會傳送有問題的連線。但在 Service Pack 1 中,驅動程式管理員即可偵測發生問題的連線。 如果連接共用區中的連線失效,驅動程式管理員不但可以偵測得到,還可回傳正常的連線。如果驅動程式管理員無法建立有效的連線,即會傳回錯誤訊息。
  13. 問:有 ODBC 3.0 Service Pack 1 時,ODBC 驅動程式管理員會在伺服器沒有回應時,不斷嘗試連接資料庫伺服器嗎?

    答:ODBC 3.0 Service Pack 1 中加入了新的 API,亦即 ODBCSetTryWaitValue,以避免 ODBC 驅動程式管理員不斷嘗試連接沒有回應的伺服器。 ODBCSetTryWaitValue 藉由 DWORD 參數將資訊儲存在登錄資料中,其位置如下:
    HKEY_LOCAL_MACHINE\Software\Odbc\Odbcinst.ini \ODBC Connection Pooling\Retry Wait
    驅動程式管理員在偵測到無效的資料庫伺服器後,即會傳回錯誤訊息,並且標記連線與時間。超過 RetryWait 值所指定的時間後,驅動程式管理員即會傳回執行失敗的訊息,而不會一直嘗試重新連接該資料庫伺服器。

    如需取得更多關於如何使用 ODBCSetTryWaitValue ODBC API 的資訊,請參閱下列位於 Microsoft Knowledge Base 中的文件:
    168250IIS Performance Degrades with a Bad Connection
参考
如需取得更多關於連接共用區及工作階段共用區 (session pooling) 的資訊,請參閱下列 Microsoft 網站中的資訊:
参考
本文件是根據 Microsoft Knowledgebase 文件編號 Q169470 翻譯的. 若要參考原始英文文件內容, 請至以下網址:

FAQ FAQs
內容

文章識別碼:169470 - 最後檢閱時間:12/04/2015 17:08:56 - 修訂: 1.4

Microsoft Open Database Connectivity 3.0, Microsoft Data Access Components 1.5, Microsoft Data Access Components 2.0, Microsoft Data Access Components 2.1, Microsoft Data Access Components 2.5, Microsoft Data Access Components 2.6

  • kbnosurvey kbarchive kbdatabase kbgrpmdac kbgrpvcdb kbinfo kbmdac250 kbmdac260 kbodbc kboledb kbusage kbvbp KB169470
意見反應
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)