ข้อผิดพลาดการคืนค่า SQL Server - การเข้าถึงถูกปฏิเสธ


167

ฉันสร้างฐานข้อมูลบนเครื่องท้องถิ่นของฉันแล้วทำสำรองข้อมูลที่เรียกว่าของตารางtables.bakDataLabTables

ฉันย้ายข้อมูลสำรองนั้นไปยังเครื่องระยะไกลที่ไม่มีตารางนั้นและพยายามทำการกู้คืน แต่ได้รับข้อผิดพลาดต่อไปนี้:

System.Data.SqlClient.SqlError: ระบบปฏิบัติการคืนข้อผิดพลาด '5 (การเข้าถึงถูกปฏิเสธ)' ในขณะที่พยายาม 'RestoreContainer :: ValidateTargetForCreation' บน 'c: \ Program SQL Server \ MSSQL.1 DataLabTables .mdf'

ฉันจะแก้ไขสิทธิ์ของฉันได้อย่างไรหากเป็นปัญหา

คำตอบ:


539

ฉันเพิ่งมีปัญหานี้กับ SQL Server 2012

ปรากฎทั้งหมดที่ฉันต้องทำคือทำเครื่องหมายที่ช่อง 'ย้ายไฟล์ทั้งหมดไปยังโฟลเดอร์' ในส่วน 'ไฟล์':

ป้อนคำอธิบายรูปภาพที่นี่

(คลิกเพื่อดูภาพขนาดเต็ม)

แน่นอนว่าคุณได้ติดตั้ง SQL Server เวอร์ชันที่ถูกต้องแล้ว


13
ทำงานให้ฉันเช่นกัน ทุกคนสามารถอธิบายว่าทำไม ?
magnattic

3
คุณสามารถแบ่งปันวิธีการนี้ทำได้ด้วยสคริปต์แทนที่จะใช้ UI หรือไม่
FMFF

9
ฉันมีปัญหานี้กับปี 2014 การแก้ไขเดียวกัน
DaneEdw

3
นี่ก็เป็นวิธีการแก้ปัญหาสำหรับฉันเมื่อสำรองจาก SQL Express และการฟื้นฟูบน SQL Server เต็ม
tarrball

10
ฉันต้องการให้คุณกอด ตอนนี้อย่างจริงจังฉันกำลังจะบอกว่าไม่มีให้ลูกค้าคำตอบของคุณบันทึกโครงการของฉัน
Marco Scabbiolo

30

จากข้อความแสดงข้อผิดพลาดระบุว่ามีข้อผิดพลาดเมื่อตรวจสอบเป้าหมาย ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) ของการดำเนินการกู้คืนของคุณ

ฟังดูเหมือน:

ก) ไฟล์นั้นมีอยู่แล้ว (เพราะคุณได้กู้คืนมาก่อนหน้านี้แล้ว) และใช้งานโดย SQL Server

หรือ

b) ไดเรกทอรีนั้นไม่มีอยู่จริง

ในคำถามของคุณคุณพูดถึงว่าคุณได้สร้างการสำรองข้อมูลสำหรับตารางนั้น - นั่นไม่ใช่วิธีการสำรองข้อมูลของ SQL Server การสำรองข้อมูลเหล่านั้นเป็นฐานข้อมูลทั้งหมดเสมอ (หรืออย่างน้อยหนึ่งหรือหลายกลุ่มไฟล์จากฐานข้อมูลนั้น)

ลางสังหรณ์ของฉันคือ: คุณได้กู้คืนฐานข้อมูลนั้นก่อนหน้านี้และตอนนี้เมื่อคืนค่าครั้งที่สองคุณไม่ได้ทำเครื่องหมายที่ช่อง "เขียนทับฐานข้อมูลที่มีอยู่" ในตัวช่วยสร้างการคืนค่า - ดังนั้นไฟล์ที่มีอยู่ไม่สามารถเขียนทับได้

ผู้ใช้ที่เรียกใช้การคืนค่าบนเซิร์ฟเวอร์ระยะไกลของคุณไม่สามารถเข้าถึงไดเรกทอรีนั้นบนเซิร์ฟเวอร์ระยะไกลได้

C:\program files\.... เป็นไดเรกทอรีที่มีการป้องกัน - ผู้ใช้ปกติ (ไม่ใช่ผู้ดูแลระบบ) ไม่สามารถเข้าถึงไดเรกทอรีนี้ (และไดเรกทอรีย่อย)

ทางออกที่ง่ายที่สุด: ลองวางไฟล์ BAK ของคุณที่อื่น (เช่นC:\temp) และเรียกคืนจากตรงนั้น


ฉันพยายามภายใต้ C: \ temp แต่ข้อผิดพลาดยังคงเหมือนเดิมกับเส้นทางเดียวกันกับที่ฉันพูดถึงครั้งแรกซึ่งเป็นเรื่องแปลก
cdub

ฉันคลิกขวาที่ฐานข้อมูลใน SQL Management Studio จากนั้น Tasks -> restore
cdub

1
@marc_s ขอบคุณฉันลืมแก้ไขตัวเลือกเนื่องจากไม่มีไดเรกทอรีสำหรับไฟล์นั้น ... ไม่ใช่ ... MSSQL \ DataLabTables.mdf แต่แทนที่ ... MSSQL \ Data \ DataLabTables.mdf
cdub

2
@marc_s: ความคิดเห็นเล็กน้อยในส่วน "และใช้งานโดย SQL Server" ตัวเลือกรายการด้านบน: เปลี่ยนRESTOREคำสั่งมาตรฐานล้มเหลวหากไฟล์มีอยู่แม้ว่าจะไม่ได้ใช้งานโดย SQL Server (เช่น MDF / ไฟล์ LDF ยังคงอยู่หลังจากที่ปลดออกก่อนหน้า) ฉันเจอสิ่งนี้ในการปรับใช้การส่งบันทึกตาม T-SQL แบบกำหนดเองสำหรับการย้ายฐานข้อมูลที่สำคัญหลายร้อยฐานในช่วงสองสามสัปดาห์ที่ผ่านมา ฉันไม่แน่ใจว่าข้อความแสดงข้อผิดพลาดคือ "การเข้าถึงถูกปฏิเสธ" อาจมีบางอย่างที่เฉพาะเจาะจงน้อยลง
เทาท

2
ฉันต้องเปลี่ยนชื่อไฟล์ MDF / LDF ที่มีอยู่ด้วยตนเองก่อนที่จะกู้คืนผ่านการสำรองข้อมูล - การตรวจสอบ 'เขียนทับ' ไม่เพียงพอ
Jamie Keeling

26

ฉันมีปัญหาเดียวกัน ปรากฎว่าฉันSQL ServerและSQL Server Agentบริการlogon asกำลังทำงานภายใต้Network Servicesบัญชีที่ไม่ได้มีการเข้าถึงการเขียนเพื่อทำการคืนค่าการสำรองข้อมูล

ฉันเปลี่ยนบริการทั้งสองนี้เพื่อเข้าสู่ระบบด้วยLocal System Accountวิธีนี้และแก้ไขปัญหาได้แล้ว


นี่ไม่ใช่ความคิดที่ดี มันปกปิดปัญหาที่แท้จริงซึ่งเป็นตำแหน่งไฟล์ที่คุณพยายามกู้คืนไม่ใช่สิ่งที่คุณต้องการ
ประกาศ

2
บริการ SQL Server ของฉันทำงานที่ "NT Service \ MSSQLSERVER" การเพิ่มสิทธิ์สำหรับผู้ใช้รายนี้ให้กับข้อมูลและโฟลเดอร์บันทึกที่ใช้งานได้สำหรับฉัน
ทิมนิวตัน

ไม่
เป็นไร

9

เมื่อเร็ว ๆ นี้ฉันประสบปัญหานี้กับ SQL 2008 R2 และโซลูชันด้านล่างนี้ใช้งานได้สำหรับฉัน:

1) สร้างฐานข้อมูลใหม่ด้วยชื่อเดียวกับที่คุณพยายามกู้คืน 2) ในขณะที่กู้คืนใช้ชื่อเดียวกันกับที่คุณใช้ด้านบนและในตัวเลือกคลิกตัวเลือกเขียนทับ

คุณอาจให้ภาพด้านบนหากโซลูชันอื่นไม่ทำงาน


6

ผู้สร้างการสำรองข้อมูลมีการติดตั้ง MSSql เวอร์ชัน 10 ดังนั้นเมื่อเขาทำการสำรองข้อมูลมันจะจัดเก็บพา ธ ไฟล์ดั้งเดิม (เพื่อให้สามารถกู้คืนได้ในตำแหน่งเดียวกัน) แต่ฉันมีเวอร์ชัน 11 ดังนั้นจึงไม่สามารถหาไดเรกทอรีปลายทางได้

ดังนั้นฉันจึงเปลี่ยนไดเรกทอรีไฟล์ผลลัพธ์เป็น C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ และมันก็สามารถกู้คืนฐานข้อมูลได้สำเร็จ

แหล่ง


6

ฉันมีปัญหาที่คล้ายกัน ฉันพยายามกู้คืนไฟล์. bak 2548 และฉันได้รับข้อผิดพลาดเดียวกันทั้งหมด ฉันเลือกตัวเลือกเขียนทับและไม่มีประโยชน์

โซลูชันของฉันคืออนุญาตให้ผู้ใช้ SQL เข้าถึงไดเรกทอรีที่เป็นปัญหาโดยไปที่โฟลเดอร์และแก้ไขสิทธิ์การเข้าถึงผ่านหน้าจอคุณสมบัติ


2

เสียเวลาสองสามชั่วโมงในการแก้ไขปัญหานี้ด้วย รับมันไปแม้ว่า:

"การเข้าถึงถูกปฏิเสธ" ในกรณีของฉันหมายความว่า "การเข้าถึงถูกปฏิเสธ" จริงๆ บัญชีผู้ใช้ของ mssqlstudio บนอุปกรณ์ windows ของฉันไม่สามารถควบคุมโฟลเดอร์ที่ระบุในข้อความแสดงข้อผิดพลาดได้อย่างเต็มที่ ฉันให้มันควบคุมเต็มรูปแบบ การเข้าถึงไม่ถูกปฏิเสธอีกต่อไปและการกู้คืนสำเร็จ

ทำไมโฟลเดอร์ถูกล็อคไว้สำหรับสตูดิโอ ใครจะรู้ ? ฉันมีคำถามมากพอที่จะจัดการกับมันโดยไม่ต้องพยายามตอบเพิ่มเติม


1

ฉันมีปัญหานี้ฉันเข้าสู่ระบบในฐานะผู้ดูแลระบบและแก้ไขปัญหาได้


ทำงานให้ฉันเช่นกันสำหรับ SSMS v17
Nandolcs

0

สถานการณ์อื่นอาจมีอยู่ของหลายเส้นทางฐานข้อมูล ก่อนอื่นให้จดเส้นทางที่เก็บฐานข้อมูลใหม่ในปัจจุบัน ดังนั้นหากคุณสร้างฐานข้อมูลเปล่าใหม่จากนั้นTasks/Restoreให้ตรวจสอบให้แน่ใจว่าเส้นทางที่การคืนค่ากำลังพยายามใช้นั้นเป็นไดเรกทอรีเดียวกันกับที่ฐานข้อมูลเปล่าถูกสร้างขึ้นแม้ว่าเส้นทางคืนค่าจะถูกกฎหมายคุณจะยังคงถูกปฏิเสธการเข้าถึง ข้อผิดพลาดหากไม่ใช่เส้นทางปัจจุบันที่คุณกำลังทำงานด้วย ง่ายต่อการตรวจจับเมื่อเส้นทางไม่ถูกกฎหมายยากที่จะตรวจจับได้เมื่อเส้นทางนั้นถูกกฎหมาย แต่ไม่ใช่เส้นทางปัจจุบัน


0

ขออภัยเพราะฉันไม่สามารถแสดงความคิดเห็น ...

ผมมีปัญหาเหมือนกัน. ในกรณีของฉันปัญหาเกี่ยวข้องกับการพยายามกู้คืนในโฟลเดอร์เซิร์ฟเวอร์ sql เก่า (ที่มีอยู่บนเซิร์ฟเวอร์) นี่คือสาเหตุที่การสำรองข้อมูลเซิร์ฟเวอร์ sql เก่า (เช่นการสำรองข้อมูล SQL Server 2012) คืนค่าในเซิร์ฟเวอร์ sql ใหม่ (SQL Server 2014) ปัญหาที่แท้จริงไม่แตกต่างจากคำตอบ @marc_s มากเกินไป อย่างไรก็ตามฉันเปลี่ยนเฉพาะโฟลเดอร์เป้าหมายเป็นโฟลเดอร์ SQL Server DATA ใหม่


