針對桌面應用需內嵌資料庫引擎的場景,SQL Server 2000 MSDE (Microsoft SQL Server 2000 Desktop Engine) 提供免版稿、可重新散發的輕量版本。本文詳述 MSI 合併模組整合、ORCA 修改安裝包、自動建立實例與資料庫還原的完整自動化流程。
MSM 目錄下的合併模組:
SQLRun01.msm, SQLRun02.msm, SQLRun03.msm1033 子目錄下對應 .msmREPL.msm, DMO.msm (視複寫/管理需求).msm 檔案SearchPath 指向 MSM 所在路徑Setup.msi下載 ORCA 工具 編輯 MSI 資料表:
| 資料表 | 動作 | 欄位/值 | 用途 |
|---|---|---|---|
| Property | 新增列 | SqlInstanceName = MyServer | 指定具名實例名稱 |
| Property | 新增列 | SqlSecurityMode = 1 | 混合驗證模式 |
| Property | 新增列 | SqlSaPwd = StrongP@ssw0rd | sa 密碼 (註:早期版本可能不生效) |
| Property | 新增列 | DISABLENETWORKPROTOCOLS = 0 | 啟用網路協定 |
| InstallExecuteSequence | 修改 | SetPropSQLMSDEInstalled: Sequence 206 → 102 | 調整執行順序 |
| InstallExecuteSequence | 修改 | RemoveExistingProducts: Sequence 1525 → 6601 | 避免過早移除舊版 |
' 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
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);
osql -E 登入再 sp_password 修改HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL新專案建議改用:
(LocalDB)\MSSQLLocalDB