Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
okwell5 Member Откуда: Сообщений: 116 |
Каждую ночь делается полный бэкап, в течение дня каждые три часа делается разность в этот же файл с полной копией. Часто требуется восстановить из такого файла бэкапа в тестовую базу. Мне приходится каждый раз руками кликать на базу правой -> восстановить, указывать файл, отмечать галочками полный и разностный бэкап, и только после этого жму кнопку "Скрипт" и выполняю. Хочу избавиться от этой рутины. Причина повторения этих действий заключается в том, что мне неизвестен номер разностной копии в заданном файле, в этом и вопрос. Например, выполняю я такой скрипт: USE [master] RESTORE DATABASE [test1] FROM DISK = N'D:\Backups\backup20180708.bak' WITH FILE = 1, MOVE N'OneC_ECM' TO N'G:\MSSQLDB\test1.mdf', MOVE N'OneC_ECM_log' TO N'E:\Logs\test1_log.ldf', NORECOVERY, NOUNLOAD, REPLACE, STATS = 5 RESTORE DATABASE [test_ECM_CorpSoft] FROM DISK = N'D:\Backups\backup20180708.bak' WITH FILE = 9, NOUNLOAD, STATS = 5 Первый набор - это полный бэкап, 9й - это разность (как видите, в этом же файле, но с другим номером 9). Как мне получить это число 9? Перед тем как задать вопрос, поискал, конечно же, в интернете - не нашел своего вопроса. Поискал на этом форуме, нашел лишь: [url=]http://www.sql.ru/forum/1110606/vostanovlenie-bd-iz-differencialnoy-rezervnoy-kopii[/url] Почитал вот эти ссылки: 1)[url=]https://docs.microsoft.com/ru-ru/sql/relational-databases/backup-restore/restore-files-and-filegroups-over-existing-files-sql-server?view=sql-server-2017[/url] 2) [url=]https://docs.microsoft.com/ru-ru/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-2017[/url] В последней ссылке, кстати, есть мой пример, но также указываются конкретные номера резервных наборов. Как узнать максимальный (а точнее последний актуальный) номер резервного набора разностной копии внутри одного файла? |
11 июл 18, 19:29 [21563834] Ответить | Цитировать Сообщить модератору |
SERG1257 Member Откуда: Сообщений: 2611 |
Полагаю анализируя результат RESTORE HEADERONLY FROM DISK = 'D:\Backups\backup20180708.bak' GO Position smallint Position of the backup set in the volume (for use with the FILE = option). https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-headeronly-transact-sql?view=sql-server-2017 |
||
11 июл 18, 20:06 [21563913] Ответить | Цитировать Сообщить модератору |
okwell5 Member Откуда: Сообщений: 116 |
SERG1257, Спасибо за подсказку! Это действительно то, что мне нужно. Только как я могу управлять этой информацией? Например, в какую-то переменную или таблицу? select * from ( RESTORE HEADERONLY FROM DISK = N'D:\Backups\backup20180708.bak' WITH NOUNLOAD ) Сообщение 156, уровень 15, состояние 1, строка 3Может, я что-то делаю не так, прошу еще одну подсказку. |
11 июл 18, 20:36 [21563976] Ответить | Цитировать Сообщить модератору |
SERG1257 Member Откуда: Сообщений: 2611 |
> Например, в какую-то переменную или таблицу? declare @BackupInfo table ( BackupName nvarchar(128), BackupDescription nvarchar(255), BackupType smallint, ExpirationDate datetime, Compressed bit, Position smallint, DeviceType tinyint, UserName nvarchar(128), ServerName nvarchar(128), DatabaseName nvarchar(128), DatabaseVersion int, DatabaseCreationDate datetime, BackupSize numeric(20,0), FirstLSN numeric(25,0), LastLSN numeric(25,0), CheckpointLSN numeric(25,0), DatabaseBackupLSN numeric(25,0), BackupStartDate datetime, BackupFinishDate datetime, SortOrder smallint, [CodePage] smallint, UnicodeLocaleId int, UnicodeComparisonStyle int, CompatibilityLevel tinyint, SoftwareVendorId int, SoftwareVersionMajor int, SoftwareVersionMinor int, SoftwareVersionBuild int, MachineName nvarchar(128), Flags int, BindingID uniqueidentifier, RecoveryForkID uniqueidentifier, Collation nvarchar(128), FamilyGUID uniqueidentifier, HasBulkLoggedData bit, IsSnapshot bit, IsReadOnly bit, IsSingleUser bit, HasBackupChecksums bit, IsDamaged bit, BeginsLogChain bit, HasIncompleteMetaData bit, IsForceOffline bit, IsCopyOnly bit, FirstRecoveryForkID uniqueidentifier, ForkPointLSN numeric(25,0), RecoveryModel nvarchar(60), DifferentialBaseLSN numeric(25,0) , DifferentialBaseGUID uniqueidentifier, BackupTypeDescription nvarchar(60), BackupSetGUID uniqueidentifier, CompressedBackupSize bigint, containment tinyint, KeyAlgorithm nvarchar(32), EncryptorThumbprint varbinary(20), EncryptorType nvarchar(32) ) insert into @BackupInfo exec ('RESTORE HEADERONLY FROM DISK = ''D:\Backups\backup20180708.bak''') select * from @BackupInfo |
11 июл 18, 20:59 [21564016] Ответить | Цитировать Сообщить модератору |
okwell5 Member Откуда: Сообщений: 116 |
SERG1257, Круто! Теперь я смогу это заскриптовать в агенте по расписанию. Спасибо за помощь! |
11 июл 18, 21:07 [21564035] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |