代码之家  ›  专栏  ›  技术社区  ›  Mike

SQL Server 2008:在运行存储过程之前备份数据库

  •  2
  • Mike  · 技术社区  · 14 年前

    我有一个每周运行一次的存储过程,它是由用户通过单击我们内部网站上的按钮启动的。我想在过程中的代码实际运行之前自动备份数据库。

    因此,我用以下代码创建了一个单独的存储过程:

    DECLARE @Path varchar(50)
    SET @Path = '\\1.1.1.1\SQLBackup\DBName' + convert(varchar, getdate(), 10) +'.bak' 
    
    BACKUP DATABASE [DBName] TO  DISK = @Path WITH NOFORMAT, NOINIT,  NAME = N'DBname-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    

    然后使用

    EXEC GenerateRenewalBackup
    

    问题是,应用程序在数据库备份上甚至在运行第二个存储过程中的代码之前就超时了。

    我这样做对吗?数据库的大小只有38MB。将数据库配置为作业会更好吗?可以从存储过程运行作业吗?任何指导都会很有帮助。非常感谢。

    5 回复  |  直到 14 年前
        1
  •  1
  •   Remus Rusanu    14 年前

    首先,添加一个 WITH COPY_ONLY 子句添加到备份中,以便它不会干扰普通的维护备份链(如果 你的备份链,然后是错误的,无论如何,你需要一个适当的 maintenance plan 到位)。

    • 增加应用程序上的CommandTimeout,使其等待过程完成(默认超时时间为30秒)。
    • 使按钮立即创建/启动SQL代理作业,而不是运行该过程。
    • asynchronous procedure execution .

    哪一个是正确的选择,取决于许多只有你知道的因素。我敢打赌,这应该是一个定期安排的作业,不应该有用户交互,但如果不了解驱动这一点的业务流程,这是不可能猜测的。

        2
  •  1
  •   Mitch Wheat    14 年前

    创建SQL代理job:.

    1. 第一步,备份数据库。
    2. 定义要运行的作业的计划。
        3
  •  1
  •   SQLMenace    14 年前

    你能从存储的数据库运行作业吗

    是的,你可以用 sp_startjob

        4
  •  1
  •   JeffO    14 年前

    在前一天晚上运行完全备份(为什么不在这么小的数据库上),然后在proc运行之前只运行差异或事务日志备份。

        5
  •  0
  •   Coding Flow    14 年前