Cơ sở dữ liệu không thể được nâng cấp vì nó chỉ đọc hoặc có tệp chỉ đọc. Làm cho cơ sở dữ liệu hoặc tệp có thể ghi và chạy lại phục hồi


8

Tôi đã nhận được một tệp cơ sở dữ liệu và các hướng dẫn để tải nó là cài đặt SQL Server 2005 và sau đó đính kèm bằng SQL Server Management Studio.

Sau khi cài đặt mọi thứ, tôi đã cố đính kèm tập tin MDF nhưng sau đó nó cho tôi biết:

việc tìm kiếm thư mục cho tập tin "D: {folderName} {tên tệp} .LDF" không thành công với lỗi hệ điều hành 21 (không tìm thấy lỗi)

Một tệp LDF không đi kèm với cơ sở dữ liệu, vì vậy có lẽ nó sẽ được tạo tự động.

Bây giờ, ổ D là nơi ổ đĩa CD của tôi nằm, vì vậy nó sẽ không tìm thấy gì ở đó. Cũng không có bất kỳ may mắn nào để cố gắng tạo ra bất cứ điều gì ở đó.

  1. Tại sao nó cố gắng tìm kiếm một tệp nhật ký tại một đường dẫn cụ thể? Tại sao không phải là nơi tập tin cơ sở dữ liệu?

  2. Làm thế nào tôi có thể đính kèm cơ sở dữ liệu này?

Tôi nhận ra rằng khi tôi chọn một cơ sở dữ liệu để đính kèm, ba mục xuất hiện dưới "chi tiết cơ sở dữ liệu". một loại gỗ MDF, NDF và LDF. "Đường dẫn tệp hiện tại" của LDF trỏ đến đường dẫn ổ D ở trên, vì vậy tôi đã xóa nó.

Lần này, khi tôi nhấn "OK", tôi nhận được một thông báo lỗi khác:

Cơ sở dữ liệu không thể được nâng cấp vì nó chỉ đọc hoặc có tệp chỉ đọc.
Làm cho cơ sở dữ liệu hoặc tập tin có thể ghi và chạy lại phục hồi.

Lỗi kích hoạt tập tin. Tên vật lý D: {thư mục} {tệp} .LDF có thể không chính xác.
Tệp nhật ký mới "..." đã được tạo. (Máy chủ Microsoft SQL, Lỗi: 3415)

Vì vậy, bây giờ nó tạo ra một tệp nhật ký mới trong cùng thư mục với tệp cơ sở dữ liệu, điều này thật tuyệt, nhưng có vẻ như có vấn đề bảo mật.

Thông tin thêm:

  • Các hướng dẫn yêu cầu tôi sử dụng tên đăng nhập "sa", dường như là tài khoản sysadmin. Tôi được kết nối với phiên bản SQL Server của mình bằng thông tin đăng nhập đó.

  • Tôi đã kiểm tra các thuộc tính tập tin rằng nó không chỉ đọc. Thư mục cũng không chỉ đọc. Tất cả các ACL được cho phép.

  • Tôi không thể đính kèm cơ sở dữ liệu. Khi tôi cố gắng đính kèm, nó sẽ đưa ra một thông báo lỗi với "đính kèm cơ sở dữ liệu không thành công".

  • Đóng SSMS và mở lại với tư cách Quản trị viên không có sự khác biệt.

  • select SERVERPROPERTY('ProductVersion')trả về 9.00.4035.00. Có một tệp khác đi kèm với cơ sở dữ liệu có tên là "dbdata.ini" có nội dung "IsSql2000 = 1" vì vậy có lẽ nó được tải trong SQL Server 2000. Tôi sẽ xem liệu tôi có thể làm cho nó hoạt động vào năm 2000 không.

Câu trả lời:


8

Đây không phải là một vấn đề truy cập. Vấn đề là bạn đang đính kèm cơ sở dữ liệu vào phiên bản SQL Server cao hơn phiên bản .mdfban đầu được đính kèm và nó chỉ đọc. SQL Server đang cố nâng cấp cơ sở dữ liệu như một phần của tệp đính kèm và không thể vì db ở chế độ chỉ đọc.

Nếu cơ sở dữ liệu của bạn nằm trong READ_ONLY(có vẻ như là trường hợp dựa trên thông báo lỗi của bạn), thì bạn cần tất cả các tệp (cả nhật ký và dữ liệu) để đính kèm theo tài liệu Technet . Nếu bạn nhìn vào FOR ATTACHmệnh đề, nó mô tả rõ ràng rằng:

... đối với cơ sở dữ liệu chỉ đọc, nhật ký không thể được xây dựng lại vì tệp chính không thể được cập nhật. Do đó, khi bạn đính kèm cơ sở dữ liệu chỉ đọc có nhật ký không khả dụng, bạn phải cung cấp tệp nhật ký hoặc tệp trong FOR ATTACHmệnh đề.

Bạn cần đi kèm .ldfcho cơ sở dữ liệu. Tôi sẽ liên hệ với bất cứ ai cung cấp cơ sở dữ liệu và yêu cầu họ cung cấp cả tệp .mdf.ldftệp. Sau đó, bạn có thể đính kèm nó với cú pháp sau:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

Các READ_ONLYtình trạng không thể được loại bỏ khỏi cơ sở dữ liệu mà không cần gắn nó bởi vì nó được lưu trữ trong các siêu dữ liệu của cơ sở dữ liệu. Để thay đổi nó, cơ sở dữ liệu cần phải được trực tuyến và đính kèm.

Một cách khác là yêu cầu sao lưu cơ sở dữ liệu. Bạn có thể giải quyết một số vấn đề này dễ dàng hơn nếu bạn đang thực hiện khôi phục cơ sở dữ liệu thay vì đính kèm.


1
Sử dụng LOG ONvới kết hợp ldfkhông giải quyết được vấn đề cho tôi
Mugen

25

Tôi chỉ tìm thấy một bài trả lời câu hỏi này:

Điều này có thể không hoạt động trong mọi trường hợp, nhưng tôi đã cố gắng cài đặt Cơ sở dữ liệu tìm kiếm ngữ nghĩa và gặp lỗi tương tự.

Bạn phải chạy SQL Server Management Studio với tư cách quản trị viên và nó hoạt động.


9
  1. Mở máy tính của tôi lên.
  2. Xác định vị trí thư mục chính nơi bạn đã giữ tệp ".mdf" và ".ldf".
  3. Nhấp chuột phải vào thư mục nhấp vào "Thuộc tính".
  4. Trong cửa sổ thuộc tính, nhấp vào "Bảo mật"
  5. Nhấp vào nút "Chỉnh sửa"
  6. Bật "Đọc và thực thi", "Đọc", "Viết" cho người dùng được liệt kê và áp dụng các thay đổi cho các thư mục sau cho đến các tệp cơ sở dữ liệu.
  7. Hãy thử đính kèm tệp ".mdf"

cảm ơn, các cửa sổ cũ của tôi đã biến mất và tôi nghĩ các tệp này bị khóa bởi hệ điều hành đó. nhưng chỉ cần thay đổi quyền
saber tabatabaee yazdi

1

Nhấp chuột phải vào các tệp .mdfvà từng .ldftệp một lần và nhấp vào 'thuộc tính', sau đó ở dưới cùng có ghi 'tệp này đến từ một máy tính khác và có thể bị chặn để giúp bảo vệ nút bấm này của máy tính này.

Sau đó nhấp chuột phải, -> thuộc tính, -> tab bảo mật -> nút chỉnh sửa và chọn 'người dùng' và cấp quyền kiểm soát hoàn toàn.


1

Trong trường hợp của tôi, độ phân giải là đăng nhập vào SSMS với chế độ Windows Auth thay vì người dùng sql có vai trò sysadmin. chỉ cần đảm bảo rằng người dùng mà bạn đã sử dụng trong chế độ auth của windows có quyền thích hợp (trường hợp của tôi là sysadmin) Tôi đoán là người dùng sql không có quyền thích hợp. (Tôi gặp phải vấn đề này khi tôi di chuyển / sao chép mdf và ldf từ khác máy móc)


0

Không phải quyền trong trường hợp của chúng tôi, đó là phiên bản của SSMS!

(đó là năm 2012 tại địa phương nơi chúng tôi gặp lỗi, nhưng đã hoạt động khi chúng tôi sử dụng SSMS 17+ từ một hộp từ xa)


-1

Tôi cũng đã có vấn đề này đi lên. Tôi đã hỗ trợ khách hàng của mình bằng cách khởi động lại dịch vụ SQL và có thể đính kèm MDF theo quy trình thông thường.


-2

1) Mở Trình quản lý cấu hình máy chủ Sql

2) Chọn Dịch vụ máy chủ Sql (khung bên trái)

3) Doubleclick SqlServer của bạn (bên phải)

4) Chọn tab Đăng nhập

5) Chọn nút radio tích hợp và thay đổi hệ thống cục bộ hoặc dịch vụ mạng trong hộp tổ hợp.

6) Nhấp vào Ok.

7) Đính kèm tập tin mdf trong trình quản lý máy chủ sql.


-2

Dịch vụ SQL Server của bạn có thể đang chạy trong tài khoản NT Service \ MSSQLServer . Thay đổi nó Hệ thống cục bộ sẽ cung cấp cho nó quyền truy cập.

Có lẽ là tốt nhất để tạo một người dùng và cung cấp cho người dùng đó toàn quyền đối với thư mục mà các tập tin đang ở.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.