Autor: Daniel Davila Lopez

Daniel Davila Lopez

Servicios Críticos, Inicio BCP

         Dentro del plan de continuidad del negocio (BCP) establecemos las prioridades de servicios instalados en la empresa, de tal manera que cualquier eventualidad, el impacto al negocio se contenga y el tiempo de recuperación sea mínimo o nulo.

         El plan de recuperación (DRP) le permite conocer el equipo y el rol de cada uno de los que están a cargo del plan de recuperación, así como la lista de procedimientos a seguir. 

         El Plan de continuidad del negocio (BCP) es el último eslabón de la cadena y se aplica únicamente para proteger las aplicaciones que son vitales para la actividad de la empresa. A diferencia del BCP que protege contra problemas de hardware, el DRP protege contra desastres exteriores.

Anatomia de un BCP

      Para tener una idea exacta del plan, se deben determinar cuales áreas son vulnerables y cuales son los procesos con potencial perdida de datos, el siguiente paso es desarrollar un plan, esto involucra 6 pasos generales:

1.- Identificar el alcance del plan

2.- Identificar las áreas clave del negocio

3.- Identificar las funciones criticas

4.- Identificar las dependencias entre varias áreas de negocio y sus funciones

5.- Determinar los tiempos de caída para cada función critica

6.- Crear un plan para mantener las operaciones.

Prioridades, inventario y roles de Servidores

          Cada modulo de aplicaciones debe ser evaluado para determinar su criticidad en caso de crisis y el trato que debe dársele. 
         Esta etapa nos permite simplemente conocer la necesidad de respaldo y restauración de algunos datos y servidores. 

Nota: se debe tener en cuenta que hacer una copia de respaldo de todo es imposible.

Definición de Técnicas de Recuperación y Tiempos 

          Esta claro que lo mejor es la menor perdida de datos y el menor tiempo posible de recuperación. De tal manera que estructuraremos nuestros procedimientos acorde a la tecnología actual optimizando recursos y tiempo. Tenemos 4 tipos de recuperación

1.- Backup VEEAM y Granular

2.- Replicación VEEAM 

3.- Replicacion 3PAR (Remote Copy)

4.- DAG (Only Exchange 2016)

          De primera instancia se explicara de manera genérica los procedimientos para la recuperación de los datos.

Documento Confidencial

SQL, Insertar datos con identity y constraint

Se ejecuta el siguiente query para generar el query de inserción de datos

	--
	--********************************************  CAMPOS  ***************************************
	declare @ServerS as varchar(50) = 'srvbattanet'
	declare @BDataS as varchar(50) = 'battanet'
	declare @BData as varchar(100) = 'battanet' ----baasedatos destino
	declare @Tabla as varchar(200) = 'tipos'
	declare @Regs as varchar(600) = '('
	
	DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR 
			SELECT  c.name 
			FROM sys.columns c JOIN sys.tables t 
			ON c.object_id = t.object_id
			WHERE t.name = @Tabla
	DECLARE @object_name AS varchar(100) 
	OPEN objects_cursor 
	FETCH NEXT FROM objects_cursor into @object_name
	WHILE @@FETCH_STATUS = 0 
		BEGIN
			set @Regs = @Regs + @object_name + ','
			FETCH NEXT FROM objects_cursor into @object_name
	end;	 		
	CLOSE objects_cursor; 
    DEALLOCATE objects_cursor;
	
	set @Regs = substring(@Regs,1,LEN(@Regs)-1) + ')'
	
	print	'--ALTER TABLE '+ @BData + '.dbo.[' + @Tabla + '] NOCHECK CONSTRAINT ALL'
	print   'set identity_insert '+ @BData + '.dbo.[' + @Tabla + '] on'
	print   'insert into '+ @BData + '.dbo.[' + @Tabla + ']' + @Regs 
	print   'SELECT T.* FROM ' + @ServerS + '.' + @BDataS + '.dbo.' + @Tabla + ' T  WITH (NOLOCK)'
	print   'set identity_insert '+ @BData + '.dbo.[' + @Tabla + '] oFF'
	print   '--ALTER TABLE '+ @BData + '.dbo.[' + @Tabla + '] CHECK CONSTRAINT ALL'
	--**********************************************************************************************
	--*******************************************  EJEMPLO  ****************************************
		ALTER TABLE battanet.dbo.[tipos] NOCHECK CONSTRAINT ALL
		set identity_insert battanet.dbo.[tipos] on
		insert into battanet.dbo.[tipos](id_tipo,tipo_grupo,tipo_subgrupo,nombre,descripcion,id_estatus)
		SELECT T.* FROM srvbattanet.battanet.dbo.tipos T  WITH (NOLOCK)
		set identity_insert battanet.dbo.[tipos] oFF
		ALTER TABLE battanet.dbo.[tipos] CHECK CONSTRAINT ALL
	--Caracteristica:  conectado a la base de datos donde se insertaran los datos y tener un linked server de donde se extraera la informacion}}

 

Disponible Cliente Alerta: Venta solo por disponible del cliente

Parámetro: DisponibleClienteAlerta

