首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

安裝 SQL Server 2000 導致 Exchange 2000 CDO/ADSI 失效:根因與解決方案

     編輯:關於SqlServer

現象描述

在運行 Exchange 2000 的前端伺服器上安裝 SQL Server 2000 後,原本正常的 CDO (Collaboration Data Objects) / CDOEX / ADSI (Active Directory Service Interfaces) 呼叫開始拋出例外,郵箱存取失敗,ADSI 操作異常,但系統表面無明顯錯誤訊息。

影響範圍

  • Microsoft Active Directory Service Interfaces (ADSI) 2.5
  • Microsoft Data Access Components (MDAC) 2.6
  • Exchange 2000 前端伺服器 (CDO/CDOEX 應用)

根本原因分析

SQL Server 2000 安裝程式會**覆寫系統共用元件**,特別是:

  1. MDAC 版本衝突:SQL 2000 安裝 MDAC 2.6 (或更新版),可能降級/覆寫 Exchange 2000 依賴的特定 MDAC 版本行為,導致 OLE DB Provider for Exchange (ExOLEDB) / ADSI 提供者初始化失敗。
  2. DLL 地獄:msado15.dll, msda*.dll, sqloledb.dll, activeds.dll 等共用 DLL 被 SQL 安裝程式替換,版本/介面不相容。
  3. COM+ 組件註冊衝突:SQL 安裝註冊自身的 COM+ 應用程式/元件,可能搶佔/破壞 Exchange/ADSI 所需的組件註冊。

解決方案 (依優先序)

方案一:修復 MDAC / 重新安裝 Exchange 系統管理工具 (最快)

  1. 下載並執行 **MDAC 2.6 修復安裝** (或 Exchange 2000 所需特定版本):mdac_typ.exe /q /C:"dasetup /q /r"。
  2. 或在 Exchange 2000 CD 執行 Setup.exe /AddRemove → 選擇 **系統管理工具** → 修復/重新安裝。此過程會重新註冊 ExOLEDB、CDO、ADSI 相關 DLL。
  3. 重啟伺服器驗證。

方案二:手動重新註冊關鍵 DLL


regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
regsvr32 "C:\Program Files\Common Files\System\ado\msadox.dll"
regsvr32 "C:\Program Files\Common Files\System\ado\msadomd.dll"
regsvr32 "C:\Program Files\Exchsrvr\bin\exoledb.dll"
regsvr32 "C:\Windows\System32\activeds.dll"
regsvr32 "C:\Windows\System32\adsldp.dll"
regsvr32 "C:\Windows\System32\adsldpc.dll"
以系統管理員身分執行命令提示字元,逐一執行,觀察「成功」對話框。

方案三:調整安裝順序 (預防為主)

  1. **先安裝 Exchange 2000** (含 SP3 + 後續 Rollup)。
  2. **再安裝 SQL Server 2000** (含 SP4)。
  3. 若必須共存,建議 **分離伺服器角色**:Exchange 前端/信箱伺服器**勿安裝 SQL Server**;資料庫需求改用獨立 SQL 叢集/獨立實例。

方案四:應用層遷移 (長期)

  • 將 CDO/ADSI 程式碼遷移至 **Exchange Web Services (EWS) Managed API** 或 **Microsoft Graph API** (Exchange Online/2013+)。
  • SQL Server 升級至 2019/2022 + MDAC 替代為 **MSOLEDBSQL / ODBC Driver 17/18**,徹底解決共用元件衝突。

驗證步驟


-- 1. 簡單 ADSI 連結測試 (VBScript)
Set obj = GetObject("LDAP://RootDSE")
WScript.Echo "SchemaNamingContext: " & obj.Get("schemaNamingContext")

-- 2. CDO 郵箱存取測試
Set sess = CreateObject("MAPI.Session")
sess.Logon "", "", False, True
Set msg = sess.Outbox.Messages.Add
msg.Subject = "Test"
msg.Text = "Body"
msg.Send
sess.Logoff

微軟知識庫參考

  • KB 311454:SQL Server 2000 安裝可能損壞 MDAC,導致 ADSI/CDO 失效。
  • KB 320125:Exchange 2000 與 SQL Server 共存最佳實踐:分離角色、安裝順序、修復步驟。
  • KB 823948:MDAC 2.8 SP1 解決多項相容性問題 (需評估 Exchange 相容性)。

總結

**SQL Server 2000 與 Exchange 2000 共安裝於同一伺服器屬高風險配置**,核心衝突在 MDAC/COM 共用元件版本。生產環境**強烈建議角色分離**;若必須共存,嚴格控制安裝順序 (Exchange 優先)、套用最新 SP/Rollup、並準備 MDAC/Exchange 修復程序作為回滾方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved