183 lines
6.2 KiB
Transact-SQL
183 lines
6.2 KiB
Transact-SQL
USE [HCITools];
|
|
GO
|
|
IF EXISTS ( SELECT *
|
|
FROM sys.objects
|
|
WHERE object_id = OBJECT_ID(N'[dbo].[mon_Change_Tracking]')
|
|
AND OBJECTPROPERTY(object_id, N'IsProcedure') = 1)
|
|
DROP PROCEDURE [dbo].[mon_Change_Tracking];
|
|
GO
|
|
|
|
CREATE PROCEDURE [mon_Change_Tracking]
|
|
@in_threshold INT = 50000,
|
|
@in_debug INT = NULL
|
|
AS
|
|
/*===========================================================================================
|
|
|
|
Description
|
|
-----------
|
|
This procedure is called by job DR92290 - Monitoring Change Tracking
|
|
|
|
Parameters
|
|
----------
|
|
@in_threshold limit tolerate, over this limit a mail is sent to DBA
|
|
@in_debug display result per table and more infos
|
|
|
|
Creation : 12.04.2023 / RTC
|
|
|
|
Modifications
|
|
-------------
|
|
|
|
|
|
================================================================================================*/
|
|
|
|
BEGIN
|
|
DECLARE @cvCurrentOrganizationalUnit INT,
|
|
@subsidiary_id INT,
|
|
@DWHVersion BIGINT,
|
|
@sqlstmt NVARCHAR(MAX),
|
|
@tableName NVARCHAR(128),
|
|
@out_default_value VARCHAR(60),
|
|
@format VARCHAR(4),
|
|
@schema VARCHAR(4),
|
|
@ou VARCHAR(3),
|
|
@total INT,
|
|
@message VARCHAR(MAX);
|
|
|
|
/* Initialize variables */
|
|
SELECT @sqlstmt = N'',
|
|
@cvCurrentOrganizationalUnit = NULL,
|
|
@subsidiary_id = NULL,
|
|
@total = 0;
|
|
|
|
/* Temp table with amount of records */
|
|
DECLARE @tableResult TABLE (ChangesCount INT NULL,
|
|
[Schema] VARCHAR(10) NULL,
|
|
TableName VARCHAR(800) NULL);
|
|
|
|
/* Get the cvCurrentOrganizationalUnit */
|
|
EXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default @in_job_type = 3,
|
|
@in_param_int_1 = NULL,
|
|
@in_param_int_2 = NULL,
|
|
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
|
|
@out_default_value = @out_default_value OUTPUT,
|
|
@out_param_int_1 = NULL;
|
|
|
|
SELECT @cvCurrentOrganizationalUnit = CONVERT(INT, @out_default_value);
|
|
|
|
/* Check if we have a value, if not leave this SP */
|
|
IF @cvCurrentOrganizationalUnit IS NULL
|
|
BEGIN
|
|
RAISERROR('(APS) Error cvCurrentOrganizationalUnit does not exist!', 13, 13);
|
|
END;
|
|
|
|
/* Get the subsidiary id and OU code */
|
|
SELECT @subsidiary_id = ou.OU_subsidiary,
|
|
@ou = ou.OU_code
|
|
FROM Arizona.dbo.Organizational_unit ou
|
|
WHERE ou.Organizational_unit_ID = @cvCurrentOrganizationalUnit;
|
|
|
|
/* Check if we have a value, if not leave this SP */
|
|
IF @subsidiary_id IS NULL
|
|
BEGIN
|
|
RAISERROR('(APS) Error subsidiary_id does not exist!', 13, 13);
|
|
END;
|
|
|
|
/* Get the current format */
|
|
SELECT @format = sub.SUB_code
|
|
FROM Arizona.dbo.Subsidiary sub
|
|
WHERE sub.Subsidiary_ID = @subsidiary_id;
|
|
|
|
/* Check if we have a value, if not leave this SP */
|
|
IF @format IS NULL
|
|
BEGIN
|
|
RAISERROR('(APS) Error format does not exist!', 13, 13);
|
|
END;
|
|
|
|
/* Change the value into a compatible format */
|
|
IF @format = 'COOP'
|
|
BEGIN
|
|
SET @format = 'CVI';
|
|
END;
|
|
|
|
IF @format = 'CENT'
|
|
BEGIN
|
|
SET @format = 'SUN';
|
|
END;
|
|
|
|
IF @format = '000'
|
|
BEGIN
|
|
SET @format = 'AAI';
|
|
END;
|
|
|
|
SELECT @DWHVersion = DBACTD.DBACTD_DWH_version
|
|
FROM ARIZONACASH.Arizona.dbo.DBA_change_tracking_DWH DBACTD
|
|
WHERE DBACTD.DBACTD_format = @format
|
|
AND DBACTD.DBACTD_organizational_unit = @ou
|
|
AND DBACTD.DBACTD_update_date > GETDATE() - 3; /* Get only last 3 days */
|
|
|
|
/* Display Ou infos */
|
|
IF @in_debug > 0
|
|
SELECT @ou [OU],
|
|
@format [Format],
|
|
@DWHVersion [DWH_CT_Version];
|
|
|
|
DECLARE c_ct_table CURSOR READ_ONLY LOCAL FORWARD_ONLY STATIC FOR
|
|
SELECT st.name
|
|
FROM Arizona.sys.change_tracking_tables ct
|
|
JOIN Arizona.sys.tables st
|
|
ON ct.object_id = st.object_id;
|
|
OPEN c_ct_table;
|
|
FETCH NEXT FROM c_ct_table
|
|
INTO @tableName;
|
|
WHILE @@fetch_status = 0
|
|
BEGIN
|
|
|
|
SELECT @schema = sh.[name]
|
|
FROM Arizona.sys.tables st
|
|
JOIN Arizona.sys.schemas sh
|
|
ON st.schema_id = sh.schema_id
|
|
WHERE st.[name] = @tableName;
|
|
|
|
SET @sqlstmt
|
|
= N'SELECT count(*),''' + @schema + N''',''' + @tableName + N''' FROM CHANGETABLE(CHANGES Arizona.'
|
|
+ @schema + N'.' + @tableName + N', ' + CONVERT(VARCHAR(MAX), ISNULL(@DWHVersion, 0)) + N') AS CT';
|
|
INSERT INTO @tableResult
|
|
EXEC (@sqlstmt);
|
|
|
|
FETCH NEXT FROM c_ct_table
|
|
INTO @tableName;
|
|
END;
|
|
CLOSE c_ct_table;
|
|
DEALLOCATE c_ct_table;
|
|
|
|
/* Display count details per table*/
|
|
IF @in_debug > 0
|
|
SELECT ChangesCount,
|
|
[Schema],
|
|
TableName
|
|
FROM @tableResult;
|
|
|
|
SELECT @total = SUM(ChangesCount)
|
|
FROM @tableResult;
|
|
|
|
/* The datamart truggles when there is more than 35000 lies for document line */
|
|
IF (@total >= @in_threshold)
|
|
OR EXISTS ( SELECT 1
|
|
FROM @tableResult
|
|
WHERE TableName = 'Document_line'
|
|
AND ChangesCount >= 35000)
|
|
BEGIN
|
|
SELECT @message = 'Total: ' + CONVERT(CHAR(9), @total) + CHAR(13) + CHAR(13);
|
|
SELECT @message = @message + '[Table Name] [Schema] [Changes Count]' + CHAR(13);
|
|
SELECT @message
|
|
= @message + TableName + ' ' + CONVERT(CHAR(9), ISNULL([Schema], ''))
|
|
+ CONVERT(CHAR(9), ISNULL(ChangesCount, '')) + CHAR(13)
|
|
FROM @tableResult
|
|
WHERE ChangesCount > 1
|
|
ORDER BY ChangesCount DESC;
|
|
|
|
EXEC dbo.aps_Send_Mail_with_template @in_param_varchar_2 = 'DBA_operator',
|
|
@in_param_varchar_3 = @message,
|
|
@in_job_type = 3; /* 0:sans template; 1/NULL:echec; 2:succes; 3:warning; 4:message*/
|
|
END;
|
|
END; |