CAJAS_01_Mantenimiento_Caja - Manuales
Manuales POS
Audiencia
Este documento está pensado para ser consumido por los equipos de:
Soporte Farmax OR (Niveles 1 y 2)
Equipo de desarrollo TI (Farmacias del Ahorro y proveedor externo)
Descripción general
Se presentó un error en la sucursal 1564 caja 22 y este problema ocurrió a base de un apagón de luz provocando daños a la base de datos y servicios del POS.
Impacto a la operación
El impacto de la operación es media en virtud de que la operación no se ve comprometida por esta incidencia. Criticidad
Alto |
|
Medio |
X |
Bajo |
Sistemas/módulos involucrados
POS
Precondiciones
Aquí se debe especificar el nivel de acceso requerido por cada sistema (aplicativo o base de datos), indicando el rol o perfil necesario para para el diagnóstico y/o solución del incidente.
POS |
Usuario: Contraseña: |
Procedimiento de diagnóstico
Se realizó el respaldo de la base de datos solicitando a farmacias que pusiera en modo esclavo el Disco duro esto para extraer los archivos .mdf y .ldf.
Una vez extraídos procedieron hacer una reinstalación en un equipo nuevo reinstalando el POS, el sql de la nueva base de datos.
Una vez que instalaron todo en la máquina se procedió a importar los archivos mdf y ldf, y se realizó un respaldo de la base de datos nueva de la caja esto para prevenir algún error en la otra base anterior.
Eliminamos los archivos mdf y ldf de la base de datos nueva y se pego la antigua, se procedió a iniciar los servicios.
Sin embargo, un servicio de Till marcaba error por lo cual se procedió a realizar el mantenimiento de caja.
Primero debes de conectarte a la caja de la sucursal donde se tiene el problema con el siguiente query.
Debes de copiar la ip y realizar una nueva conexión.
Validar que estar en la caja con el siguiente query
Antes de ejecutar el script del mantenimiento, la caja no debe de estar en operación y que los servicios del POS estén detenidos (Esto es muy importante ya que podemos dañar algún dato de información o registro de la base de datos).
Una vez confirmado deberás abrir el siguiente script y ejecutar línea por línea hasta que cada una termine su función.
-
ALTER DATABASE FARMAX_CAJA SET EMERGENCY
-
DBCC CHECKDB ('FARMAX_CAJA')
-
ALTER DATABASE FARMAX_CAJA SET SINGLE_USER WITH ROLLBACK IMMEDIATE
-
DBCC CHECKDB (FARMAX_CAJA, REPAIR_ALLOW_DATA_LOSS)
-
ALTER DATABASE FARMAX_CAJA SET MULTI_USER
Una vez que se haya terminado de ejecutar las 5 líneas procederemos a ejecutar el último script.
DECLARE @cmd NVARCHAR(1000)
DECLARE @Table VARCHAR(255)
DECLARE @SchemaName VARCHAR(255)
DECLARE @IndexName VARCHAR(255)
DECLARE @AvgFragmentationInPercent DECIMAL
DECLARE @fillfactor INT
DECLARE @FragmentationThresholdForReorganizeTableLowerLimit VARCHAR(10)
DECLARE @FragmentationThresholdForRebuildTableLowerLimit VARCHAR(10)
DECLARE @Message VARCHAR(1000)
SET @fillfactor = 90
SET @FragmentationThresholdForReorganizeTableLowerLimit = '10.0' -- Percent
SET @FragmentationThresholdForRebuildTableLowerLimit = '30.0' -- Percent
BEGIN TRY
IF (SELECT OBJECT_ID('tempdb..#FramentedTableList')) IS NOT NULL
DROP TABLE #FramentedTableList;
IF (SELECT OBJECT_ID('tempdb..#TableList')) IS NOT NULL
DROP TABLE #TableList;
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Retrieving indexes with high fragmentation from ' + DB_NAME() + ' database.'
RAISERROR(@Message, 0, 1) WITH NOWAIT
SELECT OBJECT_NAME(IPS.OBJECT_ID) AS [TableName], avg_fragmentation_in_percent, SI.name [IndexName],
schema_name(ST.schema_id) AS [SchemaName], 0 AS IsProcessed INTO #FramentedTableList
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL , NULL) IPS
JOIN sys.tables ST WITH (nolock) ON IPS.OBJECT_ID = ST.OBJECT_ID
JOIN sys.indexes SI WITH (nolock) ON IPS.OBJECT_ID = SI.OBJECT_ID AND IPS.index_id = SI.index_id
WHERE ST.is_ms_shipped = 0 AND SI.name IS NOT NULL
AND avg_fragmentation_in_percent >= CONVERT(DECIMAL, @FragmentationThresholdForReorganizeTableLowerLimit)
ORDER BY avg_fragmentation_in_percent DESC
SELECT DISTINCT TableName, 0 IsProcessed INTO #TableList FROM #FramentedTableList ORDER BY 1
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Retrieved indexes with high fragmentation from ' + DB_NAME() + ' database.'
RAISERROR(@Message, 0, 1) WITH NOWAIT
RAISERROR('', 0, 1) WITH NOWAIT
WHILE EXISTS ( SELECT 1 FROM #FramentedTableList WHERE IsProcessed = 0 )
BEGIN
SELECT TOP 1 @Table = TableName, @AvgFragmentationInPercent = avg_fragmentation_in_percent, @SchemaName = SchemaName, @IndexName = IndexName
FROM #FramentedTableList
WHERE IsProcessed = 0
--Reorganizing the index
IF((@AvgFragmentationInPercent >= @FragmentationThresholdForReorganizeTableLowerLimit) AND (@AvgFragmentationInPercent < @FragmentationThresholdForRebuildTableLowerLimit))
BEGIN
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Reorganizing Index for [' + @Table + '] which has avg_fragmentation_in_percent = ' + CONVERT(VARCHAR, @AvgFragmentationInPercent) + '.'
RAISERROR(@Message, 0, 1) WITH NOWAIT
SET @cmd = 'ALTER INDEX ' + @IndexName + ' ON [' + RTRIM(LTRIM(@SchemaName)) + '].[' + RTRIM(LTRIM(@Table)) + '] REORGANIZE'
EXEC (@cmd)
--PRINT @cmd
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Reorganize Index completed successfully for [' + @Table + '].'
RAISERROR(@Message, 0, 1) WITH NOWAIT
RAISERROR('', 0, 1) WITH NOWAIT
END
--Rebuilding the index
ELSE IF (@AvgFragmentationInPercent >= @FragmentationThresholdForRebuildTableLowerLimit )
BEGIN
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Rebuilding Index for [' + @Table + '] which has avg_fragmentation_in_percent = ' + CONVERT(VARCHAR, @AvgFragmentationInPercent) + '.'
RAISERROR(@Message, 0, 1) WITH NOWAIT
SET @cmd = 'ALTER INDEX ' + @IndexName + ' ON [' + RTRIM(LTRIM(@SchemaName)) + '].[' + RTRIM(LTRIM(@Table)) + '] REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ', STATISTICS_NORECOMPUTE = OFF)'
EXEC (@cmd)
--PRINT @cmd
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Rebuild Index completed successfully for [' + @Table + '].'
RAISERROR(@Message, 0, 1) WITH NOWAIT
RAISERROR('', 0, 1) WITH NOWAIT
END
UPDATE #FramentedTableList SET IsProcessed = 1
WHERE TableName = @Table AND IndexName = @IndexName
END
WHILE EXISTS ( SELECT 1 FROM #TableList WHERE IsProcessed = 0 )
BEGIN
SELECT @Table = TableName FROM #TableList WHERE IsProcessed = 0
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Recompile Table for [' + @Table + ']'
RAISERROR(@Message, 0, 1) WITH NOWAIT
SET @cmd = 'exec sp_recompile ' + RTRIM(LTRIM(@Table))
EXEC (@cmd)
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Recompile Table completed successfully for [' + @Table + '].'
RAISERROR(@Message, 0, 1) WITH NOWAIT
RAISERROR('', 0, 1) WITH NOWAIT
UPDATE #TableList SET IsProcessed = 1
WHERE TableName = @Table
END
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Update Statistics for database [' + DB_NAME() + '].'
RAISERROR(@Message, 0, 1) WITH NOWAIT
SET @cmd = 'EXEC sp_updatestats'
EXEC (@cmd)
SET @Message = 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' - Statistics completed successfully for [' + DB_NAME() + '].'
RAISERROR(@Message, 0, 1) WITH NOWAIT
RAISERROR('', 0, 1) WITH NOWAIT
DROP TABLE #FramentedTableList
DROP TABLE #TableList
END TRY
PRINT 'DATE : ' + CONVERT(VARCHAR, GETDATE()) + ' There is some run time exception.'
PRINT 'ERROR CODE : ' + CONVERT(VARCHAR, ERROR_NUMBER())
PRINT 'ERROR MESSAGE : ' + ERROR_MESSAGE()
END CATCH
USE FARMAX_CAJA
GO
DBCC SHRINKFILE (N'FARMAX_CAJA_log' , 0, TRUNCATEONLY)
GO
Una vez terminado de ejecutar todo el script de mantenimiento ya procedemos a iniciar los servicios y abrir nuevamente el POS.
Y listo.
Validación
No aplica.
Notificación de resolución
Especificar la lista de usuarios que deben ser notificados al momento que se ha confirmado la resolución de la incidencia.
Incidencia relacionada
INC 2024-174430
INC 2024-167548
INC 2024-207797
INC 2024-206262
INC 2024-195963
INC 2024-191958
INC 2024-184292
INC 2024-153384
INC 2024-161812
INC 2024-153384
INC 2024-184156
INC 2024-187502
INC 2024-184997
INC 2024-181512
INC 2024-184208
INC 2024-184964
INC 2024-181687
INC 2024-174075
INC 2024-182179
INC 2024-209453
REQ 2024-206413
INC 2024-208554
INC 2024-242945
INC 2024-242137
INC 2024-246872
INC 2024-208554
INC 2024-211219
INC 2024-202944
INC 2024-202777
REQ 2024-218593
INC 2024-219212
INC 2024-219400
INC 2024-223699
INC 2024-223727
INC 2024-233188
INC 2024-232913
INC 2024-237026
INC 2024-238687
INC 2024-238048
INC 2024-237628
INC 2024-233219
REQ 2024-206413
INC 2024-209453
INC 2024-268940
INC 2024-265661
INC 2024-265452
INC 2024-261695
INC 2024-254295
INC 2024-232743
INC 2024-242937
INC 2024-248395
INC 2024-248201
INC 2024-246872
INC 2024-242137
INC 2024-242945
INC 2024-271526
INC 2024-274672
INC 2024-209453
INC 2024-299711
INC 2024-299179
INC 2024-298840
INC 2024-296952
INC 2024-296891
INC 2024-298042
INC 2024-288356
INC 2024-275991
INC 2024-282147
INC 2024-295270
INC 2024-294797
INC 2024-265567
INC 2024-286397
INC 2024-285930
INC 2024-284127
INC 2024-280304
INC 2024-295267
INC 2024-295315
INC 2024-289973
INC 2024-287505
INC 2024-289014
INC 2024-285957
INC 2024-283411
INC 2024-276734
INC 2024-280309
INC 2024-271834
INC 2024-272395
INC 2024-271834
INC 2024-312882
INC 2024-300757
REQ 2024-308514
INC 2024-305590
Glosario
Revisa el glosario del equipo de soporte de Farmacias del ahorro aquí