【问题标题】:Cannot perform a backup or restore operation within a transaction. BACKUP DATABASE is terminating abnormally无法在事务中执行备份或恢复操作。 BACKUP DATABASE 异常终止
【发布时间】:2014-10-08 05:35:25
【问题描述】:

我正在尝试在由EF6 建模的应用程序中执行backUprestore 命令。

为了我的备份,我创建了一个Sp,您可以在此处看到:

CREATE PROCEDURE GetBackUp
    -- Add the parameters for the stored procedure here
    @address nvarchar(max)
AS
BEGIN
    BACKUP DATABASE [db-invoice-169] to DISK=@address
END
GO

在我的应用程序中,我称之为Sp

 private void Backup_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            string str_filename = string.Empty;
            sfd.FileName = "backup_database_" + DateTime.Now.ToShortDateString().Replace("/", "_");
            sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
            sfd.FilterIndex = 1;
            sfd.OverwritePrompt = true;
            sfd.Title = "***save backup files***";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                str_filename = sfd.FileName;
                backup(str_filename);
            }
        }
        private void backup(string str_filename)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                db.Database.ExecuteSqlCommand(@"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");
                this.Cursor = Cursors.Default;
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز بود");
            }
            catch (Exception ex)
            {
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز نبود |" + ex.Message);
            }

        }

但是我收到了这个错误:

无法在事务中执行备份或恢复操作。 BACKUP DATABASE 异常终止。

【问题讨论】:

    标签: c# sql-server entity-framework transactions backup


    【解决方案1】:

    尝试更改此行:

    db.Database.ExecuteSqlCommand(@"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");
    

    到:

    db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, @"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");
    

    阿布拉尔

    【讨论】:

      【解决方案2】:

      在备份代码之前试试这个

      using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Suppress))
      {
          // Add you backup query or your stuff
          ts.Complete();
      }
      

      【讨论】:

        【解决方案3】:

        根据 abrar 的回答,我在 SQLlocaldb 和实体框架中的还原过程中遇到此错误:

        RESTORE cannot process database 'database' because it is in use by this session. It is recommended that the master database be used when performing this operation.
        RESTORE DATABASE is terminating abnormally.
        

        解决办法:

        db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, @"USE master EXEC [dbo].[back_up] @address = N'"+str_filename+"'")
        

        【讨论】:

        • 您几乎从字面上重复另一个答案。这没有帮助,只会增加噪音。除此之外,[dbo].[back_up] 是什么?你能显示源代码吗?我非常怀疑你碰巧有与问题相同的存储过程。
        • 在我的情况下 abrar 的解决方案不起作用,因为我使用 EntityFramework 和 SQLLocalBD,因此我考虑更改 abrar 的解决方案,如果有人遇到同样的问题,包括“USE master”,我写道:“根据abrar 的回答我在 SQLlocaldb 和实体框架中的还原过程中遇到此错误”,“[dbo].[back_up]”是 SP 备份名称。有什么困惑?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 2018-01-30
        相关资源
        最近更新 更多