W rzeczywistości próbuję utworzyć skrypt (w Sql Server 2008), aby przywrócić jedną bazę danych z jednego pliku kopii zapasowej. Wykonałem następujący kod i otrzymuję błąd -
Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.
Jak rozwiązać ten problem?
IF DB_ID('AdventureWorksDW') IS NOT NULL
BEGIN
RESTORE DATABASE [AdventureWorksDW]
FILE = N'AdventureWorksDW_Data'
FROM
DISK = N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak'
WITH FILE = 1,
MOVE N'AdventureWorksDW_Data'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf',
MOVE N'AdventureWorksDW_Log'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF',
NOUNLOAD, STATS = 10
END
sql
sql-server
sql-server-2008
Parowy
źródło
źródło
Odpowiedzi:
Zakładam, że jeśli przywracasz bazę danych, nie obchodzą Cię żadne istniejące transakcje na tej bazie danych. Dobrze? Jeśli tak, to powinno działać dla Ciebie:
A teraz jeszcze jedna rzecz, o której należy pamiętać. Po ustawieniu bazy danych w tryb pojedynczego użytkownika ktoś inny może próbować połączyć się z bazą danych. Jeśli się powiedzie, nie będzie można kontynuować przywracania. To wyścig! Proponuję uruchomić wszystkie trzy instrukcje naraz.
źródło
USE master
, że nieUSER master
.ALTER DATABASE [AdventureWorksDW] SET MULTI_USER
na końcu, aby upewnić się, że baza danych wróci do normalnego trybu wielu użytkowników.SINGLE_USER
trybie podczas tworzenia kopii zapasowej, będzie wSINGLE_USER
trybie podczas przywracania kopii zapasowej. Jeśli był wMULTI_USER
trybie w czasie tworzenia kopii zapasowej, będzie wMULTI_USER
trybie po przywróceniu. Masz świetną uwagę: zdecydowanie warto sprawdzić po zakończeniu przywracania. Możesz także uruchomić RESTORE HEADERONLY na nośniku kopii zapasowej i sprawdzićIsSingleUser
lub wykonać bitowe obliczenia matematyczne naFlags
kolumnie.źródło
wykonaj to zapytanie przed przywróceniem bazy danych:
a ten po przywróceniu:
źródło
Dla mnie rozwiązaniem jest:
Zaznacz opcję Zastąp istniejącą bazę danych (Z WYMIENIĄ) w zakładce optoins po lewej stronie.
Odznacz wszystkie inne opcje.
Wybierz źródłową i docelową bazę danych.
Kliknij OK.
Otóż to.
źródło
Użyj następującego skryptu, aby znaleźć i zabić wszystkie otwarte połączenia z bazą danych przed przywróceniem bazy danych.
Mam nadzieję, że to pomoże ...
źródło
Myślę, że przed próbą przywrócenia wystarczy ustawić bazę danych w trybie pojedynczego użytkownika, jak poniżej, po prostu upewnij się, że używasz
master
źródło
Właśnie ponownie uruchomiłem usługę sqlexpress, a następnie przywracanie zakończyło się pomyślnie
źródło
źródło
Rozwiązanie 1: Uruchom ponownie usługi SQL i spróbuj przywrócić bazę danych Rozwiązanie 2: Uruchom ponownie system / serwer i spróbuj przywrócić bazę danych Rozwiązanie 3: Przywróć bieżącą bazę danych, usuń bieżącą / docelową bazę danych i spróbuj przywrócić bazę danych.
źródło
Ustawienie DB w tryb pojedynczego użytkownika nie działało dla mnie, ale przełączenie go w tryb offline, a następnie przywrócenie go do trybu online działało. Znajduje się w menu prawym przyciskiem myszy bazy danych, w obszarze Zadania.
Pamiętaj, aby w oknie dialogowym zaznaczyć opcję „Porzuć wszystkie aktywne połączenia”.
źródło
Oto sposób przywracania bazy danych z produkcji do programowania:
UWAGA: Robię to za pomocą zadania SSAS, aby codziennie wypychać produkcyjną bazę danych do programowania:
Krok 1: Usuń kopię zapasową z poprzedniego dnia w trakcie opracowywania:
Krok 2: Skopiuj produkcyjną bazę danych do programowania:
Krok 3: Przywróć, uruchamiając skrypt .sql
Kod znajdujący się w pliku AE11_Restore.sql:
źródło
Pojawił się ten błąd, gdy zabrakło miejsca na dysku, aby przywrócić Db. Porządkowanie przestrzeni rozwiązało problem.
źródło
przeniesienie oryginalnej bazy danych do trybu offline zadziałało dla mnie
źródło