-
Notifications
You must be signed in to change notification settings - Fork 546
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add saml idp metadata cleanup scripts
- Loading branch information
Showing
6 changed files
with
698 additions
and
0 deletions.
There are no files selected for viewing
56 changes: 56 additions & 0 deletions
56
...stored-procedures/db2/saml-idp-metadata-cleanup/db2-saml-idp-metadata-cleanup-restore.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
CREATE OR REPLACE PROCEDURE WSO2_SAML_IDP_METADATA_CLEANUP_RESTORE AS | ||
BEGIN | ||
-- ------------------------------------------ | ||
-- DECLARE VARIABLES | ||
-- ------------------------------------------ | ||
DECLARE rowCount INT; | ||
DECLARE enableLog SMALLINT; | ||
|
||
-- ------------------------------------------ | ||
-- CONFIGURABLE ATTRIBUTES | ||
-- ------------------------------------------ | ||
SET enableLog = 1; -- ENABLE LOGGING [DEFAULT : TRUE] | ||
|
||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION | ||
BEGIN | ||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('ERROR OCCURRED: ' || SQLERRM); | ||
END IF; | ||
ROLLBACK; | ||
END; | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('SAML IDP METADATA CLEANUP DATA RESTORATION STARTED .... !'); | ||
END IF; | ||
|
||
SELECT COUNT(*) INTO rowCount FROM SYSIBM.SYSTABLES WHERE CREATOR = CURRENT SCHEMA AND NAME = 'REG_RESOURCE'; | ||
IF (rowCount = 1) | ||
THEN | ||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; | ||
BEGIN TRANSACTION; | ||
|
||
INSERT INTO REG_RESOURCE (REG_PATH_ID, REG_NAME, REG_VERSION, REG_MEDIA_TYPE, REG_CREATOR, REG_CREATED_TIME, | ||
REG_LAST_UPDATOR, REG_LAST_UPDATED_TIME, REG_DESCRIPTION, REG_CONTENT_ID, REG_TENANT_ID, REG_UUID) SELECT | ||
A.REG_PATH_ID, A.REG_NAME, A.REG_VERSION, A.REG_MEDIA_TYPE, A.REG_CREATOR, A.REG_CREATED_TIME, A.REG_LAST_UPDATOR, | ||
A.REG_LAST_UPDATED_TIME, A.REG_DESCRIPTION, A.REG_CONTENT_ID, A.REG_TENANT_ID, A.REG_UUID FROM BAK_REG_RESOURCE A LEFT | ||
JOIN REG_RESOURCE B ON A.REG_VERSION = B.REG_VERSION AND A.REG_TENANT_ID = B.REG_TENANT_ID WHERE B.REG_VERSION IS NULL; | ||
GET DIAGNOSTICS rowCount = ROW_COUNT; | ||
|
||
INSERT INTO REG_CONTENT (REG_CONTENT_ID, REG_CONTENT_DATA, REG_TENANT_ID) SELECT A.REG_CONTENT_ID, | ||
A.REG_CONTENT_DATA, A.REG_TENANT_ID FROM BAK_REG_CONTENT A LEFT JOIN REG_CONTENT B ON | ||
A.REG_CONTENT_ID = B.REG_CONTENT_ID WHERE B.REG_CONTENT_ID IS NULL; | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('CLEANUP DATA RESTORATION COMPLETED ON REG_RESOURCE WITH ' || rowCount); | ||
END IF; | ||
COMMIT; | ||
END IF; | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('CLEANUP DATA RESTORATION COMPLETED .... !'); | ||
END IF; | ||
END; |
176 changes: 176 additions & 0 deletions
176
...scripts/stored-procedures/db2/saml-idp-metadata-cleanup/db2-saml-idp-metadata-cleanup.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
-- NOTE: This procedure assumes that the SAML IDP metadata is stored under the path | ||
-- '/_system/governance/repository/identity/provider/saml' in the registry and only two corresponding RESOURCE entries | ||
-- (one for the collection and one for the resource object) and one CONTENT entry exist for each SAML IDP metadata file. | ||
|
||
CREATE OR REPLACE PROCEDURE WSO2_SAML_IDP_METADATA_CLEANUP AS | ||
BEGIN | ||
|
||
-- ------------------------------------------ | ||
-- DECLARE VARIABLES | ||
-- ------------------------------------------ | ||
DECLARE batchSize INT; | ||
DECLARE chunkSize INT; | ||
DECLARE batchCount INT; | ||
DECLARE chunkCount INT; | ||
DECLARE rowCount INT; | ||
DECLARE enableLog SMALLINT; | ||
DECLARE backupTables SMALLINT; | ||
|
||
-- ------------------------------------------ | ||
-- CONFIGURABLE VARIABLES | ||
-- ------------------------------------------ | ||
SET batchSize = 10000; -- SET BATCH SIZE TO AVOID TABLE LOCKS [DEFAULT : 10000] | ||
SET chunkSize = 500000; -- CHUNK WISE DELETE FOR LARGE TABLES [DEFAULT : 500000] | ||
SET enableLog = 1; -- ENABLE LOGGING [DEFAULT : 1] | ||
SET backupTables = 1; -- SET IF REGISTRY TABLES NEEDS TO BE BACKED-UP BEFORE DELETE [DEFAULT : 1]. | ||
|
||
SET rowCount = 0; | ||
SET batchCount = 1; | ||
SET chunkCount = 1; | ||
|
||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION | ||
BEGIN | ||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('ERROR OCCURRED: ' || SQLERRM); | ||
END IF; | ||
ROLLBACK; | ||
END; | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('WSO2_SAML_IDP_METADATA_CLEANUP() STARTED...!'); | ||
END IF; | ||
|
||
-- ------------------------------------------ | ||
-- GET PATH ID LIST TO DELETE | ||
-- ------------------------------------------ | ||
DECLARE GLOBAL TEMPORARY TABLE RootPathIdList (ROOT_PATH_ID INT) ON COMMIT DELETE ROWS; | ||
DECLARE GLOBAL TEMPORARY TABLE PathIdList (REG_PATH_ID INT) ON COMMIT DELETE ROWS; | ||
INSERT INTO RootPathIdList (ROOT_PATH_ID) SELECT REG_PATH_ID FROM REG_PATH WHERE | ||
REG_PATH_VALUE = '/_system/governance/repository/identity/provider/saml'; | ||
INSERT INTO PathIdList (REG_PATH_ID) SELECT REG_PATH_ID FROM REG_PATH WHERE REG_PATH_PARENT_ID IN | ||
(SELECT ROOT_PATH_ID FROM RootPathIdList); | ||
|
||
-- ------------------------------------------ | ||
-- BACKUP DATA | ||
-- ------------------------------------------ | ||
IF (backupTables = 1) | ||
THEN | ||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('TABLE BACKUP STARTED...!'); | ||
END IF; | ||
|
||
IF (EXISTS (SELECT NAME FROM SYSIBM.SYSTABLES WHERE NAME = 'BAK_REG_RESOURCE')) | ||
THEN | ||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('DELETING OLD BACKUP...'); | ||
END IF; | ||
DROP TABLE BAK_REG_RESOURCE; | ||
DROP TABLE BAK_REG_CONTENT; | ||
END IF; | ||
|
||
-- BACKUP REG_RESOURCE TABLE | ||
CREATE TABLE BAK_REG_RESOURCE AS (SELECT * FROM REG_RESOURCE WHERE REG_PATH_ID IN | ||
(SELECT REG_PATH_ID FROM PathIdList)) WITH DATA; | ||
|
||
-- BACKUP REG_CONTENT TABLE | ||
DECLARE GLOBAL TEMPORARY TABLE ContentIdList (REG_CONTENT_ID INT) ON COMMIT DELETE ROWS; | ||
INSERT INTO ContentIdList (REG_CONTENT_ID) SELECT DISTINCT REG_CONTENT_ID FROM BAK_REG_RESOURCE WHERE | ||
REG_CONTENT_ID IS NOT NULL; | ||
CREATE TABLE BAK_REG_CONTENT AS (SELECT * FROM REG_CONTENT WHERE REG_CONTENT_ID IN (SELECT REG_CONTENT_ID | ||
FROM ContentIdList)) WITH DATA; | ||
END IF; | ||
|
||
-- ------------------------------------------ | ||
-- CLEANUP DATA | ||
-- ------------------------------------------ | ||
|
||
BEGIN TRANSACTION | ||
|
||
WHILE (chunkCount > 0) | ||
DO | ||
-- CREATE CHUNK TABLE | ||
DROP TABLE IF EXISTS REG_RESOURCE_CHUNK_TMP; | ||
DROP TABLE IF EXISTS REG_CONTENT_CHUNK_TMP; | ||
|
||
CREATE TABLE REG_RESOURCE_CHUNK_TMP(REG_VERSION INT, REG_TENANT_ID INT, REG_CONTENT_ID INT); | ||
CREATE TABLE REG_CONTENT_CHUNK_TMP(REG_CONTENT_ID INT); | ||
|
||
INSERT INTO REG_RESOURCE_CHUNK_TMP SELECT REG_VERSION, REG_TENANT_ID, REG_CONTENT_ID FROM REG_RESOURCE WHERE | ||
REG_PATH_ID IN (SELECT REG_PATH_ID FROM PathIdList) LIMIT chunkSize; | ||
GET DIAGNOSTICS chunkCount = ROW_COUNT; | ||
INSERT INTO REG_CONTENT_CHUNK_TMP SELECT REG_CONTENT_ID FROM REG_RESOURCE_CHUNK_TMP WHERE REG_CONTENT_ID | ||
IS NOT NULL; | ||
|
||
CREATE INDEX REG_RESOURCE_CHUNK_TMP on REG_RESOURCE_CHUNK_TMP (REG_VERSION, REG_TENANT_ID, REG_CONTENT_ID) | ||
CREATE INDEX REG_CONTENT_CHUNK_TMP on REG_CONTENT_CHUNK_TMP (REG_CONTENT_ID) | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('CREATED REG_RESOURCE_CHUNK_TMP...'); | ||
END IF; | ||
|
||
-- BATCH LOOP | ||
SET batchCount = 1; | ||
WHILE (batchCount > 0) | ||
DO | ||
-- CREATE BATCH TABLE | ||
DROP TABLE IF EXISTS REG_RESOURCE_BATCH_TMP; | ||
DROP TABLE IF EXISTS REG_CONTENT_BATCH_TMP; | ||
|
||
CREATE TABLE REG_RESOURCE_BATCH_TMP(REG_VERSION INT, REG_TENANT_ID INT, REG_CONTENT_ID INT); | ||
CREATE TABLE REG_CONTENT_BATCH_TMP(REG_CONTENT_ID INT); | ||
|
||
INSERT INTO REG_RESOURCE_BATCH_TMP(REG_VERSION, REG_TENANT_ID, REG_CONTENT_ID) SELECT REG_VERSION, | ||
REG_TENANT_ID, REG_CONTENT_ID FROM REG_RESOURCE_CHUNK_TMP LIMIT batchSize; | ||
GET DIAGNOSTICS batchCount = ROW_COUNT; | ||
INSERT INTO REG_CONTENT_BATCH_TMP(REG_CONTENT_ID) SELECT REG_CONTENT_ID FROM REG_RESOURCE_BATCH_TMP | ||
WHERE REG_CONTENT_ID IS NOT NULL; | ||
|
||
CREATE INDEX REG_RESOURCE_BATCH_TMP on REG_RESOURCE_BATCH_TMP (REG_VERSION, REG_TENANT_ID); | ||
CREATE INDEX REG_CONTENT_BATCH_TMP on REG_CONTENT_BATCH_TMP (REG_CONTENT_ID); | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('CREATED REG_RESOURCE_BATCH_TMP...'); | ||
END IF; | ||
|
||
-- BATCH DELETION | ||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('BATCH DELETE STARTED ON REG_RESOURCE...'); | ||
END IF; | ||
|
||
DELETE r FROM REG_RESOURCE r INNER JOIN REG_RESOURCE_BATCH_TMP tmp ON r.REG_VERSION = tmp.REG_VERSION | ||
AND r.REG_TENANT_ID = tmp.REG_TENANT_ID; | ||
GET DIAGNOSTICS rowCount = ROW_COUNT; | ||
DELETE FROM REG_CONTENT WHERE REG_CONTENT_ID IN (SELECT REG_CONTENT_ID FROM REG_CONTENT_BATCH_TMP); | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('BATCH DELETE FINISHED ON REG_RESOURCE : ' || rowCount); | ||
END IF; | ||
|
||
-- DELETE FROM CHUNK | ||
DELETE r FROM REG_RESOURCE_CHUNK_TMP r INNER JOIN REG_RESOURCE_BATCH_TMP tmp ON | ||
r.REG_VERSION = tmp.REG_VERSION AND r.REG_TENANT_ID = tmp.REG_TENANT_ID; | ||
END WHILE; | ||
END WHILE; | ||
|
||
-- DELETE TEMP TABLES | ||
DROP TABLE IF EXISTS REG_RESOURCE_BATCH_TMP; | ||
DROP TABLE IF EXISTS REG_CONTENT_BATCH_TMP; | ||
DROP TABLE IF EXISTS REG_RESOURCE_CHUNK_TMP; | ||
DROP TABLE IF EXISTS REG_CONTENT_CHUNK_TMP; | ||
|
||
COMMIT; | ||
|
||
IF (enableLog = 1) | ||
THEN | ||
CALL DBMS_OUTPUT.PUT_LINE('CLEANUP COMPLETED...!'); | ||
END IF; | ||
|
||
END; |
59 changes: 59 additions & 0 deletions
59
...ed-procedures/mssql/saml-idp-metadata-cleanup/mssql-saml-idp-metadata-cleanup-restore.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
CREATE OR ALTER PROCEDURE WSO2_SAML_IDP_METADATA_CLEANUP_RESTORE AS | ||
BEGIN TRY | ||
-- ------------------------------------------ | ||
-- DECLARE VARIABLES | ||
-- ------------------------------------------ | ||
DECLARE @rowCount INT | ||
DECLARE @enableLog BIT | ||
|
||
-- ------------------------------------------ | ||
-- CONFIGURABLE ATTRIBUTES | ||
-- ------------------------------------------ | ||
SET @enableLog = 1 -- ENABLE LOGGING [DEFAULT : TRUE] | ||
|
||
IF (@enableLog = 1) | ||
BEGIN | ||
SELECT '[' + convert(varchar, getdate(), 121) + '] SAML IDP METADATA CLEANUP DATA RESTORATION STARTED .... !' AS 'INFO_LOG' | ||
END | ||
|
||
SELECT @rowCount = COUNT(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ('REG_RESOURCE'); | ||
IF (@rowCount = 1) | ||
BEGIN | ||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; | ||
BEGIN TRANSACTION; | ||
|
||
SET IDENTITY_INSERT REG_RESOURCE ON; | ||
INSERT INTO REG_RESOURCE (REG_PATH_ID, REG_NAME, REG_VERSION, REG_MEDIA_TYPE, REG_CREATOR, REG_CREATED_TIME, | ||
REG_LAST_UPDATOR, REG_LAST_UPDATED_TIME, REG_DESCRIPTION, REG_CONTENT_ID, REG_TENANT_ID, REG_UUID) SELECT | ||
A.REG_PATH_ID, A.REG_NAME, A.REG_VERSION, A.REG_MEDIA_TYPE, A.REG_CREATOR, A.REG_CREATED_TIME, A.REG_LAST_UPDATOR, | ||
A.REG_LAST_UPDATED_TIME, A.REG_DESCRIPTION, A.REG_CONTENT_ID, A.REG_TENANT_ID, A.REG_UUID FROM BAK_REG_RESOURCE A LEFT | ||
JOIN REG_RESOURCE B ON A.REG_VERSION = B.REG_VERSION AND A.REG_TENANT_ID = B.REG_TENANT_ID WHERE B.REG_VERSION IS NULL; | ||
SET @rowCount = @@ROWCOUNT; | ||
SET IDENTITY_INSERT REG_RESOURCE OFF; | ||
|
||
SET IDENTITY_INSERT REG_CONTENT ON; | ||
INSERT INTO REG_CONTENT (REG_CONTENT_ID, REG_CONTENT_DATA, REG_TENANT_ID) SELECT A.REG_CONTENT_ID, | ||
A.REG_CONTENT_DATA, A.REG_TENANT_ID FROM BAK_REG_CONTENT A LEFT JOIN REG_CONTENT B ON | ||
A.REG_CONTENT_ID = B.REG_CONTENT_ID WHERE B.REG_CONTENT_ID IS NULL; | ||
SET IDENTITY_INSERT REG_CONTENT OFF; | ||
IF (@enableLog = 1) | ||
BEGIN | ||
SELECT CONCAT('CLEANUP DATA RESTORATION COMPLETED ON REG_RESOURCE WITH ', @rowCount) AS 'INFO_LOG' | ||
END | ||
COMMIT TRANSACTION; | ||
END | ||
|
||
IF (@enableLog = 1) | ||
BEGIN | ||
SELECT '[' + convert(varchar, getdate(), 121) + '] CLEANUP DATA RESTORATION COMPLETED .... !' AS 'INFO_LOG' | ||
END | ||
END TRY | ||
BEGIN CATCH | ||
|
||
IF (@enableLog = 1) | ||
BEGIN | ||
SELECT '[' + convert(varchar, getdate(), 121) + '] ERROR OCCURRED: ' + ERROR_MESSAGE() AS 'ERROR LOG' | ||
END | ||
|
||
ROLLBACK TRANSACTION | ||
END CATCH |
Oops, something went wrong.