Lỗi khôi phục máy chủ SQL - Truy cập bị từ chối


167

Tôi đã tạo một cơ sở dữ liệu trên máy cục bộ của mình và sau đó thực hiện sao lưu được gọi là tables.bakbảng DataLabTables.

Tôi đã chuyển bản sao lưu đó sang một máy từ xa không có bảng đó và cố gắng thực hiện khôi phục nhưng gặp lỗi sau:

System.Data.SqlClient.SqlError: Hệ điều hành đã trả về lỗi '5 (Truy cập bị từ chối.)' Trong khi thử 'RestoreContainer :: ValidateTargetForCreation' trên 'c: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables .mdf '.

Làm cách nào để sửa quyền của tôi, nếu đó là vấn đề?

Câu trả lời:


539

Tôi vừa gặp vấn đề này với SQL Server 2012.

Hóa ra tất cả những gì tôi phải làm là đánh dấu vào ô được đánh dấu 'Di dời tất cả các tệp vào thư mục' trên phần 'Tệp':

nhập mô tả hình ảnh ở đây

(Nhấn vào đây để xem hình ảnh kích thước đầy đủ)

Tất nhiên, điều này giả sử bạn đã cài đặt phiên bản SQL Server chính xác.


13
Làm việc cho tôi là tốt. Bất cứ ai có thể giải thích tại sao ?
Magnattic

3
Bạn cũng có thể vui lòng chia sẻ làm thế nào điều này có thể được thực hiện thông qua tập lệnh thay vì UI?
FMFF

9
Tôi đã có vấn đề này với năm 2014, sửa chữa tương tự.
DaneEdw

3
Đây cũng là giải pháp cho tôi khi sao lưu từ SQL Express và khôi phục vào SQL Server đầy đủ
trò chuyện

10
TÔI CẦN CHO BẠN MỘT HUG. Bây giờ, nghiêm túc, tôi chuẩn bị nói không với khách hàng, câu trả lời của bạn đã cứu dự án của tôi.
Marco Scabbiolo

30

Từ thông báo lỗi, nó báo lỗi khi xác thực mục tiêu ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) của hoạt động khôi phục của bạn.

Nghe như:

a) tệp đó đã tồn tại (vì bạn đã khôi phục nó trước đó) và đang được SQL Server sử dụng

hoặc là

b) thư mục đó hoàn toàn không tồn tại

Trong câu hỏi của bạn, bạn đã đề cập rằng bạn đã tạo một bản sao lưu cho bảng đó - đó không phải là cách các bản sao lưu SQL Server hoạt động. Những bản sao lưu đó luôn là toàn bộ cơ sở dữ liệu (hoặc ít nhất một hoặc một vài nhóm từ cơ sở dữ liệu đó).

Linh cảm của tôi là: bạn đã khôi phục cơ sở dữ liệu đó trước đây và bây giờ, khi khôi phục lần thứ hai, bạn đã không kiểm tra hộp kiểm "Ghi đè cơ sở dữ liệu hiện tại" trong trình hướng dẫn khôi phục của bạn - do đó tệp hiện có không thể bị ghi đè và khôi phục thất bại.

Người dùng đang chạy khôi phục trên máy chủ từ xa của bạn rõ ràng không có quyền truy cập vào thư mục đó trên máy chủ từ xa.

C:\program files\.... là một thư mục được bảo vệ - người dùng bình thường (không phải quản trị viên) không có quyền truy cập vào thư mục này (và các thư mục con của nó).

Giải pháp dễ nhất: thử đặt tệp BAK của bạn ở nơi khác (ví dụ C:\temp) và khôi phục tệp từ đó


Tôi đã thử theo C: \ temp nhưng lỗi vẫn giống như trên, với cùng một đường dẫn như lần đầu tiên tôi đề cập là lạ
cdub

Tôi nhấp chuột phải vào Cơ sở dữ liệu trong SQL Management Studio, sau đó Nhiệm vụ -> khôi phục
cdub

1
@marc_s thx, tôi quên chỉnh sửa các tùy chọn vì không có thư mục cho tệp đó ... không phải ... MSSQL \ DataLabTables.mdf mà thay vào đó ... MSSQL \ Data \ DataLabTables.mdf
cdub

2
@marc_s: Nhận xét nhỏ về phần "và được sử dụng bởi SQL Server" của tùy chọn A được liệt kê ở trên: Hóa ra một RESTORElệnh tiêu chuẩn không thành công nếu tệp tồn tại, ngay cả khi SQL Server không sử dụng (ví dụ: MDF / Các tệp LDF vẫn được giữ nguyên sau khi tách ra trước đó). Tôi đã bắt gặp điều này trong một triển khai vận chuyển nhật ký dựa trên T-SQL tùy chỉnh cho việc di chuyển chính hàng trăm DB trong vài tuần qua. Tôi không chắc chắn thông báo lỗi là "truy cập bị từ chối", có thể là một cái gì đó ít cụ thể hơn.
Tao

2
Tôi đã phải đổi tên thủ công các tệp MDF / LDF hiện có trước khi tôi có thể khôi phục thông qua bản sao lưu - kiểm tra 'Ghi đè' là không đủ.
Jamie Keeling

26

Tôi đã có cùng một vấn đề. Hóa ra là tôi SQL ServerSQL Server Agentcác dịch vụ logon asđang chạy trong Network Servicestài khoản không có quyền truy cập ghi để thực hiện khôi phục sao lưu.

Tôi đã thay đổi cả hai dịch vụ này để đăng nhập Local System Accountvà điều này đã khắc phục vấn đề.


Đây không phải là ý tưởng tốt. Nó che giấu vấn đề thực sự là vị trí tệp bạn đang cố gắng khôi phục không phải là những gì bạn dự định.
Decouet

2
Dịch vụ SQL Server của tôi đang chạy tại "NT Service \ MSSQLSERVER" thêm quyền cho người dùng này vào thư mục dữ liệu và nhật ký làm việc cho tôi.
Tim Newton

Tốt thôi, điều này đã giúp tôi
Aliaksei Zhukau

9

Gần đây tôi gặp phải vấn đề này với SQL 2008 R2 và giải pháp dưới đây có hiệu quả với tôi:

1) Tạo cơ sở dữ liệu mới có cùng tên với cơ sở dữ liệu bạn đang cố khôi phục 2) Trong khi khôi phục, hãy sử dụng cùng tên bạn đã sử dụng ở trên và trong các tùy chọn, nhấp vào tùy chọn ghi đè

Bạn có thể đưa ra một cú đánh ở trên nếu các giải pháp khác không hoạt động.


6

Trình tạo sao lưu đã cài đặt MSSql phiên bản 10, vì vậy khi anh ta sao lưu, nó cũng lưu đường dẫn tệp gốc (để có thể khôi phục nó ở cùng một vị trí), nhưng tôi đã có phiên bản 11, vì vậy nó không thể tìm thấy thư mục đích.

Vì vậy, tôi đã thay đổi thư mục tệp đầu ra thành C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSQuerySERVER \ MSSQL \ DATA \ và nó có thể khôi phục cơ sở dữ liệu thành công.

Nguồn


6

Tôi đã có một vấn đề tương tự. Tôi đã cố gắng khôi phục tệp .bak năm 2005 và tôi đã nhận được chính xác lỗi tương tự. Tôi đã chọn tùy chọn ghi đè cũng không có kết quả.

Giải pháp của tôi là cấp cho người dùng SQL quyền truy cập vào thư mục được đề cập, bằng cách vào thư mục và chỉnh sửa quyền truy cập thông qua màn hình thuộc tính.


2

mất một vài giờ cho vấn đề này quá. mặc dù nó đã đi:

"truy cập bị từ chối" trong trường hợp của tôi thực sự có nghĩa là "truy cập bị từ chối". Tài khoản người dùng của mssqlstudio trên thiết bị windows của tôi KHÔNG có toàn quyền kiểm soát thư mục được chỉ định trong thông báo lỗi. tôi đã cho nó toàn quyền kiểm soát. truy cập không còn bị từ chối và khôi phục đã thành công.

Tại sao thư mục bị khóa cho studio? ai biết ? tôi có đủ câu hỏi để giải quyết như vậy mà không cần cố gắng trả lời thêm.


1

Tôi gặp vấn đề này, tôi đăng nhập với tư cách quản trị viên và nó đã khắc phục sự cố.


Làm việc cho tôi cũng như cho SSMS v17
Nandolcs

0