0

นี่อาจไม่ใช่วิธีที่ดีที่สุด แต่ฉันพยายามกู้คืนที่ SQL Server 2005 แต่ฉันเปลี่ยนเป็น SQL Server 2008 และใช้งานได้


0

มีปัญหาเช่นนี้ ข้อผิดพลาดเกิดจากการเปิดใช้งานการบีบอัดในโฟลเดอร์ SQL Server


0

Frnds ... ฉันมีปัญหาเดียวกันในขณะที่การคืนค่าฐานข้อมูลและลองทุกวิธีแก้ปัญหา แต่ไม่สามารถแก้ไขได้ จากนั้นฉันพยายามติดตั้ง SQL 2005 อีกครั้งและปัญหาได้รับการแก้ไข ครั้งสุดท้ายที่ฉันลืมที่จะตรวจสอบตัวเลือกการปรับแต่งในขณะที่ instlling SQL .. มันมาสองครั้งในขณะที่ติดตั้งและฉันตรวจสอบมันสำหรับคนเท่านั้น ..


0

ในกรณีของฉัน - ฉันต้องตรวจสอบเส้นทางสำรองของฐานข้อมูลจากตำแหน่งที่ฉันกู้คืน ก่อนหน้านี้ฉันได้กู้คืนจากเส้นทางที่แตกต่างเมื่อฉันทำครั้งแรก ฉันแก้ไขเส้นทางสำรองเพื่อใช้เส้นทางสำรองที่ฉันใช้ครั้งแรกและใช้งานได้!


0

ฉันลงเอยด้วยการสร้างโฟลเดอร์ใหม่สำหรับ Data and Logs และทำงานได้อย่างถูกต้องจะต้องเป็นปัญหาเกี่ยวกับสิทธิ์ของโฟลเดอร์ / ไฟล์


0

สิ่งนี้จะเกิดขึ้นหากเส้นทางนั้นถูกต้อง แต่บัญชีบริการไม่ใช่เจ้าของไฟล์ข้อมูล (แต่ก็ยังมีสิทธิ์เพียงพอสำหรับการเข้าถึงแบบอ่าน / เขียน) สิ่งนี้อาจเกิดขึ้นได้หากการอนุญาตสำหรับไฟล์ถูกรีเซ็ตให้ตรงกับการอนุญาตของโฟลเดอร์ (แน่นอนในขณะที่บริการหยุดทำงาน)

ทางออกที่ง่ายที่สุดในกรณีนี้คือการแยกแต่ละฐานข้อมูลและแนบอีกครั้ง (เพราะเมื่อการแนบเจ้าของถูกเปลี่ยนเป็นบัญชีบริการ)


-1

ลองสิ่งนี้:

ในหน้าต่างตัวช่วยสร้างการคืนค่าฐานข้อมูลให้ไปที่แท็บไฟล์ยกเลิกการเลือก "ย้ายที่เก็บไฟล์ทั้งหมดไปยังโฟลเดอร์" จากนั้นเปลี่ยนปลายทางการคืนค่าจาก C: เป็นไดรฟ์อื่น จากนั้นดำเนินการตามกระบวนการกู้คืนปกติ มันจะได้รับการกู้คืนสำเร็จ


-1

ฉันมีปัญหาเดียวกัน แต่ฉันใช้ sql server 2008 r2 คุณต้องตรวจสอบตัวเลือกและตรวจสอบเส้นทางที่ sql จะบันทึกไฟล์. mdf และ. ldf คุณต้องเลือกเส้นทางของการติดตั้งเซิร์ฟเวอร์ sql ของคุณ ฉันแก้ไขปัญหาของฉันด้วยสิ่งนี้ฉันหวังว่ามันจะช่วยคุณ


-2

จากนั้นลองย้ายไปยังโฟลเดอร์ย่อยภายใต้ C: แต่ตรวจสอบว่าผู้ใช้มีสิทธิ์อย่างเต็มที่ในโฟลเดอร์ที่คุณใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.