Pliku mdf nie można zastąpić podczas przywracania bazy danych w programie SQL Server

21

Mam kartę danych A. Zawiera ona trochę danych. Utworzyłem kopię zapasową pliku A jako pliku A.bak . Następnie tworzę nową pustą bazę danych B. Następnie próbuję przywrócić B z A.bak . Ale usługa SQL Server informuje mnie o następującym błędzie:

Pliku „C: \ SQL Directory \ DATA \ A.mdf” nie można zastąpić. Jest używany przez bazę danych „A”.

Ale jeśli usunę A z SQL Server, retore będzie w porządku.

Nie rozumiem, dlaczego SQL musi pisać do oryginalnego pliku bazy danych podczas przywracania z osobnego pliku kopii zapasowej?

Dzięki ~

smwikipedia
źródło

Odpowiedzi:

19

Jeśli przywrócisz bazę danych, SQL Server domyślnie podejmie próbę przywrócenia wszystkich danych i plików dziennika do ich oryginalnych lokalizacji. Ponieważ te oryginalne lokalizacje są nadal używane przez oryginalną bazę danych („A”), odtwarzanie nie powiedzie się. Musisz użyć klauzuli WITH MOVE, aby określić nowe lokalizacje dla wszystkich plików w bazie danych.

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

W każdym razie coś takiego. Użyj PRZYWRÓĆ FILELISTONNIE TYLKO Z DYSKU ... aby zobaczyć logiczne nazwy plików w kopii zapasowej, jeśli to konieczne.

db2
źródło
11

WITH MOVE/ MOVEjest właściwym rozwiązaniem w T-SQL.

Nawiasem mówiąc, jeśli chcesz korzystać z GUI, możesz przejść do plików i zmienić nazwę:

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

do

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

wprowadź opis zdjęcia tutaj

Francesco Mantovani
źródło
1
Ponadto podczas zmiany nazwy docelowej bazy danych na karcie Ogólne GUI automatycznie zaktualizuje odpowiednio nazwy Przywróć jako.
Wouter,
0

Podczas przywracania kopii zapasowej można określić pliki danych do przywrócenia.

Spójrz tu i tutaj . Możesz użyć opcji „Przywróć pliki bazy danych jako” i flagi „Zastąp istniejącą bazę danych”.

demas
źródło
0

Czy używasz opcji REPLACE w poleceniu TSQL lub jako zaznaczone pole wyboru? Alternatywnie możesz zmienić nazwę plików i nazwać bazę danych czymś innym.

Trudno będzie również przywrócić dane z używanej bazy danych ... musisz zabić procesy korzystające z bazy danych; LUB najpierw upuść / usuń bazę danych, zamykając połączenia (jest to prawdopodobnie najłatwiejszy); LUB ustaw bazę danych, którą chcesz zastąpić, na coś w trybie ograniczonego użytkownika z natychmiastowym wycofaniem, więc mam nadzieję, że tylko DBA mogą użyć; LUB nawet zatrzymaj SQL Server i uruchom go ponownie - miejmy nadzieję, że przywracanie rozpocznie się, zanim ktokolwiek / cokolwiek użyje tej bazy danych.

PS na wszelki wypadek wykonaj kopię zapasową bazy danych, którą chcesz zastąpić.

Peter Schofield
źródło
0

Jeśli ktoś szuka rozwiązania w interfejsie GUI Management Studio po użyciu Optionsstrony i aktywacji Overwrite the existing database (WITH REPLACE)opcji:

Po prostu kliknij Restore Askolumnę i zmień nazwy *.mdfplików i *.ldfplików.

Jan
źródło