Trong quá trình làm việc với hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2012, thao tác Attach (đính kèm) một cơ sở dữ liệu từ tệp .MDF và .LDF là bước quan trọng giúp khôi phục hoặc chuyển dữ liệu từ môi trường này sang môi trường khác. Tuy nhiên, không ít người dùng gặp phải lỗi không thể attach được Database, gây gián đoạn quá trình làm việc và ảnh hưởng đến hiệu suất hệ thống.
Bài viết này sẽ phân tích nguyên nhân phổ biến dẫn đến lỗi không attach được Database trong SQL Server 2012, đồng thời đưa ra các phương pháp khắc phục hiệu quả và dễ thực hiện.
1. Lỗi không Attach được Database trong SQL 2012 là gì?

Lỗi không attach được database trong SQL Server 2012 là tình trạng khi bạn cố gắng gắn (attach) file cơ sở dữ liệu – thường là file .mdf (data file) và .ldf (log file) – vào SQL Server, nhưng quá trình đó thất bại. Khi lỗi xảy ra, SQL Server không thể đọc hoặc xử lý các file này để đưa database vào trạng thái hoạt động.
2. Nguyên nhân gây ra lỗi không Attach được Database trong SQL 2012?
– Vấn đề về Quyền Truy Cập (Permissions Issues):
- Tài khoản dịch vụ SQL Server không có quyền đọc/ghi trên file MDF và LDF.
- Người dùng thực hiện thao tác attach không có đủ quyền hạn cần thiết trong SQL Server (ví dụ:
CREATE DATABASE).
– File Đang Được Sử Dụng (File in Use):
- File database (
.mdfhoặc.ldf) đang bị khóa bởi một tiến trình khác (ví dụ: một instance SQL Server khác, phần mềm diệt virus).
– Không Tương Thích Phiên Bản (Version Incompatibility):
- Đang cố gắng attach một database được tạo bởi phiên bản SQL Server mới hơn (ví dụ: SQL Server 2014, 2016,…) vào SQL Server 2012.
– File Database Bị Hỏng (Corrupted Database Files):
- File dữ liệu (
.mdf) hoặc file log (.ldf) bị lỗi, hư hỏng.
– Đường Dẫn File Không Chính Xác (Incorrect File Paths):
- Đường dẫn được cung cấp đến file
.mdfhoặc.ldftrong quá trình attach là sai hoặc file không tồn tại ở đường dẫn đó.
– Vấn Đề Với File Log (.ldf):
- File log (
.ldf) bị thiếu. - File log (
.ldf) không khớp với file data (.mdf), có thể do thuộc về một database khác hoặc một phiên bản khác của cùng database.
– Tên Database Đã Tồn Tại:
- Đang cố gắng attach một database với tên đã được sử dụng bởi một database khác trên cùng instance SQL Server.
– Lỗi Liên Quan Đến Full-Text Catalog:
- Nếu database sử dụng Full-Text Indexing, có thể có vấn đề với đường dẫn hoặc trạng thái của Full-Text Catalog.
– Trạng Thái Database Không Hợp Lệ:
- Database có thể đã ở trạng thái không ổn định (ví dụ: “Suspect”, “Recovery Pending”) trước khi được detach.
– Database Chưa Được Detach Sạch Sẽ (Not Cleanly Detached):
- Nếu database không được detach một cách đúng đắn từ instance SQL Server trước đó, nó có thể vẫn còn một số tham chiếu hoặc trạng thái chưa hoàn tất khiến việc attach gặp khó khăn.
3. Cách sửa lỗi không Attach được Database trong SQL 2012?
Cách 1: Lỗi Quyền Truy Cập File (Permission Errors)
– Tìm đến thư mục chứa file .mdf và .ldf của database.
– Nhấp chuột phải vào từng file (hoặc thư mục chứa chúng), chọn “Properties”.
– Chuyển qua tab “Security”.
– Nhấn “Edit…” rồi “Add…”.
– Nhập tên tài khoản dịch vụ SQL Server (ví dụ: NT SERVICE\MSSQLSERVER hoặc NT SERVICE\MSSQL$TEN_INSTANCE_CUA_BAN nếu là named instance). Nhấn “Check Names” rồi “OK”.
– Chọn tài khoản vừa thêm và cấp quyền “Full control” (hoặc ít nhất là “Read” và “Write”).
– Nhấn “OK” để lưu thay đổi.
Cách 2: Lỗi File Đang Được Sử Dụng (File in Use Errors)
Kiểm tra các instance SQL Server khác: Đảm bảo không có instance SQL Server nào khác trên máy đang attach hoặc sử dụng database này. Nếu có, hãy detach database đó khỏi instance kia trước.
Tạm thời vô hiệu hóa phần mềm diệt virus: Một số phần mềm diệt virus có thể khóa file khi quét. Hãy thử tạm thời tắt tính năng bảo vệ thời gian thực hoặc thêm thư mục chứa file database vào danh sách loại trừ.
Đóng các ứng dụng liên quan: Đảm bảo không có ứng dụng nào khác đang mở hoặc truy cập các file này.
Khởi động lại SQL Server Service:
- Mở SQL Server Configuration Manager.
- Tìm “SQL Server Services”.
- Nhấp chuột phải vào instance SQL Server của bạn (ví dụ: “SQL Server (MSSQLSERVER)”) và chọn “Restart”.
Sử dụng công cụ: Dùng công cụ như Process Explorer (từ Microsoft Sysinternals) để tìm xem tiến trình nào đang giữ file.
Cách 3: Lỗi Phiên Bản Không Tương Thích (Version Incompatibility Errors)
Attach database đó vào một instance SQL Server có phiên bản bằng hoặc cao hơn phiên bản của database.
Sử dụng tính năng “Generate Scripts” (trong SQL Server Management Studio – SSMS) để tạo script schema và dữ liệu. Khi tạo script, trong phần “Advanced Scripting Options”, hãy chọn phiên bản SQL Server đích là “SQL Server 2012”.
Chạy script đã tạo trên instance SQL Server 2012 của bạn để tạo lại database.
Hoặc sử dụng SQL Server Integration Services (SSIS) để di chuyển dữ liệu.
Cách 4: Lỗi File Database Bị Hỏng (Corruption Errors)
Thử attach với tùy chọn ATTACH_REBUILD_LOG (nếu file log bị hỏng hoặc thiếu):
CREATE DATABASE TenDatabaseCuaBan
ON (FILENAME = ‘C:\DuongDan\Den\TenFile.mdf’)
FOR ATTACH_REBUILD_LOG;
Chạy DBCC CHECKDB với tùy chọn sửa lỗi (cẩn thận vì có thể mất dữ liệu): Nếu bạn có thể attach database ở chế độ EMERGENCY hoặc SINGLE_USER:
ALTER DATABASE TenDatabaseCuaBan SET EMERGENCY;
DBCC CHECKDB (TenDatabaseCuaBan, REPAIR_ALLOW_DATA_LOSS); — HOẶC REPAIR_REBUILD
ALTER DATABASE TenDatabaseCuaBan SET MULTI_USER;
Leave a Reply