Galat Pemulihan SQL Server - Akses ditolak

167

Saya membuat database pada mesin lokal saya dan kemudian melakukan backup yang disebut tables.baktable DataLabTables.

Saya memindahkan cadangan itu ke mesin jarak jauh tanpa tabel itu dan mencoba melakukan pemulihan tetapi mendapatkan kesalahan berikut:

System.Data.SqlClient.SqlError: Sistem operasi mengembalikan kesalahan '5 (Akses ditolak.)' Ketika mencoba 'RestoreContainer :: ValidateTargetForCreation' on 'c: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables .mdf '.

Bagaimana cara memperbaiki hak saya, jika itu masalahnya?

cdub
sumber

Jawaban:

540

Saya baru saja mengalami masalah ini dengan SQL Server 2012.

Ternyata yang harus saya lakukan adalah mencentang kotak bertanda 'Pindahkan semua file ke folder' pada bagian 'File':

masukkan deskripsi gambar di sini

(Klik untuk melihat gambar ukuran penuh)

Ini tentu saja mengasumsikan Anda memiliki versi SQL Server yang benar diinstal.

Pengasingan
sumber
13
Bekerja untuk saya juga. Adakah yang bisa menjelaskan mengapa ?
magnattic
3
Bisakah Anda juga membagikan bagaimana ini dapat dilakukan melalui skrip alih-alih UI?
FMFF
9
Saya punya masalah dengan 2014, perbaikan yang sama.
DaneEdw
3
Ini juga solusi bagi saya ketika membuat cadangan dari SQL Express dan mengembalikan ke SQL Server penuh
tarrball
11
SAYA PERLU MEMBERIKAN PELUKAN. Sekarang serius, saya akan mengatakan tidak kepada klien, jawaban Anda menyelamatkan proyek saya.
Marco Scabbiolo
30

Dari pesan kesalahan, dikatakan ada kesalahan saat memvalidasi target ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) dari operasi pemulihan Anda.

Kedengarannya seperti:

a) file itu sudah ada (karena Anda sudah memulihkannya sebelumnya) dan sedang digunakan oleh SQL Server

atau

b) direktori itu tidak ada sama sekali

Dalam pertanyaan Anda, Anda menyebutkan bahwa Anda membuat cadangan untuk tabel itu - itu bukan cara kerja cadangan SQL Server. Cadangan tersebut selalu merupakan keseluruhan basis data (atau setidaknya satu atau beberapa grup grup dari basis data itu).

Firasat saya adalah: Anda telah memulihkan basis data sebelumnya, dan sekarang, setelah pemulihan kedua, Anda tidak mencentang kotak "Timpa basis data yang ada" di wisaya pengembalian Anda - dengan demikian file yang ada tidak dapat ditimpa dan pemulihan gagal.

Pengguna yang menjalankan pemulihan di server jauh Anda jelas tidak memiliki akses ke direktori itu di server jauh.

C:\program files\.... adalah direktori yang dilindungi - pengguna normal (non-admin) tidak memiliki akses ke direktori ini (dan subdirektori).

Solusi termudah: coba letakkan file BAK Anda di tempat lain (mis. C:\temp) Dan pulihkan dari sana

marc_s
sumber
Saya mencoba di bawah C: \ temp tetapi kesalahan masih sama seperti di atas, dengan jalan yang sama seperti yang saya sebutkan pertama kali yang aneh
cdub
Saya klik kanan pada Database di SQL Management Studio, lalu Tasks -> restore
cdub
1
@marc_s thx, saya lupa mengedit opsi karena tidak ada direktori untuk file itu ... bukan ... MSSQL \ DataLabTables.mdf tetapi sebaliknya ... MSSQL \ Data \ DataLabTables.mdf
cdub
2
@marc_s: Komentar kecil pada bagian "dan sedang digunakan oleh SQL Server" dari opsi A yang tercantum di atas: Ternyata RESTOREperintah standar gagal jika file ada, bahkan jika itu tidak digunakan oleh SQL Server (misalnya MDF / File LDF tetap ada setelah pelepasan sebelumnya). Saya menemukan ini dalam implementasi log-pengiriman berbasis T-SQL kustom untuk migrasi besar dari ratusan DB selama beberapa minggu terakhir. Saya tidak yakin pesan kesalahan "akses ditolak", mungkin sesuatu yang kurang spesifik.
Tao
2
Saya harus secara manual mengganti nama file MDF / LDF yang ada sebelum saya dapat memulihkan melalui cadangan - memeriksa 'Timpa' tidak cukup.
Jamie Keeling
26

Saya mengalami masalah yang sama. Ternyata saya SQL Serverdan SQL Server Agentlayanan logon asberjalan di bawah Network Servicesakun yang tidak memiliki akses tulis untuk melakukan pemulihan cadangan.

Saya mengubah kedua layanan ini untuk masuk sebagai Local System Accountdan ini memperbaiki masalah.

Kutu
sumber
Ini bukan ide yang bagus. Ini menutupi masalah sebenarnya yang merupakan lokasi file yang Anda coba pulihkan bukan yang Anda inginkan.
mendeklarasikan
2
Layanan SQL Server saya berjalan di "NT Service \ MSSQLSERVER" menambahkan izin untuk pengguna ini ke data dan folder log bekerja untuk saya.
Tim Newton
Baik, ini membantu saya
Aliaksei Zhukau
9

Baru-baru ini saya menghadapi masalah ini dengan SQL 2008 R2 dan solusi di bawah ini bekerja untuk saya:

1) Buat database baru dengan nama yang sama dengan yang Anda coba kembalikan 2) Saat memulihkan, gunakan nama yang sama yang Anda gunakan di atas dan dalam opsi, klik opsi menimpa

Anda mungkin mencoba di atas jika solusi lain tidak berhasil.

Devin
sumber
6

Pencipta cadangan telah menginstal MSSql versi 10, jadi ketika ia mengambil cadangan itu juga menyimpan path file asli (untuk dapat mengembalikannya di lokasi yang sama), tetapi saya memiliki versi 11, sehingga tidak dapat menemukan direktori tujuan.

Jadi saya mengubah direktori file output ke C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \, dan itu berhasil mengembalikan database dengan sukses.

Sumber

Philluminati
sumber
6

Saya punya masalah serupa. Saya mencoba mengembalikan file .bak 2005, dan saya menerima kesalahan yang persis sama. Saya memilih opsi menimpa juga tidak berhasil.

solusi saya adalah memberikan akses pengguna SQL ke direktori yang dimaksud, dengan pergi ke folder dan mengedit hak akses melalui layar properti.

martijn
sumber
2

kehilangan beberapa jam untuk masalah ini juga. berhasil meskipun:

"Akses ditolak" dalam kasus saya benar-benar berarti "akses ditolak". Akun pengguna mssqlstudio pada perangkat windows saya TIDAK memiliki kendali penuh atas folder yang ditentukan dalam pesan kesalahan. Saya memberinya kendali penuh. akses tidak lagi ditolak dan pemulihan berhasil.

mengapa folder itu dikunci untuk studio? siapa tahu ? Saya punya cukup banyak pertanyaan untuk ditangani karena tanpa mencoba menjawab lebih banyak.

abraham tio
sumber
1

Saya punya masalah ini, saya login sebagai administrator dan itu memperbaiki masalah.

Rob Smith
sumber
Bekerja untuk saya juga untuk SSMS
v17
0

