Как восстановить несколько журналов транзакций с помощью SMO для .NET - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над приложением базы данных, чтобы восстановить базу данных с ее журналами транзакций.Я использую библиотеку объектов управления SQL Server (SMO).

Требования этого приложения обусловливают необходимость восстановления файла резервной копии базы данных и журналов ее транзакций в отдельных процессах.Я могу восстановить файл резервной копии без проблем, однако, когда дело доходит до восстановления журналов транзакций, я сталкиваюсь с проблемой:

        public void RestoreTransactionLogs(Server srv, DirectoryInfo filePath, DatabaseType dbType)
        {
            Restore res = new Restore()
            {
                Database = dbType.ToString(),
                Action = RestoreActionType.Log,
                ReplaceDatabase = false
            };

            FileInfo[] files = filePath.Parent.GetFiles("*.trn");

            foreach (FileInfo f in files)
            {
                res.Devices.AddDevice(f.FullName, DeviceType.File);
            }           

            try
            {
                res.SqlRestore(srv);
            }
            catch (SmoException ex)
            {
                Log.Fatal("An SMO Exception has occurred when restoring the database: " + dbType.ToString() + ": " + ex.Message);
                throw ex;
            }
            catch (Exception ex)
            {
                Log.Fatal("An exception has occurred when restoring the database:  " + dbType.ToString() + ": " + ex.Message);
                throw ex;
            }

        }

Используя тестовый файл резервной копии и 20 журналов транзакций, я сталкиваюсь со следующей ошибкой:

SmoException: System.Data.SqlClient.SqlError: Носитель, загруженный в «D: \ Test Folder \ testDatabase \ log_00001.trn», отформатирован для поддержки 1 семейств носителей, но 20 семейств носителейожидается в соответствии со спецификацией устройства резервного копирования.

У меня такое ощущение, что я не добавляю журналы транзакций в свою коллекцию устройств должным образом, или я должен добавлять их другим способом, но я не уверен, где проверить,Документация от MSDN для журналов транзакций скудна, и я не смог найти много онлайн.Спасибо!

1 Ответ

0 голосов
/ 10 декабря 2018

Привет, парень, ты можешь попробовать приведенные ниже сценарии на своем сервере sql.Измените путь к файлу каталога.Также сделайте свое исследование "с восстановлением" и "без восстановления" .. пример beow

RESTORE DATABASE [DW] FROM DISK = 'G:\MSSQL\Data\FullBackups\db.bak' WITH NORECOVERY
Go
RESTORE DATABASE [DW] FROM DISK = 'G:\MSSQL\Data\DifferentialBackups\db.bak' WITH NORECOVERY
--repeat how many ever times if multiple based on time DB crashed.
GO
RESTORE DATABASE [DW] FROM DISK = 'G:\MSSQL\Data\TransactionLogs\db.bak' WITH NORECOVERY
--Final T-Log to exact point in time recovery.
RESTORE DATABASE [DW] FROM DISK = 'G:\MSSQL\Data\TransactionLogs\db.bak' WITH RECOVERY
...