sqlserver的备份和恢复 命令非计划任务

这里的备份恢复是指用命令

备份

BACKUP DATABASE [SnPrintZC] TO  DISK = N'F:\sqlbackup\sp2' WITH NOFORMAT, NOINIT, 
 NAME = N'备份说明', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

SnPrintZC 数据库名 disk 备份路径绝对值

恢复

RESTORE DATABASE [SnPrintZC] FROM  DISK = N'F:\sqlbackup\sp2' 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:\sqlbackup\sp2' WITH FILE = 1, NOUNLOAD, STATS = 5

完整脚本

use master 
go
---声明变量
declare @dbName nvarchar(max)='LeaRunFramework_Base';
declare @dbFullName nvarchar(max)='D:\sqlback\LeaRunFramework_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服务的服务帐户

posted @ 2021-07-02 14:25  过错  阅读(197)  评论(0编辑  收藏  举报