Buscar contenidos

viernes, 16 de agosto de 2024

Ejemplo SP + JOB para traslado de tabla/Históricos

 Para generar un Job en SQL Server 2019 que traslade los registros más antiguos de la tabla persona a una tabla espejo histórica, manteniendo solo los 10,000 registros más recientes en la tabla principal, puedes seguir los siguientes pasos:

  1. Crear la tabla histórica:

    CREATE TABLE persona_historica ( nombre NVARCHAR(255), edad INT, email NVARCHAR(255), identity INT PRIMARY KEY );
  2. Crear un procedimiento almacenado para realizar la transferencia: Este procedimiento moverá los registros más antiguos a la tabla histórica y luego los eliminará de la tabla principal.

    CREATE PROCEDURE sp_MoverRegistrosAntiguos AS BEGIN -- Mover los registros más antiguos a la tabla histórica INSERT INTO persona_historica (nombre, edad, email, identity) SELECT nombre, edad, email, identity FROM persona WHERE identity <= (SELECT MIN(identity) FROM (SELECT TOP 10000 identity FROM persona ORDER BY identity DESC) AS t); -- Eliminar los registros movidos de la tabla principal DELETE FROM persona WHERE identity <= (SELECT MIN(identity) FROM (SELECT TOP 10000 identity FROM persona ORDER BY identity DESC) AS t); END;
  3. Crear un Job en SQL Server Agent: Puedes crear un Job en SQL Server Management Studio (SSMS) que ejecute el procedimiento almacenado una vez por semana.

    • Abre SQL Server Management Studio (SSMS).
    • Navega a SQL Server Agent > Jobs.
    • Haz clic derecho en Jobs y selecciona New Job....
    • En la pestaña General, dale un nombre al Job, por ejemplo, MoverRegistrosAntiguos.
    • En la pestaña Steps, haz clic en New... para agregar un nuevo paso.
      • En Type, selecciona Transact-SQL script (T-SQL).
      • En Command, ingresa la llamada al procedimiento almacenado:
        sql
        EXEC sp_MoverRegistrosAntiguos;
      • Haz clic en OK para guardar el paso.
    • En la pestaña Schedule, haz clic en New... para crear un nuevo horario.
      • Configura el Job para que corra una vez por semana en el día y hora que prefieras.
    • Haz clic en OK para guardar el Job.

Este Job ahora se ejecutará automáticamente una vez por semana, manteniendo solo los 10,000 registros más recientes en la tabla persona y trasladando los demás a la tabla persona_historica.

miércoles, 14 de agosto de 2024

Ejemplo Azure Service Bus, N:1, N:N

El patrón arquitectónico Broker es utilizado para la implementación de sistemas de software distribuidos con componentes desacoplados.



Funciona como un intermediario entre el cliente y el servidor encargado de realizar la coordinación de mensajes, solicitudes, respuestas etc.



La arquitectura broker tiene como objetivo poner un intermediario entre los clientes y el servidor o múltiples de estos, tiene el objetivo de gestionar el envío de información o la ejecución de tareas, al tener esta arquitectura permite a una aplicion tener funciones desacopladas y descentralizadas lo que facilita la escalabilidad y la seguridad del sistema informático.











   static async Task Main(string[] args)

   {

 

       // Reemplaza con tu cadena de conexión de Service Bus

       string connectionString = " ";

       string topicName = "topic_poc_01";

       string subscription = "subscription_poc_02";

 

       // Crear un cliente de Service Bus

       ServiceBusClient client = new ServiceBusClient(connectionString);

 

       try

       {

           // Enviar un mensaje

           await SendMessageAsync(client, topicName, "Hola desde Service Bus");

 

       

           // Recibir y eliminar un mensaje

           await ReceiveAndDeleteMessageAsync(client, topicName, subscription);

       }

       finally

       {

           // Cerrar el cliente

            await client.DisposeAsync();

       }

    

   }

 

 

   static async Task SendMessageAsync(ServiceBusClient client, string topicName, string messageBody)

   {

       // Crear un emisor para el tópico

       ServiceBusSender sender = client.CreateSender(topicName);

 

       // Crear un mensaje

       //ServiceBusMessage message = new ServiceBusMessage(messageBody);

 

       // Crear un mensaje con la propiedad personalizada

       ServiceBusMessage message = new ServiceBusMessage(messageBody);

       message.ApplicationProperties.Add("tipo", "orden");

 

 

       try

       {

           // Enviar el mensaje

           await sender.SendMessageAsync(message);

 

              

           Console.WriteLine("Mensaje enviado correctamente.");

       }

       finally

       {

           // Cerrar el emisor

           await sender.DisposeAsync();

       }

   }

 

   static async Task ReceiveAndDeleteMessageAsync(ServiceBusClient client, string topicName, string subscription)

   {

       // Crear un receptor para el tópico

       ServiceBusReceiver receiver = client.CreateReceiver(topicName, subscription);

 

       try

       {

           // Recibir un mensaje

           ServiceBusReceivedMessage receivedMessage = await receiver.ReceiveMessageAsync();

 

           if (receivedMessage != null)

           {

               Console.WriteLine("Mensaje recibido: " + receivedMessage.Body.ToString());

               await receiver.CompleteMessageAsync(receivedMessage);

               Console.WriteLine("Mensaje eliminado correctamente.");

           }

           else

           {

               Console.WriteLine("No se encontraron mensajes.");

           }

       }

       catch (Exception ex) {

           Console.WriteLine(ex.Message);

       }

       finally

       {

           // Cerrar el receptor

           await receiver.DisposeAsync();

       }

   }