zoukankan      html  css  js  c++  java
  • SQL Server 数据库备份和还原

    一、SQL命令

    备份
    BACKUP DATABASE TestDb TO DISK='d:TestDb.bak'
    还原
    RESTORE DATABASE TestDb FROM DISK='d:TestDb.bak'


    二、使用管理工具

      文章较长,但比较简单,直接给链接:https://www.cnblogs.com/luckyboy/p/5564880.html

    三、使用sqlcmd

    参考文章:https://www.cnblogs.com/equations/p/6821546.html

    备份

    sqlcmd -S . -E -Q "BACKUP DATABASE AbpFirst TO DISK='d:AbpFirst.bak'"

    还原

    sqlcmd -S . -E -Q "RESTORE DATABASE AbpFirst FROM DISK='d:AbpFirst.bak'"

    四、常见问题

    1.还原失败

    原因:Sql server还原失败,提示:数据库正在使用,无法获得对数据库的独占访问权

    原文:https://blog.csdn.net/u011127019/article/details/54140595

    解决方案1.

    如果你使用管理工具还原数据库并且在Microsoft SQL Server Management Studio 2016或以上版本的话,可以在还原的时候勾选"关闭到目标数据库的现有链接"

    解决方案2:

    如果你的SqlServer Management Studio的版本比较低,可以设置数据库为单用户模式,执行完还原操作后,恢复为多用户模式

    设置方式:选中要还原的数据库-->属性-->选项-->限制访问
    该值从MULTI_USER修改为SINGLE_USER,此时该数据库就会显示为单用户模式
    这是GUI的模式,语句的办法比较简单

    ---设置数据库为单用户模式
    USE MASTER
    GO
    ALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE;   
    GO
    ---设置数据库为多用户模式
    USE MASTER
    GO
    ALTER DATABASE eol_tcgroup SET MULTI_USER WITH ROLLBACK IMMEDIATE;   
    GO

    解决方案3:

    完全使用T-Sql的方式,执行备份数据库操作

    use master
    go
    ---声明变量
    declare @dbName nvarchar(max)='Mvc_HNHZ';
    declare @dbFullName nvarchar(max)='E:NewWorkWebackup	est1.bak';
    --1.1修改为单用模式
     exec(N'ALTER DATABASE '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');
    --1.2结束链接进程
        DECLARE @kid varchar(max)  
        SET @kid=''  
        SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10))  FROM master..sysprocesses  
        WHERE dbid=DB_ID(@dbName)  ;
        EXEC(@kid) ;
    --2.执行还原语句
       restore database @dbName from  disk=@dbFullName
       with replace  --覆盖现有的数据库
    --3.重置数据库为多用户模式
     exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');

    2.强制断开数据库已有连接

    USE master
    GO
    
    ALTER DATABASE [DBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    
    --查看是否还有用户连接
    SELECT * FROM sys.[sysprocesses] WHERE DB_NAME([dbid])='DBName'
    GO
    
    ALTER DATABASE [DBName] SET MULTI_USER 
    GO

    其他相关文章:

    [解决方案]在Sql Server 2008/2005 数据库还原出现 3154错误

  • 相关阅读:
    DataSet中的数据全部插入数据库
    SQL养成一个好习惯是一笔财富
    C#不管什么四舍五入,只要是小数取整就得加1
    XMLNode与XmlNodeList
    ASP.NET2.0中配置文件的加密与解密
    编写一个文件目录常用操作的类
    上传文件的方法
    使用javascript 实现.net 验证控件功能
    SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
    Android之开启内置闹钟与已安装的应用程序设置
  • 原文地址:https://www.cnblogs.com/xcsn/p/9596455.html
Copyright © 2011-2022 走看看