mirror of
https://github.com/helpsystems/EFTScriptSamples.git
synced 2025-06-30 21:01:53 -05:00
created folder structure
This commit is contained in:
Binary file not shown.
11
sql/7.4 purge with cascade deletes/ProlificUsers.sql
Normal file
11
sql/7.4 purge with cascade deletes/ProlificUsers.sql
Normal file
@ -0,0 +1,11 @@
|
||||
SELECT TOP 3 UserName, Count(*) As SuccessConnections
|
||||
FROM tbl_Authentications
|
||||
WHERE resultID = 0 AND protocol <> 'Administration' AND Time_stamp >= DATEADD(minute,-1440,GetDate())
|
||||
GROUP BY UserName
|
||||
ORDER BY SuccessConnections DESC
|
||||
|
||||
SELECT TOP 3 UserName, Count(*) As FailedConnections
|
||||
FROM tbl_Authentications
|
||||
WHERE resultID = 1 AND protocol <> 'Administration' AND Time_stamp >= DATEADD(minute,-1440,GetDate())
|
||||
GROUP BY UserName
|
||||
ORDER BY FailedConnections DESC
|
278
sql/7.4 purge with cascade deletes/PurgeSQLEFTData.sql
Normal file
278
sql/7.4 purge with cascade deletes/PurgeSQLEFTData.sql
Normal file
@ -0,0 +1,278 @@
|
||||
-- EFT Purging Script
|
||||
-- Goal: Allow customers to purge data from EFT's ARM database
|
||||
|
||||
--USAGE
|
||||
/*
|
||||
1. Run recreate_foreign_keys.sql next, as it will fix any problems if present (see notes in that script)
|
||||
2. Run index_foreign_keys_and_time_stamps.sql first, as that will improve purge performance
|
||||
3. Modify the purge date if desired. -30 means purge all records older than 30 days
|
||||
3a. To change: search for "SET @stopTime = DATEADD(DAY, -30, GETDATE())"
|
||||
3b. A value of -0 means ALL records
|
||||
3c. Alternatively, you can pass in an exact date range:
|
||||
3ci. Search for EXEC sp_PurgeEFTTransactions NULL, NULL, 1000000, 1
|
||||
3cii. Enter date and times in quotes as such: EXEC sp_PurgeEFTTransactions '2019-01-20 18:11:00', '2019-04-01 07:50:00', 1000000, 1
|
||||
4. Modify "USE EFTDB" below if your database name is different
|
||||
5. Make sure you database isn't actively recording data (disable ARM reporting in EFT temporarily)
|
||||
6. Execute the script (it can take several hours for databases with hundreds of millions of records)
|
||||
*/
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Set batch size at 100,000
|
||||
-- Removed SELECT and extra PRINT statements.
|
||||
-- 0.2: Changed to purge up to records greater than 30 days old
|
||||
-- 0.3: Modified script to not assume cascading deletes and to
|
||||
-- explicitly delete from all tables
|
||||
-- Modified script to default 'purgesize' to 10,000
|
||||
-- instead of 1,000
|
||||
-- 0.4 Added AS2 and SAT purging
|
||||
-- 0.5 Subset table wasn't being dropped.
|
||||
-- 0.6 Changed to all static calls instead of dynamic.
|
||||
-- 0.7 Changed purge size to 1,000,000
|
||||
-- 0.8 Brought back cascade deletes to speed up performance
|
||||
|
||||
--USE EFTDB
|
||||
|
||||
-- Include minutes/seconds
|
||||
PRINT 'Script started at: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109)
|
||||
-- PRINT 'Script started at: ' + CAST(CURRENT_TIMESTAMP AS NVARCHAR)
|
||||
-- USE EFTDB741315
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactionsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFTTransactionsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactionsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Script Version 0.6'
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactions') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFTTransactions
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, this procedure will purge data from 1970 to 60 days ago.
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactions @startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@purgeSize int = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @r INT;
|
||||
DECLARE @ErrMsg nvarchar(4000);
|
||||
DECLARE @ErrSeverity int;
|
||||
DECLARE @deletedTransactions TABLE(ParentTransactionID numeric(18,0));
|
||||
|
||||
EXEC sp_PurgeEFTTransactionsVersion
|
||||
|
||||
-- Delete tblTransactions records and sub-tables
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL BEGIN
|
||||
set @startTime = '19700101 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL BEGIN
|
||||
SET @stopTime = DATEADD(DAY, -60, GETDATE())
|
||||
END
|
||||
|
||||
IF @purgeSize IS NULL BEGIN
|
||||
set @purgeSize = 1000000
|
||||
END
|
||||
|
||||
-- Temporarily remove the ParentTransactionID -> TransactionID constraint
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
|
||||
-- First, delete from tbl_Actions separately since potential circular cascade delete with tbl_EventRules
|
||||
IF @debug=1 PRINT 'Deleting from tbl_Actions: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109);
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- Clear the temp table
|
||||
DELETE @deletedTransactions
|
||||
|
||||
-- First, drop constraint
|
||||
ALTER TABLE tbl_Actions DROP CONSTRAINT FK_tbl_Actions_TransID;
|
||||
|
||||
-- First delete the related transactions
|
||||
DELETE FROM tbl_Transactions
|
||||
OUTPUT deleted.ParentTransactionID INTO @deletedTransactions
|
||||
WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_Actions WHERE Time_stamp BETWEEN @startTime AND @stopTime)
|
||||
-- Now delete the Actions
|
||||
DELETE FROM tbl_Actions WHERE Time_stamp BETWEEN @startTime AND @stopTime
|
||||
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Actions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Actions ADD CONSTRAINT FK_tbl_Actions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
||||
|
||||
-- Delete any parent transactions
|
||||
DELETE FROM tbl_Transactions WHERE transactionID IN (SELECT ParentTransactionID FROM @deletedTransactions WHERE ParentTransactionID IS NOT NULL)
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
|
||||
|
||||
SET @r = 1;
|
||||
WHILE @r > 0
|
||||
BEGIN
|
||||
IF @debug=1 PRINT 'Deleting from tbl_Transactions: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109);
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- Clear the temp table
|
||||
DELETE @deletedTransactions
|
||||
|
||||
-- Delete from tbl_Transactions and cascade delete of multiple tables,
|
||||
-- copy deleted transactions' ParentTransactionIDs so can delete any parents after
|
||||
DELETE TOP (@purgeSize) FROM tbl_Transactions
|
||||
OUTPUT deleted.ParentTransactionID INTO @deletedTransactions
|
||||
WHERE
|
||||
-- See code above to delete tbl_Actions separately
|
||||
-- TransactionID IN (SELECT transactionID FROM tbl_Actions WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_AdminActions WHERE Timestamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_Authentications WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_ClientOperations WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_CustomCommands WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_EventRules WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
-- EventRuleTransfers do not contain a time_stamp, but will cascade delete from Transactions
|
||||
-- TransactionID IN (SELECT transactionID FROM tbl_EventRuleTransfers WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_ProtocolCommands WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_SocketConnections WHERE Time_stamp BETWEEN @startTime AND @stopTime) OR
|
||||
TransactionID IN (SELECT transactionID FROM tbl_WorkspaceActions WHERE Time_stamp BETWEEN @startTime AND @stopTime)
|
||||
|
||||
SET @r = @@ROWCOUNT
|
||||
|
||||
-- Now delete the parents
|
||||
DELETE FROM tbl_Transactions WHERE transactionID IN (SELECT ParentTransactionID FROM @deletedTransactions WHERE ParentTransactionID IS NOT NULL)
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log after each iteration to its original creation size
|
||||
END
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete SAT Transactions and sub-tables tbl_SAT_Files, tbl_SAT_Emails (Cascading Delete)
|
||||
IF @debug=1 PRINT 'Deleting from tbl_SAT_Transactions: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109);
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE FROM tbl_SAT_Transactions
|
||||
WHERE time_stamp BETWEEN @startTime AND @stopTime
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete AS2 Transactions and sub-tables tbl_AS2Actions, tbl_AS2Files (non-Cascading Delete)
|
||||
IF @debug=1 PRINT 'Deleting from tbl_AS2Transactions: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109);
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- First delete records in sub-tables
|
||||
-- tbl_AS2Actions
|
||||
DELETE FROM tbl_AS2Actions WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime) OR
|
||||
FileID IN (SELECT FileID FROM tbl_AS2Files WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime))
|
||||
-- tbl_AS2Files
|
||||
DELETE FROM tbl_AS2Files WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime)
|
||||
-- tbl_AS2Transactions
|
||||
DELETE FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete from remaining tables (stand-alone)
|
||||
/*
|
||||
IF @debug=1 PRINT 'Deleting from tbl_ScanDataActions, etc.: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109);
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_ScanDataActions WHERE Time_stamp BETWEEN @startTime AND @stopTime
|
||||
DELETE FROM tbl_PrivacyTermsEUStatus WHERE Setdate BETWEEN @startTime AND @stopTime
|
||||
DELETE FROM tbl_PersonalDataActions WHERE Setdate BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
*/
|
||||
|
||||
-- Re-establish the ParentTransactionID -> TransactionID constraint
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log to its original creation size
|
||||
END
|
||||
GO
|
||||
|
||||
-- Using 1,000,000 batch for now. Creates larger log, but moves quicker.
|
||||
SET STATISTICS TIME OFF
|
||||
EXEC sp_PurgeEFTTransactions NULL, NULL, 10000000, 1
|
||||
SET STATISTICS TIME OFF
|
||||
|
||||
|
||||
PRINT ''
|
||||
-- PRINT 'Script completed at: ' + CAST(CURRENT_TIMESTAMP AS NVARCHAR)
|
||||
PRINT 'Script completed at: ' + CONVERT(varchar(30),CURRENT_TIMESTAMP,109)
|
||||
|
||||
|
||||
GO
|
20
sql/7.4 purge with cascade deletes/README.txt
Normal file
20
sql/7.4 purge with cascade deletes/README.txt
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
|
||||
1. Run recreate_foreign_keys.sql first, as it will fix any problems with FK associations if present (see notes in that script)
|
||||
|
||||
2. Run index_foreign_keys_and_time_stamps.sql next, as that will signficantly improve purge performance.
|
||||
|
||||
3. Open PurgeSQLEFTData.sql
|
||||
|
||||
3. Modify the purge date if desired. -30 means purge all records older than 30 days
|
||||
3a. To change: search for "SET @stopTime = DATEADD(DAY, -60, GETDATE())"
|
||||
3b. A value of -0 means ALL records
|
||||
3c. Alternatively, you can pass in an exact date range:
|
||||
3ci. Search for EXEC sp_PurgeEFTTransactions NULL, NULL, 1000000, 1
|
||||
3cii. Enter date and times in quotes as such: EXEC sp_PurgeEFTTransactions '2019-01-20 18:11:00', '2019-04-01 07:50:00', 1000000, 1
|
||||
|
||||
4. Modify "USE EFTDB" below if your database name is different
|
||||
|
||||
5. Make sure you database is NOT actively recording data (disable ARM reporting in EFT temporarily)
|
||||
|
||||
6. Execute the script (it may take several hours if your databases has hundreds of millions of records)
|
12
sql/7.4 purge with cascade deletes/RowCount.sql
Normal file
12
sql/7.4 purge with cascade deletes/RowCount.sql
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
declare @count int
|
||||
print 'Row counts before purge'
|
||||
select @count = count(*) from [dbo].[tbl_AdminActions] print 'tbl_AdminActions count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_ProtocolCommands print 'tbl_ProtocolCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Actions print 'tbl_Actions count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_ClientOperations print 'tbl_ClientOperations count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_SocketConnections print 'tbl_SocketConnections count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Authentications print 'tbl_Authentications count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_CustomCommands print 'tbl_CustomCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_EventRules print 'tbl_EventRules count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Transactions print 'tbl_Transactions count = ' +CAST(@count AS NVARCHAR)
|
@ -0,0 +1,81 @@
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Actions_TransactionID' AND object_id = OBJECT_ID('tbl_Actions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Actions_TransactionID] ON [tbl_Actions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AdminActions_TransactionID' AND object_id = OBJECT_ID('tbl_AdminActions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AdminActions_TransactionID] ON [tbl_AdminActions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AS2Actions_FileID' AND object_id = OBJECT_ID('tbl_AS2Actions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AS2Actions_FileID] ON [tbl_AS2Actions] ([FileID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AS2Actions_TransactionID' AND object_id = OBJECT_ID('tbl_AS2Actions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AS2Actions_TransactionID] ON [tbl_AS2Actions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AS2Files_TransactionID' AND object_id = OBJECT_ID('tbl_AS2Files'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AS2Files_TransactionID] ON [tbl_AS2Files] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_CustomCommands_TransactionID' AND object_id = OBJECT_ID('tbl_CustomCommands'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_CustomCommands_TransactionID] ON [tbl_CustomCommands] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Groups_AuthenticationID' AND object_id = OBJECT_ID('tbl_Groups'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Groups_AuthenticationID] ON [tbl_Groups] ([AuthenticationID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_TransactionID' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ProtocolCommands_TransactionID] ON [tbl_ProtocolCommands] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Emails_txid' AND object_id = OBJECT_ID('tbl_SAT_Emails'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Emails_txid] ON [tbl_SAT_Emails] ([txid] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Files_txid' AND object_id = OBJECT_ID('tbl_SAT_Files'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Files_txid] ON [tbl_SAT_Files] ([txid] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_TransactionID' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SocketConnections_TransactionID] ON [tbl_SocketConnections] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Transactions_ParentTransactionID' AND object_id = OBJECT_ID('tbl_Transactions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Transactions_ParentTransactionID] ON [tbl_Transactions] ([ParentTransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_TransactionID' AND object_id = OBJECT_ID('tbl_WorkspaceActions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_WorkspaceActions_TransactionID] ON [tbl_WorkspaceActions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_TransactionID' AND object_id = OBJECT_ID('tbl_WorkspaceParticipants'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_WorkspaceActions_TransactionID] ON [tbl_WorkspaceParticipants] ([WorkspaceActionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- Add indexes on time_stamps
|
||||
|
||||
-- tbl_SAT_Transactions
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Transactions_Time_Stamp' AND object_id = OBJECT_ID('tbl_SAT_Transactions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Transactions_Time_Stamp] ON [tbl_SAT_Transactions] ([time_stamp] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_ProtocolCommands (index existed, but adding INCLUDE TransactionID)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Time_stamp' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX [IX_tbl_ProtocolCommands_Time_stamp] ON [tbl_ProtocolCommands]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ProtocolCommands_Time_stamp] ON [tbl_ProtocolCommands] ([time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_SocketConnections (index existed, but adding INCLUDE TransactionID)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_Time_stamp' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
DROP INDEX [IX_tbl_SocketConnections_Time_stamp] ON [tbl_SocketConnections]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SocketConnections_Time_stamp] ON [tbl_SocketConnections] ([Time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_Authentications (index existed, but adding Time_stamp)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_User_Name' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX [IX_tbl_Authentications_User_Name] ON [tbl_Authentications]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Authentications_User_Name] ON [tbl_Authentications] ([UserName],[Time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_ScanDataActions
|
||||
/*
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ScanDataActions_Time_Stamp' AND object_id = OBJECT_ID('tbl_ScanDataActions'))
|
||||
DROP INDEX [IX_tbl_ScanDataActions_Time_Stamp] ON [tbl_ScanDataActions]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ScanDataActions_Time_Stamp] ON [tbl_ScanDataActions] ([Time_stamp]) INCLUDE ([ActionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
*/
|
||||
|
275
sql/7.4 purge with cascade deletes/recreate_foreign_keys.sql
Normal file
275
sql/7.4 purge with cascade deletes/recreate_foreign_keys.sql
Normal file
@ -0,0 +1,275 @@
|
||||
-- recreate_foreign_keys.sql
|
||||
-- Delete orphan records for any cascade delete foreign key constraints
|
||||
-- 1. Test to see if any orphan records in sub-tables
|
||||
-- 2. If orphan records exist
|
||||
-- a. Drop the constraint between the table and parent table
|
||||
-- b. Delete the orphan records
|
||||
-- c. Recreate the constraint with the cascade delete
|
||||
|
||||
-- ****************************
|
||||
-- tbl_Transactions constraints
|
||||
-- ****************************
|
||||
|
||||
-- tbl_AdminActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_AdminActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_AdminActions DROP CONSTRAINT FK_tbl_AdminActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_AdminActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_AdminActions ADD CONSTRAINT FK_tbl_AdminActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Authentications WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_Authentications DROP CONSTRAINT FK_tbl_Auth_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Authentications WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Authentications ADD CONSTRAINT FK_tbl_Auth_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_ClientOperations
|
||||
-- IF EXISTS (SELECT * FROM tbl_ClientOperations WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_ClientOperations DROP CONSTRAINT FK_tbl_ClientOperations_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ClientOperations WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ClientOperations ADD CONSTRAINT FK_tbl_ClientOperations_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_CustomCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_CustomCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_CustomCommands DROP CONSTRAINT FK_tbl_CustomCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_CustomCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_CustomCommands ADD CONSTRAINT FK_tbl_CustomCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRules WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_EventRules DROP CONSTRAINT FK_tbl_EventRules_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRules WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRules ADD CONSTRAINT FK_tbl_EventRules_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRuleTransfers
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRuleTransfers WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_EventRuleTransfers DROP CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRuleTransfers WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRuleTransfers ADD CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_ProtocolCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_ProtocolCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_ProtocolCommands DROP CONSTRAINT FK_tbl_ProtocolCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ProtocolCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ProtocolCommands ADD CONSTRAINT FK_tbl_ProtocolCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SocketConnections
|
||||
-- IF EXISTS (SELECT * FROM tbl_SocketConnections WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_SocketConnections DROP CONSTRAINT FK_tbl_SocketConnections_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SocketConnections WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SocketConnections ADD CONSTRAINT FK_tbl_SocketConnections_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceActions
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_WorkspaceActions DROP CONSTRAINT FK_tbl_WorkspaceActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceActions ADD CONSTRAINT FK_tbl_WorkspaceActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- *****************
|
||||
-- Other constraints
|
||||
-- *****************
|
||||
|
||||
-- tbl_ScanDataActions -> tbl_Actions
|
||||
/*
|
||||
IF EXISTS (SELECT * FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_ScanDataActions DROP CONSTRAINT FK_tbl_ScanDataActions_ActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ScanDataActions ADD CONSTRAINT FK_tbl_ScanDataActions_ActionID
|
||||
FOREIGN KEY (ActionID)
|
||||
REFERENCES tbl_Actions (ActionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Actions -> tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_Actions WHERE EventID NOT IN (SELECT EventID FROM tbl_EventRules))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_Actions DROP CONSTRAINT FK_tbl_Actions_EventId;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Actions WHERE EventID NOT IN
|
||||
(SELECT EventID FROM tbl_EventRules);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Actions ADD CONSTRAINT FK_tbl_Actions_EventId
|
||||
FOREIGN KEY (EventID)
|
||||
REFERENCES tbl_EventRules (EventID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Emails -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Emails WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_SAT_Emails DROP CONSTRAINT FK_tbl_SAT_Emails_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Emails WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Emails ADD CONSTRAINT FK_tbl_SAT_Emails_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Emails -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Emails WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_SAT_Emails DROP CONSTRAINT FK_tbl_SAT_Emails_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Emails WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Emails ADD CONSTRAINT FK_tbl_SAT_Emails_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Files -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Files WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_SAT_Files DROP CONSTRAINT FK_tbl_SAT_Files_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Files WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Files ADD CONSTRAINT FK_tbl_SAT_Files_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceParticipants -> tbl_WorkspaceActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN (SELECT ID FROM tbl_WorkspaceActions))
|
||||
/*
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_WorkspaceParticipants DROP CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN
|
||||
(SELECT ID FROM tbl_WorkspaceActions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceParticipants ADD CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID
|
||||
FOREIGN KEY (WorkspaceActionID)
|
||||
REFERENCES tbl_WorkspaceActions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
|
||||
-- Re-create FK constraint between ParentTransactionID and TransactionID
|
||||
-- Drop constraint
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
@ -0,0 +1,295 @@
|
||||
-- recreate_foreign_keys.sql
|
||||
-- Delete orphan records for any cascade delete foreign key constraints
|
||||
-- 1. Test to see if any orphan records in sub-tables
|
||||
-- 2. If orphan records exist
|
||||
-- a. Drop the constraint between the table and parent table
|
||||
-- b. Delete the orphan records
|
||||
-- c. Recreate the constraint with the cascade delete
|
||||
|
||||
-- ****************************
|
||||
-- tbl_Transactions constraints
|
||||
-- ****************************
|
||||
|
||||
-- tbl_AdminActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_AdminActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_AdminActions_TransID') AND parent_object_id = OBJECT_ID(N'tbl_AdminActions'))
|
||||
ALTER TABLE tbl_AdminActions DROP CONSTRAINT FK_tbl_AdminActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_AdminActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_AdminActions ADD CONSTRAINT FK_tbl_AdminActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Authentications WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Auth_TransID') AND parent_object_id = OBJECT_ID(N'tbl_Authentications'))
|
||||
ALTER TABLE tbl_Authentications DROP CONSTRAINT FK_tbl_Auth_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Authentications WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Authentications ADD CONSTRAINT FK_tbl_Auth_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_ClientOperations
|
||||
-- IF EXISTS (SELECT * FROM tbl_ClientOperations WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ClientOperations_TransID') AND parent_object_id = OBJECT_ID(N'tbl_ClientOperations'))
|
||||
ALTER TABLE tbl_ClientOperations DROP CONSTRAINT FK_tbl_ClientOperations_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ClientOperations WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ClientOperations ADD CONSTRAINT FK_tbl_ClientOperations_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_CustomCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_CustomCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_CustomCommands_TransID') AND parent_object_id = OBJECT_ID(N'tbl_CustomCommands'))
|
||||
ALTER TABLE tbl_CustomCommands DROP CONSTRAINT FK_tbl_CustomCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_CustomCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_CustomCommands ADD CONSTRAINT FK_tbl_CustomCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRules WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_EventRules_TransID') AND parent_object_id = OBJECT_ID(N'tbl_EventRules'))
|
||||
ALTER TABLE tbl_EventRules DROP CONSTRAINT FK_tbl_EventRules_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRules WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRules ADD CONSTRAINT FK_tbl_EventRules_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRuleTransfers
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRuleTransfers WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_EventRuleTransfers_TransactionID') AND parent_object_id = OBJECT_ID(N'tbl_EventRuleTransfers'))
|
||||
ALTER TABLE tbl_EventRuleTransfers DROP CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRuleTransfers WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRuleTransfers ADD CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_ProtocolCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_ProtocolCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ProtocolCommands_TransID') AND parent_object_id = OBJECT_ID(N'tbl_ProtocolCommands'))
|
||||
ALTER TABLE tbl_ProtocolCommands DROP CONSTRAINT FK_tbl_ProtocolCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ProtocolCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ProtocolCommands ADD CONSTRAINT FK_tbl_ProtocolCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SocketConnections
|
||||
-- IF EXISTS (SELECT * FROM tbl_SocketConnections WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SocketConnections_TransID') AND parent_object_id = OBJECT_ID(N'tbl_SocketConnections'))
|
||||
ALTER TABLE tbl_SocketConnections DROP CONSTRAINT FK_tbl_SocketConnections_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SocketConnections WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SocketConnections ADD CONSTRAINT FK_tbl_SocketConnections_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceActions
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_WorkspaceActions_TransID') AND parent_object_id = OBJECT_ID(N'tbl_WorkspaceActions'))
|
||||
ALTER TABLE tbl_WorkspaceActions DROP CONSTRAINT FK_tbl_WorkspaceActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceActions ADD CONSTRAINT FK_tbl_WorkspaceActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- *****************
|
||||
-- Other constraints
|
||||
-- *****************
|
||||
|
||||
-- tbl_ScanDataActions -> tbl_Actions
|
||||
/*
|
||||
IF EXISTS (SELECT * FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ScanDataActions_ActionID') AND parent_object_id = OBJECT_ID(N'tbl_ScanDataActions'))
|
||||
ALTER TABLE tbl_ScanDataActions DROP CONSTRAINT FK_tbl_ScanDataActions_ActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ScanDataActions ADD CONSTRAINT FK_tbl_ScanDataActions_ActionID
|
||||
FOREIGN KEY (ActionID)
|
||||
REFERENCES tbl_Actions (ActionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Groups_AuthID') AND parent_object_id = OBJECT_ID(N'tbl_Groups'))
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Actions -> tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_Actions WHERE EventID NOT IN (SELECT EventID FROM tbl_EventRules))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Actions_EventId') AND parent_object_id = OBJECT_ID(N'tbl_Actions'))
|
||||
ALTER TABLE tbl_Actions DROP CONSTRAINT FK_tbl_Actions_EventId;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Actions WHERE EventID NOT IN
|
||||
(SELECT EventID FROM tbl_EventRules);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Actions ADD CONSTRAINT FK_tbl_Actions_EventId
|
||||
FOREIGN KEY (EventID)
|
||||
REFERENCES tbl_EventRules (EventID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Groups_AuthID') AND parent_object_id = OBJECT_ID(N'tbl_Groups'))
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Emails -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Emails WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SAT_Emails_TxID') AND parent_object_id = OBJECT_ID(N'tbl_SAT_Emails'))
|
||||
ALTER TABLE tbl_SAT_Emails DROP CONSTRAINT FK_tbl_SAT_Emails_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Emails WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Emails ADD CONSTRAINT FK_tbl_SAT_Emails_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Files -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Files WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SAT_Files_TxID') AND parent_object_id = OBJECT_ID(N'tbl_SAT_Files'))
|
||||
ALTER TABLE tbl_SAT_Files DROP CONSTRAINT FK_tbl_SAT_Files_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Files WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Files ADD CONSTRAINT FK_tbl_SAT_Files_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceParticipants -> tbl_WorkspaceActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN (SELECT ID FROM tbl_WorkspaceActions))
|
||||
/*
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_WorkspaceParticipants_WorkspaceActionID') AND parent_object_id = OBJECT_ID(N'tbl_WorkspaceParticipants'))
|
||||
ALTER TABLE tbl_WorkspaceParticipants DROP CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN
|
||||
(SELECT ID FROM tbl_WorkspaceActions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceParticipants ADD CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID
|
||||
FOREIGN KEY (WorkspaceActionID)
|
||||
REFERENCES tbl_WorkspaceActions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
|
||||
-- Re-create FK constraint between ParentTransactionID and TransactionID
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Transactions_ParentTransID') AND parent_object_id = OBJECT_ID(N'tbl_Transactions'))
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
277
sql/Helper scripts/PurgeEFT.sql
Normal file
277
sql/Helper scripts/PurgeEFT.sql
Normal file
@ -0,0 +1,277 @@
|
||||
-- EFT Purging Script
|
||||
-- Goal: General script to purge data from EFT's ARM database by date
|
||||
|
||||
--USAGE
|
||||
/*
|
||||
1. Run index_foreign_keys_and_time_stamps.sql first, as that will improve purge performance
|
||||
2. Run repair_foreign_keys.sql next, as it will fix any problems if present (see notes in that script)
|
||||
3. Modify the purge date if desired. -30 means purge all records older than 30 days
|
||||
3a. To change: search for "SET @stopTime = DATEADD(DAY, -30, GETDATE())"
|
||||
3b. A value of -0 means ALL records
|
||||
3c. Alternatively, you can pass in an exact date range:
|
||||
3ci. Search for EXEC sp_PurgeEFTTransactions NULL, NULL, 1000000, 1
|
||||
3cii. Enter date and times in quotes as such: EXEC sp_PurgeEFTTransactions '2019-01-20 18:11:00', '2019-04-01 07:50:00', 1000000, 1
|
||||
4. Modify "USE EFTDB" below if your database name is different
|
||||
5. Make sure you database isn't actively recording data (disable ARM reporting in EFT temporarily)
|
||||
6. Execute the script (it can take several hours for databases with hundreds of millions of records)
|
||||
*/
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Set batch size at 100,000
|
||||
-- Removed SELECT and extra PRINT statements.
|
||||
-- 0.2: Changed to purge up to records greater than 30 days old
|
||||
-- 0.3: Modified script to not assume cascading deletes and to
|
||||
-- explicitly delete from all tables
|
||||
-- Modified script to default 'purgesize' to 10,000
|
||||
-- instead of 1,000
|
||||
-- 0.4 Added AS2 and SAT purging
|
||||
-- 0.5 Subset table wasn't being dropped.
|
||||
-- 0.6 Changed to all static calls instead of dynamic.
|
||||
-- 0.7 Changed purge size to 1,000,000
|
||||
-- 0.8 Brought back cascade deletes to speed up performance
|
||||
|
||||
-- USE EFTDB
|
||||
|
||||
PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Script started'
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactionsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFTTransactionsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactionsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Script Version 0.8'
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactions') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFTTransactions
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, this procedure will purge data from 1970 to 60 days ago.
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactions @startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@purgeSize int = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @r INT;
|
||||
DECLARE @ErrMsg nvarchar(4000);
|
||||
DECLARE @ErrSeverity int;
|
||||
DECLARE @deletedTransactions TABLE(ParentTransactionID numeric(18,0));
|
||||
|
||||
EXEC sp_PurgeEFTTransactionsVersion
|
||||
|
||||
-- Delete tbl_Transactions records and sub-tables
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL BEGIN
|
||||
set @startTime = '1970-01-01'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL BEGIN
|
||||
SET @stopTime = DATEADD(DAY, -60, GETDATE())
|
||||
END
|
||||
|
||||
IF @purgeSize IS NULL BEGIN
|
||||
set @purgeSize = 1000000
|
||||
END
|
||||
|
||||
-- Temporarily remove the ParentTransactionID -> TransactionID constraint
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
|
||||
-- First, delete from tbl_Actions separately since potential circular cascade delete with tbl_EventRules
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_Actions';
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- Clear the temp table
|
||||
DELETE @deletedTransactions
|
||||
|
||||
-- First delete the related transactions
|
||||
DELETE FROM tbl_Transactions
|
||||
OUTPUT deleted.ParentTransactionID INTO @deletedTransactions
|
||||
WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_Actions WHERE Time_stamp BETWEEN @startTime AND @stopTime)
|
||||
-- Now delete the Actions
|
||||
DELETE FROM tbl_Actions WHERE Time_stamp BETWEEN @startTime AND @stopTime
|
||||
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Actions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
|
||||
-- Delete any parent transactions
|
||||
DELETE FROM tbl_Transactions WHERE transactionID IN (SELECT ParentTransactionID FROM @deletedTransactions WHERE ParentTransactionID IS NOT NULL)
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
|
||||
-- First, drop constraint
|
||||
IF (OBJECT_ID('FK_tbl_OutlookReport_ParentTransID', 'F') IS NOT NULL)
|
||||
BEGIN
|
||||
ALTER TABLE tbl_OutlookReport DROP CONSTRAINT FK_tbl_OutlookReport_ParentTransID;
|
||||
END
|
||||
|
||||
SET @r = 1;
|
||||
WHILE @r > 0
|
||||
BEGIN
|
||||
IF @debug=1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_Transactions';
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- Clear the temp table
|
||||
DELETE @deletedTransactions
|
||||
|
||||
-- Delete from tbl_Transactions and cascade delete of multiple tables,
|
||||
-- copy deleted transactions' ParentTransactionIDs so can delete any parents after
|
||||
-- Tables cascade deleted are:
|
||||
-- tbl_AdminActions, tbl_Authentications, tbl_ClientOperations, tbl_CustomCommands, tbl_EventRules,
|
||||
-- tbl_EventRuleTransfers, tbl_ProtocolCommands, tbl_SocketConnections, tbl_WorkspaceActions
|
||||
DELETE TOP (@purgeSize) FROM tbl_Transactions
|
||||
OUTPUT deleted.ParentTransactionID INTO @deletedTransactions
|
||||
WHERE Time_stamp BETWEEN @startTime AND @stopTime
|
||||
|
||||
SET @r = @@ROWCOUNT
|
||||
|
||||
-- Now delete the parents
|
||||
DELETE FROM tbl_Transactions WHERE transactionID IN (SELECT ParentTransactionID FROM @deletedTransactions WHERE ParentTransactionID IS NOT NULL)
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log after each iteration to its original creation size
|
||||
END
|
||||
|
||||
DELETE FROM dbo.tbl_OutlookReport WHERE TransactionID NOT IN (SELECT TransactionID FROM tbl_Transactions);
|
||||
ALTER TABLE tbl_OutlookReport ADD CONSTRAINT FK_tbl_OutlookReport_ParentTransID
|
||||
FOREIGN KEY(TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete SAT Transactions and sub-tables tbl_SAT_Files, tbl_SAT_Emails (Cascading Delete)
|
||||
BEGIN TRY
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_SAT_Transactions';
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_SAT_Transactions
|
||||
WHERE time_stamp BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_AWESteps';
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_AWESteps
|
||||
WHERE time_stamp BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_PCIViolations';
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_PCIViolations
|
||||
WHERE time_stamp BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_ServerInternalEvents';
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_ServerInternalEvents
|
||||
WHERE time_stamp BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete AS2 Transactions and sub-table tbl_AS2Actions (non-Cascading Delete)
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_AS2Transactions';
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- First delete records in sub-tables
|
||||
-- tbl_AS2Actions
|
||||
DELETE FROM tbl_AS2Actions WHERE transactionID IN
|
||||
(SELECT transactionID FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime)
|
||||
-- tbl_AS2Transactions
|
||||
DELETE FROM tbl_AS2Transactions
|
||||
WHERE CompleteTime BETWEEN @startTime AND @stopTime
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Delete from remaining tables (stand-alone)
|
||||
/*
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_ScanDataActions, etc.';
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
DELETE FROM tbl_ScanDataActions WHERE Time_stamp BETWEEN @startTime AND @stopTime
|
||||
DELETE FROM tbl_PrivacyTermsEUStatus WHERE Setdate BETWEEN @startTime AND @stopTime
|
||||
DELETE FROM tbl_PersonalDataActions WHERE Setdate BETWEEN @startTime AND @stopTime
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
*/
|
||||
|
||||
-- Re-establish the ParentTransactionID -> TransactionID constraint
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log to its original creation size
|
||||
END
|
||||
GO
|
||||
|
||||
-- Using 10,000,000 batch for now. Creates larger log, but moves quicker.
|
||||
SET STATISTICS TIME OFF
|
||||
EXEC sp_PurgeEFTTransactions NULL, NULL, 10000000, 1
|
||||
--EXEC sp_PurgeEFTTransactions '2018-01-01', '2018-12-31', 10000000, 1
|
||||
SET STATISTICS TIME OFF
|
||||
|
||||
|
||||
PRINT ''
|
||||
PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Script completed'
|
||||
|
||||
|
||||
GO
|
107
sql/Helper scripts/PurgeEFT_Authentications.sql
Normal file
107
sql/Helper scripts/PurgeEFT_Authentications.sql
Normal file
@ -0,0 +1,107 @@
|
||||
-- EFT Purging script: tbl_Authentications
|
||||
-- Goal: Purge tbl_Authentications table of garbage logon attempts using non-existing usernames.
|
||||
|
||||
-- USAGE
|
||||
-- Config: By default, the script will search for user account authentications attempts using 'root' or 'administrator'
|
||||
-- You can edit those terms or add your own by modifying the appropriate areas of this script (search for root or administrator)
|
||||
-- You can also specify a start and end range or use NULL, NULL which will dafault to deleting records back 60 days
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Initial version
|
||||
|
||||
-- [NOTE: Added to upgrade_17.0.0.0-18.0.0.0 script to modify tbl_Authentications index IX_tbl_Authentications_User_Name to include Time_stamp]
|
||||
|
||||
PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Script started'
|
||||
-- USE EFTDB
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_AuthenticationsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFT_AuthenticationsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFT_AuthenticationsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Authentication Script Version 0.1'
|
||||
GO
|
||||
|
||||
-- This procedure deletes Authentications based on username and date range
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_Authentications') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFT_Authentications
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFT_Authentications
|
||||
@startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@UserName nvarchar(50) = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
|
||||
EXEC dbo.sp_PurgeEFT_AuthenticationsVersion
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL BEGIN
|
||||
set @startTime = '19700101 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL BEGIN
|
||||
SET @stopTime = DATEADD(DAY, -60, GETDATE())
|
||||
END
|
||||
|
||||
-- Temporarily remove the ParentTransactionID -> TransactionID constraint
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting transactions for authentications';
|
||||
-- Deleting the transactions should cascade delete to other tables if any associated transactions exist
|
||||
IF @UserName IS NULL -- Use default usernames
|
||||
DELETE FROM tbl_Transactions WHERE TransactionID IN
|
||||
(SELECT transactionID FROM tbl_Authentications WHERE (UserName = 'Administrator' OR UserName = 'root') AND Time_stamp BETWEEN @startTime AND @stopTime)
|
||||
ELSE
|
||||
DELETE FROM tbl_Transactions WHERE TransactionID IN
|
||||
(SELECT transactionID FROM tbl_Authentications WHERE UserName = @UserName AND Time_stamp BETWEEN @startTime AND @stopTime)
|
||||
|
||||
-- Should be zero transactions to purge here, since cascade delete above should have handled them
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting rows from tbl_Authentications with UserNames: ' + ISNULL(@UserName, 'Adminitrator, root');
|
||||
IF @UserName IS NULL -- Use default usernames
|
||||
DELETE FROM tbl_Authentications WHERE (UserName = 'Administrator' OR UserName = 'root') AND Time_stamp BETWEEN @startTime AND @stopTime
|
||||
ELSE
|
||||
DELETE FROM tbl_Authentications WHERE UserName = @UserName AND Time_stamp BETWEEN @startTime AND @stopTime
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- If error, roll back
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Re-establish the ParentTransactionID -> TransactionID constraint
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
||||
GO
|
||||
|
||||
|
||||
EXEC sp_PurgeEFT_Authentications NULL, NULL, NULL, 1
|
||||
-- EXEC sp_PurgeEFT_Authentications '2018-01-01', '2018-12-31', NULL, 1
|
||||
|
||||
|
||||
PRINT ''
|
||||
PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Script completed'
|
@ -0,0 +1,93 @@
|
||||
-- EFT Purging Script - tbl_ProtocolCommands
|
||||
-- Goal: Special script to purge internal transaction data from tbl_ProtocolCommands
|
||||
|
||||
-- USAGE
|
||||
|
||||
-- 1. Configure (bottom of script) then run.
|
||||
-- to purge all ProtocolCommands with IsInternal = 1:
|
||||
-- EXEC sp_PurgeEFT_ProtocolCommands NULL, NULL
|
||||
-- to purge date range ProtocolCommands with IsInternal = 1 - e.g.:
|
||||
-- EXEC sp_PurgeEFT_ProtocolCommands '2019-01-01', '2019-05-18'
|
||||
--
|
||||
-- leaving begin date as NULL will default to earliest date
|
||||
-- leaving end date as NULL will default to current date
|
||||
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Original version
|
||||
|
||||
-- USE EFTDB
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_ProtocolCommandsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFT_ProtocolCommandsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFT_ProtocolCommandsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Protocol Commands Script Version 0.1'
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_ProtocolCommands') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFT_ProtocolCommands
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, with no parameters, this procedure will purge all Protocol connections
|
||||
CREATE PROCEDURE sp_PurgeEFT_ProtocolCommands
|
||||
@startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @ErrMsg nvarchar(4000);
|
||||
DECLARE @ErrSeverity int;
|
||||
|
||||
EXEC dbo.sp_PurgeEFT_ProtocolCommandsVersion
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL
|
||||
BEGIN
|
||||
SET @startTime = '1970-01-01 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, GETDATE())
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, @stopTime) -- Add 1 to selected date to get all records before that
|
||||
END
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_ProtocolCommands';
|
||||
|
||||
BEGIN TRY
|
||||
DELETE FROM tbl_ProtocolCommands WHERE IsInternal=1 AND Time_stamp >= @startTime AND Time_stamp < @stopTime
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
-- There was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log to its original creation size
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Done deleting from tbl_ProtocolCommands';
|
||||
|
||||
PRINT 'Procedure Complete'
|
||||
END
|
||||
GO
|
||||
|
||||
-- Default to purge entire table
|
||||
-- SET STATISTICS TIME OFF
|
||||
-- EXEC sp_PurgeEFT_ProtocolCommands NULL, NULL, 1
|
||||
EXEC sp_PurgeEFT_ProtocolCommands '2018-01-01', '2018-12-31', 1
|
||||
-- SET STATISTICS TIME OFF
|
||||
|
||||
|
||||
|
@ -0,0 +1,95 @@
|
||||
-- EFT Purging Script - tbl_ProtocolCommands
|
||||
-- Goal: Special script to purge data from tbl_ProtocolCommands with unimportant verbs
|
||||
|
||||
-- USAGE
|
||||
|
||||
-- 1. Run this script, then
|
||||
-- to purge all ProtocolCommands which are not relevant to main operations (upload, download, rename, delete, mkd)
|
||||
-- EXEC sp_PurgeEFT_ProtocolCommands NULL, NULL
|
||||
-- to purge date range:
|
||||
-- EXEC sp_PurgeEFT_ProtocolCommands '2019-01-01', '2019-05-18'
|
||||
--
|
||||
-- leaving begin date as NULL will default to earliest date
|
||||
-- leaving end date as NULL will default to current date
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Original version
|
||||
-- 0.2: Changed to remove based on certain commands. the is internal flag wasn't a sufficient qualifier.
|
||||
|
||||
-- USE EFTDB
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_ProtocolCommands2Version') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFT_ProtocolCommands2Version
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFT_ProtocolCommands2Version
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Protocol Commands Script 2 Version 0.2'
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_ProtocolCommands2') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFT_ProtocolCommands2
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, with no parameters, this procedure will purge all Protocol connections
|
||||
CREATE PROCEDURE sp_PurgeEFT_ProtocolCommands2
|
||||
@startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @ErrMsg nvarchar(4000);
|
||||
DECLARE @ErrSeverity int;
|
||||
|
||||
EXEC dbo.sp_PurgeEFT_ProtocolCommands2Version
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL
|
||||
BEGIN
|
||||
SET @startTime = '1970-01-01 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, GETDATE())
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, @stopTime) -- Add 1 to selected date to get all records before that
|
||||
END
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30), CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_ProtocolCommands';
|
||||
|
||||
BEGIN TRY
|
||||
DELETE FROM tbl_ProtocolCommands
|
||||
WHERE Time_stamp >= @startTime AND Time_stamp < @stopTime AND
|
||||
Command NOT IN ('sent', 'created', 'mkd', 'rmd', 'dele', 'rnfr', 'rnto', 'DELETE', 'retr', 'POST', 'patch', 'copy')
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
-- There was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log to its original creation size
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Done deleting from tbl_ProtocolCommands';
|
||||
|
||||
PRINT 'Procedure Complete'
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
SET STATISTICS TIME OFF
|
||||
/* EXEC sp_PurgeEFT_ProtocolCommands2 NULL, NULL -- Default to purge entire table */
|
||||
EXEC sp_PurgeEFT_ProtocolCommands2 '2018-01-01', '2018-12-31', 1
|
||||
|
||||
|
||||
|
||||
|
119
sql/Helper scripts/PurgeEFT_SocketConnections.sql
Normal file
119
sql/Helper scripts/PurgeEFT_SocketConnections.sql
Normal file
@ -0,0 +1,119 @@
|
||||
-- EFT Purging Script - tbl_SocketConnections
|
||||
-- Goal: Special script to purge data from tbl_SocketConnections by date
|
||||
|
||||
-- USAGE
|
||||
|
||||
-- 1. Configure the purge (bottom of script)
|
||||
-- To perform a complete purge, just run the command at the bottom of the script: EXEC sp_PurgeEFT_SocketConnections NULL, NULL, NULL
|
||||
-- If you want to purge a specific date range, then specify a start and end date: EXEC sp_PurgeEFT_SocketConnections '2019-01-01', '2019-05-18', NULL
|
||||
-- If you want to purge a specific error code, for example error code 0: EXEC sp_PurgeEFT_SocketConnections '2019-01-01', '2019-05-18', 0
|
||||
-- Note: Leaving begin date as NULL will default to earliest date.
|
||||
-- Leaving end date as NULL will default to current date.
|
||||
-- Leaving errorCode as NULL will purge all error codes.
|
||||
|
||||
-- Change Log:
|
||||
-- 0.1: Original version
|
||||
-- 0.2: Updated comments
|
||||
|
||||
-- USE EFTDB
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_SocketConnectionsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFT_SocketConnectionsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFT_SocketConnectionsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Script Version 0.2'
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFT_SocketConnections') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFT_SocketConnections
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, with no parameters, this procedure will purge all socket connections
|
||||
CREATE PROCEDURE sp_PurgeEFT_SocketConnections
|
||||
@startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@errorCode int = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @ErrMsg nvarchar(4000);
|
||||
DECLARE @ErrSeverity int;
|
||||
|
||||
EXEC dbo.sp_PurgeEFT_SocketConnectionsVersion
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL AND @stopTime IS NULL AND @errorCode IS NULL
|
||||
BEGIN
|
||||
--This will remove everything, regardless of ResultID code
|
||||
TRUNCATE TABLE tbl_SocketConnections
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
IF @startTime IS NULL
|
||||
BEGIN
|
||||
SET @startTime = '1970-01-01 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, GETDATE())
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @stopTime = DATEADD(DAY, 1, @stopTime)
|
||||
END
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Deleting from tbl_SocketConnections';
|
||||
|
||||
BEGIN TRY
|
||||
IF @errorCode IS NULL
|
||||
BEGIN
|
||||
DELETE FROM tbl_SocketConnections WHERE Time_stamp >= @startTime AND Time_stamp < @stopTime
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
DELETE FROM tbl_SocketConnections WHERE Time_stamp >= @startTime AND Time_stamp < @stopTime AND ResultID = @errorCode
|
||||
END
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
-- There was an error
|
||||
IF @@TRANCOUNT > 0 ROLLBACK
|
||||
-- Raise an error with the details of the exception
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
DBCC SHRINKFILE (2) WITH NO_INFOMSGS; -- Truncate the log to its original creation size
|
||||
|
||||
IF @debug=1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP, 8) + ' Done deleting from tbl_SocketConnections';
|
||||
END
|
||||
PRINT 'Procedure Complete'
|
||||
END
|
||||
GO
|
||||
|
||||
-- sp_PurgeEFT_SocketConnections parameters
|
||||
--
|
||||
-- startTime: set the time to purge from. If set to NULL it will default to January 1970.
|
||||
-- stopTime : set the time to purge to. If set to NULL it will default to todays date.
|
||||
-- errorCode: set the resultID to purge. If set to NULL it will purge all resultIDs.
|
||||
-- The errorCodes are as follows:
|
||||
-- - TOO_MANY_CONNECTIONS_PER_SITE = 8
|
||||
-- - TOO_MANY_CONNECTIONS_PER_IP = 9
|
||||
-- - RESTRICTED_IP = 10
|
||||
-- - BANNED_IP = 11
|
||||
-- - EFT_IN_DEV_MODE = 12
|
||||
-- - INTERNAL_SERVER_ERROR = 13
|
||||
-- - OK = 0
|
||||
|
||||
-- Default to purge entire table
|
||||
|
||||
-- SET STATISTICS TIME OFF
|
||||
EXEC sp_PurgeEFT_SocketConnections NULL, NULL, NULL, 1
|
||||
-- EXEC sp_PurgeEFT_SocketConnections '2018-01-01', '2018-12-31', NULL, 1
|
||||
-- SET STATISTICS TIME OFF
|
34
sql/Helper scripts/Utility_Check_For_Unused_Indexes.sql
Normal file
34
sql/Helper scripts/Utility_Check_For_Unused_Indexes.sql
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
|
||||
WHAT:
|
||||
Detects superfluous indexes
|
||||
|
||||
WHY:
|
||||
These can hurt performance, since the DB must update them during Inserts, Updates and Deletes. And if they’re never used, then that’s a waste of resources.
|
||||
|
||||
WHEN:
|
||||
Created in April of 2019
|
||||
|
||||
WHO:
|
||||
Created by Globalscape, Inc.
|
||||
|
||||
HOW:
|
||||
It’s best run on one of the larger, well-used databases, since it then has more info to work with. Otherwise stats won't be available to determine whether indexes are unused or not. Indexes that are identified as seldom used should be deleted by your db admin.
|
||||
|
||||
*/
|
||||
|
||||
SELECT TOP 10 o.name AS TableName, i.name AS IndexName, u.user_seeks As Seeks, u.user_scans As Scans, u.user_lookups As Lookups,
|
||||
u.user_updates As UserUpdates, u.last_user_seek As LastUserSeek, u.last_user_scan As LastUserScan,
|
||||
(SELECT SUM(s.[used_page_count]) * 8 FROM sys.dm_db_partition_stats s WHERE s.[object_id] = i.[object_id] AND s.[index_id] = i.[index_id]) As IndexSizeKB,
|
||||
'Drop index ' + i.name + ' on ' + o.name as DropIndexStatement
|
||||
FROM sys.indexes i
|
||||
JOIN sys.objects o ON i.object_id = o.object_id
|
||||
LEFT JOIN sys.dm_db_index_usage_stats u ON i.object_id = u.object_id
|
||||
AND i.index_id = u.index_id
|
||||
AND u.database_id = DB_ID()
|
||||
WHERE o.type <> 'S'
|
||||
and isnull(u.user_updates,0) > 0
|
||||
and i.type_desc <> 'HEAP'
|
||||
and i.type_desc <> 'CLUSTERED'
|
||||
and u.user_seeks < 5 and u.user_scans < 5 and u.user_lookups < 5
|
||||
ORDER BY IndexSizeKB DESC, UserUpdates DESC
|
98
sql/Helper scripts/Utility_Row_Counts.sql
Normal file
98
sql/Helper scripts/Utility_Row_Counts.sql
Normal file
@ -0,0 +1,98 @@
|
||||
/*
|
||||
|
||||
WHAT:
|
||||
Records the number of rows in each table
|
||||
|
||||
WHY:
|
||||
Can be useful to count rows before and after a purge.
|
||||
|
||||
WHEN:
|
||||
Created in April of 2019
|
||||
|
||||
WHO:
|
||||
Created by Globalscape, Inc.
|
||||
|
||||
HOW:
|
||||
Row count can take several minutes depending on the size of the database
|
||||
|
||||
*/
|
||||
|
||||
|
||||
declare @count int
|
||||
select @count = count(*) from tbl_Actions
|
||||
print 'tbl_Actions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_AdminActions
|
||||
print 'tbl_AdminActions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_AS2Actions
|
||||
print 'tbl_AS2Actions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_AS2Transactions
|
||||
print 'tbl_AS2Transactions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_Authentications
|
||||
print 'tbl_Authentications count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_AuthenticationsExpired
|
||||
print 'tbl_AuthenticationsExpired count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_AWESteps
|
||||
print 'tbl_AWESteps count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_ClientOperations
|
||||
print 'tbl_ClientOperations count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_CustomCommands
|
||||
print 'tbl_CustomCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_EventRules
|
||||
print 'tbl_EventRules count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_EventRuleTransfers
|
||||
print 'tbl_EventRuleTransfers count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_Groups
|
||||
print 'tbl_Groups count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_NegotiatedCiphersSSH
|
||||
print 'tbl_NegotiatedCiphersSSH count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_NegotiatedCiphersSSL
|
||||
print 'tbl_NegotiatedCiphersSSL count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_OutlookReport
|
||||
print 'tbl_OutlookReport count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_PCIViolations
|
||||
print 'tbl_PCIViolations count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_PersonalDataActions
|
||||
print 'tbl_PersonalDataActions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_PrivacyTermsEUStatus
|
||||
print 'tbl_PrivacyTermsEUStatus count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_ProtocolCommands
|
||||
print 'tbl_ProtocolCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_PrivacyRightExercised
|
||||
print 'tbl_PrivacyRightExercised count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_ScanDataActions
|
||||
print 'tbl_ScanDataActions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_ServerInternalEvents
|
||||
print 'tbl_ServerInternalEvents count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_SocketConnections
|
||||
print 'tbl_SocketConnections count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_Transactions
|
||||
print 'tbl_Transactions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_WorkspaceActions
|
||||
print 'tbl_WorkspaceActions count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
select @count = count(*) from tbl_WorkspaceParticipants
|
||||
print 'tbl_WorkspaceParticipants count = ' +CAST(@count AS NVARCHAR)
|
75
sql/Helper scripts/index_foreign_keys_and_time_stamps.sql
Normal file
75
sql/Helper scripts/index_foreign_keys_and_time_stamps.sql
Normal file
@ -0,0 +1,75 @@
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Actions_TransactionID' AND object_id = OBJECT_ID('tbl_Actions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Actions_TransactionID] ON [tbl_Actions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AdminActions_TransactionID' AND object_id = OBJECT_ID('tbl_AdminActions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AdminActions_TransactionID] ON [tbl_AdminActions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AS2Actions_TransactionID' AND object_id = OBJECT_ID('tbl_AS2Actions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_AS2Actions_TransactionID] ON [tbl_AS2Actions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_CustomCommands_TransactionID' AND object_id = OBJECT_ID('tbl_CustomCommands'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_CustomCommands_TransactionID] ON [tbl_CustomCommands] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Groups_AuthenticationID' AND object_id = OBJECT_ID('tbl_Groups'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Groups_AuthenticationID] ON [tbl_Groups] ([AuthenticationID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_TransactionID' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ProtocolCommands_TransactionID] ON [tbl_ProtocolCommands] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Emails_txid' AND object_id = OBJECT_ID('tbl_SAT_Emails'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Emails_txid] ON [tbl_SAT_Emails] ([txid] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Files_txid' AND object_id = OBJECT_ID('tbl_SAT_Files'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Files_txid] ON [tbl_SAT_Files] ([txid] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_TransactionID' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SocketConnections_TransactionID] ON [tbl_SocketConnections] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Transactions_ParentTransactionID' AND object_id = OBJECT_ID('tbl_Transactions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Transactions_ParentTransactionID] ON [tbl_Transactions] ([ParentTransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_TransactionID' AND object_id = OBJECT_ID('tbl_WorkspaceActions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_WorkspaceActions_TransactionID] ON [tbl_WorkspaceActions] ([TransactionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_TransactionID' AND object_id = OBJECT_ID('tbl_WorkspaceParticipants'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_WorkspaceActions_TransactionID] ON [tbl_WorkspaceParticipants] ([WorkspaceActionID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- Add indexes on time_stamps
|
||||
|
||||
-- tbl_SAT_Transactions
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SAT_Transactions_Time_Stamp' AND object_id = OBJECT_ID('tbl_SAT_Transactions'))
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SAT_Transactions_Time_Stamp] ON [tbl_SAT_Transactions] ([time_stamp] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_ProtocolCommands (index existed, but adding INCLUDE TransactionID)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Time_stamp' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX [IX_tbl_ProtocolCommands_Time_stamp] ON [tbl_ProtocolCommands]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ProtocolCommands_Time_stamp] ON [tbl_ProtocolCommands] ([time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_SocketConnections (index existed, but adding INCLUDE TransactionID)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_Time_stamp' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
DROP INDEX [IX_tbl_SocketConnections_Time_stamp] ON [tbl_SocketConnections]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_SocketConnections_Time_stamp] ON [tbl_SocketConnections] ([Time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_Authentications (index existed, but adding Time_stamp)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_User_Name' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX [IX_tbl_Authentications_User_Name] ON [tbl_Authentications]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_Authentications_User_Name] ON [tbl_Authentications] ([UserName],[Time_stamp]) INCLUDE ([TransactionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
-- tbl_ScanDataActions
|
||||
/*
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ScanDataActions_Time_Stamp' AND object_id = OBJECT_ID('tbl_ScanDataActions'))
|
||||
DROP INDEX [IX_tbl_ScanDataActions_Time_Stamp] ON [tbl_ScanDataActions]
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX [IX_tbl_ScanDataActions_Time_Stamp] ON [tbl_ScanDataActions] ([Time_stamp]) INCLUDE ([ActionID]) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
|
||||
GO
|
||||
*/
|
||||
|
295
sql/Helper scripts/repair_foreign_keys.sql
Normal file
295
sql/Helper scripts/repair_foreign_keys.sql
Normal file
@ -0,0 +1,295 @@
|
||||
-- repair_foreign_keys.sql
|
||||
-- Delete orphan records for any cascade delete foreign key constraints
|
||||
-- 1. Test to see if any orphan records in sub-tables
|
||||
-- 2. If orphan records exist
|
||||
-- a. Drop the constraint between the table and parent table
|
||||
-- b. Delete the orphan records
|
||||
-- c. Recreate the constraint with the cascade delete
|
||||
|
||||
-- ****************************
|
||||
-- tbl_Transactions constraints
|
||||
-- ****************************
|
||||
|
||||
-- tbl_AdminActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_AdminActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_AdminActions_TransID') AND parent_object_id = OBJECT_ID(N'tbl_AdminActions'))
|
||||
ALTER TABLE tbl_AdminActions DROP CONSTRAINT FK_tbl_AdminActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_AdminActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_AdminActions ADD CONSTRAINT FK_tbl_AdminActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Authentications WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Auth_TransID') AND parent_object_id = OBJECT_ID(N'tbl_Authentications'))
|
||||
ALTER TABLE tbl_Authentications DROP CONSTRAINT FK_tbl_Auth_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Authentications WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Authentications ADD CONSTRAINT FK_tbl_Auth_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_ClientOperations
|
||||
-- IF EXISTS (SELECT * FROM tbl_ClientOperations WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ClientOperations_TransID') AND parent_object_id = OBJECT_ID(N'tbl_ClientOperations'))
|
||||
ALTER TABLE tbl_ClientOperations DROP CONSTRAINT FK_tbl_ClientOperations_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ClientOperations WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ClientOperations ADD CONSTRAINT FK_tbl_ClientOperations_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_CustomCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_CustomCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_CustomCommands_TransID') AND parent_object_id = OBJECT_ID(N'tbl_CustomCommands'))
|
||||
ALTER TABLE tbl_CustomCommands DROP CONSTRAINT FK_tbl_CustomCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_CustomCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_CustomCommands ADD CONSTRAINT FK_tbl_CustomCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRules WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_EventRules_TransID') AND parent_object_id = OBJECT_ID(N'tbl_EventRules'))
|
||||
ALTER TABLE tbl_EventRules DROP CONSTRAINT FK_tbl_EventRules_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRules WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRules ADD CONSTRAINT FK_tbl_EventRules_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_EventRuleTransfers
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_EventRuleTransfers WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_EventRuleTransfers_TransactionID') AND parent_object_id = OBJECT_ID(N'tbl_EventRuleTransfers'))
|
||||
ALTER TABLE tbl_EventRuleTransfers DROP CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_EventRuleTransfers WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_EventRuleTransfers ADD CONSTRAINT FK_tbl_EventRuleTransfers_TransactionID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_ProtocolCommands
|
||||
-- IF EXISTS (SELECT * FROM tbl_ProtocolCommands WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ProtocolCommands_TransID') AND parent_object_id = OBJECT_ID(N'tbl_ProtocolCommands'))
|
||||
ALTER TABLE tbl_ProtocolCommands DROP CONSTRAINT FK_tbl_ProtocolCommands_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ProtocolCommands WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ProtocolCommands ADD CONSTRAINT FK_tbl_ProtocolCommands_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SocketConnections
|
||||
-- IF EXISTS (SELECT * FROM tbl_SocketConnections WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SocketConnections_TransID') AND parent_object_id = OBJECT_ID(N'tbl_SocketConnections'))
|
||||
ALTER TABLE tbl_SocketConnections DROP CONSTRAINT FK_tbl_SocketConnections_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SocketConnections WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SocketConnections ADD CONSTRAINT FK_tbl_SocketConnections_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceActions
|
||||
/*
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceActions WHERE transactionID NOT IN (SELECT transactionID FROM tbl_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_WorkspaceActions_TransID') AND parent_object_id = OBJECT_ID(N'tbl_WorkspaceActions'))
|
||||
ALTER TABLE tbl_WorkspaceActions DROP CONSTRAINT FK_tbl_WorkspaceActions_TransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceActions WHERE transactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceActions ADD CONSTRAINT FK_tbl_WorkspaceActions_TransID
|
||||
FOREIGN KEY (TransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- *****************
|
||||
-- Other constraints
|
||||
-- *****************
|
||||
|
||||
-- tbl_ScanDataActions -> tbl_Actions
|
||||
/*
|
||||
IF EXISTS (SELECT * FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_ScanDataActions_ActionID') AND parent_object_id = OBJECT_ID(N'tbl_ScanDataActions'))
|
||||
ALTER TABLE tbl_ScanDataActions DROP CONSTRAINT FK_tbl_ScanDataActions_ActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_ScanDataActions WHERE ActionID NOT IN
|
||||
(SELECT ActionID FROM tbl_Actions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_ScanDataActions ADD CONSTRAINT FK_tbl_ScanDataActions_ActionID
|
||||
FOREIGN KEY (ActionID)
|
||||
REFERENCES tbl_Actions (ActionID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Groups_AuthID') AND parent_object_id = OBJECT_ID(N'tbl_Groups'))
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Actions -> tbl_EventRules
|
||||
-- IF EXISTS (SELECT * FROM tbl_Actions WHERE EventID NOT IN (SELECT EventID FROM tbl_EventRules))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Actions_EventId') AND parent_object_id = OBJECT_ID(N'tbl_Actions'))
|
||||
ALTER TABLE tbl_Actions DROP CONSTRAINT FK_tbl_Actions_EventId;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Actions WHERE EventID NOT IN
|
||||
(SELECT EventID FROM tbl_EventRules);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Actions ADD CONSTRAINT FK_tbl_Actions_EventId
|
||||
FOREIGN KEY (EventID)
|
||||
REFERENCES tbl_EventRules (EventID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_Groups -> tbl_Authentications
|
||||
-- IF EXISTS (SELECT * FROM tbl_Groups WHERE AuthenticationID NOT IN (SELECT AuthenticationID FROM tbl_Authentications))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Groups_AuthID') AND parent_object_id = OBJECT_ID(N'tbl_Groups'))
|
||||
ALTER TABLE tbl_Groups DROP CONSTRAINT FK_tbl_Groups_AuthID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Groups WHERE AuthenticationID NOT IN
|
||||
(SELECT AuthenticationID FROM tbl_Authentications);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_Groups ADD CONSTRAINT FK_tbl_Groups_AuthID
|
||||
FOREIGN KEY (AuthenticationID)
|
||||
REFERENCES tbl_Authentications (AuthenticationID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Emails -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Emails WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SAT_Emails_TxID') AND parent_object_id = OBJECT_ID(N'tbl_SAT_Emails'))
|
||||
ALTER TABLE tbl_SAT_Emails DROP CONSTRAINT FK_tbl_SAT_Emails_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Emails WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Emails ADD CONSTRAINT FK_tbl_SAT_Emails_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_SAT_Files -> tbl_SAT_Transactions
|
||||
-- IF EXISTS (SELECT * FROM tbl_SAT_Files WHERE txid NOT IN (SELECT ID FROM tbl_SAT_Transactions))
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_SAT_Files_TxID') AND parent_object_id = OBJECT_ID(N'tbl_SAT_Files'))
|
||||
ALTER TABLE tbl_SAT_Files DROP CONSTRAINT FK_tbl_SAT_Files_TxID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_SAT_Files WHERE txid NOT IN
|
||||
(SELECT ID FROM tbl_SAT_Transactions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_SAT_Files ADD CONSTRAINT FK_tbl_SAT_Files_TxID
|
||||
FOREIGN KEY (txid)
|
||||
REFERENCES tbl_SAT_Transactions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
-- tbl_WorkspaceParticipants -> tbl_WorkspaceActions
|
||||
-- IF EXISTS (SELECT * FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN (SELECT ID FROM tbl_WorkspaceActions))
|
||||
/*
|
||||
BEGIN
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_WorkspaceParticipants_WorkspaceActionID') AND parent_object_id = OBJECT_ID(N'tbl_WorkspaceParticipants'))
|
||||
ALTER TABLE tbl_WorkspaceParticipants DROP CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_WorkspaceParticipants WHERE WorkspaceActionID NOT IN
|
||||
(SELECT ID FROM tbl_WorkspaceActions);
|
||||
-- Now, add it back with cascade delete enabled
|
||||
ALTER TABLE tbl_WorkspaceParticipants ADD CONSTRAINT FK_tbl_WorkspaceParticipants_WorkspaceActionID
|
||||
FOREIGN KEY (WorkspaceActionID)
|
||||
REFERENCES tbl_WorkspaceActions (ID)
|
||||
ON DELETE CASCADE;
|
||||
END
|
||||
*/
|
||||
|
||||
-- Re-create FK constraint between ParentTransactionID and TransactionID
|
||||
-- Drop constraint
|
||||
IF EXISTS (SELECT * FROM sys.foreign_keys
|
||||
WHERE object_id = OBJECT_ID(N'FK_tbl_Transactions_ParentTransID') AND parent_object_id = OBJECT_ID(N'tbl_Transactions'))
|
||||
ALTER TABLE tbl_Transactions DROP CONSTRAINT FK_tbl_Transactions_ParentTransID;
|
||||
-- Make sure no orphans remaining
|
||||
DELETE FROM tbl_Transactions WHERE ParentTransactionID IS NOT NULL AND ParentTransactionID NOT IN
|
||||
(SELECT transactionID FROM tbl_Transactions);
|
||||
-- Now, add it back without cascade delete enabled
|
||||
ALTER TABLE tbl_Transactions ADD CONSTRAINT FK_tbl_Transactions_ParentTransID
|
||||
FOREIGN KEY (ParentTransactionID)
|
||||
REFERENCES tbl_Transactions (TransactionID)
|
||||
ON DELETE NO ACTION;
|
156
sql/Helper scripts/report_indexes.sql
Normal file
156
sql/Helper scripts/report_indexes.sql
Normal file
@ -0,0 +1,156 @@
|
||||
-- For reports Activity-AS2 Transfers (Detailed) and Activity-AS2 Transfers (Summary)
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AS2Transactions_StartTime' AND object_id = OBJECT_ID('tbl_AS2Transactions'))
|
||||
DROP INDEX IX_tbl_AS2Transactions_StartTime ON tbl_AS2Transactions
|
||||
GO
|
||||
CREATE INDEX IX_tbl_AS2Transactions_StartTime ON tbl_AS2Transactions (StartTime)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_AS2Transactions;
|
||||
GO
|
||||
|
||||
-- For reports Activity-by Permissions Group, Activity-by Users (Detailed),
|
||||
-- Activity-by Users (Summary), Exec Summary, Traffic-Average Transfer Rates by User,
|
||||
-- WebServiceInvokeEventRules-Activity(Detailed)
|
||||
-- Remove IX_tbl_ProtocolCommands_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Time_stamp' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_Time_stamp ON tbl_ProtocolCommands
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Time_stamp_Command_FileName' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_Time_stamp_Command_FileName ON tbl_ProtocolCommands
|
||||
GO
|
||||
CREATE INDEX IX_tbl_ProtocolCommands_Time_stamp_Command_FileName ON tbl_ProtocolCommands (Time_stamp, Command, FileName)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_ProtocolCommands;
|
||||
GO
|
||||
|
||||
-- For reports Traffic - Connections Summary, Traffic-Datewise-hourly Bytes Transferred,
|
||||
-- Traffic-Datewise-IPwiseBytesTransferred, Traffic-Monthwise-IPWise Bytes Transferred,
|
||||
-- Traffic-Protocolwise Connections
|
||||
-- Remove IX_tbl_ProtocolCommands_Site_Name since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Site_Name' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_Site_Name ON tbl_ProtocolCommands
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_Site_Name_Time_stamp' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_Site_Name_Time_stamp ON tbl_ProtocolCommands
|
||||
GO
|
||||
CREATE INDEX IX_tbl_ProtocolCommands_Site_Name_Time_stamp ON tbl_ProtocolCommands (SiteName, Time_stamp)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_ProtocolCommands;
|
||||
GO
|
||||
|
||||
-- For reports Traffic-Most Active IP Connections, Traffic-Most Active IP - Data Transferred
|
||||
-- Remove IX_tbl_ProtocolCommands_TransactionID since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_TransactionID' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_TransactionID ON tbl_ProtocolCommands
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_ProtocolCommands_TransactionID_Time_Stamp_ResultID' AND object_id = OBJECT_ID('tbl_ProtocolCommands'))
|
||||
DROP INDEX IX_tbl_ProtocolCommands_TransactionID_Time_Stamp_ResultID ON tbl_ProtocolCommands
|
||||
GO
|
||||
CREATE INDEX IX_tbl_ProtocolCommands_TransactionID_Time_Stamp_ResultID ON tbl_ProtocolCommands (TransactionID, Time_stamp, ResultID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_ProtocolCommands;
|
||||
GO
|
||||
|
||||
-- For Admin-Audit Log
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_AdminActions_Time_stamp' AND object_id = OBJECT_ID('tbl_AdminActions'))
|
||||
DROP INDEX IX_tbl_AdminActions_Time_stamp ON tbl_AdminActions
|
||||
GO
|
||||
CREATE INDEX IX_tbl_AdminActions_Time_stamp ON tbl_AdminActions (Timestamp)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_AdminActions;
|
||||
GO
|
||||
|
||||
-- For Admin-Authentications
|
||||
-- Remove IX_tbl_Authentications_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_Time_stamp' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX IX_tbl_Authentications_Time_stamp ON tbl_Authentications
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_Time_stamp_Protocol' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX IX_tbl_Authentications_Time_stamp_Protocol ON tbl_Authentications
|
||||
GO
|
||||
CREATE INDEX IX_tbl_Authentications_Time_stamp_Protocol ON tbl_Authentications (Time_stamp, Protocol)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_Authentications;
|
||||
GO
|
||||
|
||||
-- For Troubleshooting-Failed Logins
|
||||
-- Remove IX_tbl_Authentications_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_Time_stamp' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX IX_tbl_Authentications_Time_stamp ON tbl_Authentications
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Authentications_Time_stamp_SiteName_ResultID' AND object_id = OBJECT_ID('tbl_Authentications'))
|
||||
DROP INDEX IX_tbl_Authentications_Time_stamp_SiteName_ResultID ON tbl_Authentications
|
||||
GO
|
||||
CREATE INDEX IX_tbl_Authentications_Time_stamp_SiteName_ResultID ON tbl_Authentications (Time_stamp, SiteName, ResultID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_Authentications;
|
||||
GO
|
||||
|
||||
-- Content Integrity Control
|
||||
-- [Nothing]
|
||||
|
||||
-- Reports: Event Rules (all), Troubleshooting-Event Rules Failuer
|
||||
-- Remove IX_tbl_Actions_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Actions_Time_stamp' AND object_id = OBJECT_ID('tbl_Actions'))
|
||||
DROP INDEX IX_tbl_Actions_Time_stamp ON tbl_Actions
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_Actions_Time_stamp_EventID_TransactionID' AND object_id = OBJECT_ID('tbl_Actions'))
|
||||
DROP INDEX IX_tbl_Actions_Time_stamp_EventID_TransactionID ON tbl_Actions
|
||||
GO
|
||||
CREATE INDEX IX_tbl_Actions_Time_stamp_EventID_TransactionID ON tbl_Actions (Time_stamp, EventID, TransactionID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_Actions;
|
||||
GO
|
||||
|
||||
-- Event Rules - Just Transfers
|
||||
-- Remove IX_tbl_EventRules_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_EventRules_Time_stamp' AND object_id = OBJECT_ID('tbl_EventRules'))
|
||||
DROP INDEX IX_tbl_EventRules_Time_stamp ON tbl_EventRules
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_EventRules_Time_stamp_TransactionID' AND object_id = OBJECT_ID('tbl_EventRules'))
|
||||
DROP INDEX IX_tbl_EventRules_Time_stamp_TransactionID ON tbl_EventRules
|
||||
GO
|
||||
CREATE INDEX IX_tbl_EventRules_Time_stamp_TransactionID ON tbl_EventRules (Time_stamp, TransactionID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_EventRules;
|
||||
GO
|
||||
|
||||
-- For Troubleshooting-Socket Connection Errors
|
||||
-- Remove IX_tbl_SocketConnections_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_Time_stamp' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
DROP INDEX IX_tbl_SocketConnections_Time_stamp ON tbl_SocketConnections
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_SocketConnections_Time_stamp_ResultID' AND object_id = OBJECT_ID('tbl_SocketConnections'))
|
||||
DROP INDEX IX_tbl_SocketConnections_Time_stamp_ResultID ON tbl_SocketConnections
|
||||
GO
|
||||
CREATE INDEX IX_tbl_SocketConnections_Time_stamp_ResultID ON tbl_SocketConnections (Time_stamp, ResultID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_SocketConnections;
|
||||
GO
|
||||
|
||||
-- For Workspaces-Files Picked Up
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_OutlookReport_Type_TransactionDate' AND object_id = OBJECT_ID('tbl_OutlookReport'))
|
||||
DROP INDEX IX_tbl_OutlookReport_Type_TransactionDate ON tbl_OutlookReport
|
||||
GO
|
||||
CREATE INDEX IX_tbl_OutlookReport_Type_TransactionDate ON tbl_OutlookReport (Type, TransactionDate)
|
||||
GO
|
||||
-- For Workspaces-Folders Shared, Unshared reports
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_OutlookReport_WorkspaceID' AND object_id = OBJECT_ID('tbl_OutlookReport'))
|
||||
DROP INDEX IX_tbl_OutlookReport_WorkspaceID ON tbl_OutlookReport
|
||||
GO
|
||||
CREATE INDEX IX_tbl_OutlookReport_WorkspaceID ON tbl_OutlookReport (WorkspaceID)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_OutlookReport;
|
||||
GO
|
||||
|
||||
-- For Workspaces-Folders Shared, Unshared reports
|
||||
-- Remove IX_tbl_WorkspaceActions_Time_stamp since won't be necessary
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_Time_stamp' AND object_id = OBJECT_ID('tbl_WorkspaceActions'))
|
||||
DROP INDEX IX_tbl_WorkspaceActions_Time_stamp ON tbl_WorkspaceActions
|
||||
GO
|
||||
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_tbl_WorkspaceActions_Time_stamp_Action' AND object_id = OBJECT_ID('tbl_WorkspaceActions'))
|
||||
DROP INDEX IX_tbl_WorkspaceActions_Time_stamp_Action ON tbl_WorkspaceActions
|
||||
GO
|
||||
CREATE INDEX IX_tbl_WorkspaceActions_Time_stamp_Action ON tbl_WorkspaceActions (Time_stamp, Action)
|
||||
GO
|
||||
UPDATE STATISTICS tbl_WorkspaceActions;
|
||||
GO
|
67
sql/Purge Fact Tables.sql
Normal file
67
sql/Purge Fact Tables.sql
Normal file
@ -0,0 +1,67 @@
|
||||
/*
|
||||
Script by: Jonathan Branan, 8-10-2020
|
||||
|
||||
Purpose: To trim uneeded data from fact tables in EFT's database. A simple function that allows a specification of 'daysSaved'.
|
||||
|
||||
DISCLAIMER: Use at your own risk. Globalscape does not accept ANY responsiblity for any unexpected outcomes as a result of use of this script.
|
||||
|
||||
Version 1.0 - Added before and after row counts, status updates and set default retention period to match EFT's Purge Script.
|
||||
*/
|
||||
|
||||
DECLARE @count INT
|
||||
DECLARE @daysSaved DATETIME2
|
||||
--Set the integer "60" to the amount of days you would like to retain in the fact tables.
|
||||
SET @daysSaved = DATEADD(DAY, -60, GETDATE())
|
||||
|
||||
|
||||
PRINT 'Fact Table Purge Version 1.0'
|
||||
PRINT ''
|
||||
PRINT 'Row count of Fact Tables before the purge:'
|
||||
PRINT ''
|
||||
|
||||
--Initial Row Count
|
||||
select @count = count(*) from [dbo].[tbl_Report_Exec_Summ] PRINT ' tbl_Report_Exec_Summ count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic1] PRINT ' tbl_Report_Traffic1 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic2] PRINT ' tbl_Report_Traffic2 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic3] PRINT ' tbl_Report_Traffic3 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic4] PRINT ' tbl_Report_Traffic4 count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging Fact Tables...'
|
||||
PRINT ''
|
||||
|
||||
--Purge Fact Tables
|
||||
PRINT 'Purging from tbl_Report_Exec_Summ...'
|
||||
DELETE FROM tbl_Report_Exec_Summ WHERE DayOfRecord < @daysSaved
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging from tbl_Report_Traffic1...'
|
||||
DELETE FROM tbl_Report_Traffic1 WHERE DayOfRecord < @daysSaved
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging from tbl_Report_Traffic2...'
|
||||
DELETE FROM tbl_Report_Traffic2 WHERE DayOfRecord < @daysSaved
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging from tbl_Report_Traffic3...'
|
||||
DELETE FROM tbl_Report_Traffic3 WHERE DayOfRecord < @daysSaved
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging from tbl_Report_Traffic4...'
|
||||
DELETE FROM tbl_Report_Traffic4 WHERE DayOfRecord < @daysSaved
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Purging Complete'
|
||||
PRINT ''
|
||||
PRINT 'Row counts of Fact Tables after the purge:'
|
||||
PRINT ''
|
||||
|
||||
--Final Row Count
|
||||
select @count = count(*) from [dbo].[tbl_Report_Exec_Summ] PRINT ' tbl_Report_Exec_Summ count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic1] PRINT ' tbl_Report_Traffic1 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic2] PRINT ' tbl_Report_Traffic2 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic3] PRINT ' tbl_Report_Traffic3 count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from [dbo].[tbl_Report_Traffic4] PRINT ' tbl_Report_Traffic4 count = ' +CAST(@count AS NVARCHAR)
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Done'
|
749
sql/PurgeSQLEFTData.sql
Normal file
749
sql/PurgeSQLEFTData.sql
Normal file
@ -0,0 +1,749 @@
|
||||
-- EFT Purging Script
|
||||
-- Goal: Allow customers to purge data from EFT
|
||||
-- Change Log:
|
||||
-- 0.1: Set batch size at 100,000
|
||||
-- Removed SELECT and extra PRINTT statements.
|
||||
-- 0.2: Changed to purge up to 60 days per customer request
|
||||
-- 0.3: Modified script to not assume cascading deletes and to
|
||||
-- explicitly delete from all tables
|
||||
-- Modified script to default 'purgesize' to 10,000
|
||||
-- instead of 1,000
|
||||
-- 0.4 Added AS2 and SAT purging
|
||||
-- 0.5 Subset table wasn't being dropped.
|
||||
PRINT 'Script started at: ' + CAST(CURRENT_TIMESTAMP AS NVARCHAR)
|
||||
USE EFTDB
|
||||
|
||||
-- This procedure will print the version of this script
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactionsVersion') IS NOT NULL
|
||||
DROP PROC dbo.sp_PurgeEFTTransactionsVersion
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactionsVersion
|
||||
AS
|
||||
PRINT 'GlobalSCAPE, Inc. Purge Script Version 0.5'
|
||||
GO
|
||||
|
||||
-- This procedure delete EFT transactions from a given table.
|
||||
IF OBJECT_ID('dbo.sp_RemoveTxnsFromTable') IS NOT NULL
|
||||
DROP PROC dbo.sp_RemoveTxnsFromTable
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_RemoveTxnsFromTable @txns_id_table_name nvarchar(200),
|
||||
@tblname nvarchar(200),
|
||||
@debug bit = 0
|
||||
AS
|
||||
DECLARE @sql nvarchar(4000),
|
||||
@activeTableName nvarchar(220)
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
SET @activeTableName = quotename(N'tbl_' + @tblname)
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Deleting Transactions from Table: ' + @activeTableName
|
||||
END
|
||||
|
||||
-- Delete the data from the active table
|
||||
SET @sql =
|
||||
'DELETE FROM ' + @activeTableName + ' ' +
|
||||
'WHERE TransactionID IN ' +
|
||||
'(' +
|
||||
'SELECT TransactionID ' +
|
||||
'FROM ' + @txns_id_table_name +
|
||||
')'
|
||||
|
||||
IF @debug = 1 PRINT @sql
|
||||
EXEC sp_executesql @sql
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
GO
|
||||
|
||||
-- This procedure delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_RemoveTxns') IS NOT NULL
|
||||
DROP PROC dbo.sp_RemoveTxns
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_RemoveTxns @txns_id_table_name nvarchar(200),
|
||||
@debug bit = 0
|
||||
AS
|
||||
|
||||
-- We want to wrap these deletes in a transactions so that we don't end
|
||||
-- up with orphaned rows.
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- To verify that all children were truly deleted, also explicitly
|
||||
-- delete from their tables.
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'AdminActions', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'ProtocolCommands', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'Actions', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'EventRules', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'ClientOperations', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'SocketConnections', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'Authentications', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'CustomCommands', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'OutlookReport', @debug
|
||||
|
||||
-- Remove from the transactions table
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'Transactions', @debug
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
GO
|
||||
|
||||
|
||||
-- This procedure will delete AS2 transactions.
|
||||
IF OBJECT_ID('dbo.sp_RemoveAS2Txns') IS NOT NULL
|
||||
DROP PROC dbo.sp_RemoveAS2Txns
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE sp_RemoveAS2Txns @txns_id_table_name nvarchar(200),
|
||||
@debug bit = 0
|
||||
AS
|
||||
|
||||
-- We want to wrap these deletes in a transactions so that we don't end
|
||||
-- up with orphaned rows.
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION
|
||||
|
||||
-- To verify that all children were truly deleted, also explicitly
|
||||
-- delete from their tables.
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'AS2Actions', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'AS2Files', @debug
|
||||
EXEC sp_RemoveTxnsFromTable @txns_id_table_name, N'AS2Transactions', @debug
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
GO
|
||||
|
||||
-- This procedure will delete EFT transactions from a all tables.
|
||||
IF OBJECT_ID('dbo.sp_PurgeEFTTransactions') IS NOT NULL BEGIN
|
||||
DROP PROC dbo.sp_PurgeEFTTransactions
|
||||
END
|
||||
GO
|
||||
|
||||
-- By default, this procedure will purge data from 1990 to 60 days ago.
|
||||
CREATE PROCEDURE sp_PurgeEFTTransactions @startTime datetime = NULL,
|
||||
@stopTime datetime = NULL,
|
||||
@purgeSize numeric = NULL,
|
||||
@debug bit = 0
|
||||
AS
|
||||
|
||||
EXEC sp_PurgeEFTTransactionsVersion
|
||||
|
||||
DECLARE @iteration numeric
|
||||
SET @iteration = 0
|
||||
|
||||
DECLARE @deleteHappened numeric
|
||||
SET @deleteHappened = 1
|
||||
|
||||
WHILE @deleteHappened = 1
|
||||
BEGIN
|
||||
SET @deleteHappened = 0
|
||||
SET @iteration = @iteration + 1
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Script iteration: ' + CAST(@iteration as NVARCHAR)
|
||||
|
||||
BEGIN TRY
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF @startTime IS NULL BEGIN
|
||||
set @startTime = '19700101 00:00:00'
|
||||
END
|
||||
|
||||
IF @stopTime IS NULL BEGIN
|
||||
SET @stopTime = DATEADD(DAY, -60, GETDATE())
|
||||
END
|
||||
|
||||
IF @purgeSize IS NULL BEGIN
|
||||
set @purgeSize = 10000
|
||||
END
|
||||
|
||||
PRINT 'Purging Transactions from ' + CAST(@startTime as NVARCHAR) + ' to ' +
|
||||
CAST(@stopTime AS NVARCHAR) + ' in batches of ' + CAST(@purgeSize AS NVARCHAR)
|
||||
|
||||
DECLARE @tbl_TablesToPurge TABLE
|
||||
(
|
||||
[TableName] NVARCHAR(400) NOT NULL
|
||||
)
|
||||
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_AdminActions')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_ProtocolCommands')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_Actions')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_EventRules')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_ClientOperations')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_SocketConnections')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_Authentications')
|
||||
INSERT @tbl_TablesToPurge ([TableName]) VALUES (N'tbl_CustomCommands')
|
||||
|
||||
-- Create a cursor to walk through each table name
|
||||
DECLARE @tableName NVARCHAR(400)
|
||||
|
||||
DECLARE tablename_cursor CURSOR FOR
|
||||
SELECT [TableName]
|
||||
FROM @tbl_TablesToPurge
|
||||
|
||||
OPEN tablename_cursor;
|
||||
|
||||
-- Perform the first fetch and store the values in variables.
|
||||
-- Note: The variables are in the same order as the columns
|
||||
-- in the SELECT statement.
|
||||
FETCH NEXT FROM tablename_cursor INTO @tableName
|
||||
|
||||
CREATE TABLE #tbl_TxnsToBePurged
|
||||
(
|
||||
TransactionID numeric,
|
||||
CONSTRAINT [PK_tbl_TxnsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
TransactionID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
CREATE TABLE #tbl_SubsetTxnsToBePurged
|
||||
(
|
||||
TransactionID numeric,
|
||||
CONSTRAINT [PK_tbl_SubsetTxnsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
TransactionID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- Now we'll remove the rows from the active tables.
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Now purging transactions from table ' + @tableName
|
||||
END
|
||||
|
||||
-- Unfortunately, the name of the TimeStamp column is not the same
|
||||
-- for every table. So, I've built this logic to generate the correct
|
||||
-- name for the corresponding table
|
||||
DECLARE @tsColumnName NVARCHAR(400)
|
||||
SET @tsColumnName = 'Time_stamp'
|
||||
|
||||
IF @tableName = 'tbl_AdminActions' BEGIN
|
||||
SET @tsColumnName = 'Timestamp'
|
||||
END
|
||||
|
||||
DECLARE @sql nvarchar(4000)
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_TxnsToBePurged ' +
|
||||
'SELECT DISTINCT(TransactionID) TransactionID ' +
|
||||
'FROM ' + @tableName + ' ' +
|
||||
'WHERE ' + @tsColumnName + ' BETWEEN @lstartTime AND @lstopTime ' +
|
||||
'GROUP BY TransactionID'
|
||||
|
||||
EXEC sp_executesql @sql, N'@lstartTime datetime, @lstopTime datetime', @startTime, @stopTime
|
||||
|
||||
DECLARE @resultCount numeric
|
||||
DECLARE @lastResultCount numeric
|
||||
SET @lastResultCount = -1
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_TxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
WHILE ((@resultCount > 0) AND (@resultCount != @lastResultCount)) BEGIN
|
||||
|
||||
SET @lastResultCount = @resultCount
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_SubsetTxnsToBePurged ' +
|
||||
'SELECT a.TransactionID TransactionID ' +
|
||||
'FROM (SELECT TOP ' + CAST(@purgeSize AS NVARCHAR) + ' #tbl_TxnsToBePurged.TransactionID FROM #tbl_TxnsToBePurged) a ' +
|
||||
'LEFT JOIN tbl_Transactions tempTable ON a.TransactionID = tempTable.ParentTransactionID ' +
|
||||
'WHERE tempTable.ParentTransactionID IS NULL ' +
|
||||
'ORDER BY a.TransactionID'
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'SQL to determine PurgeSet: ' + @sql
|
||||
END
|
||||
|
||||
EXEC sp_executesql @sql
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_SubsetTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number Txns To Be Purged This Round: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
EXEC sp_RemoveTxns N'#tbl_SubsetTxnsToBePurged', @debug
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted transactions from tbl_Transactions and associated tables'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_TxnsToBePurged
|
||||
WHERE TransactionID IN
|
||||
(
|
||||
SELECT #tbl_SubsetTxnsToBePurged.TransactionID TransactionID
|
||||
FROM #tbl_SubsetTxnsToBePurged
|
||||
)
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted transactions from #tbl_TxnsToBePurged'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SubsetTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Determing number of rows remaining to be Purged.'
|
||||
END
|
||||
|
||||
IF (@resultCount > 0) BEGIN
|
||||
SET @deleteHappened = 1
|
||||
END
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_TxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'BOT of Loop: Total Number Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
END
|
||||
|
||||
-- We want to delete all transactions from the temporary table
|
||||
DELETE FROM #tbl_TxnsToBePurged
|
||||
|
||||
-- This is executed as long as the previous fetch succeeds.
|
||||
FETCH NEXT FROM tablename_cursor INTO @tableName
|
||||
END
|
||||
|
||||
CLOSE tablename_cursor;
|
||||
|
||||
--
|
||||
-- Purge AS2 transactions
|
||||
--
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_TxnsToBePurged ' +
|
||||
'SELECT DISTINCT(TransactionID) TransactionID ' +
|
||||
'FROM tbl_AS2Transactions ' +
|
||||
'WHERE CompleteTime BETWEEN @lstartTime AND @lstopTime ' +
|
||||
'GROUP BY TransactionID'
|
||||
|
||||
EXEC sp_executesql @sql, N'@lstartTime datetime, @lstopTime datetime', @startTime, @stopTime
|
||||
|
||||
SET @lastResultCount = -1
|
||||
SELECT @resultCount = count(*) FROM #tbl_TxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number AS2 Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
WHILE ((@resultCount > 0) AND (@resultCount != @lastResultCount)) BEGIN
|
||||
|
||||
SET @lastResultCount = @resultCount
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_SubsetTxnsToBePurged ' +
|
||||
'SELECT TOP ' + CAST(@purgeSize AS NVARCHAR) + ' #tbl_TxnsToBePurged.TransactionID ' +
|
||||
'FROM #tbl_TxnsToBePurged ' +
|
||||
'ORDER BY TransactionID'
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'SQL to determine AS2 PurgeSet: ' + @sql
|
||||
END
|
||||
|
||||
EXEC sp_executesql @sql
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_SubsetTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number AS2 Txns To Be Purged This Round: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
EXEC sp_RemoveAS2Txns N'#tbl_SubsetTxnsToBePurged', @debug
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted AS2 transactions'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_TxnsToBePurged
|
||||
WHERE TransactionID IN
|
||||
(
|
||||
SELECT #tbl_SubsetTxnsToBePurged.TransactionID TransactionID
|
||||
FROM #tbl_SubsetTxnsToBePurged
|
||||
)
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted transactions from #tbl_TxnsToBePurged'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SubsetTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Determing number of rows remaining to be Purged.'
|
||||
END
|
||||
|
||||
IF (@resultCount > 0) BEGIN
|
||||
SET @deleteHappened = 1
|
||||
END
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_TxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'BOT of AS2 Loop: Total Number Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_TxnsToBePurged
|
||||
|
||||
|
||||
--
|
||||
-- Purge SAT transactions
|
||||
--
|
||||
|
||||
CREATE TABLE #tbl_SATTxnsToBePurged
|
||||
(
|
||||
ID numeric,
|
||||
CONSTRAINT [PK_tbl_SATTxnsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
ID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
CREATE TABLE #tbl_SubsetSATTxnsToBePurged
|
||||
(
|
||||
ID numeric,
|
||||
CONSTRAINT [PK_tbl_SubsetSATTxnsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
ID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_SATTxnsToBePurged ' +
|
||||
'SELECT DISTINCT(ID) ID ' +
|
||||
'FROM tbl_SAT_Transactions ' +
|
||||
'WHERE time_stamp BETWEEN @lstartTime AND @lstopTime ' +
|
||||
'GROUP BY ID'
|
||||
|
||||
EXEC sp_executesql @sql, N'@lstartTime datetime, @lstopTime datetime', @startTime, @stopTime
|
||||
|
||||
SET @lastResultCount = -1
|
||||
SELECT @resultCount = count(*) FROM #tbl_SATTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number SAT Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
WHILE ((@resultCount > 0) AND (@resultCount != @lastResultCount)) BEGIN
|
||||
|
||||
SET @lastResultCount = @resultCount
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_SubsetSATTxnsToBePurged ' +
|
||||
'SELECT TOP ' + CAST(@purgeSize AS NVARCHAR) + ' #tbl_SATTxnsToBePurged.ID ' +
|
||||
'FROM #tbl_SATTxnsToBePurged ' +
|
||||
'ORDER BY ID'
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'SQL to determine SAT PurgeSet: ' + @sql
|
||||
END
|
||||
|
||||
EXEC sp_executesql @sql
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_SubsetSATTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number SAT Txns To Be Purged This Round: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE FROM tbl_SAT_Emails
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT ID
|
||||
FROM #tbl_SubsetSATTxnsToBePurged
|
||||
)
|
||||
|
||||
DELETE FROM tbl_SAT_Files
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT ID
|
||||
FROM #tbl_SubsetSATTxnsToBePurged
|
||||
)
|
||||
|
||||
DELETE FROM tbl_SAT_Transactions
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT ID
|
||||
FROM #tbl_SubsetSATTxnsToBePurged
|
||||
)
|
||||
|
||||
COMMIT TRANSACTION
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted SAT transactions'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SATTxnsToBePurged
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT #tbl_SubsetSATTxnsToBePurged.ID ID
|
||||
FROM #tbl_SubsetSATTxnsToBePurged
|
||||
)
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted transactions from #tbl_TxnsToBePurged'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SubsetTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Determing number of rows remaining to be Purged.'
|
||||
END
|
||||
|
||||
IF (@resultCount > 0) BEGIN
|
||||
SET @deleteHappened = 1
|
||||
END
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_SATTxnsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'BOT of SAT Loop: Total Number Txns To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SATTxnsToBePurged
|
||||
|
||||
|
||||
--
|
||||
-- Purge AWESteps transactions
|
||||
--
|
||||
|
||||
CREATE TABLE #tbl_AWEStepsToBePurged
|
||||
(
|
||||
ID numeric,
|
||||
CONSTRAINT [PK_tbl_AWEStepsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
ID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
CREATE TABLE #tbl_SubsetAWEStepsToBePurged
|
||||
(
|
||||
ID numeric,
|
||||
CONSTRAINT [PK_tbl_SubsetAWEStepsToBePurged] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
ID ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_AWEStepsToBePurged ' +
|
||||
'SELECT DISTINCT(ID) ID ' +
|
||||
'FROM tbl_AWESteps ' +
|
||||
'WHERE time_stamp BETWEEN @lstartTime AND @lstopTime ' +
|
||||
'GROUP BY ID'
|
||||
|
||||
EXEC sp_executesql @sql, N'@lstartTime datetime, @lstopTime datetime', @startTime, @stopTime
|
||||
|
||||
SET @lastResultCount = -1
|
||||
SELECT @resultCount = count(*) FROM #tbl_AWEStepsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number AWESteps To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
WHILE ((@resultCount > 0) AND (@resultCount != @lastResultCount)) BEGIN
|
||||
|
||||
SET @lastResultCount = @resultCount
|
||||
|
||||
SET @sql =
|
||||
'INSERT INTO #tbl_SubsetAWEStepsToBePurged ' +
|
||||
'SELECT TOP ' + CAST(@purgeSize AS NVARCHAR) + ' #tbl_AWEStepsToBePurged.ID ' +
|
||||
'FROM #tbl_AWEStepsToBePurged ' +
|
||||
'ORDER BY ID'
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'SQL to determine AWESteps PurgeSet: ' + @sql
|
||||
END
|
||||
|
||||
EXEC sp_executesql @sql
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_SubsetAWEStepsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Total Number AWESteps To Be Purged This Round: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE FROM tbl_AWESteps
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT ID
|
||||
FROM #tbl_SubsetAWEStepsToBePurged
|
||||
)
|
||||
|
||||
COMMIT TRANSACTION
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted AWESteps'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_AWEStepsToBePurged
|
||||
WHERE ID IN
|
||||
(
|
||||
SELECT #tbl_AWEStepsToBePurged.ID ID
|
||||
FROM #tbl_SubsetAWEStepsToBePurged
|
||||
)
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Successfully deleted rows from #tbl_AWEStepsToBePurged'
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_SubsetAWEStepsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'Determing number of rows remaining to be Purged.'
|
||||
END
|
||||
|
||||
IF (@resultCount > 0) BEGIN
|
||||
SET @deleteHappened = 1
|
||||
END
|
||||
|
||||
SELECT @resultCount = count(*) FROM #tbl_AWEStepsToBePurged
|
||||
|
||||
IF @debug = 1 BEGIN
|
||||
PRINT 'BOT of AWESteps Loop: Total Number Rows To Be Purged: ' + CAST(@resultCount AS NVARCHAR)
|
||||
END
|
||||
END
|
||||
|
||||
DELETE FROM #tbl_AWEStepsToBePurged
|
||||
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- Whoops, there was an error
|
||||
IF @@TRANCOUNT > 0 BEGIN
|
||||
ROLLBACK
|
||||
END
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
|
||||
-- Regardless of whether there was an error, we need to
|
||||
-- remove the temporary table and dealloate the cursor
|
||||
-- we created.
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_TxnsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_SubsetTxnsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DEALLOCATE id_cursor;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DEALLOCATE tablename_cursor;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
--
|
||||
-- drop sat and AWESteps temp tables
|
||||
--
|
||||
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_SATTxnsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_SubsetSATTxnsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_AWEStepsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
BEGIN TRY
|
||||
DROP TABLE #tbl_SubsetAWEStepsToBePurged
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
END CATCH
|
||||
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
SET STATISTICS TIME OFF
|
||||
EXEC sp_PurgeEFTTransactions NULL, NULL, 100000, 1
|
||||
SET STATISTICS TIME OFF
|
||||
|
||||
|
||||
PRINT ''
|
||||
PRINT 'Script completed at: ' + CAST(CURRENT_TIMESTAMP AS NVARCHAR)
|
||||
|
||||
GO
|
34
sql/SQL_File_Import.ps1
Normal file
34
sql/SQL_File_Import.ps1
Normal file
@ -0,0 +1,34 @@
|
||||
<#
|
||||
Sql Import Script
|
||||
|
||||
Keith Lowery, Erich Leenheer, Jonathan Branan
|
||||
|
||||
This script is provided without warranty. Globalscape does not accept
|
||||
responsibility for any unexpected outcomes that result from use of this script.
|
||||
|
||||
Version 1.0 Added variables and checking for open sql connections
|
||||
Version 1.1 Added comments
|
||||
#>
|
||||
|
||||
# SQL Instance
|
||||
$DBServer = "192.168.102.18\Globalscape"
|
||||
|
||||
#Database Name
|
||||
$DBName = "eft1"
|
||||
|
||||
#Folder where the .sql files are stored
|
||||
$databasefolder = "C:\Temp\sql"
|
||||
|
||||
|
||||
#Connect to SQL Server
|
||||
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
|
||||
$sqlConnection.ConnectionString= "Server=$DBServer;Database=$DBName;Integrated Security=True;"
|
||||
$sqlConnection.Open()
|
||||
if ($sqlConnection.State -ne [Data.ConnectionState]::Open) {
|
||||
"Connection to DB is not open."
|
||||
Exit
|
||||
}
|
||||
Get-ChildItem $databaseFolder -Filter *.sql -Recurse | ForEach-Object { sqlcmd -S $DBServer -d $DBName -E -i $_.FullName }
|
||||
if ($sqlConnection.State -eq [Data.ConnectionState]::Open) {
|
||||
$sqlConnection.Close()
|
||||
}
|
3
sql/client operations query.sql
Normal file
3
sql/client operations query.sql
Normal file
@ -0,0 +1,3 @@
|
||||
SELECT *
|
||||
FROM tbl_ClientOperations
|
||||
WHERE Protocol = 'AS2' AND Operation = 'UPLOAD_MOVE' AND LocalPath LIKE '%%' AND BytesTransferred LIKE '0' --AND Time_stamp > '2020-04-1' AND Time_stamp < '2020-04-2'
|
63
sql/eftArmGetSettings.ps1
Normal file
63
sql/eftArmGetSettings.ps1
Normal file
@ -0,0 +1,63 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Use EFT's COM interface to configure ARM settings for auditing and reporting.
|
||||
|
||||
.DESCRIPTION
|
||||
Use EFT's COM interface to retrieve ARM settings
|
||||
|
||||
.PARAMETER serverName
|
||||
|
||||
.PARAMETER eftAdminPort
|
||||
|
||||
.PARAMETER authMethod
|
||||
|
||||
.PARAMETER eftAdminName
|
||||
|
||||
.PARAMETER eftAdminPassword
|
||||
|
||||
#>
|
||||
|
||||
param(
|
||||
[Parameter(Mandatory=$False)][string]$serverName = "localhost",
|
||||
[Parameter(Mandatory=$False)][int]$eftAdminPort = 1100,
|
||||
[Parameter(Mandatory=$False)][int]$authMethod = 1,
|
||||
[Parameter(Mandatory=$False)][string]$eftAdminName = "",
|
||||
[Parameter(Mandatory=$False)][string]$eftAdminPassword = ""
|
||||
)
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
# login as admin
|
||||
#------------------------------------------------------------
|
||||
|
||||
try {
|
||||
$oServer = New-Object -ComObject 'SFTPComInterface.CIServer'
|
||||
$oServer.ConnectEx( $serverName, $eftAdminPort, $authMethod, $eftAdminName, $eftAdminPassword );
|
||||
Write-Host "connected"
|
||||
}
|
||||
catch {
|
||||
$errorMessage = $_.Exception.Message;
|
||||
Write-Host "failed to connect to server ${serverName}: ${errorMessage}"
|
||||
Exit;
|
||||
}
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
# get ARM settings
|
||||
#------------------------------------------------------------
|
||||
|
||||
Write-Output ("ARMServerName: {0}" -f $oServer.ARMServerName)
|
||||
Write-Output ("ARMDatabaseName: {0}" -f $oServer.ARMDatabaseName)
|
||||
Write-Output ("ARMUserName: {0}" -f $oServer.ARMUserName)
|
||||
Write-Output ("ARMPassword: {0}" -f $oServer.ARMPassword)
|
||||
Write-Output ("ARMDatabaseType: {0}" -f $oServer.ARMDatabaseType)
|
||||
Write-Output ("ARMAuthenticationType: {0}" -f $oServer.ARMAuthenticationType)
|
||||
|
||||
#------------------------------------------------------------
|
||||
# close resources
|
||||
#------------------------------------------------------------
|
||||
|
||||
$oServer.Close()
|
||||
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($oServer) | out-null
|
||||
Remove-Variable oServer
|
||||
|
43
sql/fastpurge modified.sql
Normal file
43
sql/fastpurge modified.sql
Normal file
@ -0,0 +1,43 @@
|
||||
-- [Optional] Set Database Recovery Mode to Simple
|
||||
-- [Optional] Comment out lines 20-27 from sp_RemoveTxns (these seem unnecessary since the auxiliary tables are cleaned up by their cascade delete rule)
|
||||
|
||||
USE jonathan27
|
||||
GO
|
||||
|
||||
-- CREATE INDEXES TO SPEED UP TRANSACTION PURGE
|
||||
-- Note that these commands took appromimately 2 minutes 30 seconds to complete in total.
|
||||
-- This IX_tbl_Transactions_ParentTransactionID index provides the most significant performance improvement
|
||||
-- because otherwise for each record being deleted it would have to perform a full table scan to find any records
|
||||
-- that have it as a parent. The table scan is likely to be very slow when tbl_Transactions is large. With this
|
||||
-- index the query can do an index seek which is a much faster operation.
|
||||
CREATE NONCLUSTERED INDEX IX_tbl_Transactions_ParentTransactionID
|
||||
ON [dbo].[tbl_Transactions] ([ParentTransactionID])
|
||||
GO
|
||||
|
||||
CREATE NONCLUSTERED INDEX IX_tbl_ProtocolCommands_TransactionID
|
||||
ON [dbo].[tbl_ProtocolCommands] ([TransactionID])
|
||||
INCLUDE ([ProtocolCommandID])
|
||||
GO
|
||||
|
||||
CREATE NONCLUSTERED INDEX IX_tbl_SocketConnections_TransactionID
|
||||
ON [dbo].[tbl_SocketConnections] ([TransactionID])
|
||||
INCLUDE ([SocketID])
|
||||
GO
|
||||
|
||||
-- PERFORM PURGE
|
||||
DECLARE @return_value int
|
||||
DECLARE @stopTimetemp DATETIME2
|
||||
SET @stopTimetemp = DATEADD(DAY, -60, GETDATE())
|
||||
EXEC @return_value = [dbo].[sp_PurgeEFTTransactions]
|
||||
@startTime = N'19700101', -- Set to desired start time
|
||||
@stopTime = @stopTimetemp, -- Set to desired stop time
|
||||
@purgeSize = NULL,
|
||||
@debug = 0
|
||||
|
||||
SELECT 'Return Value' = @return_value
|
||||
|
||||
-- DELETE INDEXES CREATED TO SPEED UP PURGE
|
||||
DROP INDEX IX_tbl_Transactions_ParentTransactionID ON [dbo].[tbl_Transactions]
|
||||
DROP INDEX IX_tbl_ProtocolCommands_TransactionID ON [dbo].[tbl_ProtocolCommands]
|
||||
DROP INDEX IX_tbl_SocketConnections_TransactionID ON [dbo].[tbl_SocketConnections]
|
||||
GO
|
188
sql/insight/SQL cleanup.sql
Normal file
188
sql/insight/SQL cleanup.sql
Normal file
@ -0,0 +1,188 @@
|
||||
-- ******************** WARNING ********************
|
||||
-- EFT is about to upgrade your database! If necessary please check with your database administrator before proceeding.
|
||||
--
|
||||
-- This script will add 3 stored procedures, you will have to call the procedures manually
|
||||
-- Samples of how to run the stored procedures is located at the end of this script
|
||||
|
||||
-- USE EFTInsight
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- sp_countEFTInsightRows
|
||||
-- This stored procedure will count the number of rows.
|
||||
--
|
||||
-- Parameters
|
||||
-- @DaystoKeep - default is 0, if set to a value greater than 0 the procedure will also show how many rows will be deleted
|
||||
CREATE PROCEDURE sp_countEFTInsightRows @DaystoKeep int = 0
|
||||
AS
|
||||
|
||||
DECLARE @DateToPurgeTo DATETIME
|
||||
-- If @DaystoKeep = 0, then keep everything
|
||||
IF @DaystoKeep = 0 OR @DaystoKeep IS NULL
|
||||
BEGIN
|
||||
SELECT 'Action' as tableName, count(1) AS rows, MIN([timestamp]) as oldestRow FROM Action
|
||||
UNION ALL
|
||||
SELECT 'Authentication', count(1), MIN([timestamp]) FROM Authentication
|
||||
UNION ALL
|
||||
SELECT 'AweTask', count(1), MIN([started]) FROM AweTask
|
||||
UNION ALL
|
||||
SELECT 'EventRule', count(1), MIN([timestamp]) FROM EventRule
|
||||
UNION ALL
|
||||
SELECT 'Evaluation', count(1), MIN([EvaluateeStartDate]) FROM Evaluation
|
||||
UNION ALL
|
||||
SELECT 'LogEntry', count(1), MIN([entrytime]) FROM LogEntry
|
||||
UNION ALL
|
||||
SELECT 'Message', count(1), MIN([created]) FROM Message
|
||||
UNION ALL
|
||||
SELECT 'Transfer', count(1), MIN([timestamp]) FROM Transfer
|
||||
ORDER BY rows DESC
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @DaystoKeep = @DaystoKeep * -1; -- e.g. 60 becomes -60
|
||||
|
||||
SET @DateToPurgeTo = DATEADD(day,@DaystoKeep,GetDate())
|
||||
|
||||
SELECT 'Action' as tableName, count(1) AS rows, MIN([timestamp]) as oldestRow, sum(CASE WHEN [timestamp] < @DateToPurgeTo THEN 1 ELSE 0 END ) as rowsOlderThanCutOff FROM Action
|
||||
UNION ALL
|
||||
SELECT 'Authentication', count(1), MIN([timestamp]), sum(CASE WHEN [timestamp] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM Authentication
|
||||
UNION ALL
|
||||
SELECT 'AweTask', count(1), MIN([started]), sum(CASE WHEN [started] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM AweTask
|
||||
UNION ALL
|
||||
SELECT 'EventRule', count(1), MIN([timestamp]), sum(CASE WHEN [timestamp] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM EventRule
|
||||
UNION ALL
|
||||
SELECT 'Evaluation', count(1), MIN([EvaluateeStartDate]), sum(CASE WHEN [EvaluateeStartDate] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM Evaluation
|
||||
UNION ALL
|
||||
SELECT 'LogEntry', count(1), MIN([entrytime]), sum(CASE WHEN [entrytime] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM LogEntry
|
||||
UNION ALL
|
||||
SELECT 'Message', count(1), MIN([created]), sum(CASE WHEN [created] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM Message
|
||||
UNION ALL
|
||||
SELECT 'Transfer', count(1), MIN([timestamp]), sum(CASE WHEN [timestamp] < @DateToPurgeTo THEN 1 ELSE 0 END ) FROM Transfer
|
||||
ORDER BY rows DESC
|
||||
END
|
||||
|
||||
GO
|
||||
|
||||
-- sp_purgeMarkedForDeletion
|
||||
-- This stored procedure will purge all rows that have the column MarkedForDeletion set to 1
|
||||
create Procedure [dbo].[sp_purgeMarkedForDeletion]
|
||||
AS
|
||||
BEGIN
|
||||
|
||||
DELETE FROM [dbo].[Action] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Authentication] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[AweTask] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Configuration] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Evaluation] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Expectation] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[ExpectationDashboard] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[License] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[LogEntry] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Message] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Queue] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[SecurityPrincipal] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Server] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Session] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Site] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[TableSyncStatus] WHERE [MarkedForDeletion] = 1
|
||||
DELETE FROM [dbo].[Transfer] WHERE [MarkedForDeletion] = 1
|
||||
|
||||
END;
|
||||
GO
|
||||
|
||||
-- sp_purgeEFTInsight
|
||||
-- This stored procedure will delete rows older than number of days specified by @DaystoKeep
|
||||
--
|
||||
-- Parameters
|
||||
-- @DaystoKeep - default is 180, the procedure will purge all rows older than @DaystoKeep old
|
||||
-- @debug - default is 0, if set to 1 the procedure will show some debug functions while running
|
||||
CREATE PROCEDURE sp_purgeEFTInsight @DaystoKeep int = 180,
|
||||
@debug bit = 0
|
||||
AS
|
||||
|
||||
DECLARE @DateToPurgeTo DATETIME
|
||||
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' sp_PurgeEFTInsight started';
|
||||
|
||||
-- If @DaystoKeep = 0, then purge only older than 40 years
|
||||
IF @DaystoKeep = 0 OR @DaystoKeep IS NULL
|
||||
SET @DaystoKeep = -15000; -- Go back 40 years
|
||||
ELSE
|
||||
SET @DaystoKeep = @DaystoKeep * -1; -- e.g. 60 becomes -60
|
||||
|
||||
SET @DateToPurgeTo = DATEADD(day,@DaystoKeep,GetDate())
|
||||
|
||||
BEGIN TRY
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for Action about to be purged';
|
||||
DELETE FROM [Action] WHERE [Timestamp] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for Authentication about to be purged';
|
||||
DELETE FROM [Authentication] WHERE [Timestamp] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for AweTask about to be purged';
|
||||
DELETE FROM [AweTask] WHERE [started] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for EventRule about to be purged';
|
||||
DELETE FROM [EventRule] WHERE [Timestamp] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for Evaluation about to be purged';
|
||||
DELETE FROM [Evaluation] WHERE [EvaluateeStartDate] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for LogEntry about to be purged';
|
||||
DELETE FROM [LogEntry] WHERE [entrytime] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for Message about to be purged';
|
||||
DELETE FROM [Message] WHERE [created] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' transactions for Transfer about to be purged';
|
||||
DELETE FROM [Transfer] WHERE [timestamp] <= @DateToPurgeTo
|
||||
COMMIT TRANSACTION
|
||||
|
||||
END TRY
|
||||
|
||||
BEGIN CATCH
|
||||
-- If error, roll back
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK
|
||||
|
||||
-- Raise an error with the details of the exception
|
||||
DECLARE @ErrMsg nvarchar(4000),
|
||||
@ErrSeverity int
|
||||
SELECT @ErrMsg = ERROR_MESSAGE(),
|
||||
@ErrSeverity = ERROR_SEVERITY()
|
||||
|
||||
RAISERROR(@ErrMsg, @ErrSeverity, 1)
|
||||
END CATCH
|
||||
IF @debug = 1 PRINT CONVERT(varchar(30),CURRENT_TIMESTAMP,8) + ' sp_PurgeEFTInsight ended';
|
||||
GO
|
||||
|
||||
--EXEC sp_countEFTInsightRows NULL
|
||||
--GO
|
||||
--EXEC sp_purgeMarkedForDeletion
|
||||
--GO
|
||||
--EXEC sp_countEFTInsightRows 180
|
||||
--GO
|
||||
--EXEC sp_purgeEFTInsight 180, 1
|
||||
--GO
|
||||
--EXEC sp_countEFTInsightRows
|
||||
--GO
|
25
sql/invokeSQL.ps1
Normal file
25
sql/invokeSQL.ps1
Normal file
@ -0,0 +1,25 @@
|
||||
#James McGregor uwu and Jonathan Branan
|
||||
|
||||
$ConnectionString = "server=localhost\SQLEXPRESS,1433;database=EFTDB;UID=eft;Pwd=password1;"
|
||||
$queryFile = "C:\Users\jbranan\Desktop\PurgeEFT.sql"
|
||||
|
||||
Function LogWrite
|
||||
{
|
||||
Param ([string]$logstring)
|
||||
$curDate = getdate
|
||||
$toWrite = $curDate + $logstring
|
||||
Write-Host $toWrite
|
||||
Add-content $Logfile -value $toWrite
|
||||
}
|
||||
|
||||
Function getdate
|
||||
{
|
||||
Get-Date -Format "MM/dd/yyyy "
|
||||
}
|
||||
#$currenttime = getdate
|
||||
|
||||
$Logfile = "c:\Users\jbranan\Desktop\purge.log"
|
||||
|
||||
Write-Host "Running query for Jonny Boi"
|
||||
$logstring = Invoke-Sqlcmd -ConnectionString $ConnectionString -InputFile $queryFile -Verbose 4>&1
|
||||
Logwrite $logstring
|
11
sql/needyusers.sql
Normal file
11
sql/needyusers.sql
Normal file
@ -0,0 +1,11 @@
|
||||
SELECT TOP 3 UserName, Count(*) As SuccessConnections
|
||||
FROM tbl_Authentications
|
||||
WHERE resultID = 0 AND protocol <> 'Administration' AND Time_stamp >= DATEADD(minute,-1440,GetDate())
|
||||
GROUP BY UserName
|
||||
ORDER BY SuccessConnections DESC
|
||||
|
||||
SELECT TOP 3 UserName, Count(*) As FailedConnections
|
||||
FROM tbl_Authentications
|
||||
WHERE resultID = 1 AND protocol <> 'Administration' AND Time_stamp >= DATEADD(minute,-1440,GetDate())
|
||||
GROUP BY UserName
|
||||
ORDER BY FailedConnections DESC
|
3
sql/protocol commands query.sql
Normal file
3
sql/protocol commands query.sql
Normal file
@ -0,0 +1,3 @@
|
||||
SELECT *
|
||||
FROM tbl_ProtocolCommands
|
||||
WHERE Protocol = 'HTTPS' AND Command = 'copy' AND CommandParameters LIKE '%filename.txt%' AND Time_stamp > '2020-04-1' AND Time_stamp < '2020-04-2'
|
12
sql/rowcount.sql
Normal file
12
sql/rowcount.sql
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
declare @count int
|
||||
print 'Row counts before purge'
|
||||
select @count = count(*) from [dbo].[tbl_AdminActions] print 'tbl_AdminActions count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_ProtocolCommands print 'tbl_ProtocolCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Actions print 'tbl_Actions count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_ClientOperations print 'tbl_ClientOperations count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_SocketConnections print 'tbl_SocketConnections count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Authentications print 'tbl_Authentications count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_CustomCommands print 'tbl_CustomCommands count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_EventRules print 'tbl_EventRules count = ' +CAST(@count AS NVARCHAR)
|
||||
select @count = count(*) from tbl_Transactions print 'tbl_Transactions count = ' +CAST(@count AS NVARCHAR)
|
Reference in New Issue
Block a user