Zestaw kopii zapasowych zawiera kopię zapasową bazy danych innej niż istniejąca

485

Próbuję przywrócić plik kopii zapasowej programu SQL Server dla mojej bazy danych, ale generuje błąd w następujący sposób:

Zestaw kopii zapasowych zawiera kopię zapasową bazy danych innej niż istniejąca

Moja baza danych w SQL Server 2008 i plik kopii zapasowej są w 2005 roku.

Co może być problemem?

R & D
źródło
95
Poniższa wysoko głosowana odpowiedź to młot do zgryzienia orzecha. Problem najprawdopodobniej nie wybrałeś opcji „ Zastąp istniejącą bazę danych (Z REPLACE) ” w oknie Przywróć> Opcje . Miałem ten problem za pomocą wiersza poleceń WITH MOVEi został rozwiązany za pomocą WITH REPLACE, MOVE.
James McCormack,
Mam ten sam błąd w jednej z moich baz danych, ale tylko wtedy, gdy SQL Server Agent jest wyłączony. Jeśli go włączę, nie będzie błędu i mogę przywrócić bez problemu. Mój plik BAK zawiera tylko jedną bazę danych, a nazwa bazy danych (i logiczne nazwy plików) są unikalne na moim serwerze.
Developer Webs

Odpowiedzi:

807

Ja też natknąłem się na ten problem.

Rozwiązanie :

  • Nie twórz pustej bazy danych i nie przywracaj do niej .bakpliku.
  • Użyj opcji „Przywróć bazę danych” dostępną po kliknięciu prawym przyciskiem myszy gałęzi „Bazy danych” SQL Server Management Studio i podaj nazwę bazy danych, podając źródło do przywrócenia.
  • Zmień także nazwy plików w „Files”, jeśli inna baza danych nadal istnieje. W przeciwnym razie otrzymujesz „Plik” ... ”nie może zostać nadpisany. Jest używany przez bazę danych„ twojaFirstDb ””.
sunil_philip
źródło
102
SSMS tak łatwo by mi to powiedział, gdy wystąpi błąd
cja
16
+1 za „ Nie twórz pustej bazy danych i przywracaj do niej plik .bak ” ... tak, to rozwiązuje. (Ale dlaczego nie dostałem tego problemu za każdym razem, gdy robiłem to samo? I czy nie zaczęliśmy robić tego wstępnego tworzenia przede wszystkim jako obejście jakiegoś innego niewytłumaczalnego komunikatu o błędzie?:])
Reg Edytuj
Ktoś powinien oznaczyć to jako odpowiedź, ponieważ była to rada, której potrzebowałem, aby pomyślnie przywrócić kopię zapasową.
Doreen,
2
W Restore Database poszedłem do Files, Restore As i wprowadziłem unikalne nazwy plików, ponieważ nadal miały one oryginalne nazwy danych i plików dziennika.
Dave Mateer
2
Zmień także nazwy plików w „Files”, jeśli inna baza danych nadal istnieje. W przeciwnym razie otrzymujesz „Plik” ... ”nie może zostać nadpisany. Jest używany przez bazę danych„ twojaFirstDb ””.
Verena Haunschmid
175

Zarówno:

1) Użyj WITH REPLACEpodczas używania RESTOREpolecenia (jeśli używasz GUI, znajdziesz go w Opcje -> Zastąp istniejącą bazę danych ( WITH REPLACE)).

2) Deletestarsza baza danych, która jest w konflikcie, i przywróć ponownie za pomocą RESTOREpolecenia.

Sprawdź link, aby uzyskać więcej informacji.

Amarnath
źródło
1
skopiowane z linku i podało również link .. * westchnienie * (smart)
Abhijeetchindhe
4
@Abhijeetchindhe haha ​​.. Ponowne użycie i uprzejmość .. :)
Amarnath
:) Uczciwe oprogramowanie Eee jesteś! W każdym razie, to najlepsza odpowiedź na to pytanie. I głosuj za czasem, który udało ci się znaleźć :)
Abhijeetchindhe
1
Miałem ten sam problem co operacja i ta odpowiedź działa dobrze. +1
Esteban
1
Ta opcja Z WYMIANA była również rozwiązaniem, którego potrzebowałem. Dzięki!
Adam
90

