Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przywracanie bazy danych SQL Server (T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ogranicz połączenie SQL Server do określonego adresu IP

  2. Czy można wymusić blokowanie na poziomie wiersza w SQL Server?

  3. Jak wygenerować pole automatycznego przyrostu w wybranym zapytaniu?

  4. Utwórz bazę danych SQL Server za pomocą Azure Data Studio

  5. Dodaj klauzule WHERE do SQL dynamicznie / programowo