如何監控 SQL Server 使用TSQL和Excel進行數據庫增長

立即分享:

監視數據庫的增長是規劃服務器資源的關鍵因素。 使用此腳本並創建易於理解的數據庫增長報告

為什麼需要監視數據庫增長

如果您是SQL數據庫管理員,並且沒有“SQL Server 數據庫容量計劃”中,那麼您可以確保服務器上的數據庫很快就會填滿磁盤空間。 跟踪SQL數據庫的大小和增長是容量計劃的主要任務之一。 這還可以確保磁盤上有足夠的空間來增長數據庫。

通過SQL腳本和Excel進行DIY

在本文中,我們將使用SQL和Excel來捕獲SQL數據庫的大小以及模式。 這將使我們能夠為迫在眉睫的空間需求做出計劃,並幫助我們了解時間緊迫的時間表。

此過程分為四個不同的步驟,因此您可以毫無困難地遵循該步驟。

步驟1:在新的查詢窗口上執行此腳本。

輸出將具有數據庫名稱作為行標題,將Month作為列標題。 輸出中顯示的值是以GB為單位的數據庫大小。

declare @v_count as integer, @do_count as integer, @v_month as varchar(20),@sql as varchar(5000)

create table [t_databases]
(
Database_Name varchar(200),
January       float(3),
February      float(3),
March  float(3),
April  float(3),
May    float(3),
June   float(3),
July   float(3),
August float(3),
September     float(3),
October       float(3),
November      float(3),
December      float(3),
)
create table t_databases_gateway
(
Database_Name varchar(200),
Database_Size float(3)
)
set @v_count = (select COUNT(*) from t_databases ) 
if @v_count = 0 
begin
insert into t_databases(Database_Name)
select name from sysdatabases 
 end
if @v_count <> 0 
 begin 
--this script captures the size of all databases. You can add a where clause to capture the size of specific database name 
 INSERT t_databases (Database_Name) 
 SELECT DISTINCT Name FROM sysdatabases cr LEFT JOIN t_databases c ON cr.Name = c.Database_Name WHERE c.Database_Name IS NULL 
 end 
 --select * from master.dbo.t_databases 
 --drop table t_databases 
 set @do_count = 1 
 while (@do_count <=12) 
 begin 
 set @v_month = DATENAME(m, str(@do_count) + '/1/2016') –change the year to 2017 or other year as per your requirement 
 truncate table master.dbo.t_databases_gateway 
 insert into master.dbo.t_databases_gateway select distinct
(msdb.dbo.backupset.[database_name]),max(msdb.dbo.backupset.[Backup_Size]/1073741824)
from msdb.dbo.backupset inner join master.dbo.t_databases on msdb.dbo.backupset.[database_name] = master.dbo.t_databases.[Database_Name] where
datepart(m,msdb.dbo.backupset.[backup_finish_date]) =  @do_count and datepart(yyyy,msdb.dbo.backupset.[backup_finish_date] ) = 2015 group by msdb.dbo.backupset.[database_name]
set @sql = 'update master.dbo.t_databases set ' + @v_month + ' = (select Database_Size from master.dbo.t_databases_gateway where master.dbo.t_databases.Database_Name = master.dbo.t_databases_gateway.Database_Name)'
exec (@sql)
set @do_count = @do_count + 1
end
select * from t_databases
drop table t_databases_gateway
drop table t_databases

輸出:輸出數據庫大小

步驟2:創建一個新的Excel實例,並將上一步的輸出複製到新的Excel工作表中。

將輸出複製到Excel工作表

步驟3:現在,在工作表上選擇前兩行,並插入2D折線圖。

這將為所選數據庫創建趨勢圖。 在圖表中,X軸表示月份,Y軸表示數據庫大小(以GB為單位)。在工作表上選擇前兩行並插入2D折線圖

第4步:通過拖動“加號”符號將其包圍來選擇整個數據。

這將在圖表上顯示所有數據庫的趨勢。選擇整個數據

在圖表上顯示所有數據庫的趨勢

如果跳過第3步,並通過選擇整個表格插入2D折線圖,您仍然會得到一個圖表,但是X軸將表示數據庫名稱而不是月份,這不是必需的輸出。跳過第3步,通過選擇整個表來插入2D折線圖

輸出表可能具有一些NULL值。 發生這種情況是因為數據庫備份歷史記錄在該特定月份可能沒有數據庫的任何記錄。 這也意味著該腳本引用備份歷史記錄表中的備份大小來跟踪增長趨勢。 如果備份計劃中未包括您的任何數據庫,則“輸出”表仍將保留數據庫名稱,但所有月份的值均為NULL

修復超大數據庫

如果您過去不遵循上述策略,並且數據庫過大,則可能會導致各種問題。 在這種情況下,您最好找到一個 SQL Server 文件恢復工具 有效地解決問題。

作者簡介:

Neil Varley是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 修復Outlook問題 和excel恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。