declare @dbName nvarchar(50)
declare @bakdbPath nvarchar(255)
declare @bakLogPath nvarchar(255)
declare @LogName nvarchar(50)
set @dbName='HNBC_NEW20191008'
set @bakdbPath ='D:\DataBase\log\'+@dbName+'.bak'
set @bakLogPath ='D:\DataBase\log\'+@dbName+'_log.bak'
use HNBC_NEW20191008--use 沒法用參數所以只能是數據庫名稱
--1、獲取收縮的日誌名稱
set @LogName=(select name from sys.database_files where type_desc='log')
print @LogName
--2、日誌收縮之前完整備份數據庫數據文件和日誌文件,方便恢復
use master
exec sp_executesql N' backup database @dbName to disk=@bakdbPath',N'@dbName nvarchar(50),@bakdbPath nvarchar(255)',@dbName,@bakdbPath
exec sp_executesql N'backup log @dbName to disk=@bakLogPath',N'@dbName nvarchar(50),@bakLogPath nvarchar(255)',@dbName,@bakLogPath
--3、將“恢復模式”設置爲“簡單”
exec('ALTER DATABASE '+@dbname+' SET RECOVERY SIMPLE')
--4、收縮日誌文件大小到1M
use HNBC_NEW20191008 --use 沒法用參數所以只能是數據庫名稱
execute(N'DBCC SHRINKFILE ('+@LogName+' , 1, TRUNCATEONLY)')
--5、將“恢復模式”設置爲“完整”
USE master
execute( N'ALTER DATABASE '+ @dbName+' SET RECOVERY FULL WITH NO_WAIT')
execute( N'ALTER DATABASE '+ @dbName+' SET RECOVERY FULL')
GO
--下面是恢復命令
--restore database HNBC_NEW20191008 from disk='D:\DataBase\log\HNBC_NEW20191008.bak' with replace,norecovery
--restore log HNBC_NEW20191008 from disk='D:\DataBase\log\HNBC_NEW20191008_log.bak' with replace