首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

Access .ldb 鎖文件詳解:自動創建刪除機制、共享鎖定與損壞恢復

     編輯:.NET 實例教學

.ldb 文件角色

Microsoft Jet 數據庫引擎 4.0 中,.ldb (Lock Database) 文件是多用戶共享訪問的核心協調機制,記錄:

  • 當前打開數據庫的用戶 (電腦名 + 安全名)
  • 記錄級鎖定信息 (頁/字節範圍鎖)
  • 防止衝突寫入、協調並發訪問

自動生命週期管理

創建時機

  • 以**共享模式**打開 .mdb 時自動創建
  • 同目錄、同名 (如 Northwind.mdb → Northwind.ldb)
  • 獨佔模式打開不創建

刪除條件

  • **最後一個用戶關閉**數據庫時自動刪除
  • 例外保留情況:
    1. 用戶無文件夾刪除權限
    2. 數據庫被標記為**損壞** (保留鎖信息供恢復分析)

共享訪問協調機制

用戶追蹤

.ldb 文件每 32 字節一條記錄:

結構 (簡化):
- 電腦名 (固定長度)
- 登入用戶名 / 安全標識
- 佔位/保留字節

最大支援 255 個並發用戶 (Jet 4.0 限制)。

頁級鎖定

  • Jet 引擎以「頁」(4KB) 為單位鎖定
  • 寫入前獲取獨佔鎖,讀取獲取共享鎖
  • 鎖信息存儲在 .ldb 中,進程間可見

常見問題與排查

殘留 .ldb 文件不刪除

  1. 檢查是否有進程仍持有文件句柄 (Process Explorer / Handle 工具)
  2. 確認文件夾權限:用戶需 Modify/Delete 權限
  3. 若數據庫損壞:需修復數據庫後 .ldb 才會正常清理

「無法鎖定文件」錯誤

  • 網絡共享未啟用 SMB 文件鎖支援
  • 防病毒軟件攔截 .ldb 讀寫
  • 文件系統不支援鎖定 (如某些 NAS、FAT32 分區)

性能優化建議

  1. 將 .mdb/.ldb 放在本地磁盤而非網絡共享 (極大提升鎖性能)
  2. 拆分大數據庫,減少單文件並發壓力
  3. 遷移至 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 限制。

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