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

SQL Server 2000 MSDE 靜默安裝與資料庫自動部署完整方案

     編輯:關於SqlServer

針對桌面應用需內嵌資料庫引擎的場景,SQL Server 2000 MSDE (Microsoft SQL Server 2000 Desktop Engine) 提供免版稿、可重新散發的輕量版本。本文詳述 MSI 合併模組整合、ORCA 修改安裝包、自動建立實例與資料庫還原的完整自動化流程。

第一階段:MSDE 合併模組整合至安裝專案

  1. 下載 MSDE 2000 SP3 安裝包 (官方連結)
  2. 解壓取得 MSM 目錄下的合併模組:
    • 必要:SQLRun01.msm, SQLRun02.msm, SQLRun03.msm
    • 語系:1033 子目錄下對應 .msm
    • 可選:REPL.msm, DMO.msm (視複寫/管理需求)
  3. Visual Studio 安裝專案 → 加入合併模組 → 選取上述 .msm 檔案
  4. 設定專案屬性 SearchPath 指向 MSM 所在路徑
  5. 建置產出 Setup.msi

第二階段:ORCA 修改 MSI 實現靜默配置

下載 ORCA 工具 編輯 MSI 資料表:

資料表動作欄位/值用途
Property新增列SqlInstanceName = MyServer指定具名實例名稱
Property新增列SqlSecurityMode = 1混合驗證模式
Property新增列SqlSaPwd = StrongP@ssw0rdsa 密碼 (註:早期版本可能不生效)
Property新增列DISABLENETWORKPROTOCOLS = 0啟用網路協定
InstallExecuteSequence修改SetPropSQLMSDEInstalled: Sequence 206 → 102調整執行順序
InstallExecuteSequence修改RemoveExistingProducts: Sequence 1525 → 6601避免過早移除舊版

第三階段:應用程式啟動時自動還原資料庫

方案 A:安裝類別 (Installer Class) + 批次檔

' Installer Class (VB.NET)
Public Overrides Sub Install(stateSaver As IDictionary)
    MyBase.Install(stateSaver)
    Dim installPath As String = Assembly.GetExecutingAssembly().Location
    installPath = IO.Path.GetDirectoryName(installPath)

    ' 複製備份檔至暫存目錄
    CopyDirectory(installPath & "\TempDB", "C:\TempDB")

    ' 執行還原批次
    If Not ExecuteRestore("C:\TempDB\Restore.bat") Then
        Me.Uninstall(stateSaver) ' 失敗回滾
    End If
End Sub

' Restore.bat
osql -E -S .\MyServer -i C:\TempDB\Restore.sql

' Restore.sql
USE master
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'TruckDB')
    DROP DATABASE TruckDB
RESTORE DATABASE TruckDB
FROM DISK = 'C:\TempDB\TruckDB.bak'
WITH MOVE 'TruckDB_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL$MyServer\Data\TruckDB.mdf',
     MOVE 'TruckDB_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL$MyServer\Data\TruckDB.ldf',
     REPLACE, STATS = 10

方案 B:SMO 程式化還原 (SQL Server 2005+ 推薦)

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

var server = new Server(@".\MyServer");
var restore = new Restore {
    Database = "TruckDB",
    Action = RestoreActionType.Database,
    Devices = { new BackupDeviceItem(@"C:\TempDB\TruckDB.bak", DeviceType.File) },
    ReplaceDatabase = true,
    NoRecovery = false
};
restore.SqlRestore(server);

常見問題與解決

  • sa 密碼不生效:MSDE 早期版本已知問題,建議安裝後用 osql -E 登入再 sp_password 修改
  • 實例名稱衝突:安裝前檢查註冊表 HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL
  • 防火牆阻擋:需開放 TCP 1433 或具名管道
  • 權限不足:安裝需本機管理員權限,Vista+ 需 UAC 提升

現代化替代方案

新專案建議改用:

  • SQL Server Express LocalDB:零配置、用戶模式、支援完整 T-SQL、(LocalDB)\MSSQLLocalDB
  • SQLite:單一檔案、零配置、跨平台、適合輕量嵌入
  • SQL Server Express:完整功能、可遠程連線、10GB 資料庫限制
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved