Web design and hosting, database, cloud and social media solutions that deliver business results
  • Soluciones de negocios
    • Automatización Robótica de Procesos
    • Software
    • Servicios de bases
      • Actualización del servidor y servicios de DBA
      • BI de energía
      • Integración de datos
      • Informes
    • Diseño web
      • Diseño de logo
      • Optimización del sitio web
      • Seguridad del sitio web
      • Traducción y localización web
      • Via de pago
      • Herramientas técnicas
    • Servicios en la nube
      • Servicios en la nube de Google
      • Servicios web de Amazon
      • microsoft azure
    • Medio Social
    • Microsoft Office
    • Hardware de TI
  • Academia
    • Nuestro entorno de prueba
    • Diseño de base de datos de aprendizaje
      • Los basicos
      • Obtener consulta abierta
      • Usando datos del servidor SQL
      • SQL Server 2008 para planes de mantenimiento
      • Usar fechas de SQL Server
      • Uso de las funciones de SQL Server
      • Uso de SQL Server Pivot-Unpivot
    • Aprendiendo Diseño Web
      • Creación del sistema de gestión de contenido de Ousia
      • ASP-NET
      • CSS
      • Usando JavaScript
    • Uso de las redes sociales
      • Cambiar una cuenta de Facebook de personal a empresa
      • Elegir dónde enfocar el esfuerzo de las redes sociales
      • Solicitar una revisión de Google
      • Tamaños de imagen de redes sociales
      • Uso de metadatos para configurar imágenes de redes sociales
    • Aprendizaje en la nube y servicios de TI
      • Error del programador de tareas 2147943645
      • Solicitud de SSL y generación de archivo PFX en OpenSSL Simple Steps
  • Acerca de
    • Blog
      • Actualización principal de Google, enero de 2020
      • Cierre de Internet de Hot Chilli
      • Cómo elegir el contenido de los folletos publicitarios de su sitio web
      • Construyendo una máquina de juego de nivel de entrada
      • Las cosas más molestas de los sitios web en Internet
      • Los 5 mejores sitios web para obtener gráficos vectoriales gratuitos
      • Prevención de estafas en línea
      • Skimmers de la gig economy
    • Carreras
      • Traductor inglés-español
      • Traductor inglés-japonés
    • Equipo
      • Ali Al Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • suneel kumar
      • Surya Mukkamala
    • Portafolio
عربى (AR)čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

Auditoría y sincronización en base de datos usando un desencadenante

Auditar y sincronizar tablas en diferentes bases de datos, con diferente estructura de datos usando un desencadenante

Acerca de

Esta es una versión muy simplificada de un código que instalamos en el sitio de un cliente en el pasado. Tenían dos bases de datos muy diferentes en diferentes servidores (cliente y marcador) que necesitaban tener ciertos datos sincronizados en tiempo real.

Había algunas formas de hacerlo, replicación, o procedimientos almacenados vinculados a un trabajo o desencadenantes, en su ejemplo tenía que ser un trabajo, porque no teníamos el código fuente de una de las bases de datos, sin embargo mi método preferido sería el uso de desencadenantes con algo como esto...

SQL

CREATE TABLE Customer(
CustomerID INT IDENTITY(1,1) CONSTRAINT PK_CustomerID PRIMARY KEY,
CustomerName NVARCHAR(100),
CustomerStatus INT
--,Other Customer Data...
)
CREATE TABLE CustomerAudit(
CustomerAuditID INT IDENTITY(1,1) CONSTRAINT PK_CustomerAuditID PRIMARY KEY,
CustomerAuditType NVARCHAR(100),
CustomerAuditDate DATETIME DEFAULT GETDATE(),
CustomerID INT,
CustomerName NVARCHAR(100),
CustomerStatus INT
)     
CREATE TABLE Dialler(
CustomerID INT CONSTRAINT PK_DiallerCustomerID PRIMARY KEY,
CustomerStatus INT,
CustomerName NVARCHAR(100),
DiallerStatus INT--Other Dialler Records
)
GO

