ชุดการสำรองข้อมูลจะเก็บข้อมูลสำรองของฐานข้อมูลอื่นนอกเหนือจากที่มีอยู่


485

ฉันพยายามกู้คืนไฟล์สำรองของ SQL Server สำหรับฐานข้อมูลของฉัน แต่มีข้อผิดพลาดเกิดขึ้นดังนี้:

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

ฐานข้อมูลของฉันใน SQL Server 2008 และไฟล์สำรองอยู่ในปี 2005

มีปัญหาอะไรบ้าง?


95
คำตอบที่ได้รับการโหวตอย่างสูงด้านล่างเป็นค้อนขนาดใหญ่ที่จะแคร็ก ปัญหาน่าจะเป็นไปได้มากที่สุดที่คุณไม่ได้เลือกตัวเลือก " เขียนทับฐานข้อมูลที่มีอยู่ (With REPLACE) " ในหน้าต่างRestore> Options ฉันมีปัญหานี้จากบรรทัดคำสั่งใช้และได้รับการแก้ไขโดยใช้WITH MOVE WITH REPLACE, MOVE
James McCormack

ฉันมีข้อผิดพลาดเดียวกันกับหนึ่งในฐานข้อมูลของฉัน แต่เฉพาะเมื่อปิด SQL Server Agent หากเปิดใช้งานจะไม่มีข้อผิดพลาดและฉันสามารถกู้คืนได้โดยไม่มีปัญหา ไฟล์ BAK ของฉันมีฐานข้อมูลเดียวเท่านั้นและชื่อฐานข้อมูล (และชื่อไฟล์แบบลอจิคัล) นั้นไม่ซ้ำกันบนเซิร์ฟเวอร์ของฉัน
นักพัฒนาเว็บ

คำตอบ:


807

ฉันก็เจอปัญหานี้เช่นกัน

สารละลาย :

  • อย่าสร้างฐานข้อมูลเปล่าและเรียกคืน.bakไฟล์ไปยังมัน
  • ใช้ตัวเลือก'กู้คืนฐานข้อมูล'สามารถเข้าถึงได้โดยคลิกขวาที่ "ฐานข้อมูล" สาขาของ SQL Server Management Studio และระบุชื่อฐานข้อมูลในขณะที่ให้แหล่งที่มาเพื่อกู้คืน
  • เปลี่ยนชื่อไฟล์ที่ "ไฟล์" ด้วยหากยังมีฐานข้อมูลอื่นอยู่ มิฉะนั้นคุณจะได้รับ "ไฟล์ '... ' ไม่สามารถเขียนทับได้ฐานข้อมูลกำลังถูกใช้โดย 'yourFirstDb'"

102
มันจะง่ายมากสำหรับ SSMS ที่จะบอกฉันนี้เมื่อเกิดข้อผิดพลาด
cja

16
+1 สำหรับ " อย่าสร้างฐานข้อมูลเปล่าและกู้คืนไฟล์. bak ไปยังฐานข้อมูล " ... ใช่แล้วนั่นจะเป็นการแก้ปัญหา (แต่ทำไมฉันไม่ได้รับปัญหานี้ตลอดเวลาที่ฉันทำสิ่งเดียวกันและไม่เราไม่เพียงเริ่มต้นที่สร้างไว้ล่วงหน้าในสถานที่แรกเป็นวิธีแก้ปัญหาสำหรับข้อผิดพลาดอธิบายไม่ได้อื่น ๆ ?:])
ลงทะเบียนแก้ไข

มีคนควรทำเครื่องหมายว่านี่เป็นคำตอบเพราะเป็นส่วนหนึ่งของคำแนะนำที่ฉันต้องการในการคืนค่าสำเนาสำรอง
Doreen

2
ในการคืนค่าฐานข้อมูลฉันไปที่ไฟล์เรียกคืนเป็นและใส่ชื่อไฟล์ที่ไม่ซ้ำกันเนื่องจากยังคงมีชื่อดั้งเดิมสำหรับข้อมูลและไฟล์บันทึก
Dave Mateer

2
เปลี่ยนชื่อไฟล์ที่ "ไฟล์" ด้วยหากยังมีฐานข้อมูลอื่นอยู่ มิฉะนั้นคุณจะได้รับ "ไฟล์ '... ' ไม่สามารถเขียนทับได้ฐานข้อมูลกำลังถูกใช้โดย 'yourFirstDb'"
Verena Haunschmid

175

ทั้ง:

1) ใช้WITH REPLACEในขณะที่ใช้RESTOREคำสั่ง (หากใช้ GUI จะพบได้ในตัวเลือก -> เขียนทับฐานข้อมูลที่มีอยู่ ( WITH REPLACE)

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

ตรวจสอบลิงค์เพื่อดูรายละเอียดเพิ่มเติม


1
คัดลอกจากลิงค์ & ให้ลิงค์ด้วย .. * ถอนหายใจ * (ฉลาด)
Abhijeetchindhe

4
@Abhijeetchindhe haha ​​.. การใช้งานและความอนุเคราะห์ .. :)
Amarnath

:) ซอฟแวร์ที่ซื่อสัตย์ที่สุดคุณเป็น! อย่างไรก็ตามนั่นคือคำตอบที่ดีที่สุดสำหรับคำถามนี้ และถึงคะแนนสำหรับเวลาที่คุณมีการดำเนินการออกไปหามัน :)
Abhijeetchindhe

1
มีปัญหาเดียวกันกับ op และคำตอบนี้ใช้ได้ดี +1
Esteban

1
ตัวเลือก WITH REPLACE นี้เป็นโซลูชันที่ฉันต้องการ ขอบคุณ!
Adam

90

ขั้นแรกให้สร้างฐานข้อมูลเปล่าที่มีชื่อเดียวกัน จากนั้นไปที่ตัวเลือกการคืนค่า

ภายใต้ตัวเลือกในบานหน้าต่างด้านซ้ายอย่าลืมเลือก

  • เขียนทับฐานข้อมูลที่มีอยู่
  • รักษาการตั้งค่าการจำลองแบบ

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

แค่นั้นแหละ


51

ประสบปัญหาเดียวกันและพบวิธีแก้ปัญหาด้วยการใช้ SSMS 2014

- เพียงแค่เลือกตัวเลือกเขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่) 

ฐานข้อมูลที่มีอยู่> ภารกิจ> กู้คืน> ฐานข้อมูล


34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

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

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';

33

ง่าย ๆ 3 ขั้นตอน:

1- คลิกขวาที่ฐานข้อมูล→งาน→กู้คืน→ฐานข้อมูล

2- ตรวจสอบDeviceแหล่งที่มาและค้นหาไฟล์. bak (หรือซิป. bak)

3- ในบานหน้าต่างด้านซ้ายคลิกoptionsและ:

  • ตรวจสอบเขียนทับฐานข้อมูลที่มีอยู่
  • ยกเลิกการเลือกทำการสำรองข้อมูลหางก่อนเรียกคืน
  • ทำเครื่องหมายปิดการเชื่อมต่อที่มีอยู่ไปยังฐานข้อมูลปลายทาง

ตัวเลือกอื่น ๆ เป็นตัวเลือกจริงๆ (และที่สำคัญแน่นอน)!


23

มันเป็นเพราะ.mdfและ.ldfไฟล์จากต้นฉบับDbถูกค้นหาที่อาจจะc:\programFile\....และข้อมูลนี้จะถูกบันทึกไว้ในการสำรองข้อมูล!

หากคุณสร้างฐานข้อมูลเดียวกันบน SQL Server อื่นที่มีการติดตั้งc:\program Files (x86)\ ....คุณไม่สามารถกู้คืนได้ตามปกติ คุณต้องย้ายที่ตั้ง.mdfและ.ldfไฟล์

ดังนั้น:

  • สร้างฐานข้อมูลเปล่าบนเซิร์ฟเวอร์ใหม่

  • คลิกขวาที่ว่างเปล่า Db> งาน> กู้คืน> ฐานข้อมูล> คลิกอุปกรณ์เลือก.bakไฟล์ของคุณ> เลือก Db เพื่อกู้คืน

  • คลิกที่ไฟล์ทางด้านซ้าย> เลือก "ย้ายไฟล์ไปยังโฟลเดอร์ทั้งหมด"
  • คลิกตัวเลือกในเว็บไซต์ด้านซ้าย> คลิกที่เขียนทับ

ทำ!
หวังว่ามันจะช่วย!


16

วันนี้ฉันเจอปัญหาที่คล้ายกัน พยายามแก้ไขปัญหาทั้งหมดข้างต้น แต่ไม่ได้ผล ดังนั้นโพสต์โซลูชันของฉันที่นี่

อย่าลืมยกเลิกการเลือกการสำรองข้อมูลหางยาวก่อนที่จะกู้

อย่าลืมยกเลิกการเลือกการสำรองข้อมูลหางยาวก่อนที่จะกู้

หวังว่ามันจะช่วยคนอื่นด้วย!


นี่คือสิ่งที่ได้ผลสำหรับฉัน ขอบคุณ!
Bill Norman

16

หากคุณใช้วิธีสคริปต์และมีข้อผิดพลาดเกี่ยวกับไฟล์ LDF และ MDF คุณสามารถค้นหาไฟล์สำรองสำหรับชื่อโลจิคัล (และรายละเอียดอื่น ๆ ) ของไฟล์ในชุดสำรองโดยใช้ข้อมูลต่อไปนี้:

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

คุณจะได้ผลลัพธ์ที่คล้ายกับที่แสดงต่อไปนี้:

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

จากนั้นคุณสามารถใช้ชื่อโลจิคัลเหล่านั้นในเคียวรี:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

ข้อมูลเพิ่มเติมเกี่ยวกับสามารถพบได้จากเอกสารของRESTORE FILELISTONLY SQL Server


ฉันมีปัญหาเดียวกันในคำถามและในกรณีของฉันการสำรองข้อมูล Db มาจากเซิร์ฟเวอร์ระยะไกลและฉันต้องสร้างโครงสร้างโฟลเดอร์เดียวกันในไดรฟ์ D ของฉันที่คล้ายกับผลลัพธ์ของแบบสอบถามแรก จากนั้นเคียวรีที่สองทำงานอย่างถูกต้องและฐานข้อมูลถูกกู้คืน
rinilnath

11

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


สิ่งนี้ดูเหมือนจะเป็นจริงโดยเฉพาะอย่างยิ่งหากคุณมีไฟล์ / กลุ่มไฟล์และตารางที่แบ่งพาร์ติชันเป็นจำนวนมาก
AlexC

9

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


1
นี่เป็นปัญหาที่ฉันประสบอยู่ขอบคุณมากสำหรับสิ่งนี้ !!! (ฉันไม่ทราบว่าไฟล์สำรองข้อมูลนั้นเป็นการสำรองข้อมูลจริง) ต่อไปนี้เป็นวิธีการตรวจสอบ: "กู้คืน HEADERONLY FROM DISK = 'C: \ myfile.bak'" ในผลลัพธ์ประเภทการสำรองข้อมูล 1 = การสำรองข้อมูลเต็มรูปแบบ BackupType 5 = การสำรองข้อมูลต่างกัน
Wimpie Ratte

9

system.data.sqlclient.sqlerror: ชุดการสำรองข้อมูลจะเก็บข้อมูลสำรองของฐานข้อมูลอื่นนอกเหนือจากฐานข้อมูล 'Dbname' ที่มีอยู่

ฉันได้พบเจอ soultion แล้ว

  1. อย่าสร้างฐานข้อมูลด้วยชื่อเดียวกันหรือชื่อฐานข้อมูลอื่น! สำคัญ

  2. คลิกขวาที่ฐานข้อมูล | ภารกิจ> กู้คืน> ฐานข้อมูล

  3. ภายใต้ "แหล่งที่มาสำหรับการคืนค่า" เลือก "จากอุปกรณ์"

  4. เลือกไฟล์. bak

  5. เลือกช่องทำเครื่องหมายสำหรับฐานข้อมูลใน gridview ด้านล่าง

  6. ไปยังฐานข้อมูล: "ที่นี่คุณสามารถพิมพ์ชื่อฐานข้อมูลใหม่" (เช่น: DemoDB)

  7. อย่าเลือกฐานข้อมูลที่มีอยู่จาก DropDownlist

  8. ตอนนี้คลิกที่ปุ่มตกลงมันจะสร้าง Databse ใหม่และกู้คืนข้อมูลทั้งหมดจากไฟล์. bak ของคุณ

คุณสามารถขอความช่วยเหลือจากลิงค์นี้ได้

หวังว่ามันจะช่วยในการแยกแยะปัญหาของคุณ ...


1
"อย่าสร้างฐานข้อมูลด้วยชื่อเดียวกันหรือชื่อฐานข้อมูลอื่น! สำคัญ" คุณหมายถึงอะไร
sajid

6

สาเหตุนี้มักเกิดจากความเข้ากันไม่ได้ของรุ่น ทำตามขั้นตอนเหล่านี้เพื่อแก้ไข:

ขั้นตอนที่ 1: สร้างฐานข้อมูลด้วยชื่อที่คุณต้องการ (ในกรณีของเรา AdventureWorks)

ขั้นตอนที่ 2: เขียนคลิกที่ฐานข้อมูลและคลิกที่งาน >> คืนค่า >> ฐานข้อมูล ...

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

ขั้นตอนที่ 3: บนหน้าจอการคืนค่าไปที่ตัวเลือกที่สามของตัวเลือก ตอนนี้เลือกช่องทำเครื่องหมาย“ เขียนทับฐานข้อมูลที่มีอยู่ (With REPLACE)”

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

ขั้นตอนที่ 4: คลิกตกลง มันควรจะคืนค่าฐานข้อมูลได้สำเร็จ

หมายเหตุ: เมื่อคุณกู้คืนฐานข้อมูลด้วย REPLACE จะเป็นการเขียนทับฐานข้อมูลเก่า


ขอบคุณ Alireza สำหรับความพยายามของคุณ .. แต่เรากำลังใช้การค้นหาแทน GUI
Pugal

5

ปัญหาเดียวกันกับฉันวิธีแก้ปัญหาสำหรับฉันคือ:

  1. คลิกขวาที่ฐานข้อมูล
  2. เลือกภารกิจเลือกกู้คืนฐานข้อมูล
  3. คลิกตัวเลือกทางด้านซ้าย
  4. เลือกตัวเลือกแรกเขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่)
  5. ไปที่ทั่วไปเลือกแหล่งข้อมูลและปลายทาง
  6. คลิกตกลงนั่นแหล่ะ

3

ฉันแค่พยายามแก้ไขปัญหานี้

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

หวังว่านี่จะช่วยคนอื่นได้


3

ฉันต้องสร้างฐานข้อมูลใหม่ในพื้นที่ของฉันเพื่อทำการทดสอบ & ฉันได้สำรองข้อมูลจากการทดสอบของฉัน ฉันสร้าง db ก่อนและพยายามรัน BAK ที่ด้านบนของ db ใหม่ซึ่งสร้างข้อผิดพลาดนี้ให้ฉัน ฉันลบ db และกู้คืนในขณะที่จัดหาชื่อ db ใหม่ในหน้าจอการคืนค่าเอง db ถูกสร้างขึ้นโดยอัตโนมัติเมื่อกู้คืน


