Я пытаюсь восстановить как полную резервную копию, так и дифференциальную резервную копию с помощью запросов Sql. Но при этом выдается исключение при произнесении команды «Нет восстановления» или «Восстановить с помощью QuickBackup(txt_Quick.Text)
«Журнал или дифференциальная резервная копия не могут быть восстановлены, поскольку нет файловготовы к повтору транзакций.\r\nRESTORE DATABASE завершается
ненормально.\r\nКонтекст базы данных изменен на «главный».
Вот мой код. См. условие else if в методе WriteFile().
private void WriteFile()
{
try
{
// Creates Restore.sql file.
string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";
FileInfo File = new FileInfo(strTSQLFile);
StreamWriter Writer = File.CreateText();
// Write open database
string strTemp;
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
Writer.WriteLine("Go");
if (Complete_Opt.Checked == true) // Full restore
{
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH RECOVERY";
Writer.WriteLine(strTemp);
}
else if (Differential_Opt.Checked == true) // Quick restore
{
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH RECOVERY";
Writer.WriteLine(strTemp);
Writer.WriteLine("GO");
//Writer.WriteLine("WAITFOR DELAY '00:00:10'");
//Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
Writer.WriteLine("Go");
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + txt_Quick.Text + "\' WITH NORECOVERY";
Writer.WriteLine(strTemp);
}
Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
Writer.WriteLine("GO");
Writer.Close();
}
catch (Exception Exc)
{
throw Exc;
}
}
Вот как я выполняю запросы.
try
{
string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";
if (!File.Exists(strTSQLFile))
{
throw new FileNotFoundException();
}
using (StreamReader srSQL = new StreamReader(strTSQLFile))
{
string sqlLine;
StringBuilder sqlString = new StringBuilder();
while (!srSQL.EndOfStream)
{
sqlLine = srSQL.ReadLine();
if (string.IsNullOrEmpty(sqlLine) == false)
{
// We don't actually execute the "GO" lines but can use them to determine when to call the executenonquery function
if (string.Compare(sqlLine, "GO", true) == 0)
{
// Make sure we have something to execute
if (string.IsNullOrEmpty(sqlString.ToString()) == false)
{
ServerActionResult.ConnectionContext.ExecuteNonQuery(sqlString.ToString());
System.Diagnostics.Debug.WriteLine(sqlString);
}
sqlString.Clear();
}
// Add the next line to the stringbuilder object
else
{
sqlString.AppendLine(sqlLine);
}
}
}
}
}
catch (Exception exc)
{
throw exc;
}
finally
{
var strQuery = ("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
ServerActionResult.ConnectionContext.ExecuteNonQuery(strQuery);
}
Когда я пишу в окно отладки с помощью System.Diagnostics.Debug.WriteLine(sqlString);, вот что я вижу:
ALTER DATABASE [PharmSpecDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
USE MASTER RESTORE DATABASE [PharmSpecDB] FROM DISK = 'C:\PharmBackup\Backup\PharmSpecDB_14-Nov-2024-13-38-12-520_Full.Fbk' WITH RECOVERY
ALTER DATABASE [PharmSpecDB] SET MULTI_USER
ALTER DATABASE [PharmSpecDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Exception thrown: 'Microsoft.SqlServer.Management.Common.ExecutionFailureException' in Microsoft.SqlServer.ConnectionInfo.dll
Вот как создаются резервные копии
Backup bk = new Backup();
string szFilename = DB_NAME + "_" + DateTime.Now.ToString("dd-MMM-yyyy-HH-mm-ss-fff", CultureInfo.InvariantCulture);
//Setup the backup options
if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_FULL)
{
szFilename += "_Full.Fbk";
bk.BackupSetDescription = "PharmSpecDB Full Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = false;
}
else if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_QUICK)
{
szFilename += "_Quick.qbk";
bk.BackupSetDescription = "PharmSpecDB Quick Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = true;
}
bdi = new BackupDeviceItem(szLocation + szFilename, DeviceType.File);
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.Database = DB_NAME;
bk.RetainDays = 365;
//Perform the backup
bk.SqlBackup(ServerActionResult);
Подробнее здесь: https://stackoverflow.com/questions/791 ... ull-backup
Восстановление дифференциальной резервной копии вместе с полной резервной копией ⇐ C#
Место общения программистов C#
1731578753
Anonymous
Я пытаюсь восстановить как полную резервную копию, так и дифференциальную резервную копию с помощью запросов Sql. Но при этом выдается исключение при произнесении команды «Нет восстановления» или «Восстановить с помощью QuickBackup(txt_Quick.Text)
«Журнал или дифференциальная резервная копия не могут быть восстановлены, поскольку нет файловготовы к повтору транзакций.\r\nRESTORE DATABASE завершается
ненормально.\r\nКонтекст базы данных изменен на «главный».
Вот мой код. См. условие else if в методе WriteFile().
private void WriteFile()
{
try
{
// Creates Restore.sql file.
string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";
FileInfo File = new FileInfo(strTSQLFile);
StreamWriter Writer = File.CreateText();
// Write open database
string strTemp;
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
Writer.WriteLine("Go");
if (Complete_Opt.Checked == true) // Full restore
{
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH RECOVERY";
Writer.WriteLine(strTemp);
}
else if (Differential_Opt.Checked == true) // Quick restore
{
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH RECOVERY";
Writer.WriteLine(strTemp);
Writer.WriteLine("GO");
//Writer.WriteLine("WAITFOR DELAY '00:00:10'");
//Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
Writer.WriteLine("Go");
strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + txt_Quick.Text + "\' WITH NORECOVERY";
Writer.WriteLine(strTemp);
}
Writer.WriteLine("GO");
Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
Writer.WriteLine("GO");
Writer.Close();
}
catch (Exception Exc)
{
throw Exc;
}
}
Вот как я выполняю запросы.
try
{
string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";
if (!File.Exists(strTSQLFile))
{
throw new FileNotFoundException();
}
using (StreamReader srSQL = new StreamReader(strTSQLFile))
{
string sqlLine;
StringBuilder sqlString = new StringBuilder();
while (!srSQL.EndOfStream)
{
sqlLine = srSQL.ReadLine();
if (string.IsNullOrEmpty(sqlLine) == false)
{
// We don't actually execute the "GO" lines but can use them to determine when to call the executenonquery function
if (string.Compare(sqlLine, "GO", true) == 0)
{
// Make sure we have something to execute
if (string.IsNullOrEmpty(sqlString.ToString()) == false)
{
ServerActionResult.ConnectionContext.ExecuteNonQuery(sqlString.ToString());
System.Diagnostics.Debug.WriteLine(sqlString);
}
sqlString.Clear();
}
// Add the next line to the stringbuilder object
else
{
sqlString.AppendLine(sqlLine);
}
}
}
}
}
catch (Exception exc)
{
throw exc;
}
finally
{
var strQuery = ("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
ServerActionResult.ConnectionContext.ExecuteNonQuery(strQuery);
}
Когда я пишу в окно отладки с помощью System.Diagnostics.Debug.WriteLine(sqlString);, вот что я вижу:
ALTER DATABASE [PharmSpecDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
USE MASTER RESTORE DATABASE [PharmSpecDB] FROM DISK = 'C:\PharmBackup\Backup\PharmSpecDB_14-Nov-2024-13-38-12-520_Full.Fbk' WITH RECOVERY
ALTER DATABASE [PharmSpecDB] SET MULTI_USER
ALTER DATABASE [PharmSpecDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Exception thrown: 'Microsoft.SqlServer.Management.Common.ExecutionFailureException' in Microsoft.SqlServer.ConnectionInfo.dll
Вот как создаются резервные копии
Backup bk = new Backup();
string szFilename = DB_NAME + "_" + DateTime.Now.ToString("dd-MMM-yyyy-HH-mm-ss-fff", CultureInfo.InvariantCulture);
//Setup the backup options
if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_FULL)
{
szFilename += "_Full.Fbk";
bk.BackupSetDescription = "PharmSpecDB Full Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = false;
}
else if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_QUICK)
{
szFilename += "_Quick.qbk";
bk.BackupSetDescription = "PharmSpecDB Quick Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = true;
}
bdi = new BackupDeviceItem(szLocation + szFilename, DeviceType.File);
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.Database = DB_NAME;
bk.RetainDays = 365;
//Perform the backup
bk.SqlBackup(ServerActionResult);
Подробнее здесь: [url]https://stackoverflow.com/questions/79188143/restoring-a-differential-backup-along-with-full-backup[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия