1. 程式人生 > >sql資料庫日常維護指令碼

sql資料庫日常維護指令碼

–備份

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