miércoles, 30 de agosto de 2017
Correo electrónico en SQL Server
on
agosto 30, 2017
SQL permite la configuración de cuentas de correos electrónicos para el envió de informes, resultados o errores que se pueda generar en JOBS, de igual manera se pueden utilizar para enviar los resultados de un Query o un procedimiento almacenado.
Se puede utilizar con cuentas de correo de Gmail, Outlook, o cualquier correo electrónico valido.
Nota: Esta funcionalidad solo está disponible en las versiones licenciadas de SQL Server, si se utiliza la versión Express esto no se puede utilizar, aunque existe una opción de cómo utilizarlo.
Configurar Mail SQL Server
Se debe realizar los siguientes pasos para la correcta configuración del correo electrónico dentro de SQL Server.
En Object Explorer (Explorador de Objetos) encontramos Management y debajo de este, se encuentra la opción Database Mail.
Clic derecho en Database Mail para seleccionar Configure Database Mail.
La primera ventana será la bienvenida al Wizard de configuración, le damos Next.
Presenta 4 opciones de configuración, se deberá seleccionar dependiendo del movimiento que se requiera.
Set up Database Mail by performing the followed task: Esta opción es la recomendada por primera vez, al dar Next, aparece las ventanas de configuración del correo electrónico.
- Profile Name: Será el nombre del perfil.
- Description: Una breve descripción del perfil.
- Sección SMTP Accounts: hacer clic en Add. Y por primera vez abre la ventana de configuración del correo electrónico:
- Account Name: Nombre de Referencia de la cuenta de correo.
- Descripcion: Breve descripción de la cuenta de correo
- Email Address: correo electrónico por el cual se realizarán los envíos.
- Display Name: Nombre para la cuenta de correo.
- Reply e-mail: Volver a ingresar correo electrónico.
- Server Name: Nombre del servidor del correo electrónico para Gmail es smtp.gmail.com.
- Port Number: Puerto de salida de la cuenta de correo.
- SSL: Activar si el envio permite la seguridad SSL.
- Basic authentication para la cuenta de Google o correo electrónico de hosting.
- User name: correo electrónico.
- Password: Contraseña del correo.
- Confirm Password: Confirmación de la contraseña.
Revisar la configuración de puertos para Gmail aquí.
Al dar siguiente, automáticamente enviara a la opción Manage profile security.
Manage Database Mail accounts and profiles: La segunda opción es utilizada cuando ya tenemos configurado un perfil y una cuenta de correo electrónico, es utilizada para realizar modificaciones en perfiles.
Manage profile security: Opcion para cambiar los perfiles a públicos o privados, si son públicos cualquier usuario de SQL puede acceder al perfil, si se cambia a privado, se debe seleccionar el o los usuarios que solo puede utilizar el perfil de correo electrónico.
Esta ventana contiene 2 pestañas (tabs) Public y Private, seleccionar el perfil como publica para que las conexiones puedan acceder al perfil, seleccionar privada al usar un usuario o rol, para que pueda utilizar el perfil.
Al dar clic en Next, mostrara la venta de la opción View or change system parameters.
View or change system parameters: Aquí se puede cambiar los parámetros generales que aplican para todos los perfiles configurados, como por ejemplo el número de intentos de envió, los segundos de delay, máximo de peso de envió, extensiones prohibidas en él envió etc.
Al terminar de configurar los pasos anteriores, el wizard muestra los cambios realizados, y la confirmación de estos, al dar clic en Finish, comenzara a aplicar los nuevos cambios realizados, indicando al final si se crearon correctamente o marco error.
Enviar correo electrónico
Para revisar la configuración, es necesario enviar un correo de prueba, esta se puede hacer de la siguiente manera.
Dentro de Database Mail hacer clic derecho y seleccionar Send Test E-Mail.
Database Mail Profile: El perfil de envió de correo
To: Direccion de correo electrónico al cual se envía la prueba.
Subject: Asunto del correo electrónico.
Body: Cuerpo del correo electrónico.
Haciendo clic en el botón Send Test E-mail, muesta una ventana para confirmar si el correo electrónico se envió correctamente, sí llega el correo en la bandeja de entrada, se habrá configurado correctamente el Email para utilizarlo desde SQL Server.
Si el correo no llega a la bandeja de entrada, en SQL Server podemos revisar el log de envio de correos además del mensaje de error que haya marcado o el mensaje del envio exitoso.
Para revisarlo se debe hacer clic derecho en Database Mail y seleccionar la opción View Database Mail Log.
Como se muestra en la imagen, se puede apreciar el historial de envió de correo junto con el estatus de fallido o si fue satisfactorio.
Nota: si el correo electrónico configurado es d gmail y marca el error 5.5.1 Authentication Required, en la cuenta de Gmail se debera permitir el uso de aplicaciones terceras, por seguridad, gmail tiene desactivado el envió de correos por medio de terceros, para evitar el spam.
Hasta aquí esta configuración de correo electrónico en SQL Server mas adelante en nuevas entadas, estaré utilizando esta configuración para enviar el resultado de una consulta y si cumple con los filtros enviar el correo.
Hasta aquí esta configuración de correo electrónico en SQL Server mas adelante en nuevas entadas, estaré utilizando esta configuración para enviar el resultado de una consulta y si cumple con los filtros enviar el correo.
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Seguir
Compartir
Compartir
martes, 15 de agosto de 2017
Jobs SQL Server P1
on
agosto 15, 2017
¿Que es un Jobs en SQL Server?
Son tareas programadas para ejecutar operaciones de usuarios como Querys, respaldo de bases de datos, ejecutar análisis de bases de datos, etc.
Ambiente
Los Jobs se ejecutan bajo el servicio del SQL Agent, si este servicio no se encuentra en ejecución, no se podrá crearlos, ni ejecutarse en casa de tener creados. Para revisar si el servicio se encuentra en ejecución, en el servidor o equipo que se encuentre instalado la instancia de SQL, buscamos la aplicación SQL Server Configuration.
Al abrir la configuración de SQL, se verifica si el servicio con nombre: SQL Server Agent (<NombreInstancia>) se encuentre en ejecución, en caso de no estarlo, se inicia seleccionando el servicio y haciendo clic en iniciar (star).
Nota: Esta funcionalidad solo está disponible para las versiones licenciadas de SQL Server, esta función no se encuentra disponible en SQL Server Express, no se podrá iniciar SQL Server Agent.
Una vez que el servicio está en ejecución, al abrir la instancia en SQL Server, mostrara una nueva opción al final del menú de árbol; SQL Server Agent.
Creación de Jobs
Escenario: se requiere crear un Job el cual este creando respaldo de la base de datos una vez a la semana en el horario de las 8:00 P.M.
Pasos a generar:
1) Crear un nuevo Job.Expandir SQL Server Agent, clic derecho en New Job; seleccionar el menú New Job.
Agregar el nombre del Job para identificarlo, seguido del usuario de SQL, una breve descripción del Job y al final dejamos activada la opción de Enable para que el Job se encuentre activo al momento de crearlo.
Hacer clic en el botón inferior de New. Capturar la descripción del Step, el tipo dejarlo Transact-SQLScript, en database se puede dejar en master o directamente se puede seleccionar la base de datos en cuestión.
Dentro del comando agregar el siguiente código:
BACKUP DATABASE[Blog]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Blog.bak'
Para finalizar, se selecciona la opción Schedules, para agregar un nuevo calendario de ejecución.
Para este escenario se requiere que se ejecute una vez por semana en el horario de las 8:00 P.M., en la siguiente ventana se ajusta la recurrencia para este caso en especial.
Una vez realizados estos pasos, el Job se encontrará ejecutándose semanalmente, sin tener que realizar los respaldo manualmente, este trabajo será recurrente y el Job se encargará de ejecutarlo.
En la siguiente parte veremos otro escenario de ejecución donde el Job será de gran utilidad, además de revisar el historial de ejecuciones, alertas y salidas de resultados.
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Seguir
Compartir
Compartir
martes, 8 de agosto de 2017
Trigger SQL Server
on
agosto 08, 2017
¿Que es un trigger?
Un trigger (disparador) es un objeto que se encuentra ligado a una tabla el cual se ejecuta después de un evento que sucede en la tabla, las cuales son: INSERT, UPDATE, DELETE. Esto significa que al suceder la acción en la tabla automáticamente se ejecuta el trigger el cual puede tener una o varias instrucciones a proceder.
Ventajas
- Provee una alternativa para la verificación de la integridad en los datos.
- Puede detectar errores en la lógica de negocio en la base de datos.
- Se puede utilizar como tareas programadas (Task Schedule).
- Útiles para auditar los cambios en las bases de datos.
Desventajas
- Pueden aumentar la sobrecarga del servidor de base de datos.
- Se ejecutan y son invisibles desde las aplicaciones cliente, por lo tanto, es difícil averiguar qué sucede en la capa de base de datos.
Sintaxis de creación, modificación y eliminado de triggers.
Crear:
CREATE TRIGGER <Nombre>
ON <NombreTabla>
AFTER <Evento>
AS
Modificar:
ALTER TRIGGER <Nombre>
ON <NombreTabla>
AFTER <Evento>
AS
Borrar:
DROP TRIGGER <Nombre>
Tablas de eventos en triggers
Al crear los triggers se ejecutan después de afectar los eventos en las tablas, SQL Server crear tablas por evento para indicar cuales fueron los valores que se utilizaron a ejecutar el trigger y podemos acceder a estos en las tablas: INSERTED, DELETED, al actualizar la tabla (UPDATE), los datos se encuentran en la tabla INSERTED.
Ejemplos:
Query para el siguiente ejemplo, tabla Personas e historial de nombre.
CREATE TABLE Personas(
PersId int PRIMARY KEY IDENTITY(1,1) NOT NULL,
PersNombre nvarchar (80) NOT NULL,
PersFecNacimiento datetime NULL,
PersActivo bit NOT NULL
)
CREATE TABLEHistorialNombresPersonas
(
Id Int IDENTITY Primary Key
PersId INT,
ValorAnterior Nvarchar(80),
ValorNuevo Nvarchar(80)
)
Para el siguiente ejemplo, se va almacenar todos los cambios realizados en la columna nombre de la tabla Personas.
CREATE TRIGGERTR_HistoNombre
ON dbo.Personas
AFTER UPDATE
AS
DECLARE @Id INT
SET @Id = (SELECTPersId FROM INSERTED)
DECLARE@NombreNuevo NVARCHAR(80)
SET @NombreNuevo = (SELECTPersNombre FROM INSERTED)
DECLARE@NombreAnterior NVARCHAR(80)
SET @NombreAnterior = (SELECTPersNombre FROM DELETED)
INSERT INTOHistorialNombresPersonas
VALUES (@Id,@NombreAnterior,@NombreNuevo)
El trigger anterior funciona correctamente sí nos aseguramos que siempre se va a actualizar registro por registro. Las tablas INSERTEDy DELETED pueden contener más de una fila, al ejecutar el UPDATE en más de un registro en la tabla; sobre el trigger ocurre la excepción y los cambios no se ven afectados. Ejemplo de query que provoca el error al actualizar en la tabla:
UPDATEPersonas SET
PersNombre = 'Nuevo Nombre'
ALTER TRIGGERTR_HistoNombre
ONPersonas
AFTER UPDATE
AS
INSERT INTOHistorialNombresPersonas
SELECTINSERTED.PersId, DELETED.PersNombre,INSERTED.PersNombre
FROM INSERTED
INNER JOINDELETED ON INSERTED.PersId = DELETED.PersId
Modificación del trigger para actualizar más de una fila a la vez, al ejecutarse inserta los nombres correctamente en la tabla HistorialNombresPersonas, aun así, este trigger se ejecuta al actualizar cualquier columna de la tabla Persona, en este ejemplo puede funcionar, pero estaría acumulando los nombres cuando realmente no sufrió un cambio. Ejemplo sí en la tabla Persona se actualiza el campo PersFecNacimiento, se dispara el trigger y almacena en la tabla HistorialNombresPersonas y procede a guardar un registro con el mismo nombre en los campos ValorAnterior y ValorNuevo.
En la siguiente alteración del trigger se corrige el problema anterior validando dentro de la operación del trigger que, si la columna PersNombre es la afectada, se procede a crear el registro en la tabla HistorialNombresPersonas.
ALTER TRIGGER TR_HistoNombre
ONPersonas
AFTER UPDATE
AS
IF UPDATE (PersNombre)
BEGIN
INSERT INTOHistorialNombresPersonas
SELECTINSERTED.PersId, DELETED.PersNombre,INSERTED.PersNombre
FROMINSERTED
INNER JOINDELETED ON INSERTED.PersId = DELETED.PersId
END
Hasta esta alteración del trigger funciona correctamente, pero aún se tiene un detalle que el cual queda a criterio de cómo se quiere manejar. El detalle pasa cuando se actualiza la columna PersNombre con el mismo valor que tiene anteriormente.
UPDATEPersonas SET
PersNombre =PersNombre
WHEREPersonas.PersId = 1
Este query actualiza la columna PersNombre con el mismo valor, el cual genera un registro en la tabla HistorialNombresPersonas, esto pasa porque cumple con todos los filtros que tiene el trigger, sí se requiere guardar un registro con el mismo valor en las columnas, se debe agregar un filtro para que no se genere el registro.
ALTER TRIGGERTR_HistoNombre
ONPersonas
AFTER UPDATE
AS
IF UPDATE (PersNombre)
BEGIN
INSERT INTOHistorialNombresPersonas
SELECTINSERTED.PersId, DELETED.PersNombre,INSERTED.PersNombre
FROMINSERTED
INNER JOINDELETED ON INSERTED.PersId = DELETED.PersId
WHEREDELETED.PersNombre <> INSERTED.PersNombre
END
Con el filtro WHERE queda listo para que no genere registro con el mismo valor en ambas columnas.
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Seguir
Compartir
Compartir
Suscribirse a:
Entradas
(
Atom
)