From 1975962f2db5a23a4da5d76945aa98b27c4b3edb Mon Sep 17 00:00:00 2001 From: Thierry Schork Date: Wed, 9 Jul 2025 16:43:53 +0200 Subject: [PATCH] sync --- DBG - get all tables size.sql | 1 + EXPLOIT - list databases sizes.sql | 27 ++++-- ...geLogs-cleanup-Compendium2020UsageLogs.sql | 28 +++++++ ...ageLogs-cleanup-Documedis2020UsageLogs.sql | 28 +++++++ ...eLogs-cleanup-Pharmavista2020UsageLogs.sql | 28 +++++++ ...edisUsageLogs-cleanup-api2020UsageLogs.sql | 26 ++++++ ...umedis_ClinicalDecisionSupport_LogData.sql | 82 +++++++++++++++++++ ...edisLogs-cleanup-documedisSecurityLogs.sql | 54 ++++++++++++ ...nup-documedis_vaccinationCheck_logData.sql | 55 +++++++++++++ 9 files changed, 322 insertions(+), 7 deletions(-) create mode 100644 MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Compendium2020UsageLogs.sql create mode 100644 MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Documedis2020UsageLogs.sql create mode 100644 MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Pharmavista2020UsageLogs.sql create mode 100644 MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-api2020UsageLogs.sql create mode 100644 MDDOC-878 - purge logdb/documedisLogs-cleanup-Documedis_ClinicalDecisionSupport_LogData.sql create mode 100644 MDDOC-878 - purge logdb/documedisLogs-cleanup-documedisSecurityLogs.sql create mode 100644 MDDOC-878 - purge logdb/documedisLogs-cleanup-documedis_vaccinationCheck_logData.sql diff --git a/DBG - get all tables size.sql b/DBG - get all tables size.sql index 1c6cda9..279f566 100644 --- a/DBG - get all tables size.sql +++ b/DBG - get all tables size.sql @@ -21,6 +21,7 @@ SELECT t.name AS TableName, WHERE i.object_id > 255 -- AND i.index_id IN ( 0, 1 ) --0=heap, 1= clustered AND t.name NOT LIKE 'dt%' + AND t.name LIKE 'archive[_]%' AND [t].[is_ms_shipped] = 0 AND i.object_id > 255 GROUP BY t.name, diff --git a/EXPLOIT - list databases sizes.sql b/EXPLOIT - list databases sizes.sql index 742efea..756e0e1 100644 --- a/EXPLOIT - list databases sizes.sql +++ b/EXPLOIT - list databases sizes.sql @@ -48,7 +48,7 @@ SELECT --,d2.[log_size_mb] --,d2.[row_size_mb] ,'-----' AS separator - ,CAST(f.size * 8. / 1024 AS DECIMAL(18,2)) AS fileSizeMB + ,CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2)) AS fileSizeMB ,fs.[FreeSpaceMB] AS FreeSpaceInFileMB ,fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS SpaceUsedMB ,CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.size * 8. / 1024 AS DECIMAL(18,2))) AS NUMERIC(6,2)) AS fileSpaceUsedPercent @@ -64,6 +64,19 @@ DBCC SHRINKFILE (N'''+f.[name]+''' , 1024); GO ' AS reorganizeData + ,'USE '+d.name+'; +IF 1024 < '+CAST(CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2)) AS VARCHAR(15))+' --file is above 1Go + AND 95 > '+CAST(CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2))) AS DECIMAL(6,2))AS VARCHAR(15))+' --and usage below 95% + AND 0 < '+CAST(CAST(fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS DECIMAL(18,2))AS VARCHAR(15))+' --and data are present +BEGIN + --print ''Reorganize '+d.name+'.'+f.name+' '' + RAISERROR(''Reorganize '+d.name+'.'+f.name+' '',0,0) WITH NOWAIT + + DBCC SHRINKFILE (N'''+f.[name]+''' , '+CAST(CAST(fs.[CurrentSizeMB] - fs.[FreeSpaceMB] + 1024 AS DECIMAL(18,0)) AS VARCHAR(15))+'); + RAISERROR(''Done'',0,0) WITH NOWAIT +END +GO +' AS auto_action FROM sys.master_files F JOIN sys.databases d ON d.[database_id] = f.[database_id] JOIN [#dbs] [d2] ON d2.[database_name] = d.[name] @@ -76,12 +89,12 @@ WHERE f.type_desc IN ( --AND d.[is_read_only] = 0 --AND d.[is_auto_shrink_on] = 0 --AND d.name='sl2007' ---AND d.name NOT IN ( --- 'master' --- ,'tempdb' --- ,'model' --- ,'msdb' ---) +AND d.name NOT IN ( + 'master' + ,'tempdb' + ,'model' + ,'msdb' +) ORDER BY [d2].[row_size_mb] DESC, d.name DESC, f.name ASC ; --free disk space diff --git a/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Compendium2020UsageLogs.sql b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Compendium2020UsageLogs.sql new file mode 100644 index 0000000..cb177de --- /dev/null +++ b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Compendium2020UsageLogs.sql @@ -0,0 +1,28 @@ +USE [DocumedisUsageLogs] +GO + +/* +MDDOC-878 + +Purge of the table DocumedisUsageLogs.dbo.Compendium2020UsageLogs + +Records that are more than 7 months old will be purged. + +Deletion is made in batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Compendium2020UsageLogs] +AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1; + + WHILE @row_count > 0 + BEGIN + DELETE TOP(@batch) s + FROM [dbo].[Compendium2020UsageLogs] s + WHERE [s].[LogDateTime] > @cutoff; + + SET @row_count = @@rowcount; + END +END diff --git a/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Documedis2020UsageLogs.sql b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Documedis2020UsageLogs.sql new file mode 100644 index 0000000..a797ee6 --- /dev/null +++ b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Documedis2020UsageLogs.sql @@ -0,0 +1,28 @@ +USE [DocumedisUsageLogs] +GO + +/* +MDDOC-878 + +Purge of the table DocumedisUsageLogs.dbo.Documedis2020UsageLogs + +Records that are more than 7 months old will be purged. + +Deletion is made in batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Documedis2020UsageLogs] +AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1; + + WHILE @row_count > 0 + BEGIN + DELETE TOP(@batch) s + FROM [dbo].[Documedis2020UsageLogs] s + WHERE [s].[LogDateTime] > @cutoff; + + SET @row_count = @@rowcount; + END +END diff --git a/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Pharmavista2020UsageLogs.sql b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Pharmavista2020UsageLogs.sql new file mode 100644 index 0000000..f77098b --- /dev/null +++ b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-Pharmavista2020UsageLogs.sql @@ -0,0 +1,28 @@ +USE [DocumedisUsageLogs] +GO + +/* +MDDOC-878 + +Purge of the table DocumedisUsageLogs.dbo.Pharmavista2020UsageLogs + +Records that are more than 7 months old will be purged. + +Deletion is made in batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Pharmavista2020UsageLogs] +AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1; + + WHILE @row_count > 0 + BEGIN + DELETE TOP(@batch) s + FROM [dbo].[Pharmavista2020UsageLogs] s + WHERE [s].[LogDateTime] > @cutoff; + + SET @row_count = @@rowcount; + END +END diff --git a/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-api2020UsageLogs.sql b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-api2020UsageLogs.sql new file mode 100644 index 0000000..804e87e --- /dev/null +++ b/MDDOC-878 - purge logdb/DocumedisUsageLogs-cleanup-api2020UsageLogs.sql @@ -0,0 +1,26 @@ +USE [DocumedisUsageLogs] +GO + +/* +MDDOC-878 + +Purge of the table DocumedisUsageLogs.dbo.Api2020UsageLogs + +Records that are more than 7 months old will be purged. + +Deletion is made in batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Api2020UsageLogs] +AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1; + + WHILE @row_count > 0 + BEGIN + DELETE TOP(@batch) s + FROM [dbo].[Api2020UsageLogs] s + WHERE [s].[LogDateTime] > @cutoff; + END +END diff --git a/MDDOC-878 - purge logdb/documedisLogs-cleanup-Documedis_ClinicalDecisionSupport_LogData.sql b/MDDOC-878 - purge logdb/documedisLogs-cleanup-Documedis_ClinicalDecisionSupport_LogData.sql new file mode 100644 index 0000000..158de0b --- /dev/null +++ b/MDDOC-878 - purge logdb/documedisLogs-cleanup-Documedis_ClinicalDecisionSupport_LogData.sql @@ -0,0 +1,82 @@ +USE [DocumedisLogs] +GO + +/* +MDDOC-878 + +Purge of the table documedisLogs.dbo.Documedis_VaccinationCheck_LogData + +Only records that are more than 7 months old and present as archived in [archivedRowsJournal] +will be purged. +All satellite tables are purged in order. + +Deletion is made in batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Documedis_VaccinationCheck_LogData] AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1; + DECLARE @tbl_to_del TABLE (DocumedisClinicalDecisionSupportLogData_PK BIGINT NOT NULL ); + + WHILE @row_count > 0 + BEGIN + TRUNCATE TABLE @tbl_to_del; + + -- region populate filter table + INSERT INTO @tbl_to_del([DocumedisClinicalDecisionSupportLogData_PK]) + SELECT TOP (@batch) + [s].[DocumedisClinicalDecisionSupportLogData_PK] + FROM [dbo].[Documedis_ClinicalDecisionSupport_LogData] [s] + WHERE [s].[LogDateTime] > @cutoff + AND EXISTS( + SELECT 1 + FROM [archivedRowsJournal] [a] + WHERE [a].[tableName] = 'Documedis_ClinicalDecisionSupport_LogData' + AND [a].[tableRowId] = [s].[DocumedisClinicalDecisionSupportLogData_PK] + ); + + SELECT @row_count = COUNT(1) + FROM @tbl_to_del; + -- endregion + + -- region logcheck products + DELETE [lcp] + FROM @tbl_to_del [d] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogCheck] [lc] ON [lc].[DocumedisClinicalDecisionSupportLogData_FK] = [d].[DocumedisClinicalDecisionSupportLogData_PK] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogCheckProduct] [lcp] ON [lc].[DocumedisClinicalDecisionSupportLogCheck_PK] = [lcp].[DocumedisClinicalDecisionSupportLogCheck_FK]; + -- endregion + + -- region logcheck interactions + DELETE [lci] + FROM @tbl_to_del [d] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogCheck] [lc] ON [lc].[DocumedisClinicalDecisionSupportLogData_FK] = [d].[DocumedisClinicalDecisionSupportLogData_PK] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogCheckInteraction] [lci] ON [lc].[DocumedisClinicalDecisionSupportLogCheck_PK] = [lci].[DocumedisClinicalDecisionSupportLogCheck_FK]; + -- endregion + + -- region logcheck + DELETE [lc] + FROM @tbl_to_del [d] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogCheck] [lc] ON [lc].[DocumedisClinicalDecisionSupportLogData_FK] = [d].[DocumedisClinicalDecisionSupportLogData_PK]; + -- endregion + + -- region patientRisk + DELETE [lr] + FROM @tbl_to_del [d] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogDataPatientRisk] [lr] ON [lr].[DocumedisClinicalDecisionSupportLogData_FK] = [d].[DocumedisClinicalDecisionSupportLogData_PK]; + -- endregion + + -- region logData + SELECT 1 + FROM @tbl_to_del [d] + INNER JOIN [Documedis_ClinicalDecisionSupport_LogData] [ld] ON [ld].[DocumedisClinicalDecisionSupportLogData_PK] = [d].[DocumedisClinicalDecisionSupportLogData_PK]; + -- endregion + + -- region archivedRowsJournal + SELECT 1 + FROM [archivedRowsJournal] j + INNER JOIN @tbl_to_del [d] ON [d].[DocumedisClinicalDecisionSupportLogData_PK] = [j].[tableRowId] + WHERE [j].[tableName]='Documedis_ClinicalDecisionSupport_LogData'; + -- endregion + END +END diff --git a/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedisSecurityLogs.sql b/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedisSecurityLogs.sql new file mode 100644 index 0000000..2c574e5 --- /dev/null +++ b/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedisSecurityLogs.sql @@ -0,0 +1,54 @@ +USE [DocumedisLogs] +GO + +/* +MDDOC-878 + +Purge of the table documedisLogs.dbo.DocumedisSecurityLogs + +Only records that are more than 7 months old and present as archived in [archivedRowsJournal] +will be purged. + +Deletion is made in small batches to avoid locking. +*/ +CREATE PROCEDURE [purge_documedisSecurityLogs] AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1 + DECLARE @tbl_to_del TABLE([DocumedisSecurityLogId] BIGINT NOT NULL); + + WHILE @row_count > 0 BEGIN + TRUNCATE TABLE @tbl_to_del; + + -- region populate filter table + INSERT INTO @tbl_to_del([DocumedisSecurityLogId]) + SELECT TOP (@batch) + [s].[DocumedisSecurityLogId] + FROM [DocumedisSecurityLogs] [s] + WHERE [s].[LogDateTime] > @cutoff + AND EXISTS( + SELECT 1 + FROM [archivedRowsJournal] [j] + WHERE [j].[tableName] = 'DocumedisSecurityLogs' + AND [j].[tableRowId] = [s].[DocumedisSecurityLogId] + ); + + SELECT @row_count = COUNT(1) + FROM @tbl_to_del; + -- endregion + + -- region DocumedisSecurityLogs + DELETE [s] + FROM @tbl_to_del [d] + INNER JOIN [dbo].[DocumedisSecurityLogs] [s] ON [s].[DocumedisSecurityLogId] = [d].[DocumedisSecurityLogId]; + -- endregion + + -- region archivedRowsJournal + DELETE [j] + FROM [archivedRowsJournal] [j] + INNER JOIN @tbl_to_del [d] ON [d].[DocumedisSecurityLogId] = [j].[tableRowId] + WHERE [tableName] = 'DocumedisSecurityLogs' + -- endregion + END +END diff --git a/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedis_vaccinationCheck_logData.sql b/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedis_vaccinationCheck_logData.sql new file mode 100644 index 0000000..708bb53 --- /dev/null +++ b/MDDOC-878 - purge logdb/documedisLogs-cleanup-documedis_vaccinationCheck_logData.sql @@ -0,0 +1,55 @@ +USE [DocumedisLogs] +GO + +/* +MDDOC-878 + +Purge of the table documedisLogs.dbo.Documedis_VaccinationCheck_LogData + +Only records that are more than 7 months old and present as archived in [archivedRowsJournal] +will be purged. + +Deletion is made in small batches to avoid locking. +*/ +CREATE PROCEDURE [purge_Documedis_VaccinationCheck_LogData] AS +BEGIN + DECLARE @cutoff DATE = DATEADD(MONTH, -7, CURRENT_TIMESTAMP); + DECLARE @batch INT = 5000; + DECLARE @row_count INT = 1 + DECLARE @tbl_to_del TABLE (DocumedisVaccinationCheckLogData_PK BIGINT NOT NULL ); + + WHILE @row_count > 0 BEGIN + TRUNCATE TABLE @tbl_to_del; + + -- region populate filter table + INSERT INTO @tbl_to_del([DocumedisVaccinationCheckLogData_PK]) + SELECT TOP (@batch) + [s].[DocumedisVaccinationCheckLogData_PK] + FROM [dbo].[Documedis_VaccinationCheck_LogData] [s] + WHERE [s].[LogDateTime] > @cutoff + AND EXISTS( + SELECT 1 + FROM [archivedRowsJournal] [a] + WHERE [a].[tableName] = 'Documedis_VaccinationCheck_LogData' + AND [a].[tableRowId] = [s].[DocumedisVaccinationCheckLogData_PK] + ); + + SELECT @row_count = COUNT(1) + FROM @tbl_to_del; + -- endregion + + -- region Documedis_VaccinationCheck_LogData + DELETE [d] + FROM @tbl_to_del d + INNER JOIN [Documedis_VaccinationCheck_LogData] s ON [s].[DocumedisVaccinationCheckLogData_PK] = [d].[DocumedisVaccinationCheckLogData_PK]; + -- endregion + + -- region archivedRowsJournal + DELETE j + FROM [archivedRowsJournal] j + INNER JOIN @tbl_to_del d ON [j].[tableRowId] = [d].[DocumedisVaccinationCheckLogData_PK] + WHERE [j].[tableName]='Documedis_VaccinationCheck_LogData'; + -- endregion + + END +END