Triệu chứng
Khi bạn khôi phục cơ sở dữ liệu từ bản sao lưu bằng cách sử dụng tùy chọn thay thế trong Microsoft SQL Server 2012, tên tệp vật lý của cơ sở dữ liệu đã khôi phục xuất phát từ cơ sở dữ liệu sao lưu có thể ghi đè tên tệp vật lý của cơ sở dữ liệu hiện có. Ví dụ, hãy cân nhắc tình huống sau đây:
-
Bạn có hai phiên bản của SQL Server, InstanceA và InstanceB.
-
Bạn có một cơ sở dữ liệu có cùng tên, SQLDB, trên mỗi phiên bản của SQL Server.
-
Trên InstanceA, tên tệp dữ liệu cơ sở dữ liệu SQLDB là DB1_InstanceA. MDF và tên tệp nhật ký là DB1_InstanceA. LDF.
-
Trên InstanceB, tên tệp dữ liệu cơ sở dữ liệu SQLDB là DB1_InstanceB. MDF và tên tệp nhật ký là DB1_InstanceB. LDF.
-
Bạn tìm cách khôi phục một bản sao lưu của cơ sở dữ liệu SQLDB từ InstanceA trên cơ sở dữ liệu SQLDB từ InstanceB bằng cách sử dụng tùy chọn thay thế của lệnh khôi phục .
Trong trường hợp này, tên tệp vật lý trên SQLDB trên InstanceB sẽ được thay đổi thành DB1_InstanceA. MDF và DB1_InstanceA. LDF.
Nguyên nhân
Hành vi này là do thiết kế trong SQL Server 2012.
Cách giải quyết
Để giải quyết vấn đề này, không sử dụng tùy chọn thay thế của lệnh khôi phục . Thay vào đó, hãy dùng tùy chọn di chuyển .Lưu ý Tùy chọn di chuyển có cung cấp tùy chọn để thay đổi tên tệp thể chất.
Thông tin Bổ sung
Tùy chọn với di chuyển chỉ cần thiết cho lần đầu tiên bạn sử dụng lệnh khôi phục . Khi bạn tìm cách khôi phục cơ sở dữ liệu từ bản sao lưu, SQL Server so sánh các giá trị ngã ba phục hồi của cơ sở dữ liệu. Sau đó, tập sao lưu sẽ thực thi những thao tác sau đây, tùy thuộc vào việc những giá trị khớp với:
-
Nếu có một kết quả khớp, tập sao lưu vẫn tiếp tục dùng tên tệp của cơ sở dữ liệu đích.
-
Nếu các giá trị khác nhau, tập sao lưu sẽ thay thế tên tệp vật lý của cơ sở dữ liệu đích bằng cách dùng tên từ tập sao lưu.
Khi bạn dùng tùy chọn di chuyển cùng với lệnh khôi phục , các thao tác sau sẽ được thực hiện:
-
Một ngã ba phục hồi mới được tạo trên máy chủ đích.
-
Trên thao tác khôi phục tiếp theo, ID Fork phục hồi từ tập sao lưu được khớp với ID của máy chủ đích.
-
Một lệnh khôi phục được dùng cùng với tùy chọn thay thế sẽ giữ tên vật lý trên máy chủ đích.
Để biết thêm thông tin về lệnh khôi phục , hãy xem khôi phục (TRANSACT-SQL)