184 lines
7.3 KiB
MySQL
184 lines
7.3 KiB
MySQL
|
|
-- V010_ROLLBACK.sql
|
||
|
|
-- Reversa de V010__audit_infrastructure.sql.
|
||
|
|
--
|
||
|
|
-- ⚠️ ADVERTENCIA: ejecutar este script ELIMINA toda la historia auditada.
|
||
|
|
-- - dbo.AuditEvent y dbo.SecurityEvent se dropean (junto con datos).
|
||
|
|
-- - History tables (Usuario_History, Rol_History, Permiso_History, RolPermiso_History) se dropean.
|
||
|
|
-- - Particionamiento, filegroups y archivos físicos se desmontan.
|
||
|
|
--
|
||
|
|
-- Uso intended: ROLLBACK de emergencia en entornos NO-productivos.
|
||
|
|
-- En prod futuro, este script NO se ejecuta: si hace falta revertir, se hace
|
||
|
|
-- restore de backup previo a V010.
|
||
|
|
|
||
|
|
SET QUOTED_IDENTIFIER ON;
|
||
|
|
SET ANSI_NULLS ON;
|
||
|
|
SET NOCOUNT ON;
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
-- 1. Apagar SYSTEM_VERSIONING + remover columnas PERIOD en las 4 tablas
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
|
||
|
|
-- Usuario
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('dbo.Usuario') AND temporal_type = 2)
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.Usuario SET (SYSTEM_VERSIONING = OFF);
|
||
|
|
PRINT 'Usuario: SYSTEM_VERSIONING OFF.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.periods WHERE object_id = OBJECT_ID('dbo.Usuario'))
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.Usuario DROP PERIOD FOR SYSTEM_TIME;
|
||
|
|
PRINT 'Usuario: PERIOD FOR SYSTEM_TIME dropped.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF COL_LENGTH('dbo.Usuario', 'ValidFrom') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.Usuario DROP CONSTRAINT IF EXISTS DF_Usuario_ValidFrom;
|
||
|
|
ALTER TABLE dbo.Usuario DROP CONSTRAINT IF EXISTS DF_Usuario_ValidTo;
|
||
|
|
ALTER TABLE dbo.Usuario DROP COLUMN ValidFrom, ValidTo;
|
||
|
|
PRINT 'Usuario: ValidFrom/ValidTo dropped.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.Usuario_History', N'U') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
DROP TABLE dbo.Usuario_History;
|
||
|
|
PRINT 'Usuario_History dropped.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- Rol
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('dbo.Rol') AND temporal_type = 2)
|
||
|
|
ALTER TABLE dbo.Rol SET (SYSTEM_VERSIONING = OFF);
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.periods WHERE object_id = OBJECT_ID('dbo.Rol'))
|
||
|
|
ALTER TABLE dbo.Rol DROP PERIOD FOR SYSTEM_TIME;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF COL_LENGTH('dbo.Rol', 'ValidFrom') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.Rol DROP CONSTRAINT IF EXISTS DF_Rol_ValidFrom;
|
||
|
|
ALTER TABLE dbo.Rol DROP CONSTRAINT IF EXISTS DF_Rol_ValidTo;
|
||
|
|
ALTER TABLE dbo.Rol DROP COLUMN ValidFrom, ValidTo;
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.Rol_History', N'U') IS NOT NULL DROP TABLE dbo.Rol_History;
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- Permiso
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('dbo.Permiso') AND temporal_type = 2)
|
||
|
|
ALTER TABLE dbo.Permiso SET (SYSTEM_VERSIONING = OFF);
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.periods WHERE object_id = OBJECT_ID('dbo.Permiso'))
|
||
|
|
ALTER TABLE dbo.Permiso DROP PERIOD FOR SYSTEM_TIME;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF COL_LENGTH('dbo.Permiso', 'ValidFrom') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.Permiso DROP CONSTRAINT IF EXISTS DF_Permiso_ValidFrom;
|
||
|
|
ALTER TABLE dbo.Permiso DROP CONSTRAINT IF EXISTS DF_Permiso_ValidTo;
|
||
|
|
ALTER TABLE dbo.Permiso DROP COLUMN ValidFrom, ValidTo;
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.Permiso_History', N'U') IS NOT NULL DROP TABLE dbo.Permiso_History;
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- RolPermiso
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('dbo.RolPermiso') AND temporal_type = 2)
|
||
|
|
ALTER TABLE dbo.RolPermiso SET (SYSTEM_VERSIONING = OFF);
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.periods WHERE object_id = OBJECT_ID('dbo.RolPermiso'))
|
||
|
|
ALTER TABLE dbo.RolPermiso DROP PERIOD FOR SYSTEM_TIME;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF COL_LENGTH('dbo.RolPermiso', 'ValidFrom') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
ALTER TABLE dbo.RolPermiso DROP CONSTRAINT IF EXISTS DF_RolPermiso_ValidFrom;
|
||
|
|
ALTER TABLE dbo.RolPermiso DROP CONSTRAINT IF EXISTS DF_RolPermiso_ValidTo;
|
||
|
|
ALTER TABLE dbo.RolPermiso DROP COLUMN ValidFrom, ValidTo;
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.RolPermiso_History', N'U') IS NOT NULL DROP TABLE dbo.RolPermiso_History;
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
-- 2. Drop AuditEvent + SecurityEvent
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.AuditEvent', N'U') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
DROP TABLE dbo.AuditEvent;
|
||
|
|
PRINT 'Table dbo.AuditEvent dropped.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF OBJECT_ID(N'dbo.SecurityEvent', N'U') IS NOT NULL
|
||
|
|
BEGIN
|
||
|
|
DROP TABLE dbo.SecurityEvent;
|
||
|
|
PRINT 'Table dbo.SecurityEvent dropped.';
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
-- 3. Drop partition schemes + functions
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.partition_schemes WHERE name = 'ps_AuditEvent_Monthly')
|
||
|
|
DROP PARTITION SCHEME ps_AuditEvent_Monthly;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.partition_functions WHERE name = 'pf_AuditEvent_Monthly')
|
||
|
|
DROP PARTITION FUNCTION pf_AuditEvent_Monthly;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.partition_schemes WHERE name = 'ps_SecurityEvent_Monthly')
|
||
|
|
DROP PARTITION SCHEME ps_SecurityEvent_Monthly;
|
||
|
|
GO
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.partition_functions WHERE name = 'pf_SecurityEvent_Monthly')
|
||
|
|
DROP PARTITION FUNCTION pf_SecurityEvent_Monthly;
|
||
|
|
GO
|
||
|
|
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
-- 4. Remover archivos físicos y filegroups
|
||
|
|
-- ═══════════════════════════════════════════════════════════════════════
|
||
|
|
|
||
|
|
DECLARE @dbName NVARCHAR(128) = DB_NAME();
|
||
|
|
DECLARE @hotLogical NVARCHAR(128) = @dbName + N'_AUDIT_HOT';
|
||
|
|
DECLARE @coldLogical NVARCHAR(128) = @dbName + N'_AUDIT_COLD';
|
||
|
|
DECLARE @sql NVARCHAR(MAX);
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.database_files WHERE name = @hotLogical)
|
||
|
|
BEGIN
|
||
|
|
SET @sql = N'ALTER DATABASE CURRENT REMOVE FILE [' + @hotLogical + N'];';
|
||
|
|
EXEC sp_executesql @sql;
|
||
|
|
PRINT 'File ' + @hotLogical + ' removed.';
|
||
|
|
END
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.database_files WHERE name = @coldLogical)
|
||
|
|
BEGIN
|
||
|
|
SET @sql = N'ALTER DATABASE CURRENT REMOVE FILE [' + @coldLogical + N'];';
|
||
|
|
EXEC sp_executesql @sql;
|
||
|
|
PRINT 'File ' + @coldLogical + ' removed.';
|
||
|
|
END
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.filegroups WHERE name = 'AUDIT_HOT')
|
||
|
|
EXEC sp_executesql N'ALTER DATABASE CURRENT REMOVE FILEGROUP AUDIT_HOT;';
|
||
|
|
|
||
|
|
IF EXISTS (SELECT 1 FROM sys.filegroups WHERE name = 'AUDIT_COLD')
|
||
|
|
EXEC sp_executesql N'ALTER DATABASE CURRENT REMOVE FILEGROUP AUDIT_COLD;';
|
||
|
|
GO
|
||
|
|
|
||
|
|
PRINT '';
|
||
|
|
PRINT 'V010 rolled back. Audit infrastructure removed. All audit history is permanently LOST.';
|
||
|
|
GO
|