Skenario lain bisa jadi adalah adanya beberapa jalur basis data. Pertama, catat jalur tempat database baru saat ini disimpan. Jadi, jika Anda membuat database kosong baru dan kemudian melakukannya Tasks/Restore, pastikan jalur yang coba dipulihkan adalah direktori yang sama dengan tempat database kosong dibuat. Bahkan jika jalur pemulihan itu legal, Anda masih akan mendapatkan akses ditolak kesalahan jika itu bukan jalur saat ini yang sedang Anda kerjakan. Sangat mudah dikenali ketika jalur tidak legal, jauh lebih sulit dikenali ketika jalur itu legal, tetapi tidak jalur saat ini.

demongolem
sumber
0

Maaf karena saya tidak bisa berkomentar ...

Saya memiliki masalah yang sama. Dalam kasus saya masalahnya terkait dengan mencoba mengembalikan di folder server sql lama (yang ada di server). Ini karena cadangan server sql lama (yaitu SQL Server 2012 Backup) yang dikembalikan ke server sql baru (SQL Server 2014). Masalah sebenarnya tidak terlalu berbeda dari jawaban @marc_s. Lagi pula, saya hanya mengubah folder target ke folder DATA SQL Server baru.

bubi
sumber
0

Ini mungkin bukan solusi terbaik, tapi saya mencoba melakukan pemulihan di SQL Server 2005, tapi saya berubah menjadi SQL Server 2008 dan berhasil.

alansiqueira27
sumber
0

Punya masalah seperti ini. Kesalahan yang disebabkan oleh kompresi yang diaktifkan pada folder SQL Server.

Arman Hayots
sumber
0

Frnds ... Saya memiliki masalah yang sama ketika memperbaiki basis data dan mencoba setiap solusi tetapi tidak dapat diselesaikan. Kemudian saya mencoba menginstal ulang SQL 2005 dan masalah terpecahkan. Terakhir kali saya lupa untuk memeriksa opsi penyesuaian ketika menginstal SQL .. Ini muncul dua kali saat menginstal dan saya memeriksa hanya untuk itu ..

Nishant
sumber
0

Dalam kasus saya - saya harus memeriksa jalur Backup dari database dari tempat saya memulihkan. Saya sebelumnya telah memulihkannya dari jalur yang berbeda ketika saya melakukannya pertama kali. Saya memperbaiki jalur Cadangan untuk menggunakan jalur cadangan yang saya gunakan pertama kali dan berhasil!

SitecoreSyed
sumber
0

Saya akhirnya membuat folder baru untuk Data dan Log dan itu berfungsi dengan baik, pasti masalah izin folder / file.

reggaeguitar
sumber
0

Ini juga terjadi jika jalur benar, tetapi akun layanan bukan pemilik file data (namun masih memiliki hak yang cukup untuk akses baca / tulis). Ini dapat terjadi jika izin untuk file diatur ulang agar sesuai dengan izin folder (tentu saja, ketika layanan dihentikan).

Solusi termudah dalam hal ini adalah melepaskan setiap basis data dan melampirkannya kembali (karena ketika melampirkan pemilik diubah menjadi akun layanan).

Razvan Socol
sumber
-1

Coba ini:

Di jendela Restore DB wizard, pergi ke tab File, Hapus centang "Relokasi Semua file ke folder" kotak centang kemudian ubah tujuan mengembalikan dari C: ke beberapa drive lain. Kemudian lanjutkan dengan proses pemulihan reguler. Ini akan berhasil dipulihkan.

Raja Sekhar
sumber
-1

Saya memiliki masalah yang sama tetapi saya menggunakan sql server 2008 r2, Anda harus memeriksa opsi dan memverifikasi jalur di mana sql akan menyimpan file .mdf dan .ldf Anda harus memilih jalur instalasi server sql Anda. Saya memecahkan masalah saya dengan ini, saya harap ini membantu Anda.

Edgar Castillo
sumber
-2

Kemudian cobalah memindahkannya ke sub folder di bawah C :, tetapi verifikasi bahwa pengguna memiliki hak penuh pada folder yang Anda gunakan.

sqlKob
sumber