sql資料庫日常維護指令碼
阿新 • • 發佈:2019-01-05
–備份
declare @sql varchar(8000)
set @sql='backup database mis to disk=''d:\databack\mis\mis'
+rtrim(convert(varchar,getdate(),112))+'.bak'''
exec(@sql)
–刪除15天前備份檔案
set @sql='del d:\databack\mis\mis'
+rtrim(convert(varchar,getdate()-15,112))+'.bak'''
exec master..xp_cmdshell @sql
–清除日誌
dumptransaction databasename with no_log
backuplog databasename with no_log
–檢視資料庫裡使用者和程序的資訊
sp_who
–檢視SQL Server資料庫裡的活動使用者和程序的資訊
sp_who 'active'
–檢視SQL Server資料庫裡的鎖的情況
sp_lock
–程序號–50是SQL Server系統內部用的,程序號大於的才是使用者的連線程序.
–spid是程序編號,dbid是資料庫編號,objid是資料物件編號
–收縮資料庫日誌檔案的方法
–收縮簡單恢復模式資料庫日誌,收縮後@database_name_log的大小單位為M
backuplog@database_namewith no_log
dbcc shrinkfile (@database_name_log, 5)
–分析SQL Server SQL 語句的方法:
setstatistics time {on|off}
setstatistics io {on|off}
–圖形方式顯示查詢執行計劃
–在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點選工具欄裡的圖形
–文字方式顯示查詢執行計劃
set showplan_all {on|off}
set showplan_text { on |off }
setstatistics profile { on|off }
/*********完整備份作業*********/
–完整備份,每週一次
USE Master
GO
[email protected](100)
set@str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),'',''),':','')+'.bak'
BACKUPDATABASE[demo][email protected]
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME=N'Demo完整備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
/*********差異備份作業*********/
–截斷日誌
USE Master
GO
BACKUPLOG Demo WITH NO_LOG
GO
–收縮日誌檔案
USE Demo
GO
DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
GO
–差異備份,每天一次
USE Master
GO
[email protected](100)
set@str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),'',''),':','')+'.diff'
BACKUPDATABASE[Demo][email protected]
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME=N'Demo差異備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
/********日誌備份作業*********/
–日誌備份,每小時一次
USE Demo
GO
[email protected](100)
set@str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),'',''),':','')+'.trn'
BACKUPLOG[Demo][email protected]
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME=N'Demo日誌備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
–刪除過期的備份檔案,每天兩次
declare@strvarchar(100),@dirvarchar(100),@fileNamevarchar(30)
set@dir='del D:\DBtext\jgj\DBABak\'
set@filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),'',''),':',''),8)
set@[email protected]+'fullbak'[email protected]+'*.bak'
exec xp_cmdshell @str
set@filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set@[email protected]+'diffbak'[email protected]+'*.diff'
exec xp_cmdshell @str
set@filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set@[email protected]+'logbak'[email protected]+'*.trn'
exec xp_cmdshell @str