Một kịch bản khác có thể là sự tồn tại của nhiều đường dẫn cơ sở dữ liệu. Đầu tiên, hãy lưu ý đường dẫn nơi cơ sở dữ liệu mới hiện đang được lưu trữ. Vì vậy, nếu bạn tạo một cơ sở dữ liệu trống mới và sau đó thực hiện Tasks/Restore, hãy đảm bảo rằng đường dẫn mà khôi phục đang cố sử dụng là cùng thư mục mà cơ sở dữ liệu trống đã được tạo. Ngay cả khi đường dẫn khôi phục là hợp pháp, bạn vẫn sẽ bị từ chối truy cập lỗi nếu nó không phải là đường dẫn hiện tại bạn đang làm việc. Rất dễ phát hiện khi đường dẫn không hợp pháp, khó phát hiện hơn nhiều khi đường dẫn hợp pháp, nhưng không phải là đường dẫn hiện tại.


0

Xin lỗi vì tôi không thể bình luận ...

Tôi đã từng gặp vấn đề tương tự. Trong trường hợp của tôi, vấn đề liên quan đến việc cố gắng khôi phục trong thư mục máy chủ sql cũ (tồn tại trên máy chủ). Điều này là do sao lưu máy chủ sql cũ (tức là Sao lưu SQL Server 2012) được khôi phục trong máy chủ sql mới (SQL Server 2014). Vấn đề thực sự không quá khác biệt với câu trả lời @marc_s. Dù sao, tôi chỉ thay đổi thư mục đích sang thư mục DATA SQL Server mới.


0

Đây có thể không phải là giải pháp tốt nhất, nhưng tôi đã cố gắng thực hiện khôi phục tại SQL Server 2005, nhưng tôi đã thay đổi thành SQL Server 2008 và nó đã hoạt động.


0

Có vấn đề như thế này. Lỗi do nén kích hoạt trên các thư mục SQL Server.


0

Frnds ... Tôi gặp vấn đề tương tự trong khi khôi phục cơ sở dữ liệu và thử mọi giải pháp nhưng không thể giải quyết được. Sau đó, tôi đã cố gắng cài đặt lại SQL 2005 và vấn đề đã được giải quyết. Thực sự lần trước tôi đã quên kiểm tra tùy chọn tùy chỉnh trong khi cài đặt SQL .. Nó đến hai lần trong khi cài đặt và tôi chỉ kiểm tra nó cho những người ..


0

Trong trường hợp của tôi - tôi đã phải kiểm tra lại đường dẫn Sao lưu của cơ sở dữ liệu từ nơi tôi đang khôi phục. Trước đây tôi đã khôi phục nó từ một con đường khác khi tôi làm nó lần đầu tiên. Tôi đã sửa đường dẫn Sao lưu để sử dụng đường dẫn sao lưu mà tôi đã sử dụng lần đầu tiên và nó đã hoạt động!


0

Tôi đã kết thúc việc tạo các thư mục mới cho Dữ liệu và Nhật ký và nó hoạt động đúng, phải là một vấn đề về quyền của thư mục / tệp.


0

Điều này cũng xảy ra nếu các đường dẫn là chính xác, nhưng tài khoản dịch vụ không phải là chủ sở hữu của các tệp dữ liệu (tuy nhiên nó vẫn có đủ quyền để truy cập đọc / ghi). Điều này có thể xảy ra nếu quyền cho các tệp được đặt lại để khớp với quyền của thư mục (tất nhiên, trong khi dịch vụ bị dừng).

Giải pháp đơn giản nhất trong trường hợp này là tách từng cơ sở dữ liệu và đính kèm lại (vì khi đính kèm, chủ sở hữu được thay đổi thành tài khoản dịch vụ).


-1

Thử cái này:

Trong cửa sổ Trình hướng dẫn Khôi phục DB, chuyển đến tab Tệp, bỏ chọn hộp kiểm "Di dời tất cả các tệp vào thư mục" sau đó thay đổi đích khôi phục từ C: sang một số ổ đĩa khác. Sau đó tiến hành quá trình khôi phục thường xuyên. Nó sẽ được khôi phục thành công.


-1

Tôi gặp vấn đề tương tự nhưng tôi đã sử dụng máy chủ sql 2008 r2, bạn phải kiểm tra các tùy chọn và xác minh các đường dẫn nơi sql sẽ lưu các tệp .mdf và .ldf bạn phải chọn đường dẫn cài đặt máy chủ sql của mình. Tôi đã giải quyết vấn đề của tôi với điều này, tôi hy vọng nó sẽ giúp bạn.


-2

Sau đó thử di chuyển nó vào thư mục con trong C:, nhưng xác minh rằng người dùng có toàn quyền đối với thư mục bạn sử dụng.

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.