3

บางท่านมีความซับซ้อนสูงกว่านี้ ฉันพบว่ามันง่ายมาก

1) สร้างฐานข้อมูลด้วยชื่อเดียวกับชื่อฐานข้อมูลไฟล์. bak ของคุณสำคัญ!

2) คลิกขวาที่ฐานข้อมูล | ภารกิจ> กู้คืน> ฐานข้อมูล

3) ภายใต้ "Source for restore" เลือก "จากอุปกรณ์"

4) เลือกไฟล์. bak

5) เลือกช่องทำเครื่องหมายสำหรับฐานข้อมูลใน gridview ด้านล่าง

6) ภายใต้ "เลือกหน้า" ทางด้านขวาเลือก "ตัวเลือก"

7) เลือกช่องทำเครื่องหมายที่มีข้อความ "เก็บรักษาการตั้งค่าการจำลองแบบ (ด้วย KEEP_REPLICATION)

ตอนนี้กลับไปที่หน้าทั่วไปแล้วคลิกตกลงเพื่อคืนค่าฐานข้อมูล ...


อยู่ที่ไหน "เลือกหน้า"?
KansaiRobot

2

ฉันทำงานเสร็จผ่านทางเลือกโดยใช้สคริปต์สร้าง ที่ทำงานให้ฉันเป็น Backup-Restore ไม่ได้ช่วยแก้ไขปัญหาเนื่องจากข้อผิดพลาดเดียวกัน


2

ในตัวเลือกเปลี่ยนชื่อไฟล์ "Restore As" เป็น mdf ฐานข้อมูลใหม่และ ldf มันคือการอ้างอิงไฟล์. mdf และ. ldf ฐานข้อมูลต้นทาง


1

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

โฆษณาตรวจสอบการเขียนทับธงฐานข้อมูลที่มีอยู่ในแท็บตัวเลือก

ฟาบิโอ


0

ฉันแน่ใจว่าปัญหานี้เกี่ยวข้องกับการอนุญาตของไฟล์และโฟลเดอร์


0

ฉันพยายามกู้คืนฐานข้อมูลการผลิตไปยังฐานข้อมูลการจัดเตรียมบนเซิร์ฟเวอร์เดียวกัน

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

(หรือลบฐานข้อมูลการ staging ก่อนจากนั้นคุณสามารถคืนค่าฐานข้อมูลใหม่ที่มีชื่อเดียวกับฐานข้อมูล staging)



0

สิ่งนี้ช่วยให้ฉันนำเข้าไฟล์สำรองจากไดรฟ์ระบบ

  1. สร้างฐานข้อมูลที่มีชื่อเดียวกัน (ดีกว่า) เป็นชื่อฐานข้อมูลไฟล์. bak ของคุณ
  2. คลิกขวาที่ฐานข้อมูล> ภารกิจ> กู้คืน> ฐานข้อมูล
  3. ภายใต้ "แหล่งที่มาสำหรับการคืนค่า" เลือก "จากอุปกรณ์"
  4. เลือกไฟล์. bak เลือกพา ธ จากระบบ
  5. เลือกช่องทำเครื่องหมายสำหรับฐานข้อมูลในกล่องรายการด้านล่าง
  6. ใต้ "เลือกหน้า" ทางด้านขวาเลือก "ตัวเลือก"
  7. เลือกช่องทำเครื่องหมายที่มีข้อความ "เก็บรักษาการตั้งค่าการจำลองแบบ (ด้วย KEEP_REPLICATION)
  8. เลือกช่องทำเครื่องหมายสำหรับเขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่) ทันทีกลับไปที่หน้าทั่วไปและคลิกตกลงเพื่อคืนค่าฐานข้อมูล ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.