sql >> Databáze >  >> RDS >> Sqlserver

Obnovení databáze SQL Server (T-SQL)

Pokud ke správě databází používáte SQL Server Management Studio (SSMS) nebo nějaké jiné GUI, můžete být zvyklí zálohovat a obnovovat databáze pomocí „ukaž a klikni“.

Obvykle to zahrnuje kliknutí pravým tlačítkem na databázi a výběr Obnovit nebo podobně a poté postupujte podle pokynů (například při obnově databáze v Azure Data Studio).

Ale pokud to někdy budete potřebovat udělat s T-SQL, můžete použít RESTORE DATABASE prohlášení.

Příklad

Zde je základní příklad:

RESTORE DATABASE World
  FROM DISK = N'/var/opt/mssql/Bak/World.bak' 
  WITH FILE = 1;

To je téměř tak jednoduché, jak to jen může být. RESTORE DATABASE příkaz má poměrně složitou syntaxi (jako většina věcí T-SQL), ale tento příkaz je dostačující pro základní, výchozí operaci obnovení.

V tomto případě jsem obnovil databázi s názvem World ze souboru .bak. Použil jsem FROM DISK abych uvedl, že to bylo ze souboru .bak, a uvedl jsem úplnou cestu k tomuto souboru. Mezi další možnosti zde patří FROM TAPE a FROM URL .

Zahrnul jsem také WITH FILE = 1 tady, ale to je stejně výchozí hodnota. Tato klauzule určuje číslo souboru zálohovací sady, který se má použít. To znamená, která zálohovací sada se má v souboru použít (soubor může mít více zálohovacích sad).

Získejte seznam sad záloh

Můžete použít RESTORE HEADERONLY získat seznam zálohovacích sad v souboru. Přesněji řečeno, vrací výsledkovou sadu informací záhlaví zálohy pro všechny sady záloh.

Příklad:

RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';

Tím se vrátí mnoho sloupců, takže je zde nebudu všechny uvádět.

Jeden ze sloupců se nazývá Pozice . Toto se používá s FILE = možnost při obnově databáze.

Příklad s dalšími možnostmi

Zde je příklad s dalšími možnostmi:

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;

Toto je ve skutečnosti skript, který pro mě Azure Data Studio vygenerovalo, když jsem použil rozhraní GUI k zahájení operace obnovení. Když to uděláte, Azure Data Studio vám dá možnost okamžitého spuštění obnovení nebo vygenerování skriptu s kódem T-SQL, který můžete spustit později.

V tomto případě skript používá MOVE argument k přesunutí každého názvu logického souboru v záložním souboru do určeného umístění fyzického souboru v operačním systému. V tomto případě soubor .bak používal jiné fyzické umístění souboru (a používal cesty k souboru Windows), a tak se to muselo změnit, aby vyhovovalo mému systému. Níže naleznete vysvětlení, jak tyto informace získat.

NOUNLOAD je vlastně pásková možnost. Zajišťuje, že páska není po dokončení obnovy vyjmuta z jednotky. Vzhledem k tomu, že jsem neprováděl obnovu z pásky, byla tato možnost ignorována.

STATS argument umožňuje změřit průběh operace obnovy. Určuje, že zpráva se zobrazí pokaždé, když se dokončí další procento. Pokud zde neuvedete procentuální hodnotu, SQL Server zobrazí zprávu po dokončení každých 10 %.

OBNOVIT POUZE FILELISTONLY

Pokud jste chtěli vytvořit příkaz jako ten předchozí, který používá MOVE argument k přesunutí každého názvu logického souboru v záložním souboru do zadaného umístění fyzického souboru v operačním systému, můžete použít RESTORE FILELISTONLY vrátíte logické názvy souborů (a další).

RESTORE FILELISTONLY vrátí sadu výsledků obsahující seznam souborů databáze a protokolů obsažených v sadě záloh.

Zde je příklad použití stejného souboru .bak WideWorldImporters z předchozího příkladu:

RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';

Výsledek (při použití vertikálního výstupu):

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

Vidíme tedy, že fyzické umístění tohoto souboru používá cesty k souboru Windows. Například první (s logickým názvem WWI_Primary ) má fyzické umístění D:\Data\WideWorldImporters.mdf .

V mém případě jsem obnovil databázi na SQL Server pro Linux (běžící v kontejneru Docker na mém Macu), takže když jsem obnovil tento soubor .bak do svého systému, musel jsem změnit fyzické cesty, aby vyhovovaly mému systému.

V případě potřeby můžete samozřejmě také změnit cesty k souboru při jeho obnově do počítače se systémem Windows.

Úplná syntaxe

Zálohování a obnova databází může být poměrně náročná v závislosti na vašich požadavcích. RESTORE příkaz je navržen tak, aby pokryl mnoho různých scénářů. Konkrétně se týká následujících scénářů obnovení:

  • Obnovte celou databázi z úplné zálohy databáze (úplné obnovení).
  • Obnovte část databáze (částečné obnovení).
  • Obnovte určité soubory nebo skupiny souborů do databáze (obnovení souboru).
  • Obnovení konkrétních stránek do databáze (obnovení stránky).
  • Obnovení protokolu transakcí do databáze (obnovení protokolu transakcí).
  • Vrátí databázi do bodu v čase zachyceného snímkem databáze.

Úplná syntaxe obsahuje spoustu možností, takže pokud vaše požadavky překračují rozsah tohoto článku, podívejte se do dokumentace společnosti Microsoft pro oficiální RESTORE syntaxe a vysvětlení.

Přečtěte si také Přehled obnovy a obnovy společnosti Microsoft, kde najdete přehled různých úvah a přístupů k obnově databází.


  1. Je možné vybrat data serveru SQL pomocí pořadové pozice sloupce

  2. Volání členské funkce execute() na boolean in

  3. Úvod do OPENJSON s příklady (SQL Server)

  4. Vypočítejte počet souběžných událostí v SQL