Así que ahora hemos creado algunas tablas muy básicas que pueden almacenar datos de los clientes. A continuación vamos a crear algunos procedimientos almacenados para manejar la actualización de registros en el lado del marcador.

La razón por la que he hecho esto como procedimientos almacenados es para mantener el volumen de datos bajo (no quiero que el servidor 1 envíe registros de base de datos al servidor 2), es en efecto pellizcar lo que normalmente se haría en un entorno web.

SQL

CREATE PROC DiallerUpdate(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGIN
UPDATE Dialler SET CustomerStatus=@CustomerStatus,CustomerName=@CustomerName
WHERE CustomerID=@CustomerID
END
GO
CREATE PROC DiallerInsert(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGIN
INSERT INTO Dialler(CustomerID,CustomerName,CustomerStatus,DiallerStatus)
SELECT @CustomerID,@CustomerName,@CustomerStatus,0
END
GO
CREATE PROC DiallerDelete(@CustomerID INT) AS BEGIN
DELETE FROM Dialler
WHERE CustomerID=@CustomerID
END
GO

Ahora que hemos creado estos, podemos pasar a la creación de un desencadenante que se encargará de enviar los datos y como lo estamos haciendo, también podemos auditar nuestros registros.

SQL

CREATE TRIGGER CustomerInsert ON Customer AFTER INSERT
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Created',@CustomerID,@CustomerName,@CustomerStatus
--Call Insert Procedure
EXEC dbo.DiallerInsert@CustomerID,@CustomerName,@CustomerStatus
END
GO
CREATE TRIGGER CustomerUpdate ON Customer AFTER Update
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Updated',@CustomerID,@CustomerName,@CustomerStatus
--Call Update Procedure
EXEC dbo.DiallerUpdate@CustomerID,@CustomerName,@CustomerStatus
END
GO 
CREATE TRIGGER CustomerDelete ON Customer AFTER DELETE
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM deleted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Deleted',@CustomerID,@CustomerName,@CustomerStatus
--Call Delete Procedure
EXEC dbo.DiallerDelete@CustomerID
END
GO

Y eso es todo, ahora tenemos una auditoría de datos, y los registros en ambos lados se sincronizarán en milisegundos... Si se necesita hacer cross server, cambiar el comando EXEC a {servername}.{databasename}.{schema}.DiallerDelete etc/

Aquí podemos probarlo.

SQL

-- Insert Data
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 1',0
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 2',0
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 3',0
UPDATE Customer SET CustomerStatus=2 WHERE CustomerID=1
UPDATE Customer SET CustomerName=' Name 4' WHERE CustomerID=2
DELETE FROM Customer WHERE CustomerID=3
--Review Data
SELECT * FROM Dialler
SELECT * FROM Customer
SELECT * FROM CustomerAudit
Al crear los diferentes procesos, también nos ha permitido ser mucho más creativos con lo que hemos hecho.

Resultados

Dialler Records
CustomerIDCustomerStatusCustomerNameDiallerStatus
12Name 10
20Name 40
Customer Records
CustomerIDCustomerNameCustomerStatus
1Name 12
2Name 40
Audit Records
CustomerAuditIDCustomerAuditTypeCustomerIDCustomerNameCustomerStatus
1Record Created1Name 10
2Record Created2Name 20
3Record Created3Name 30
4Record Updated1Name 12
5Record Updated2Name 40
6Record Deleted3Name 30

Autor

Te ha resultado útil?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

Site Links

RSSLoginLink Política de cookiesmapa del sitio

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom

Partnered With

La configuración de este sitio está configurada para permitir todas las cookies. Éstos se pueden cambiar en nuestra página de configuración y política de cookies. Al continuar utilizando este sitio, usted acepta el uso de cookies.
Ousia Logo
Logout
Ousia CMS Loader