ไฟล์ mdf ไม่สามารถเขียนทับได้เมื่อกู้คืนฐานข้อมูลใน SQL Server


21

ฉันได้รับฐานข้อมูล A มีข้อมูลอยู่ในนั้น ฉันสร้างข้อมูลสำรองสำหรับ A เป็นไฟล์A.bak แล้วฉันจะสร้างฐานข้อมูลใหม่ที่ว่างเปล่าบีแล้วฉันพยายามที่จะเรียกคืน B จากA.bak แต่ SQL Serve บอกข้อผิดพลาดต่อไปนี้ให้ฉัน:

ไฟล์ 'C: \ SQL Directory \ DATA \ A.mdf' ไม่สามารถเขียนทับได้ มันถูกใช้โดยฐานข้อมูล 'A'

แต่ถ้าฉันลบ A ออกจาก SQL Server retore ก็ใช้ได้

ฉันไม่เข้าใจว่าทำไม SQL จำเป็นต้องเขียนไปยังไฟล์ฐานข้อมูลต้นฉบับในขณะเรียกคืนจากไฟล์สำรองข้อมูลแยกต่างหาก

ขอบคุณ ~

คำตอบ:


19

หากคุณกู้คืนฐานข้อมูล SQL Server จะพยายามกู้คืนข้อมูลทั้งหมดและไฟล์บันทึกไปยังตำแหน่งดั้งเดิมโดยค่าเริ่มต้น เนื่องจากตำแหน่งดั้งเดิมเหล่านั้นยังคงใช้งานอยู่โดยฐานข้อมูลดั้งเดิม ("A") การกู้คืนจึงล้มเหลว คุณต้องใช้คำสั่ง WITH MOVE เพื่อระบุตำแหน่งใหม่สำหรับไฟล์ทั้งหมดในฐานข้อมูล

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

อะไรแบบนั้นล่ะค่ะ ใช้ RESTORE FILELISTONLY จาก DISK ... เพื่อดูชื่อไฟล์โลจิคัลในการสำรองข้อมูลหากจำเป็น


11

WITH MOVE/ เป็นโซลูชั่นที่เหมาะสมในMOVET-SQL

อย่างไรก็ตามถ้าคุณต้องการใช้ GUI คุณสามารถไปที่ไฟล์และเปลี่ยนชื่อ:

  • a.MDF
  • a.NDF
  • a.LDF

ไปยัง

  • b.MDF
  • b.NDF
  • b.LDF

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


1
นอกจากนี้เมื่อเปลี่ยนชื่อฐานข้อมูลปลายทางในแท็บทั่วไป GUI จะอัปเดตชื่อ Restore As โดยอัตโนมัติ
Wouter

0

เมื่อคุณกู้คืนการสำรองข้อมูลคุณสามารถระบุ datafiles เพื่อเรียกคืน

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


0

คุณใช้ตัวเลือก REPLACE ทั้งในคำสั่ง TSQL หรือเป็นช่องทำเครื่องหมายที่เลือก? หรือคุณสามารถเปลี่ยนชื่อไฟล์และเรียกใช้ฐานข้อมูลอย่างอื่น

คุณจะพบว่าเป็นการยากที่จะกู้คืนฐานข้อมูลที่ใช้อยู่เล็กน้อย ... คุณจะต้องฆ่ากระบวนการโดยใช้ฐานข้อมูล หรือปล่อย / ลบฐานข้อมูลก่อนปิดการเชื่อมต่อ (ซึ่งอาจเป็นวิธีที่ง่ายที่สุด); หรือตั้งค่าฐานข้อมูลที่คุณต้องการเขียนทับลงในบางสิ่งเช่นโหมดผู้ใช้ที่ถูก จำกัด ด้วยการย้อนกลับในทันทีดังนั้นหวังว่าจะมีเพียง DBA เท่านั้นที่สามารถใช้ได้ หรือแม้แต่หยุด SQL Server และเริ่มต้นใหม่ - หวังว่าจะได้รับการกู้คืนก่อนใครก็ตามที่ใช้ฐานข้อมูลนั้น

PS ทำการสำรองข้อมูลของฐานข้อมูลที่คุณกำลังจะเขียนทับในกรณี


0

หากใครบางคนค้นหาวิธีแก้ปัญหาใน GUI ของ Management Studio หลังจากใช้Optionsหน้านี้แล้วและเปิดใช้งานOverwrite the existing database (WITH REPLACE)ตัวเลือก:

เพียงคลิกในRestore Asคอลัมน์และเปลี่ยนชื่อไฟล์ของ*.mdfไฟล์และ*.ldfไฟล์

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