• 使用sql语句备份和恢复SQLserver数据库,以及需要注意的事项


      本文转自:http://hi.baidu.com/yanzuoguang/blog/item/e94b2534d44b6b83a71e1255.html

      在此严重感谢该文作者!因为看了那么多作者写的数据库恢复语句,没有一个提到:恢复必须在单用户模式下操作才能够成功,

    更没有一个提到:存储过程不要建立在目标数据库中。对于新手,如果不知道这样两个前提就来搞恢复,会碰到各种各样的问题。

      备份:backup database dbname to disk=';d:\dbn.aa';
      恢复:restore database dbname from disk=';d:\dbn.aa';

      恢复必须在单用户模式下操作才能够成功,我们需要断开其他用户的连接,并且切换到其他数据库,才能够成功

    我们可以通过写存储过程来断开其他用户的连接

      我以前曾经这样实验过
      1 找到所有与这个数据库的连接,全部KILL (用VB调用一个存储过程来实现)
      2 在用VB调用另外一个写好的存储过程来进行恢复,注意两个存储过程都不要建立在目标数据库中

      在我自己的项目中,我是将下面的killrubbishprocess存储过程建立在了sql server系统保留数据库master

    中,同时将上面的恢复语句也写成存储过程建立在master中。

      这里我把杀掉连接的存储过程提供给你,恢复数据库的存储过程很简单你自己来吧。
      CREATE PROCEDURE dbo.killrubbishprocess AS
      DECLARE @spidnum int
      DECLARE rubbish_CURSOR CURSOR FOR
      select spid
      from master.dbo.sysprocesses
      where spid > 10 and spid <= 32767 and status='sleeping' and loginame='sa'
    order by spid

      OPEN rubbish_CURSOR

      FETCH NEXT FROM rubbish_CURSOR
      INTO @spidnum
      select s_kill = "kill " + cast(@spidnum as char(5))
      WHILE @@FETCH_STATUS=0
      BEGIN
        EXEC (s_kill)
        FETCH NEXT FROM rubbish_CURSOR
        INTO @spidnum

      END


      CLOSE rubbish_CURSOR
      DEALLOCATE rubbish_CURSOR
      GO  

      然后调用恢复语句既可以实现,但是必须保证,杀死其他用户连接时,必须在恢复的时间段里面不能再有其他用户连接到数据库

  • 相关阅读:
    数据结构10——最短路径
    获取JVM转储文件的Java工具类
    如何测试这个方法--性能篇
    如何测试这个方法--功能篇
    使用WireMock进行更好的集成测试
    性能测试框架第二版
    如何使用Selenium来计算自动化测试的投资回报率?
    模糊断言
    如何从测试自动化中实现价值
    如何获取JVM堆转储文件
  • 原文地址:https://www.cnblogs.com/pricks/p/1698946.html
Copyright © 2020-2023  润新知