Najpierw utwórz pustą bazę danych o tej samej nazwie. Następnie przejdź do opcji przywracania

W obszarze Opcje w lewym okienku nie zapomnij wybrać

  • Zastąp istniejącą bazę danych
  • Zachowaj ustawienia replikacji

wprowadź opis zdjęcia tutaj

Otóż ​​to

HimalayanCoder
źródło
51

Miałem ten sam problem i znalazłem rozwiązanie, korzystając z SSMS 2014

- Wystarczy wybrać opcję Zastąp istniejącą bazę danych (Z WYMIANA) 

Istniejąca baza danych> Zadanie> Przywróć> Baza danych

Smit Patel
źródło
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';
Elsoni
źródło
33

Proste 3 kroki:

1- Kliknij prawym przyciskiem myszy bazę danych → Zadania → przywróć → Baza danych

2- Sprawdź Devicejako źródło i zlokalizuj plik .bak (lub skompresowany plik .bak)

3- W lewym okienku kliknij optionsi:

  • zaznacz Zastąp istniejącą bazę danych.
  • odznacz Wykonaj kopię zapasową dziennika ogona przed przywróceniem
  • zaznacz Zamknij istniejące połączenie z docelową bazą danych.

Inne opcje są naprawdę opcjonalne (i ważne oczywiście)!

Ali Sheikhpour
źródło
23

To dlatego, że .mdfi .ldfPliki z oryginału Dbzostały zlokalizowane w być może c:\programFile\....i ta informacja jest zapisana w kopii zapasowej!

Jeśli utworzysz tę samą bazę danych na innym serwerze SQL, na którym trwa instalacja c:\program Files (x86)\ ...., nie będzie można przywrócić jak zwykle. Musisz przenieść ścieżkę do .mdfi.ldf plików .

W związku z tym:

  • Utwórz pustą bazę danych na nowym serwerze

  • Kliknij prawym przyciskiem myszy puste Db> Zadania> Przywróć> Baza danych> kliknij Urządzenie wybierz .bakpliki> Wybierz Db, do którego chcesz przywrócić

  • kliknij Pliki po lewej stronie> Wybierz „Przenieś wszystkie pliki do folderu”
  • kliknij Opcje po lewej stronie> kliknij Zastąp

Gotowy!
Mam nadzieję, że to pomoże!

POMOCNIK
źródło
16

Miałem dzisiaj podobny problem. Wypróbowałem wszystkie powyższe rozwiązania, ale nie zadziałało. Więc zamieszczam tutaj moje rozwiązanie.

Nie zapomnij odznaczyć opcji Kopia zapasowa na całej długości przed przywróceniem

Nie zapomnij odznaczyć opcji Kopia zapasowa na całej długości przed przywróceniem

Mam nadzieję, że pomoże to także innym!

immayankmodi
źródło
To działało dla mnie. Dzięki!
Bill Norman,
16

Jeśli używasz podejścia skryptowego i masz błąd dotyczący plików LDF i MDF, możesz najpierw zapytać w pliku kopii zapasowej o logiczne nazwy (i inne szczegóły) plików w zestawie kopii, używając:

-- 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

Otrzymasz wyniki podobne do następujących:

wprowadź opis zdjęcia tutaj

Następnie możesz użyć tych logicznych nazw w zapytaniach:

    -- 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

Więcej informacji na temat RESTORE FILELISTONLY można znaleźć w dokumentacji SQL Server .

użytkownik919426
źródło
Miałem ten sam problem w pytaniu, aw moim przypadku kopia zapasowa Db pochodziła ze zdalnego serwera i musiałem utworzyć taką samą strukturę folderów na moim dysku D, która przypomina dane wyjściowe z pierwszego zapytania. Następnie drugie zapytanie działało poprawnie i baza danych została przywrócona.
rinilnath
11

Równie ważne jest upewnienie się, że nazwa bazy danych odpowiada nazwie bazy danych w kopii zapasowej, którą próbujesz przywrócić. Jeśli nie pasuje, pojawi się ten sam błąd.

Andrew Marais
źródło
Wydaje się to szczególnie prawdziwe, jeśli masz wiele plików / grup plików i tabel partycjonowanych
AlexC
9

Przed wykonaniem jakichkolwiek innych czynności sprawdź, czy kopia zapasowa jest pełna, czy różnicowa. Jeśli próbujesz utworzyć nową bazę danych z różnicowej kopii zapasowej, bez względu na to, co zrobisz, napotkasz błąd.

Tots Benedicto
źródło
1
To był problem, którego doświadczam, więc dziękuję za to !!! (Nie wiedziałem, że plik kopii zapasowej był w rzeczywistości różnicową kopią zapasową). Oto jak to sprawdzić: „PRZYWRÓCIĆ HEADERONLY Z DYSKU = 'C: \ mój_plik.bak'” W wynikach BackupType 1 = Pełna kopia zapasowa. BackupType of 5 = Różnicowa kopia zapasowa.
Wimpie Ratte
9

system.data.sqlclient.sqlerror: Zestaw kopii zapasowych zawiera kopię zapasową bazy danych innej niż istniejąca baza danych „Dbname”

Natknąłem się na znalezienie soultion

  1. Nie twórz bazy danych o tej samej nazwie lub innej nazwie bazy danych! Ważne.

  2. kliknij bazę danych prawym przyciskiem myszy | Zadania> Przywróć> Baza danych

  3. W obszarze „Źródło do przywrócenia” wybierz „Z urządzenia”

  4. Wybierz plik .bak

  5. Zaznacz pole wyboru dla bazy danych w widoku siatki poniżej

  6. Do bazy danych: „Tutaj możesz wpisać nową nazwę bazy danych” (np. DemoDB)

  7. Nie wybieraj istniejącej bazy danych z DropDownlist

  8. Teraz kliknij przycisk OK, utworzy nową bazę danych i przywróci wszystkie dane z pliku .bak.

możesz uzyskać pomoc z tego łącza nawet

Mam nadzieję, że pomoże to rozwiązać problem ...

akshay5662
źródło
1
„Nie twórz bazy danych o tej samej nazwie lub innej nazwie! Ważne.” Co masz na myśli?
sajid,
6

Powoduje to zawsze z powodu niezgodności wersji. wykonaj następujące kroki, aby rozwiązać:

Krok 1: Utwórz bazę danych z preferowaną nazwą. (W naszym przypadku AdventureWorks)

Krok 2: Napisz, kliknij bazę danych i kliknij Zadania >> Przywróć >> Baza danych…

wprowadź opis zdjęcia tutaj

Krok 3: Na ekranie przywracania przejdź do trzeciego wyboru Opcje. Teraz zaznacz pole wyboru „Zastąp istniejącą bazę danych (Z WYMIANA)”

wprowadź opis zdjęcia tutaj

Krok 4: Kliknij OK. Powinien pomyślnie przywrócić bazę danych.

Uwaga: przywrócenie bazy danych ZA POMOCĄ WYMIANY spowoduje zastąpienie starej bazy danych.

Alireza Abdollahnejad
źródło
Dzięki Alireza za twój wysiłek. Ale zamiast GUI używamy zapytania.
Pugal
5

Ten sam problem ze mną. Rozwiązaniem dla mnie jest:

  1. Kliknij bazę danych prawym przyciskiem myszy.
  2. Wybierz zadania, wybierz przywróć bazę danych.
  3. Kliknij opcje po lewej stronie.
  4. Zaznacz pierwszą opcję Zastąp istniejącą bazę danych (Z WYMIANA).
  5. Przejdź do Ogólne, wybierz źródłową i docelową bazę danych.
  6. Kliknij OK, to wszystko
Aayush Verma
źródło
3

Właśnie próbowałem rozwiązać ten problem.

Próbowałem wszystkiego, od uruchomienia jako administrator, po sugestie znalezione tutaj i gdzie indziej; tym, co ostatecznie rozwiązałem, było sprawdzenie opcji „przenieś pliki” na karcie właściwości Pliki.

Mam nadzieję, że pomoże to komuś innemu.

Clint
źródło
3