Descripción: Indica si se valida que el cliente solo use el disponible que tiene y evitar exceder el monto a pagar a crédito, evitando el envió del vale a lista negra. la cantidad restante de importe por pagar debe ser saldada por otra forma de pago.

Creación del parámetro en servidor VISCOIDB.VISCOI.DBO.PARAMETROS_CONTROL

USE viscoi
GO

PRINT '01) DECLARACION DE VARIABLES'
DECLARE @ID_PARAMETRO AS VARCHAR(50) = 'DisponibleClienteAlerta'
DECLARE @DESCRIPCION AS VARCHAR(MAX) = 'VENTA SOLO POR DISPONIBLE DEL CLIENTE'
DECLARE @VALOR AS VARCHAR(50) = 'NO'
DECLARE @USUARIO AS VARCHAR(12) = 'JARREOLA'

PRINT '02) GENERAR BASE CON LAS SUCURSALES A LAS QUE SE LES CREARA EL PARAMETRO'
IF OBJECT_ID('tempdb..#suc') > 0
	DROP TABLE #suc

SELECT plaza,id_sucursal
INTO #suc
FROM sucursales
WHERE id_empresa = 'BHERMANOS'
AND curp = 'no'
AND subtipo <> 'credito'
AND id_sucursal NOT LIKE 'VM_%'
AND id_sucursal NOT LIKE 'OUTLET_%' 
AND id_sucursal NOT LIKE 'OFERTAZ_%'
--AND (plaza NOT IN ('01 TORREON','02 DURANGO','09 PARRAL','25 GOMEZ PALACIO','28 TEPIC','56 FCO I MADERO')
--AND zona <> 'PACIFICO')
ORDER BY plaza

PRINT '03) ACTUALIZAR EL CAMPO DE LA PLAZA'
UPDATE SUC SET SUC.PLAZA = S.plaza
FROM #suc SUC
JOIN SUCURSALES S WITH(NOLOCK)
ON S.id_sucursal = SUC.id_sucursal
AND S.id_empresa = 'BHERMANOS'

PRINT '04) CREAMOS LA TEMPORAL DE #PARAMETROS_CONTROL'
IF OBJECT_ID('tempdb..#TMP_PARAMETROS_CONTROL') > 0
	DROP TABLE #TMP_PARAMETROS_CONTROL

CREATE TABLE #TMP_PARAMETROS_CONTROL
(
id_parametro VARCHAR(50)
, llave VARCHAR(50)
, sistema VARCHAR(20)
, id_empresa VARCHAR(12)
, id_sucursal VARCHAR(12)
, usuario VARCHAR(12)
, nombre TEXT
, valor VARCHAR(50)
, fum DATETIME
, id_usuario VARCHAR(12)
)

PRINT '05) GENERAMOS EL PRIMER PARAMETRO: ' + @ID_PARAMETRO
INSERT INTO #TMP_PARAMETROS_CONTROL
SELECT id_parametro = @ID_PARAMETRO
,llave = 'BHERMANOS'+id_sucursal
,sistema = 'CAJA REGISTRADORA'
,id_empresa = 'BHERMANOS'
,id_sucursal
,usuario = ''
,nombre = @DESCRIPCION
,valor = @VALOR
,fum = GETDATE()
,id_usuario = @USUARIO
FROM #suc S WITH(NOLOCK)

PRINT '06) VERIFICAMOS SI YA EXISTE EL PARAMETRO Y ACTUALIZAMOS'
UPDATE PC SET PC.VALOR = TPC.VALOR, PC.FUM=TPC.FUM, PC.id_usuario = TPC.id_usuario
FROM #TMP_PARAMETROS_CONTROL TPC
JOIN PARAMETROS_CONTROL PC WITH(NOLOCK)
ON PC.ID_PARAMETRO = TPC.ID_PARAMETRO
AND PC.LLAVE = TPC.LLAVE

PRINT '07) SI NO EXISTE EL PARAMETRO LO INSERTAMOS'
INSERT INTO PARAMETROS_CONTROL
SELECT TPC.*
FROM #TMP_PARAMETROS_CONTROL TPC WITH(NOLOCK)
LEFT JOIN PARAMETROS_CONTROL PC WITH(NOLOCK)
ON PC.ID_PARAMETRO = TPC.ID_PARAMETRO
AND PC.LLAVE = TPC.LLAVE
WHERE PC.ID_PARAMETRO IS NULL

PRINT '08) VALIDAMOS QUE EL PARAMETRO VIAJE A CORPORATIVO, SI NO VIAJA LO AGREGAMOS'
IF NOT EXISTS(SELECT * FROM parametros_control_envio WHERE ID_PARAMETRO = @ID_PARAMETRO)
BEGIN
	INSERT INTO parametros_control_envio
	SELECT @ID_PARAMETRO,@DESCRIPCION
END

PRINT '09) PARAMETRO CREADO/ACTUALIZADO CON EXITO!!!'
SELECT * FROM parametros_control WHERE id_parametro = @ID_PARAMETRO

 

 

Documento Confidencial