Jeśli używasz SQL Server Management Studio (SSMS) lub innego graficznego interfejsu użytkownika do zarządzania bazami danych, możesz być przyzwyczajony do tworzenia kopii zapasowych i przywracania baz danych za pomocą „wskaż i kliknij”.
Zwykle wymaga to kliknięcia bazy danych prawym przyciskiem myszy i wybrania opcji Przywróć lub podobne, a następnie postępuj zgodnie z monitami (na przykład podczas przywracania bazy danych w Azure Data Studio).
Ale jeśli kiedykolwiek będziesz musiał to zrobić za pomocą T-SQL, możesz użyć RESTORE DATABASE
oświadczenie.
Przykład
Oto podstawowy przykład:
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
To prawie tak proste, jak to tylko możliwe. RESTORE DATABASE
Instrukcja ma dość złożoną składnię (jak większość rzeczy T-SQL), ale ta instrukcja jest wystarczająca do podstawowej, domyślnej operacji przywracania.
W tym przypadku przywróciłem bazę danych o nazwie Świat z pliku .bak. Użyłem FROM DISK
aby określić, że pochodzi z pliku .bak, i podałem pełną ścieżkę do tego pliku. Inne opcje to FROM TAPE
i FROM URL
.
Dołączyłem również WITH FILE = 1
tutaj, ale i tak jest to wartość domyślna. Ta klauzula określa numer pliku zestawu kopii zapasowej do użycia. Oznacza to, który zestaw kopii zapasowych ma zostać użyty w pliku (plik może mieć wiele zestawów kopii zapasowych).
Pobierz listę zestawów kopii zapasowych
Możesz użyć RESTORE HEADERONLY
aby uzyskać listę zestawów kopii zapasowych w pliku. Dokładniej, zwraca zestaw wyników informacji nagłówka kopii zapasowej dla wszystkich zestawów kopii zapasowych.
Przykład:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Zwraca to wiele kolumn, więc nie będę ich tutaj przedstawiał.
Jedna z kolumn nazywa się Pozycja . To ma być używane z FILE =
opcja podczas przywracania bazy danych.
Przykład z większą liczbą opcji
Oto przykład z większą liczbą opcji:
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
W rzeczywistości jest to skrypt, który Azure Data Studio wygenerował dla mnie, gdy użyłem interfejsu GUI do zainicjowania operacji przywracania. Gdy to zrobisz, Azure Data Studio daje możliwość natychmiastowego uruchomienia przywracania lub wygenerowania skryptu z kodem T-SQL, który możesz uruchomić później.
W tym przypadku skrypt używa MOVE
argument, aby przenieść każdą logiczną nazwę pliku w pliku kopii zapasowej do określonej fizycznej lokalizacji pliku w systemie operacyjnym. W tym przypadku plik .bak używał innej fizycznej lokalizacji pliku (i używał ścieżek plików systemu Windows), więc musiało się to zmienić, aby pasowało do mojego systemu. Poniżej znajdziesz wyjaśnienie, jak uzyskać te informacje.
NOUNLOAD
jest w rzeczywistości opcją taśmy. Zapewnia to, że taśma nie zostanie wyjęta z napędu po zakończeniu przywracania. Biorąc pod uwagę, że nie odtwarzałem z taśmy, ta opcja została zignorowana.
STATS
argument pozwala ocenić postęp operacji przywracania. Określa, że komunikat będzie wyświetlany za każdym razem, gdy wypełni się kolejny procent. Jeśli nie podasz tutaj wartości procentowej, SQL Server wyświetli komunikat po ukończeniu każdego 10%.
PRZYWRACANIE TYLKO LISTY PLIKÓW
Jeśli chcesz utworzyć instrukcję podobną do poprzedniej, która używa MOVE
argument, aby przenieść każdą logiczną nazwę pliku w pliku kopii zapasowej do określonej fizycznej lokalizacji pliku w systemie operacyjnym, możesz użyć RESTORE FILELISTONLY
aby zwrócić nazwy plików logicznych (i więcej).
RESTORE FILELISTONLY
zwraca zestaw wyników zawierający listę baz danych i plików dziennika zawartych w zestawie kopii zapasowej.
Oto przykład wykorzystujący ten sam plik .bak WideWorldImporters, co we wcześniejszym przykładzie:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Wynik (przy użyciu wyjścia pionowego):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
Widzimy więc, że fizyczne lokalizacje tego pliku używają ścieżek plików systemu Windows. Na przykład pierwszy (o logicznej nazwie WWI_Primary ) ma fizyczną lokalizację D:\Data\WideWorldImporters.mdf .
W moim przypadku przywróciłem bazę danych do SQL Server for Linux (działającego w kontenerze Docker na moim Macu), więc kiedy przywróciłem ten plik .bak do mojego systemu, musiałem zmienić ścieżki fizyczne, aby pasowały do mojego systemu.
Oczywiście w razie potrzeby możesz również zmienić ścieżki plików podczas przywracania ich na komputer z systemem Windows.
Pełna składnia
Tworzenie kopii zapasowych i przywracanie baz danych może być dość skomplikowane, w zależności od wymagań. RESTORE
oświadczenie ma na celu objęcie wielu różnych scenariuszy. W szczególności obejmuje następujące scenariusze przywracania:
- Przywróć całą bazę danych z pełnej kopii zapasowej bazy danych (całkowite przywrócenie).
- Przywróć część bazy danych (przywróć częściowe).
- Przywróć określone pliki lub grupy plików do bazy danych (przywróć plik).
- Przywróć określone strony do bazy danych (przywróć stronę).
- Przywróć dziennik transakcji do bazy danych (przywróć dziennik transakcji).
- Przywróć bazę danych do punktu w czasie przechwyconego przez migawkę bazy danych.
Pełna składnia zawiera wiele opcji, więc jeśli Twoje wymagania wykraczają poza zakres tego artykułu, zapoznaj się z dokumentacją firmy Microsoft dotyczącą oficjalnego RESTORE
składnia i wyjaśnienie.
Przeczytaj także Przegląd przywracania i odzyskiwania firmy Microsoft, aby zapoznać się z różnymi zagadnieniami i podejściami do przywracania baz danych.