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

时间:2024-03-09 14:01:43

一、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:\NewWork\Web\backup\test1.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

 

 

 

 

 

 

 

 

 

 

 

其他相关文章: