Skip to content

Instantly share code, notes, and snippets.

@tkMageztik
Created January 25, 2016 17:34
Show Gist options
  • Save tkMageztik/ef29a1d3a34d1df30182 to your computer and use it in GitHub Desktop.
Save tkMageztik/ef29a1d3a34d1df30182 to your computer and use it in GitHub Desktop.
script para troubleshotting ejecutable en sql server 2008r2+
-- ACTIVA EL MOSTRAR OPCIONES AVANZADAS EN SP_CONFIGURE
sp_configure 'show advanced', 1;
GO
-- COMO UN COMMIT PARA EL SCRIPT ANTERIOR
RECONFIGURE;
GO
-- MUESTRA LAS OPCIONES DE SP_CONFIGURE
sp_configure;
GO
DECLARE @V_NAME VARCHAR(50),@V_MINIMUM INT,@V_MAXIMUM INT,@V_CONFIG_VALUE INT,@V_RUN_VALUE INT
DECLARE @T_SP_CONFIGURE TABLE
(
C_NAME VARCHAR(50),
C_MINIMUN INT,
C_MAXIMUM INT,
C_CONFIG_VALUE INT,
C_RUN_VALUE INT
)
INSERT INTO @T_SP_CONFIGURE
EXEC sp_configure;
SELECT
@V_NAME = C_NAME,
@V_MINIMUM = C_MINIMUN,
@V_MAXIMUM = C_MAXIMUM,
@V_CONFIG_VALUE = C_CONFIG_VALUE,
@V_RUN_VALUE = C_RUN_VALUE
FROM @T_SP_CONFIGURE WHERE C_NAME = 'Database Mail XPs'
PRINT 'NOMBRE SERVICIO (NAME): ' + @V_NAME
PRINT 'VALOR MINIMO: (MINIMUM)' + CONVERT(VARCHAR(50),@V_MINIMUM)
PRINT 'VALOR MÁXIMO: (MAXIMUM)' + CONVERT(VARCHAR(50),@V_MAXIMUM)
PRINT 'VALOR CONFIGURADO (CONFIG VALUE): ' + CONVERT(VARCHAR(50),@V_CONFIG_VALUE)
PRINT 'VALOR ACTUAL : (RUN VALUE)' + CONVERT(VARCHAR(50),@V_RUN_VALUE)
PRINT ''
IF @V_CONFIG_VALUE = 1 AND @V_RUN_VALUE = 1
BEGIN
DECLARE @V_STATUS VARCHAR(25)
DECLARE @T_STATUS TABLE
(
C_STATUS VARCHAR(25)
)
-- MUESTRA EL ESTADO DEL MAIL SERVER DE SQL POR DECIRLO ASÍ
INSERT INTO @T_STATUS
EXEC msdb.dbo.sysmail_help_status_sp;
SELECT @V_STATUS = C_STATUS FROM @T_STATUS
PRINT 'STATUS DEL SERVICIO DE CORREO: ' + @V_STATUS
IF @V_STATUS = 'STOPPED'
BEGIN
PRINT 'DEBE INICIAR EL SERVICIO DE MAIL UTILIZANDO:'
PRINT 'EXEC msdb.dbo.sysmail_start_sp'
PRINT 'Luego vuelva a ejecutar el script'
PRINT ''
END
ELSE
BEGIN
PRINT 'SERVICIO DE MAIL ACTIVADO E INICIADO CORRECTAMENTE'
PRINT ''
END
END
ELSE
BEGIN
PRINT 'DEBE ACTIVAR EL Servicio DATABASE MAIL XPs utilizando:'
PRINT ''
PRINT '-- ACTIVA EL MOSTRAR OPCIONES AVANZADAS EN SP_CONFIGURE'
PRINT 'sp_configure ''show advanced'', 1; '
PRINT 'GO'
PRINT '-- COMO UN COMMIT PARA EL SCRIPT ANTERIOR'
PRINT 'RECONFIGURE;'
PRINT 'GO'
PRINT 'sp_configure ''Database Mail XPs'', 1;'
PRINT 'GO'
PRINT 'RECONFIGURE;'
PRINT 'GO'
PRINT ''
END
GO
-- ACTIVA EL DATABASE MAIL, SIEMPRE Y CUANDO 'Database Mail XPs' esté en 1
--EXEC msdb.dbo.sysmail_start_sp;
-- DETIENE EL DATABASE MAIL, SIEMPRE Y CUANDO 'Database Mail XPs' esté en 1
--EXEC msdb.dbo.sysmail_stop_sp ;
-- ACTIVA EL DATABASE MAIL, SIN ESTO NINGUNA CONSULTA DE ESTADO O INICIO DE SERVICIO DE CORREO FUNCIONA,
-- ES COMO UN INICIO DE SERVICIO GLOBAL
--sp_configure 'Database Mail XPs', 1;
--GO
--RECONFIGURE;
--GO
-- PARA ENVIAR CORREOS EL USUARIO DEBE TENER ESTE ROL POR LO MENOS O SER UN OWNER DE MSDB O SYSADMIN
--EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole'
--GO
-- MUESTRA LOS USUARIOS QUE TIENE ACCESO A LOS PROFILES, SIN EMBARGO NO MUESTRAN CIERTOS PROFILES
-- QUE SON PUBLICOS AL PARECER.
--EXEC msdb.dbo.sysmail_help_principalprofile_sp;
--GO
-- DESACTIVA EL MOSTRAR OPCIONES AVANZADAS EN SP_CONFIGURE
sp_configure 'show advanced', 0;
GO
-- COMO UN COMMIT PARA EL SCRIPT ANTERIOR
RECONFIGURE;
GO
USE msdb
GO
DECLARE @V_R_NAME VARCHAR(50),@V_USR_NAME VARCHAR(50)
SET @V_USR_NAME = '<usuario_bd_pade>'
SELECT @V_R_NAME = p.NAME
FROM sys.database_role_members rm
JOIN sys.database_principals p
ON rm.role_principal_id = p.principal_id
JOIN sys.database_principals m
ON rm.member_principal_id = m.principal_id
where m.name = @V_USR_NAME
AND P.name = 'DatabaseMailUserRole'
IF @V_R_NAME IS NULL
BEGIN
PRINT ''
PRINT 'NO TIENE ASIGNADO EL ROL ''DatabaseMailUserRole'''
PRINT 'FAVOR ASIGNARLO CON: '
PRINT 'exec sp_addrolemember ''DatabaseMailUserRole'', ''<usuario_bd_pade>'''
PRINT ''
END
ELSE
BEGIN
PRINT ''
PRINT 'SI TIENE EL ROL ''DatabaseMailUserRole'''
PRINT ''
END
DECLARE @principal_sid varbinary(85)
exec msdb.dbo.sysmail_verify_principal_sp null, @V_USR_NAME, 0, @principal_sid OUTPUT
DECLARE @profileid int
exec msdb.dbo.sysmail_verify_profile_sp null, 'pf_financiero_de', 0, 0, @profileid OUTPUT
IF NOT EXISTS (select * from sysmail_principalprofile where principal_sid = @principal_sid and profile_id = @profileid)
BEGIN
PRINT 'NO ESTÁ ASIGNADO EL PROFILE DE CORREO DE DINERO ELECTRÓNICO AL USUARIO ELEGIDO'
PRINT 'FAVOR ASIGNARLO CON: '
PRINT 'EXECUTE msdb.dbo.sysmail_add_principalprofile_sp'
PRINT '@principal_name = ''<usuario_bd_pade>'','
PRINT '@profile_name = ''pf_financiero_de'','
PRINT '@is_default = 1 ;'
END
ELSE
BEGIN
PRINT 'ESTÁ CORRECTAMENTE ASIGNADO EL PROFILE AL USUARIO'
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment