據(jù)庫(kù):命令行靜默安裝與遷移實(shí)戰(zhàn))
簡(jiǎn)介面向在Windows 10 64位環(huán)境下部署MSDE 2000數(shù)據(jù)庫(kù)的用戶這份資源解決了老版本數(shù)據(jù)庫(kù)安裝時(shí)常見的兼容性難題尤其是SysWOW64目錄權(quán)限修改繁瑣、網(wǎng)上方案操作冗長(zhǎng)而反復(fù)失敗的問題。作者將親測(cè)有效的一鍵處理方案與完整安裝程序打包成套實(shí)測(cè)安裝成功且可穩(wěn)定運(yùn)行。壓縮包共50個(gè)文件、33.79MBmsi與msp為數(shù)據(jù)庫(kù)核心安裝包及組件補(bǔ)丁exe提供集成安裝入口reg文件為右鍵菜單添加管理員權(quán)限txt、htm為安裝說明與引導(dǎo)文檔dll、rll等為運(yùn)行所需支持組件。資源已有5821人學(xué)習(xí)下載。借助該資源讀者無需再逐個(gè)搜索零散方案可直接按打包好的教程完成環(huán)境搭建安裝說明、權(quán)限修復(fù)工具、MSDE核心組件與補(bǔ)丁分門別類存放便于對(duì)照操作、快速定位安裝失敗的環(huán)節(jié)并排查解決。1. 為什么還要在 Win10 上裝 MSDE 2000 數(shù)據(jù)庫(kù)程序在 Win10 上安裝 MSDE 2000 數(shù)據(jù)庫(kù)程序聽起來像在給一臺(tái)新車裝化油器但很多從業(yè)者真的遇到這個(gè)需求 : 老 ERP、考勤系統(tǒng)、實(shí)驗(yàn)數(shù)據(jù)管理軟件當(dāng)年寫死在 MSDE 2000 上甲方不愿意換新電腦又只有 Win10。我的結(jié)論是先別急著換數(shù)據(jù)庫(kù)MSDE 2000 在 Win10 上能裝、能跑、能連只是不能雙擊 setup.exe 一路下一步得用命令行繞過 20 年前的老安裝器還要處理服務(wù)、端口和 ODBC 三個(gè)連環(huán)坑。這篇教程就照著這條路徑走從原理講到命令再講到 5 個(gè)高頻翻車點(diǎn)適合正在給老系統(tǒng)做環(huán)境遷移的工程師也適合第一次接觸這個(gè)老數(shù)據(jù)庫(kù)的新手。2. 裝之前先看明白MSDE 2000 是什么Win10 卡在哪2.1 MSDE 2000 到底是個(gè)什么數(shù)據(jù)庫(kù)和 SQL Server 2000 差多少M(fèi)SDE 2000 全稱 Microsoft SQL Server 2000 Desktop Engine是微軟當(dāng)年隨 Office、各種財(cái)務(wù)軟件和 MIS 系統(tǒng)分發(fā)的一個(gè)嵌入式數(shù)據(jù)庫(kù)引擎。它的核心就是 SQL Server 2000 的數(shù)據(jù)庫(kù)引擎語法、數(shù)據(jù)類型、存儲(chǔ)過程、事務(wù)機(jī)制和正式的 SQL Server 2000 幾乎一致最大區(qū)別是它沒有企業(yè)管理器、查詢分析器這些圖形界面工具也沒有分析服務(wù)、DTS 設(shè)計(jì)器這些外圍組件而且數(shù)據(jù)庫(kù)文件超過 2GB 之后就不再增長(zhǎng)。很多老程序當(dāng)初就是用 MSDE 2000 作為默認(rèn)的“本地庫(kù)”打包分發(fā)的程序安裝完成時(shí)自動(dòng)在機(jī)器上裝一個(gè)實(shí)例業(yè)務(wù)數(shù)據(jù)落在這個(gè)實(shí)例里開發(fā)者默認(rèn)你會(huì)通過 ODBC 或者程序內(nèi)置的連接串去訪問它這也就解釋了為什么市面上還存著一批必須依賴它的系統(tǒng)。它運(yùn)行時(shí)對(duì)應(yīng)的服務(wù)名是“SQL Server (實(shí)例名)”進(jìn)程是 sqlservr.exe內(nèi)存占用不高單機(jī)并發(fā)要求不高時(shí)表現(xiàn)穩(wěn)定但它是按 2000 年代的安全模型設(shè)計(jì)的默認(rèn)配置在今天的網(wǎng)絡(luò)環(huán)境里非常脆弱sa 密碼如果留空或者太弱等于把數(shù)據(jù)庫(kù)裸奔在局域網(wǎng)里。它在 Win10 上“難裝”的根子不在引擎本身而在發(fā)行年代。MSDE 2000 的安裝包基本是 2002 到 2004 年間生成的依賴的 Windows Installer 規(guī)則、MDAC 版本、系統(tǒng)目錄結(jié)構(gòu)和現(xiàn)在的差距很大。安裝器里有一段操作系統(tǒng)版本檢查看到 Win10 的版本號(hào)就直接拒絕很多時(shí)候不是裝不了是安裝包里的檢測(cè)邏輯攔住你了。2.2 Win10 缺了什么前置組件與系統(tǒng)檢查在動(dòng)手之前建議先把環(huán)境底數(shù)摸清楚。MSDE 2000 在 XP/2003 時(shí)代安裝時(shí)通常會(huì)自動(dòng)裝 MDAC微軟數(shù)據(jù)訪問組件和 MSXML還要求 Windows Installer 2.0 以上。Win10 自帶的 Windows Installer 版本早就超過這個(gè)要求但字典里的 MDAC 組件是被系統(tǒng)組件取代的如果安裝過程報(bào)錯(cuò) registry 相關(guān)的問題先別懷疑數(shù)據(jù)庫(kù)先看這些依賴是否可用。常見的做法是打開“啟用或關(guān)閉 Windows 功能”確認(rèn) .NET Framework 3.5 已經(jīng)被勾選安裝。MSDE 2000 不直接依賴 .NET但老程序配套的管理腳本和 ODBC 驅(qū)動(dòng)往往依賴 .NET 2.0/3.5Win10 默認(rèn)不裝 3.5這會(huì)在后續(xù)連接階段把問題引到數(shù)據(jù)庫(kù)頭上實(shí)則是前置環(huán)境缺失。隨后用管理員權(quán)限打開命令提示符跑兩條命令看系統(tǒng)狀態(tài)winver這條命令彈出系統(tǒng)版本信息確認(rèn)是 Win10 的哪個(gè)版本一般 1809 之后的版本對(duì)老安裝包的兼容性處理不太一樣Win10 22H2 上做靜默安裝的成功率高于早期 1709。再查一下系統(tǒng)架構(gòu)和 Windows Installer 版本reg query HKLM\SYSTEM\CurrentControlSet\Control\Windows /v CSDVersion msiexec /?第一條約等于確認(rèn)系統(tǒng)服務(wù)包級(jí)別新版本 Win10 返回空值屬正常第二條能看出 msiexec 版本如果輸出里出現(xiàn) Windows Installer 版本號(hào)說明安裝服務(wù)工作正常。如果連 msiexec 都沒響應(yīng)優(yōu)先修復(fù) Windows Installer 服務(wù)否則后面所有 msi 參數(shù)都白搭。還有一個(gè)容易忽略的問題安裝路徑和用戶名不能帶中文。MSDE 2000 安裝器內(nèi)部的腳本對(duì)非 ASCII 字符處理有缺陷C:\Users\張三\Downloads 這種路徑會(huì)直接引發(fā) 25015 之類的錯(cuò)誤。最好把安裝源放到一個(gè)純英文短路徑下比如 C:\msde。2.3 安裝源怎么備文件、路徑和授權(quán)的注意事項(xiàng)MSDE 2000 的典型安裝包有兩種形態(tài)一種是獨(dú)立的“MSDE 2000 Release A”安裝包解壓后有 setup.exe、SQLMSDE.msi以及若干 .cab 歸檔文件另一種是隨 SQL Server 2000 光盤分發(fā)的 MSDE 目錄。無論哪種核心文件都是 SQLMSDE.msi這是 Windows Installer 的數(shù)據(jù)庫(kù)包setup.exe 只是套了個(gè)交互外殼。建議把整個(gè)安裝源拷貝到 C:\msde2000 目錄下而不是直接雙擊光盤或者掛載鏡像里的 setup.exe。理由有兩個(gè)第一從只讀媒體安裝時(shí)Windows Installer 會(huì)在系統(tǒng)臨時(shí)目錄寫緩存容易被安全軟件誤傷第二拷貝到本地后路徑可控后面用 msiexec 指定安裝源時(shí)才不會(huì)出現(xiàn)找不到 .cab 的玄學(xué)問題??截愅瓿珊笾辽傧却_認(rèn)目錄里有這幾個(gè)文件setup.exe、SQLMSDE.msi、sqlrun01.cab、sqlrun02.cab、sqlrun03.cab 等歸檔文件。如果只拿到一個(gè) exe 自解壓包先解壓到目錄??梢杂觅Y源管理器右鍵解壓或者命令行執(zhí)行expand -R C:\下載\MSDE2000A.exe C:\msde2000這里的 expand 是 Windows 自帶的 CAB 展開工具-R 參數(shù)會(huì)保留目錄結(jié)構(gòu)。很多網(wǎng)上流傳的“MSDE 2000 精簡(jiǎn)版”只有 setup.exe 和 msi沒有 cab這種包裝到一半會(huì)報(bào)找不到源文件建議不要在這類來源不明的打包版上浪費(fèi)時(shí)間。授權(quán)方面要專門提一句MSDE 2000 的桌面引擎許可通常隨宿主軟件比如某個(gè) ERP一起授權(quán)單獨(dú)拿它當(dāng)通用數(shù)據(jù)庫(kù)用可能存在合規(guī)問題內(nèi)網(wǎng)搭建測(cè)試環(huán)境問題不大但要交付給客戶前先確認(rèn)授權(quán)邊界。另外安裝前關(guān)閉殺毒軟件和 Windows Defender 的“文件夾保護(hù)”老安裝器寫注冊(cè)表和系統(tǒng)服務(wù)的行為很容易被殺軟判定為可疑裝到一半被攔下回滾又回滾不干凈這是重裝 25002 的主要來源之一。3. 命令行裝 MSDE 2000用 msiexec 繞過老安裝器3.1 為什么交互式 setup.exe 最容易翻車雙擊 setup.exe 進(jìn)入安裝向?qū)г?Win10 上翻車概率極高。第一次彈窗可能是“此程序存在已知的兼容性問題”點(diǎn)繼續(xù)后安裝向?qū)茱@示但走到“系統(tǒng)配置檢查”步驟就停下報(bào)“Microsoft SQL Server 2000 不支持此操作系統(tǒng)”。這不是你的機(jī)器有問題是安裝包里的版本檢測(cè)函數(shù)把 Win10 識(shí)別成了不支持的對(duì)象。繞過這個(gè)問題有兩條路。一條是右鍵 setup.exe屬性里把兼容模式改成 Windows 7 或者 Windows XP (Service Pack 3)再以管理員身份運(yùn)行這種方式對(duì)部分版本有效但兼容模式只騙過了外殼安裝程序內(nèi)部后續(xù)還有多處校驗(yàn)經(jīng)常裝了十分鐘后回滾。另一條是繞開 setup.exe直接用 msiexec 安裝 SQLMSDE.msiWindows Installer 層面的安裝包本身沒有那層操作系統(tǒng)版本檢查靜默參數(shù)也更容易控制安裝行為。我用后者成功率明顯高交互式向?qū)菞l路經(jīng)??ㄔ凇鞍惭b程序配置”上。msiexec 方式還能順手解決一個(gè)麻煩安裝過程的完整日志。交互式安裝的錯(cuò)誤彈窗一閃而過根本無從排查改用 msiexec 并指定日志輸出后每一步都能看到具體卡在哪條自定義動(dòng)作上排錯(cuò)效率完全不同。3.2 最小可用的靜默安裝命令與參數(shù)說明在管理員權(quán)限的命令提示符里執(zhí)行以下命令這是我驗(yàn)證過的最穩(wěn)組合msiexec /i C:\msde2000\SQLMSDE.msi INSTANCENAMEMS2000 SECURITYMODESQL SAPWDPssw0rd!123 DISABLEAGENTYES REBOOTReallySuppress /qn /lv install.log拆開解釋這些參數(shù)的意義因?yàn)槊恳粭l都對(duì)應(yīng)著一個(gè)后期坑。INSTANCENAMEMS2000是給數(shù)據(jù)庫(kù)實(shí)例取名字這個(gè)名字會(huì)出現(xiàn)在 Windows 服務(wù)列表的“SQL Server (MS2000)”里也決定了后續(xù)連接串的寫法。如果不指定默認(rèn)實(shí)例名是 MSSQLSERVER服務(wù)就是“SQL Server (MSSQLSERVER)”。指定命名實(shí)例的好處是避免以后機(jī)器上再裝 SQL Server Express 時(shí)服務(wù)名沖突建議一開始就不要用默認(rèn)實(shí)例。SECURITYMODESQL表示采用混合身份驗(yàn)證模式即同時(shí)允許 Windows 身份和 SQL 身份登錄。MSDE 2000 默認(rèn)安裝出來是僅 Windows 身份驗(yàn)證很多老程序用賬號(hào)密碼連不上庫(kù)就是因?yàn)檫@層默認(rèn)值。顯式指定混合模式省得安裝完再改注冊(cè)表。SAPWDPssw0rd!123必須跟著 SECURITYMODESQL 一起出現(xiàn)它設(shè)置系統(tǒng)管理員 sa 的密碼。MSDE 2000 有個(gè)老毛病如果省略 SAPWD它可能把 sa 密碼設(shè)成空這在 Win10 上非常危險(xiǎn)。密碼強(qiáng)度建議至少 8 位并含大小寫和數(shù)字別用什么 123456數(shù)據(jù)庫(kù)引擎不攔你但安全掃描工具會(huì)替你盯上。DISABLEAGENTYES表示不啟動(dòng) SQL Server Agent 服務(wù)。MSDE 2000 自帶的 Agent 主要用于計(jì)劃任務(wù)很多老系統(tǒng)用不上關(guān)掉可以減少一個(gè)自啟動(dòng)服務(wù)和潛在報(bào)錯(cuò)點(diǎn)。后面需要 Job 調(diào)度時(shí)再手動(dòng)啟動(dòng)服務(wù)即可。REBOOTReallySuppress壓制安裝程序的重啟請(qǐng)求。MSDE 安裝器有時(shí)會(huì)要求重啟在無人值守場(chǎng)景下特別煩加這個(gè)參數(shù)后安裝完成不重啟。/qn是真正意義上的靜默全程無界面如果想讓用戶看到進(jìn)度條可以改成/qb。/lv install.log指定詳細(xì)日志文件排錯(cuò)時(shí)主要看這個(gè)文件。3.3 安裝完怎么確認(rèn)服務(wù)真的起來了命令執(zhí)行完后命令提示符直接返回沒有彈窗這時(shí)候別急著認(rèn)為裝好了先查服務(wù)狀態(tài)sc query MSSQL$MS2000如果是命名實(shí)例 MS2000服務(wù)名就是MSSQL$MS2000。如果當(dāng)時(shí)用了默認(rèn)實(shí)例服務(wù)名是MSSQLSERVER。輸出里看 STATE 字段理想狀態(tài)是4 RUNNING。如果顯示1 STOPPED進(jìn)系統(tǒng)日志確認(rèn)原因。也可以直接看進(jìn)程tasklist | findstr sqlservr能看到 sqlservr.exe 說明引擎進(jìn)程在跑。接著確認(rèn)實(shí)例的監(jiān)聽情況老程序一般要建立 TCP 連接所以這一步很關(guān)鍵netstat -ano | findstr 1433MSDE 2000 默認(rèn)實(shí)例監(jiān)聽 1433 端口命名實(shí)例默認(rèn)是動(dòng)態(tài)端口。如果這里查不到 1433 但有別的端口說明引擎已經(jīng)監(jiān)聽某個(gè)動(dòng)態(tài)端口需要把端口固定下來這在第 4 章會(huì)詳細(xì)處理。此刻只需確認(rèn) sqlservr.exe 有對(duì)應(yīng)的監(jiān)聽端口即可。最后翻一遍 install.log重點(diǎn)找 “Product: Microsoft SQL Server 2000 Desktop Engine --- Installation completed successfully” 這一行。即使服務(wù)已經(jīng)跑起來也建議確認(rèn)這行日志存在它表示 Windows Installer 層面的組件注冊(cè)全部完成否則后期卸載或升級(jí)時(shí)還會(huì)出問題。4. 讓老程序連上庫(kù)osql 驗(yàn)證、端口與 ODBC 配置4.1 先用 osql 驗(yàn)證實(shí)例和 sa 密碼服務(wù)起來了不等于程序能連上第一步用 SQL Server 2000 自帶的 osql 工具做冒煙測(cè)試。osql 是命令行查詢工具M(jìn)SDE 2000 安裝后會(huì)自動(dòng)放到系統(tǒng)目錄。在命令提示符里執(zhí)行osql -S .\MS2000 -U sa -P Pssw0rd!123 -Q SELECT VERSION參數(shù)說明-S .\MS2000指定服務(wù)器地址點(diǎn)號(hào)表示本機(jī)反斜杠后面是實(shí)例名-U和-P分別指定用戶名和密碼密碼如果包含特殊字符用雙引號(hào)包起來更保險(xiǎn)-Q后面跟要執(zhí)行的 SQL這里查詢版本號(hào)。如果輸出有Microsoft SQL Server 2000 - 8.00.xxxx這類信息說明引擎和賬號(hào)都正常。常見失敗輸出是 “Login failed for user sa”優(yōu)先查 sa 密碼是不是安裝時(shí)設(shè)置的那個(gè)還有一種是 “Could not open a connection to SQL Server”這說明實(shí)例名寫錯(cuò)了或者服務(wù)根本不在運(yùn)行。osql 能過以后測(cè)試?yán)铣绦虻倪B接串才能保持平常心。許多老程序連接串寫作ProviderSQLOLEDB;Data Source(local);Initial Catalogyourdb;User IDsa;Passwordxxx這里的(local)解析到默認(rèn)實(shí)例。而我們安裝的是命名實(shí)例 MS2000連接串里 Data Source 必須是.\\MS2000或者計(jì)算機(jī)名\\MS2000這一字之差會(huì)讓老程序一直報(bào)連不上數(shù)據(jù)庫(kù)。4.2 固定 TCP 端口與防火墻規(guī)則命名實(shí)例默認(rèn)采用動(dòng)態(tài)端口每次服務(wù)重啟后端口可能變化對(duì)老系統(tǒng)非常不友好因?yàn)樗鼈兣渲玫倪B接串里通常寫著固定端口 1433。所以要把 MS2000 的端口固定住。常見做法是先用 netstat 查到當(dāng)前端口再在注冊(cè)表里指定。netstat -ano | findstr sqlservr找到 sqlservr.exe 對(duì)應(yīng) PID 的監(jiān)聽地址看到類似0.0.0.0:1433或者0.0.0.0:1458。然后用 regedit 導(dǎo)航到HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MS2000\MSSQLServer\SuperSocketNetLib\Tcp把Enabled值改為 1把TcpPort改成 1433。如果路徑里的實(shí)例名不對(duì)先查一下注冊(cè)表里實(shí)際存在的鍵名。改完后重啟 SQL Server 服務(wù)net stop MSSQL$MS2000 net start MSSQL$MS2000重啟后再用netstat -ano | findstr 1433確認(rèn)監(jiān)聽端口已固定在 1433。Win10 默認(rèn)防火墻會(huì)攔截 1433 端口的外部訪問局域網(wǎng)內(nèi)其他機(jī)器要連這臺(tái)庫(kù)時(shí)需要放行。管理員命令提示符執(zhí)行netsh advfirewall firewall add rule nameMSSQL-MS2000 dirin actionallow protocolTCP localport1433這條規(guī)則只放行 TCP 1433作用域默認(rèn)是所有網(wǎng)絡(luò)。如果老程序全部在本機(jī)這條防火墻規(guī)則可以不設(shè)但按經(jīng)驗(yàn)同事的機(jī)器要連過來測(cè)試直接開端口省得再叫一次 IT。4.3 老程序連不上庫(kù)時(shí)的 ODBC 排查方向sqlservr 在監(jiān)聽防火墻也放行了老程序還報(bào)錯(cuò)這時(shí)大概率是 ODBC 驅(qū)動(dòng)層的毛病。MSDE 2000 對(duì)應(yīng)驅(qū)動(dòng)程序是系統(tǒng)自帶的 “SQL Server” 驅(qū)動(dòng)sqlsrv32.dll不是后來 SQL Server 2005 起主推的 “SQL Server Native Client”。老 Delphi、PB、ASP 程序如果寫在連接串里指定了 ProviderSQLOLEDB就依賴系統(tǒng)的 OLEDB 提供程序Win10 32 位和 64 位兩套注冊(cè)表里都需要確認(rèn)。排查時(shí)先打開 32 位 ODBC 管理器看一下有沒有可用的 SQL Server 驅(qū)動(dòng)C:\Windows\SysWOW64\odbcad32.exe注意路徑里是 SysWOW64這是 32 位 ODBC 管理器的正確位置。如果系統(tǒng)里只有 64 位管理器C:\Windows\System32\odbcad32.exe打開后看到的數(shù)據(jù)源和 32 位程序看到的完全不同這也是常見誤區(qū)。在 32 位管理器里新建一個(gè)系統(tǒng) DSN選 “SQL Server” 驅(qū)動(dòng)服務(wù)器填.\MS2000然后按向?qū)y(cè)試連接。能通過說明驅(qū)動(dòng)正常不能通過按提示的錯(cuò)誤號(hào)定位是賬號(hào)還是協(xié)議問題。還有一類老程序用的是文件 DSN或者連接串里寫了Server機(jī)器名而沒有實(shí)例名這會(huì)導(dǎo)致程序嘗試連默認(rèn)實(shí)例。要么把程序連接配置改成機(jī)器名\MS2000要么把 MS2000 改成默認(rèn)實(shí)例重裝我一般建議改配置文件而不是重裝。5. 避坑Win10 裝 MSDE 2000 的 5 個(gè)高頻翻車點(diǎn)5.1 現(xiàn)象安裝器報(bào)“不支持此操作系統(tǒng)”直接退出這是最常見的攔截雙擊 setup.exe 后彈窗提示系統(tǒng)版本不受支持確定后安裝向?qū)?。原因不?Win10 不能運(yùn)行 SQL Server 2000 引擎而是 setup.exe 外殼做過硬性的操作系統(tǒng)版本檢查Win10 的版本號(hào)不在白名單里。解決方式就是繞開這個(gè)外殼直接以管理員身份運(yùn)行msiexec /i C:\msde2000\SQLMSDE.msi INSTANCENAMEMS2000 SECURITYMODESQL SAPWD你的強(qiáng)密碼 DISABLEAGENTYES /qn /lv install.log如果堅(jiān)持用 setup.exe可以右鍵屬性在兼容性里選擇 Windows 7但只對(duì)外殼有效安裝進(jìn)程內(nèi)部后續(xù)仍可能因路徑、權(quán)限問題回滾。我的習(xí)慣是只用 msiexec省事且日志完整。5.2 現(xiàn)象裝到一半報(bào) 25015安裝回滾安裝進(jìn)度條走到某個(gè)點(diǎn)后彈窗顯示錯(cuò)誤 25015注冊(cè)組件失敗之類隨后整體回滾服務(wù)也沒有創(chuàng)建。原因大概率是安裝目錄或臨時(shí)目錄位于中文路徑或者安全軟件攔截了注冊(cè)表寫入。解決方式是把整個(gè)安裝源放到純英文短路徑比如 C:\msde2000并提前關(guān)閉第三方殺軟和 Windows Defender 實(shí)時(shí)保護(hù)。再不行就手動(dòng)指定臨時(shí)目錄msiexec 支持設(shè)置 TMP 環(huán)境變量后執(zhí)行。安裝日志里出現(xiàn) “CustomAction” 和 “return value 3” 字樣時(shí)基本就是組件注冊(cè)動(dòng)作失敗逐條對(duì)照日志找到具體 dll 或 exe用 regsvr32 手動(dòng)注冊(cè)后再重試。5.3 現(xiàn)象服務(wù)啟動(dòng)后立刻停止安裝正常完成但啟動(dòng) SQL Server 服務(wù)時(shí)提示服務(wù)啟動(dòng)后又停止或者啟動(dòng)成功幾秒后進(jìn)程消失。先打開事件查看器里的應(yīng)用程序日志找到來源 “MSSQLSERVER” 或 “MSSQL$MS2000” 的錯(cuò)誤記錄如果錯(cuò)誤信息指向無法打開目錄或權(quán)限不足常見原因是安裝時(shí)實(shí)例目錄在 Program Files 下Network Service 賬戶沒有完全控制權(quán)限。解決方式是給安裝目錄添加權(quán)限或者直接把服務(wù)登錄身份改成本地系統(tǒng)賬戶。sc config MSSQL$MS2000 obj LocalSystem net start MSSQL$MS2000sc 命令里的obj LocalSystem指定服務(wù)以本地系統(tǒng)賬戶運(yùn)行后面等于號(hào)后面要保留一個(gè)空格。MSDE 2000 默認(rèn)服務(wù)賬戶是 LocalSystem即使改成 LocalSystem 仍啟動(dòng)失敗再看日志里是否提到端口被占用同一臺(tái)機(jī)器裝過其他 SQL Server 實(shí)例時(shí)可能搶占了 1433把新實(shí)例端口改成 1434 或固定成其他值即可。5.4 現(xiàn)象msi 文件雙擊沒反應(yīng)或提示無法打開很多新手拿到安裝包后雙擊 SQLMSDE.msi系統(tǒng)提示“無法打開此程序包”或者根本沒有任何反應(yīng)。原因通常是安裝了第三方 msi 修復(fù)工具篡改了系統(tǒng)默認(rèn)的 Installer 行為或者用戶當(dāng)前賬戶權(quán)限不夠。解決方案是不雙擊直接用管理員命令提示符執(zhí)行 msiexec。還見過一個(gè)特例文件從網(wǎng)絡(luò)共享或郵件里保存下來資源管理器鎖定了解壓屬性右鍵 msi 文件屬性里如果看到“解除鎖定”復(fù)選框先勾掉再執(zhí)行即可。5.5 現(xiàn)象卸載重裝時(shí)報(bào) 25002提示已有實(shí)例存在第一次安裝失敗或者裝完又要重裝msiexec 卸載后再次安裝卻報(bào)錯(cuò)誤 25002說已有相同名稱的實(shí)例存在。原因是最初安裝失敗時(shí)報(bào)錯(cuò)回滾不徹底Windows Installer 的注冊(cè)表里殘留了實(shí)例信息服務(wù)也可能還掛在系統(tǒng)里。解決方式先徹底清殘留net stop MSSQL$MS2000 msiexec /x C:\msde2000\SQLMSDE.msi INSTANCENAMEMS2000 /qn卸載命令執(zhí)行完再打開注冊(cè)表編輯器刪除HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MS2000整個(gè)鍵以及HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下凡是名稱帶 MSDE 2000 的項(xiàng)。然后把整個(gè)服務(wù)記錄也清掉sc delete MSSQL$MS2000最后重啟一次系統(tǒng)再重新安裝。這一步里最容易翻車的是只刪了安裝目錄就重裝注冊(cè)表殘留會(huì)反復(fù)觸發(fā) 25002所以搜注冊(cè)表時(shí)關(guān)鍵字不要只搜實(shí)例名還要搜 Desktop Engine。6. 搬遷到新環(huán)境的最后一步把 MSDE 2000 的數(shù)據(jù)導(dǎo)出來6.1 用 detach/attach 把整個(gè)數(shù)據(jù)庫(kù)搬走M(jìn)SDE 2000 裝好、服務(wù)穩(wěn)定運(yùn)行這只是開始真正要做的是把客戶的業(yè)務(wù)數(shù)據(jù)從這個(gè)老引擎里完整無損地搬出來。最省事的方式不是重新建表導(dǎo)數(shù)據(jù)而是分離數(shù)據(jù)庫(kù)文件再附加到目標(biāo) SQL Server 實(shí)例上。SQL Server 2000 的庫(kù)文件結(jié)構(gòu)很干凈一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)主文件 .mdf 和日志文件 .ldf放在安裝目錄\Data 下。分離后把這兩個(gè)文件拷貝到新機(jī)器附加一下表和存儲(chǔ)過程原樣保留。EXEC sp_detach_db yourdb;執(zhí)行上面這行 SQL把 yourdb 替換成實(shí)際數(shù)據(jù)庫(kù)名分離成功后文件就可以拷貝了。如果分離失敗提示數(shù)據(jù)庫(kù)正在使用先把對(duì)應(yīng)的客戶端程序退出必要時(shí)停掉 SQL Server 服務(wù)再拷文件。這個(gè)操作是 SQL Server 2000 時(shí)代的標(biāo)準(zhǔn)手法不依賴任何圖形工具。分離完成后把 .mdf 和 .ldf 拷貝到新機(jī)器 SQL Server 的 Data 目錄再執(zhí)行附加EXEC sp_attach_db yourdb, NC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\yourdb.mdf, NC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\yourdb_log.ldf;附加這條命令的路徑按新機(jī)器實(shí)際安裝目錄調(diào)整文件路徑要寫絕對(duì)路徑。如果目標(biāo)不是 SQL Server 2000/2005而是更新的 SQL Server Express附加時(shí)可能提示版本兼容問題那就改用導(dǎo)入導(dǎo)出方式用向?qū)нx擇本機(jī) MSDE 2000 作為數(shù)據(jù)源目標(biāo)選擇新實(shí)例逐表遷移。做完這一步整臺(tái) Win10 機(jī)器上那個(gè)老數(shù)據(jù)庫(kù)就算真正落地了。我的習(xí)慣是裝完立刻把 sa 密碼、實(shí)例名、固定端口記在一個(gè)文本文件里跟數(shù)據(jù)庫(kù)備份放一起這個(gè)年代能維護(hù) MSDE 2000 的人越來越少一條連接串信息能救回一晚上排查時(shí)間。希望這份安裝教程能幫你把老系統(tǒng)穩(wěn)當(dāng)?shù)匕徇M(jìn)新環(huán)境少踩幾個(gè)我當(dāng)年踩過的坑。本文還有配套的精品資源點(diǎn)擊獲取