เกิดข้อผิดพลาด 3154 ขณะกู้คืนข้อมูลสำรองโดยใช้ WITH REPLACE


16

ฉันติดตั้ง SQL 2012 ด้วย SP1 บนคอมพิวเตอร์ของฉันแล้ว test.bakฉันทำสำรองของฐานข้อมูล

ฉันมีฐานข้อมูลที่มีชื่อtest2ซึ่งเป็นฐานข้อมูลเดียวกัน แต่ข้อมูลเปลี่ยนไป

ฉันต้องการกู้คืนtest.bakผ่านtest2ฐานข้อมูล

ฉันมักจะได้รับข้อผิดพลาด:

ข้อผิดพลาด 3154: ชุดการสำรองข้อมูลจะมีการสำรองข้อมูลของฐานข้อมูลอื่นนอกเหนือจากฐานข้อมูลที่มีอยู่

ฉันเหนื่อย:

  1. ฉันถูก cliked test2 -> Restore database -> From device

    ฉันเลือกtest.bakและตรวจสอบWith Replaceแต่ฉันได้รับข้อผิดพลาด

  2. จากนั้นฉันก็พยายามคลิกขวา test2 -> Restore file and filegroups

    ฉันเลือกtest.bakและตรวจสอบWith Replaceแต่ฉันได้รับข้อผิดพลาด

ฉันสามารถลบฐานข้อมูลเก่าของฉันแล้วคืนค่าการสำรองข้อมูลของฉันด้วยชื่อที่ถูกต้อง แต่เมื่อฉันใช้ SQL 2008 ฉันไม่มีปัญหาในการกู้คืนฐานข้อมูลที่มีอยู่

ดูเหมือนว่าตั้งแต่ฉันใช้ SQL2012 ฉันได้รับข้อผิดพลาดนี้มากมาย!

คำตอบ:


12

คุณควรใช้WITH REPLACEและหลีกเลี่ยงการใช้สิ่งที่เป็นจุดและคลิกใน Management Studio เพราะพวกมันไม่ยืดหยุ่นและมักจะมีข้อบกพร่อง

สิ่งนี้ใช้ได้กับฉัน:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

นอกจากนี้คุณควรตรวจสอบให้แน่ใจว่าเมื่อคุณสำรองฐานข้อมูลที่คุณใช้WITH INITและ / หรือไม่ชี้อุปกรณ์ที่ไฟล์ที่มีการสำรองข้อมูลอยู่แล้ว (เนื่องจากอาจไม่ใช่ฐานข้อมูลเดียวกันที่คุณสำรองไว้ตอนนี้โดยเฉพาะอย่างยิ่งถ้าคุณนำชื่อซ้ำมาใช้เช่นtest... )


@AaronBertrand fyi คุณลักษณะนั้นมีอยู่ สิ่งที่ฉันมักจะทำคือใช้ UI และเขียนสคริปต์เพื่อให้แน่ใจว่าทุกอย่างเรียบร้อยดี มีเป็นจำนวนมากที่มีข้อบกพร่องใช่
usr

2

1) ใช้WITH REPLACEในขณะที่ใช้RESTOREคำสั่ง

2) DROPฐานข้อมูลเก่าซึ่งขัดแย้งและกู้คืนอีกครั้งโดยใช้RESTOREคำสั่ง

ไม่มีปัญหากับรุ่นของ SQL Server แอรอนชี้ให้เห็นฉันยังสามารถกู้คืนฐานข้อมูลจาก 2008 ถึง 2012 และรุ่นเดียวกันได้เช่นกัน


2

คุณกำลังกู้คืนฐานข้อมูลผิด อย่าคิดว่าเป็น "การกู้คืนtest2ข้อมูลสำรองจากtest" คิดว่า "กู้คืนข้อมูลสำรองของฉันtestแต่เปลี่ยนชื่อเป็นtest2" คุณสามารถเลือกงานการกู้คืนจากtestและใส่test2ในฟิลด์ "ถึงฐานข้อมูล:"

แอรอนกล่าวถึงเรียนรู้สคริปต์แทนที่จะอาศัยตัวช่วยสร้าง - มันชัดเจนว่าเกิดอะไรขึ้นที่ไหน


2

คุณยังสามารถทำได้ แต่ต้องใช้ขั้นตอนเพิ่มเติม

เปิดกล่องโต้ตอบการคืนค่าทำการเลือกตามปกติของคุณต่อนิสัย 2008 ถ้าฐานข้อมูลดั้งเดิมคือ DB ให้เลือกอุปกรณ์ DB.bak สำหรับ Source และเปลี่ยนชื่อปลายทางเป็น DBTest จากนั้นภายใต้เลือกหน้า (มุมซ้ายบน) ที่คุณเห็นทั่วไป / ไฟล์ / ตัวเลือก - เลือกไฟล์ ดูในตาราง คุณจะเห็นคอลัมน์สำหรับชื่อไฟล์ดั้งเดิมและเรียกคืนเป็นชื่อไฟล์ ขยายหลังและพิมพ์ในชื่อใหม่ด้วยตนเอง (ถ้าชื่อเดิมของฐานข้อมูลคือ DB และคุณต้องการสร้าง DBTest แล้วเปลี่ยน .... \ DB.mdf เป็น ... \ DBTest.mdf เป็นต้น)

สิ่งนี้จะยอมรับไฟล์. bak ของคุณสำหรับ DB เป็นแหล่งที่มาและ DBTest เป็นปลายทาง คุณอาจต้องไปที่หน้าตัวเลือกแล้วเลือกด้วยการแทนที่ ฉันต้องการเหตุผลอื่น ๆ ดังนั้นฉันจึงไม่สามารถทดสอบได้หากไม่มีตัวเลือกนี้


2

คำตอบที่ถูกต้องตามที่ระบุไว้คือการใช้WITH REPLACEตัวเลือก

ฉันแค่ต้องการชี้ให้เห็นว่าคุณสามารถได้รับข้อผิดพลาดในคำถามแม้ในขณะที่ใช้WITH REPLACEถ้าคุณพยายามกู้คืนจากการสำรองข้อมูลที่แตกต่างกัน


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

0

หวังว่ามันจะใช้ได้

  1. เมื่อคุณตั้งค่าเส้นทางเพื่อเรียกคืนไฟล์
  2. คลิก "ตัวเลือก" ที่ด้านซ้ายมือ
  3. ทำเครื่องหมายที่ช่องทำเครื่องหมาย - "ปิดการเชื่อมต่อที่มีอยู่ไปยังฐานข้อมูลปลายทาง"
  4. คลิกตกลง ป้อนคำอธิบายรูปภาพที่นี่

-4

โปรดหยุดเซิร์ฟเวอร์ที่ทำงานอยู่ของคุณจากนั้นคืนค่า db มันจะช่วยคุณออก :)

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