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í.