这里的备份恢复是指用命令
备份
BACKUP DATABASE [SnPrintZC] TO DISK = N'F:sqlbackupsp2' WITH NOFORMAT, NOINIT,
NAME = N'备份说明', SKIP, NOREWIND, NOUNLOAD, STATS = 10
SnPrintZC 数据库名 disk 备份路径绝对值
恢复
RESTORE DATABASE [SnPrintZC] FROM DISK = N'F:sqlbackupsp2' WITH FILE = 1, NOUNLOAD, STATS = 5
脱机
ALTER DATABASE [SnPrintZC] SET OFFLINE WITH ROLLBACK IMMEDIATE;
状态
select name,state_desc from sys.databases
查看进程
EXEC sp_who2
杀死
KILL 1
恢复
恢复的时候,先做脱机处理
1 先看数据库是否还有人用 EXEC sp_who2
2 如果有人用 杀死进程 KILL 1 (1 为 EXEC sp_who2中返回的结果中使用数据库的pid)
3 执行脱机 ALTER DATABASE [SnPrintZC] SET OFFLINE WITH ROLLBACK IMMEDIATE;
4 查看数据库是否脱机 select name,state_desc from sys.databases
5 执行恢复命令 RESTORE DATABASE [SnPrintZC] FROM DISK = N'F:sqlbackupsp2' WITH FILE = 1, NOUNLOAD, STATS = 5
完整脚本
use master
go
---声明变量
declare @dbName nvarchar(max)='LeaRunFramework_Base';
declare @dbFullName nvarchar(max)='D:sqlbackLeaRunFramework_Base20210705-110708.1501.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');
备份脚本
use master backup database dbname to disk='filepath';
如果遇到文件夹权限问题
进入到那个文件夹的属性设置,把 Local Service 和 Network Service加入“安全”标签里的“用户 用户组”里面,分别勾选完全控制。
原因:
一个 SQL 运行环境是由许多 Service 组成,每个 Service 都是以内置的账号登录并运行,这个账号可不是我们自己登录电脑的账号,以什么身份登录并不重要,重要的是SQL Server服务的服务帐户