Резервное копирование и восстановление SQL Server из C # - PullRequest
1 голос
/ 03 июля 2011

Я написал программу на C # для использования SQL 2008.

Я хочу сделать резервную копию базы данных и восстановить ее.Мой код для резервного копирования работает правильно, но восстановление не работает, и база данных становится однопользовательской.

Получите следующую ошибку:

Не удалось создать резервную копию файла журнала базы данных «доктор»Используйте BACKUP LOG WITH NORECOVERY для резервного копирования журнала, если он содержит работу, которую вы не хотите потерять.Используйте предложение WITH REPLACE или WITH STOPAT оператора RESTORE, чтобы просто перезаписать содержимое журнала.ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ завершается ненормально.Неквалифицированные транзакции откатываются.Расчетный откат

Мой код:

private void Backup(string strFileName)
{
    try
    {
        string command = @"BACKUP DATABASE doctor TO DISK='"+ strFileName+"'";
        SqlCommand oCommand = null;
        SqlConnection oConnection = null;
        oConnection = new SqlConnection("Data Source=.;Initial Catalog=doctor;Integrated Security=True");
        if (oConnection.State != ConnectionState.Open)
        oConnection.Open();
        oCommand = new SqlCommand(command, oConnection);
        oCommand.ExecuteNonQuery();


    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}   

private void Restore(string strFileName)
{
    try
    {
        string command = "ALTER DATABASE doctor SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE doctor FROM DISK='" + strFileName + "'";
        SqlCommand oCommand = null;
        SqlConnection oConnection = null;
        oConnection = new SqlConnection("Data Source=.;Initial Catalog=doctor;Integrated Security=True");
        if (oConnection.State == ConnectionState.Closed)
        {
            oConnection.Open();
            oCommand = new SqlCommand(command, oConnection);
            oCommand.ExecuteNonQuery();               
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Ответы [ 3 ]

1 голос
/ 03 июля 2011

Вы получили ошибку MSSQLSERVER_3159, объяснение и действия пользователя можно найти на

msdn: MSSQLSERVER_3159 документация

Надеюсь, это помогло.

1 голос
/ 03 июля 2011

Я думаю, если вы согласны

"С заменой"

с вашей строкой восстановления это будет работать.

0 голосов
/ 03 июля 2011

Может показаться, что ваша база данных использует режим полного восстановления, и при нормальных обстоятельствах требуется резервное копирование журнала.

В зависимости от вашего сценария может оказаться достаточным ответ Нимы.

См. Следующееразделы по MSND для получения дополнительной информации по теме:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...