完全备份:BACKUP DATABASE CPAS TO DISK = 'G:\20210317\bak\CPAS_bak_full.bak' WITH INIT
use master;
go
---声明变量
declare @dbName nvarchar(max)='CPAS1';
declare @dbFullName nvarchar(max)='G:\20210317\bak\CPAS2_bak_full.bak';
---备份数据库
DECLARE @kid varchar(100)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName)
PRINT @kid
EXEC(@kid);
backup database CPAS1 to disk=@dbFullName;
备注:
--完整备份数据库
BACKUP DATABASE Test_Bak TO DISK =
'E:\20181029\bak\Test_bak_full.bak'
WITH INIT<br>
--差异备份数据库
BACKUP DATABASE Test_Bak TO DISK =
'E:\20181029\bak\Test_bak_diff.bak'
WITH INIT, DIFFERENTIAL --加上DIFFERENTIAL代表差异备份<br>
--事务日志备份
BACKUP LOG Test_Bak TO DISK =
'E:\20181029\bak\Test_bak_log.bak'
WITH INIT --BACKUP LOG表示备份事务日志,BACKUP DATABASE表示完整或差异备份<br>
--备份事务日志,文件名中包含当前时间,适合定时备份
DECLARE @strbackup NVARCHAR(100)
--改为日期加时间的
SET @strbackup =
'E:\20181029\bak\Test_bak_log_'
+ REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120),
'-'
,
''
),
' '
,
''
),
':'
,
''
) +
'.bak'
BACKUP LOG Test_Bak TO DISK = @strbackup WITH INIT;
GO
还原:
--replace 覆盖原有数据库
--recovery 还原数据库后,数据库处于正常状态
--norecovery 还原数据库后,数据库处于非正常状态,等待下一步还原
use master
go
---声明变量
declare @dbName nvarchar(max)='CPAS1';
declare @dbFullName nvarchar(max)='G:\20210317\bak\CPAS1_bak_full.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');