Musiałem utworzyć nową bazę danych na moim lokalnym do testowania i miałem kopię zapasową od mojego prod. Najpierw utworzyłem db i próbowałem uruchomić BAK na nowym db, który spowodował ten błąd. Usunąłem bazę danych i przywróciłem ją podczas pobierania nowej nazwy bazy danych na samym ekranie przywracania. Baza danych została utworzona automatycznie podczas przywracania.

Angelina Ilieva
źródło
3

Niektórzy z was bardzo to skomplikowali. Uznałem to za niezwykle proste.

1) Utwórz bazę danych o tej samej nazwie co nazwa bazy danych pliku .bak! Ważne

2) kliknij bazę danych prawym przyciskiem myszy | Zadania> Przywróć> Baza danych

3) W obszarze „Źródło do przywrócenia” wybierz „Z urządzenia”

4) Wybierz plik .bak

5) Zaznacz pole wyboru dla bazy danych w widoku siatki poniżej

6) W obszarze „Wybierz stronę” po prawej stronie Wybierz „Opcje”

7) Zaznacz pole wyboru „Zachowaj ustawienia replikacji (Z KEEP_REPLICATION)

Teraz wróć do strony Ogólne i kliknij OK, aby przywrócić bazę danych ... To jest to.

Rolon
źródło
gdzie to jest „wybierz stronę”?
KansaiRobot
2

Wykonałem pracę w inny sposób, używając skryptów Generuj. To działało dla mnie, ponieważ narzędzie Backup-Restore nie pomogło rozwiązać problemu z powodu tego samego błędu.

Altaf Patel
źródło
2

W Opcjach zmień nazwę pliku „Przywróć jako” na nową bazę danych mdf i ldf. Odwołuje się do źródłowej bazy danych .mdf i .ldf.

Priyanka Rawat
źródło
1

Możesz przywrócić do nowej bazy danych, zweryfikować składnię nazwy pliku, będzie to plik dziennika, dla nowej wersji SQL będzie to przyrostek „_log”

ad sprawdź zastąpienie istniejącej flagi bazy danych w zakładce opcji

Fabio

Fabio
źródło
0

Jestem pewien, że ten problem dotyczy uprawnień do plików i folderów.

Popas
źródło
0

Próbowałem przywrócić produkcyjną bazę danych do tymczasowej bazy danych na tym samym serwerze.

Jedyne, co działało w moim przypadku, to przywrócenie do nowej pustej bazy danych. To działało świetnie, nie próbowało nadpisywać plików produkcyjnych (co byłoby w przypadku przywrócenia produkcyjnego pliku kopii zapasowej do istniejącej bazy danych przemieszczania). Następnie usuń starą bazę danych i zmień nazwę - pliki zachowają nową nazwę tymczasową, ale w moim przypadku jest w porządku.

(Lub w inny sposób najpierw usuń bazę danych pomostowych, a następnie możesz przywrócić nową bazę danych o takiej samej nazwie jak baza pomostowa)

Mike Nelson
źródło
0

zamiast kliknij Przywróć bazę danych, kliknij Przywróć plik i aplikacjami.

to działa na moim serwerze SQL

Ali Sadri
źródło
0

Pomogło mi to zaimportować plik kopii zapasowej z dysku systemowego

  1. Utwórz bazę danych o tej samej nazwie (najlepiej) jak nazwa bazy danych plików .bak
  2. Kliknij bazę danych prawym przyciskiem myszy> Zadania> Przywróć> Baza danych
  3. W obszarze „Źródło do przywrócenia” wybierz „Z urządzenia”
  4. Wybierz plik .bak, wybierając ścieżkę z systemu
  5. Zaznacz pole wyboru dla bazy danych w polu listy poniżej
  6. W „Wybierz stronę” po prawej wybierz „Opcje”
  7. Zaznacz pole wyboru oznaczone etykietą „Zachowaj ustawienia replikacji (Z KEEP_REPLICATION)
  8. Zaznacz pole wyboru Zastąp istniejącą bazę danych (Z REPLACE) Teraz Wróć do strony Ogólne i kliknij OK, aby przywrócić bazę danych ...
Prajwal Bhat
źródło