程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> SQL Server中聚合歷史備份信息對比數據庫增長的方法,sqlserver

SQL Server中聚合歷史備份信息對比數據庫增長的方法,sqlserver

編輯:更多數據庫知識

SQL Server中聚合歷史備份信息對比數據庫增長的方法,sqlserver


很多時候,在我們規劃SQL Server數據庫的空間,或向存儲方面要空間時,都需要估算所需申請數據庫空間的大小,估計未來最簡單的辦法就是看過去的趨勢,這通常也是最合理的方式。

通常來講,一個運維良好的數據庫都需要做定期基線(baseline),有了基線才會知道什麼是正常。一個簡單的例子例如,一些人的血壓平常偏低,那麼80的低壓對他來說就是不正常了。但現實情況是大多數系統並沒有采集基線的習慣,因此在需要規劃空間想要看歷史增長時,就沒有過去精確的數據了。

一個解決辦法就是通過查看歷史備份的大小來看過去的數據增長趨勢,數據庫備份的時候不會備份整個文件,而只備份在FPS頁中標記已經分配的頁,可以出現數據庫是20G,但備份只有3G的情況,因此數據庫備份可以作為查看數據增長的依據。

數據庫在每次備份時都會在msdb.dbo.backupset表中記錄備份的相關信息,因此可以通過下述查看來聚合歷史備份信息,從而對比數據庫的增長:

SELECT
[database_name] AS "Database",
DATEPART(month,[backup_start_date]) AS "Month",
AVG([backup_size]/1024/1024) AS "Backup Size MB"
FROM msdb.dbo.backupset
WHERE
 [database_name] = N'Adventureworks2012'
AND [type] = 'D'
GROUP BY [database_name],DATEPART(mm,[backup_start_date]);

代碼清單1.按月查看歷史數據的增長

結果如圖1所示。

image

圖1.歷史數據的增長

其中,代碼清單1中database_name換成你需要查看的數據庫名稱即可。

注:SQL Server 2008之後引入了基於策略的管理,該策略會默認建立一個作業,如圖2所示,該作業每天2點運行,會按照策略(歷史記錄保留天數,如圖3所示)清理過期的歷史記錄。

image

圖2.查看策略管理

image

圖3.歷史記錄保留天數,默認為0,既永不清理

該策略會對應建立一個作業(如圖4所示)。

image

圖4.清理歷史記錄的作業

如果該作業或人為建立的作業清除了msdb.dbo.backupset表中的數據,則代碼清單1中的結果可能會受到一定影響。


Sql Server中實現數據庫的自動備份都有哪幾種方法?詳細說明

/*******************完整備份作業*******************/--完整備份,每周一次USE MasterGOdeclare @str varchar(100)set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'BACKUP DATABASE [demo] TO DISK=@strWITH RETAINDAYS=15,NOFORMAT,NOINIT,NAME=N'Demo完整備份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO

/*******************差異備份作業*******************/--截斷日志USE MasterGOBACKUP LOG Demo WITH NO_LOGGO--收縮日志文件USE DemoGODBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)GO--差異備份,每天一次USE MasterGOdeclare @str varchar(100)set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'BACKUP DATABASE [Demo] TO DISK=@strWITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,NAME=N'Demo差異備份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO

/******************日志備份作業*******************/--日志備份,每小時一次USE DemoGOdeclare @str varchar(100)set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'BACKUP LOG [Demo] TO DISK=@strWITH RETAINDAYS=3,NOFORMAT,NOINIT,NAME=N'Demo日志備份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO

--刪除過期的備份文件,每天兩次declare @str varchar(100),@dir varchar(100),@file......余下全文>>
 

SQL 查詢問題,聚合函數;SQL Server數據庫

語句改成這樣就可以了。
select A.UserID, B.UserName, B.Tel, SUM(A.Num) as Sum from A, B where A.UserID=B.UserID group by A.UserID, B.UserName, B.Tel;
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved