在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情。因为项目没有上线,用什么来评估数据库的数据增长情况呢? 如果手头没有实际的数据,我们只能从表的数量以及预计一天的数据增长情况来预估数据增长量。当然这里猜测的成分较大。这个是非常不靠谱,也是不准确的。当然我们可以监控测试环境的数据库大小的增长情况来评估数据增长情况。我们可以监控数据库大小的变化来估计生产环境的数据增长情况。当然生产环境和测试环境的区别还是蛮大的。但是这样比那种瞎猜式的还是要靠谱得多。

在项目中期,我们在管理、维护数据库当中,也是需要监控数据库的增长情况的。这样有利于我们了解系统的数据变化情况,利于长期的存储规划,也能提前发现一些异常情况,及时调整数据库数据文件的增长设置。总之来说,监控数据文件的增长情况是有必要的。数据库管理、维护也是需要大数据和BI分析的吗。这个也是一个趋势。

为了监控数据库的数据文件增长情况,我写了一个存储过程用来获取数据库数据文件的一些详细信息。然后可以按天、按周、按月份这三种频率采集数据(具体可以根据需要来采集数据)存放在日表、周表、月表。需要时,即可拿来做一下分析。

基础表Maint.DataBaseSizeDtl_Day,Maint.DataBaseSizeDtl_Week,Maint.DataBaseSizeDtl_Month

USE YourSQLDba;

GO

 

IF EXISTS(SELECT 1 FROM sys.objects WHERE type='U' AND object_id=OBJECT_ID('Maint.DataBaseSizeDtl_Day'))

BEGIN

    DROP TABLE Maint.DataBaseSizeDtl_Day;

END

GO

 

 

CREATE TABLE Maint.DataBaseSizeDtl_Day

(

     DateCD                DATETIME

    ,DataBaseId            INT 

    ,FileId                INT

    ,DataBaseName        NVARCHAR(256)

    ,LogicalName        NVARCHAR(256)

    ,FileTypeDesc        NVARCHAR(120)

    ,PhysicalName        NVARCHAR(520)

    ,StateDesc            NVARCHAR(120)

    ,MaxSize            NVARCHAR(32)

    ,IsPercentGrwoth    BIT

    ,Growth                NVARCHAR(24)

    ,IsReadOnly            BIT

    ,DataBaseSize        FLOAT

    CONSTRAINT PK_DataBaseSizeDtl_Day PRIMARY KEY(DateCD, DataBaseId,FileId)

);

 

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Database Size Detail Records every day', @level0type=N'SCHEMA', @level0name=N'Maint', @level1type=N'TABLE', @level1name=N'DataBaseSizeDtl_Day';

 

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'采集数据库记录的时间',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'DateCD';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'DataBaseId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase file''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'FileId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'DataBaseName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库逻辑名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'LogicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件类型',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'FileTypeDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库物理文件',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'PhysicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库状态',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'StateDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件最大值',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'MaxSize';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否按百分比增长', 

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'IsPercentGrwoth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否自动增长',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'Growth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库是否只读',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'IsReadOnly';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件大小',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Day', @level2type=N'COLUMN',@level2name=N'DataBaseSize';

 

 

 

IF EXISTS(SELECT 1 FROM sys.objects WHERE type='U' AND object_id=OBJECT_ID('Maint.DataBaseSizeDtl_Week'))

BEGIN

    DROP TABLE Maint.DataBaseSizeDtl_Week;

END

GO

 

CREATE TABLE Maint.DataBaseSizeDtl_Week

(

     DateCD                DATETIME

    ,WeekCD                INT

    ,DataBaseId            INT 

    ,FileId                INT

    ,DataBaseName        NVARCHAR(256)

    ,LogicalName        NVARCHAR(256)

    ,FileTypeDesc        NVARCHAR(120)

    ,PhysicalName        NVARCHAR(520)

    ,StateDesc            NVARCHAR(120)

    ,MaxSize            NVARCHAR(32)

    ,IsPercentGrwoth    BIT

    ,Growth                NVARCHAR(24)

    ,IsReadOnly            BIT

    ,DataBaseSize        FLOAT

    CONSTRAINT PK_DataBaseSizeDtl_Week PRIMARY KEY(WeekCD,DateCD, DataBaseId,FileId)

);

GO

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Database Size Detail Records every week(Sunday)', @level0type=N'SCHEMA', @level0name=N'Maint', @level1type=N'TABLE', @level1name=N'DataBaseSizeDtl_Week';

 

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'采集数据库记录的时间',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'DateCD';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'第几周',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'WeekCD';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'DataBaseId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase file''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'FileId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'DataBaseName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库逻辑名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'LogicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件类型',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'FileTypeDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库物理文件',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'PhysicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库状态',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'StateDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件最大值',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'MaxSize';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否按百分比增长', 

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'IsPercentGrwoth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否自动增长',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'Growth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库是否只读',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'IsReadOnly';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件大小',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Week', @level2type=N'COLUMN',@level2name=N'DataBaseSize';

 

 

 

IF EXISTS(SELECT 1 FROM sys.objects WHERE type='U' AND object_id=OBJECT_ID('Maint.DataBaseSizeDtl_Month'))

BEGIN

    DROP TABLE Maint.DataBaseSizeDtl_Month;

END

GO

 

CREATE TABLE Maint.DataBaseSizeDtl_Month

(

     DateCD                DATETIME

    ,MonthCD            INT

    ,DataBaseId            INT 

    ,FileId                INT

    ,DataBaseName        NVARCHAR(256)

    ,LogicalName        NVARCHAR(256)

    ,FileTypeDesc        NVARCHAR(120)

    ,PhysicalName        NVARCHAR(520)

    ,StateDesc            NVARCHAR(120)

    ,MaxSize            NVARCHAR(32)

    ,IsPercentGrwoth    BIT

    ,Growth                NVARCHAR(24)

    ,IsReadOnly            BIT

    ,DataBaseSize        FLOAT

    CONSTRAINT PK_DataBaseSizeDtl_Month PRIMARY KEY(MonthCD,DateCD, DataBaseId,FileId)

);

 

 

 

USE YourSQLDba;

GO

 

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Database Size Detail Records every month(the first day)', @level0type=N'SCHEMA', @level0name=N'Maint', @level1type=N'TABLE', @level1name=N'DataBaseSizeDtl_Month';

 

 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'采集数据库记录的时间',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'DateCD';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'采集数据的月份',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'MonthCD';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'DataBaseId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'the datebase file''s identity number',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'FileId';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'DataBaseName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库逻辑名称',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'LogicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件类型',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'FileTypeDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库物理文件',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'PhysicalName';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库状态',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'StateDesc';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件最大值',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'MaxSize';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否按百分比增长', 

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'IsPercentGrwoth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件是否自动增长',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'Growth';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库是否只读',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'IsReadOnly';

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'数据库文件大小',

                                @level0type='SCHEMA', @level0name='Maint', @level1type=N'TABLE',@level1name=N'DataBaseSizeDtl_Month', @level2type=N'COLUMN',@level2name=N'DataBaseSize';

存储过程[Maint].[Usp_Monitor_Database_Size]

SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE id = OBJECT_ID(N'Maint.Usp_Monitor_Database_Size') AND OBJECTPROPERTY(id, 'IsProcedure') =1)
DROP PROCEDURE Maint.Usp_Monitor_Database_Size
GO CREATE PROCEDURE [Maint].[Usp_Monitor_Database_Size]
(
@Frequency VARCHAR(12) ='WEEK'
) WITH ENCRYPTION
--==================================================================================================
-- ProcedureName : Maint.Usp_Monitor_Database_Size
-- Author : Kerry
-- CreateDate : 2015-12-18
-- Description : 监控、记录数据库的数据文件增长变化,方便分析系统数据增长量以及规划存储
/***************************************************************************************************
Parameters : 参数说明
****************************************************************************************************
@Frequency : 采集频率,分为日DAY,周WEEK、月MONTH采集
****************************************************************************************************
Modified Date Modified User Version Modified Reason
****************************************************************************************************
2015-12-18 Kerry V01.00.00 新建该存储过程。
***************************************************************************************************/
--==================================================================================================
AS
BEGIN IF @Frequency ='WEEK'
BEGIN
INSERT INTO Maint.DataBaseSizeDtl_Week
SELECT GETDATE() AS DataCD
,DATEPART(WEEK, GETDATE()) AS WeekCD
,database_id AS DataBaseId
,file_id AS FileId
,DB_NAME(database_id) AS DataBaseName
,Name AS LogicalName
,type_desc AS FileTypeDesc
,Physical_Name AS PhysicalName
,State_Desc AS StateDesc
,CASE WHEN max_size = 0 THEN N'不允许增长'
WHEN max_size = -1 THEN N'自动增长'
ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2))
+ 'G'
END AS MaxSize
,Is_Percent_Growth
,CASE WHEN is_percent_growth = 1
THEN RTRIM(CAST(Growth AS CHAR(16))) + '%'
ELSE RTRIM(CAST(CAST(Growth*8.0/1024 AS DECIMAL(10, 4)) AS CHAR(16))) + 'M'
END AS Growth
,Is_Read_Only AS IsReadOnly
,CAST(size * 8.0 / 1024 / 1024 AS DECIMAL(16, 4)) AS [Size(GB)]
FROM sys.master_files
ORDER BY 3 END
ELSE IF @Frequency='MONTH'
BEGIN
INSERT INTO Maint.DataBaseSizeDtl_MONTH
SELECT GETDATE() AS DataCD
,DATEPART(MONTH, GETDATE()) AS WeekCD
,database_id AS DataBaseId
,file_id AS FileId
,DB_NAME(database_id) AS DataBaseName
,Name AS LogicalName
,type_desc AS FileTypeDesc
,Physical_Name AS PhysicalName
,State_Desc AS StateDesc
,CASE WHEN max_size = 0 THEN N'不允许增长'
WHEN max_size = -1 THEN N'自动增长'
ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2))
+ 'G'
END AS MaxSize
,Is_Percent_Growth
,CASE WHEN is_percent_growth = 1
THEN RTRIM(CAST(Growth AS CHAR(16))) + '%'
ELSE RTRIM(CAST(CAST(Growth*8.0/1024 AS DECIMAL(10, 4)) AS CHAR(16))) + 'M'
END AS Growth
,Is_Read_Only AS IsReadOnly
,CAST(size * 8.0 / 1024 / 1024 AS DECIMAL(16, 4)) AS [Size(GB)]
FROM sys.master_files
ORDER BY 3
END
ELSE IF @Frequency='DAY'
BEGIN
INSERT INTO Maint.DataBaseSizeDtl_Day
SELECT GETDATE() AS DataCD
,database_id AS DataBaseId
,file_id AS FileId
,DB_NAME(database_id) AS DataBaseName
,Name AS LogicalName
,type_desc AS FileTypeDesc
,Physical_Name AS PhysicalName
,State_Desc AS StateDesc
,CASE WHEN max_size = 0 THEN N'不允许增长'
WHEN max_size = -1 THEN N'自动增长'
ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2))
+ 'G'
END AS MaxSize
,Is_Percent_Growth
,CASE WHEN is_percent_growth = 1
THEN RTRIM(CAST(Growth AS CHAR(16))) + '%'
ELSE RTRIM(CAST(CAST(Growth*8.0/1024 AS DECIMAL(10, 4)) AS CHAR(16))) + 'M'
END AS Growth
,Is_Read_Only AS IsReadOnly
,CAST(size * 8.0 / 1024 / 1024 AS DECIMAL(16, 4)) AS [Size(GB)]
FROM sys.master_files
ORDER BY 3
END
END
GO

 
作业YourSQLDba_Monitor_Database_Daily_Growth
USE [msdb]
GO IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name='YourSQLDba_Monitor_Database_Daily_Growth')
BEGIN
EXEC msdb.dbo.sp_delete_job @job_name=N'YourSQLDba_Monitor_Database_Daily_Growth', @delete_unused_schedule=1;
END
GO BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0 IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA_MONITORING' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA_MONITORING'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'YourSQLDba_Monitor_Database_Daily_Growth',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'this job is used collected the database size growth trends every day.',
@category_name=N'DBA_MONITORING',
@owner_login_name=N'sa',
@notify_email_operator_name=N'YourSQLDba_Operator', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'YourSQLDba_Monitor_Database_Daily_Growth_Step_One',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec YourSQLDba.[Maint].[Usp_Monitor_Database_Size] @Frequency=''DAY'';',
@database_name=N'YourSQLDba',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'YourSQLDba_Monitor_Database_Daily_Growth_Schedule_Day',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20151218,
@active_end_date=99991231,
@active_start_time=235900,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave: GO

作业YourSQLDba_Monitor_Database_Week_Growth

USE [msdb]
GO IF EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE name='YourSQLDba_Monitor_Database_Week_Growth')
BEGIN
EXEC msdb.dbo.sp_delete_job @job_name=N'YourSQLDba_Monitor_Database_Week_Growth', @delete_unused_schedule=1
END
GO BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0 IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA_MONITORING' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA_MONITORING'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'YourSQLDba_Monitor_Database_Week_Growth',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'this job is used collected the database size growth trends weekly.',
@category_name=N'DBA_MONITORING',
@owner_login_name=N'sa',
@notify_email_operator_name=N'YourSQLDba_Operator', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'YourSQLDba_Monitor_Database_Week_Growth_Step_One',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'Exec YourSQLDba.Maint.Usp_Monitor_Database_Size;',
@database_name=N'YourSQLDba',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'YourSQLDba_Monitor_Database_Week_Growth_Schedule_Week',
@enabled=1,
@freq_type=8,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20151218,
@active_end_date=99991231,
@active_start_time=235900,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave: GO

作业YourSQLDba_Monitor_Database_Month_Grwoth

USE [msdb]
GO IF EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE name='YourSQLDba_Monitor_Database_Month_Grwoth')
BEGIN
EXEC msdb.dbo.sp_delete_job @job_name=N'YourSQLDba_Monitor_Database_Month_Grwoth', @delete_unused_schedule=1;
END
GO BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0 IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA_MONITORING' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA_MONITORING'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'YourSQLDba_Monitor_Database_Month_Grwoth',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'this job is used collected the database size growth trends every month',
@category_name=N'DBA_MONITORING',
@owner_login_name=N'sa',
@notify_email_operator_name=N'YourSQLDba_Operator', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'YourSQLDba_Monitor_Database_Month_Grwoth_Step_One',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'Exec YourSQLDba.[Maint].[Usp_Monitor_Database_Size] @Frequency=''MONTH'';',
@database_name=N'YourSQLDba',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'YourSQLDba_Monitor_Database_Month_Grwoth_Schedule',
@enabled=1,
@freq_type=16,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20151218,
@active_end_date=99991231,
@active_start_time=235900,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave: GO

SQL SERVER 监控数据文件增长情况的更多相关文章

  1. SQL Server 监控 使用sp_trace_create

    监控前言 上一节我们提到了MSSQL的基于SQL Event的监控,但是有些时候我们需要更加详细.适用于调优排错的监控.SQL Server内部运行的可见性是的查询调整.优化和综合排查成为可能!这一节 ...

  2. sql server迁移数据(文件组之间的互相迁移与 文件组内文件的互相迁移)

    转自:https://www.cnblogs.com/lyhabc/p/3504380.html?utm_source=tuicool SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件 ...

  3. SQL Server 在缺少文件组的情况下如何还原数据库

    SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为 ...

  4. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  5. SQL Server里在文件组间如何移动数据?

    平常我不知道被问了几次这样的问题:“SQL  Server里在文件组间如何移动数据?“你意识到这个问题:你只有一个主文件组的默认配置,后来围观了“SQL Server里的文件和文件组”后,你知道,有多 ...

  6. 为什么你SQL Server的数据库文件的Date modified没有变化呢?

    在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半 ...

  7. 《SQL Server企业级平台管理实践》读书笔记——SQL Server如何设置自动增长和自动收缩项

    SQL Server允许用户设置数据库初始值和最大值,可以通过自动增长或者自动收缩进行配置.通过这些配置,我们可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server磁盘空间耗尽的事情发 ...

  8. SQL Server中数据库文件的存放方式,文件和文件组

    原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html   SQL Server中数据库文件的存放方式,文件和文件组 ...

  9. sql server 2008数据复制

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

随机推荐

  1. 使用免费组件view pdf 文档

    “Is there any way to view PDF files in a Winforms tool?” 这个是我在技术论坛上发现的一个老外求助的帖子,然后看到别人回复的帖子中建议了一个免费的 ...

  2. grape动态PHP结构(一)——目录结构与配置文件

    一.结构介绍 结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字. 1)本结构需要在PHP5.5中运行,如果要在5.4中运行,有些地方就要做些修改 2 ...

  3. 【JAVA】基于MVC架构Java技术荟萃案例演练

    基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servle ...

  4. 【集合框架】JDK1.8源码分析之LinkedHashMap(二)

    一.前言 前面我们已经分析了HashMap的源码,已经知道了HashMap可以用在哪种场合,如果这样一种情形,我们需要按照元素插入的顺序来访问元素,此时,LinkedHashMap就派上用场了,它保存 ...

  5. 3.Java基础之Date对象

    毕向东老师Java基础学习笔记——Date对象 今天学习Java中的Date对象后,感觉这个对象对我们主要有以下几点用处. 1.获取时间和日期并按照自己定义的格式显示. 2.网站设计时显示时间.  知 ...

  6. XML文档操作集锦(C#篇)

    在JSON没流行起来的时候xml一直作为程序存储配置信息的主流介质:特别是小型数据表方面还是不错的选择,所以经常涉及到的操作无非也就是增删改查,这篇博客主要是对这些对比较常用的操作做了个简单的总结 文 ...

  7. 使用NW.js封装微信公众号菜单编辑器为桌面应用

    开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ...

  8. 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait

    [源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...

  9. 疯狂Android讲义 - 学习笔记(八)

    第10章 Service与BroadcastReceiver 10.1 Service简介 Service组件也是可执行的程序,有自己的生命周期,创建.配置Service与创建.配置Activity的 ...

  10. C# new关键字

    在 C# 中,new 关键字可用作运算符.修饰符或约束 1.new 运算符:用于创建对象和调用构造函数.2.new 修饰符:用作修饰符时,new 关键字可以显式隐藏从基类继承的成员.3.new 约束: ...