sqlServer 收縮日誌大小

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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章