.ldb 文件角色
Microsoft Jet 數據庫引擎 4.0 中,.ldb (Lock Database) 文件是多用戶共享訪問的核心協調機制,記錄:
- 當前打開數據庫的用戶 (電腦名 + 安全名)
- 記錄級鎖定信息 (頁/字節範圍鎖)
- 防止衝突寫入、協調並發訪問
自動生命週期管理
創建時機
- 以**共享模式**打開
.mdb 時自動創建
- 同目錄、同名 (如
Northwind.mdb → Northwind.ldb)
- 獨佔模式打開不創建
刪除條件
- **最後一個用戶關閉**數據庫時自動刪除
- 例外保留情況:
- 用戶無文件夾刪除權限
- 數據庫被標記為**損壞** (保留鎖信息供恢復分析)
共享訪問協調機制
用戶追蹤
.ldb 文件每 32 字節一條記錄:
結構 (簡化):
- 電腦名 (固定長度)
- 登入用戶名 / 安全標識
- 佔位/保留字節
最大支援 255 個並發用戶 (Jet 4.0 限制)。
頁級鎖定
- Jet 引擎以「頁」(4KB) 為單位鎖定
- 寫入前獲取獨佔鎖,讀取獲取共享鎖
- 鎖信息存儲在 .ldb 中,進程間可見
常見問題與排查
殘留 .ldb 文件不刪除
- 檢查是否有進程仍持有文件句柄 (Process Explorer / Handle 工具)
- 確認文件夾權限:用戶需 Modify/Delete 權限
- 若數據庫損壞:需修復數據庫後 .ldb 才會正常清理
「無法鎖定文件」錯誤
- 網絡共享未啟用 SMB 文件鎖支援
- 防病毒軟件攔截 .ldb 讀寫
- 文件系統不支援鎖定 (如某些 NAS、FAT32 分區)
性能優化建議
- 將 .mdb/.ldb 放在本地磁盤而非網絡共享 (極大提升鎖性能)
- 拆分大數據庫,減少單文件並發壓力
- 遷移至 SQL Server Express (無 .ldb 機制,行級鎖、更強並發)
開發者調試技巧
// 讀取 .ldb 當前用戶 (需獨佔讀取或複製文件)
Dim fs As New FileStream("Northwind.ldb", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim br As New BinaryReader(fs)
' 解析 32 字節記錄...
fs.Close()
可構建管理工具顯示「誰正在使用數據庫」、強制踢出用戶 (刪除對應記錄 + 關閉其連接)。
遷移建議
Access 適合單機/小團隊輕量應用。多人併發、Web 應用、大數據量場景**強烈建議遷移至 SQL Server / SQLite / PostgreSQL**,徹底擺脫 .ldb 限制。