Tables de database SQL Sync vers un autre server

nous avons un système qui crée et met en table dans une database sur notre server de production pour chaque jour / quart de travail. J'aimerais récupérer datatables de ce server et les transférer sur notre server d'archives. Si datatables datent de plus de x jours, supprimez-les du server de production.

Sur le server de production, la database est appelée "transformations" et les tables sont nommées "yyyy-mm-dd_shift_table". Je voudrais déplacer cela dans une database sur un autre server exécutant SQL 2012 dans une database "Archive" avec le même nom. Chaque table contient environ 30k loggings pour la journée.

La façon dont je le vois serait quelque chose comme:

  • Obtenir la list des tables sur le server de production
  • Si la table existe dans le server d'archives, searchz les modifications (uniquement pertinentes pour la table actuelle) et synchronisez les modifications
  • Si la table n'existe pas dans Archive Server, créez des modifications de table et de syn.
  • Si la date sur la table est plus grande et X jours, supprimez la table du server d'archives

Idéalement, je voudrais avoir cela comme une procédure en SQL qui peut fonctionner soit quotidienne / horaire ect.

Suggestions sur la façon d'attaquer ce serait génial.

EDIT: heureux de faire une sélection sur toutes les tables correspondantes dans la database et de les écrire dans une seule table sur ma database.

Beaucoup de creuser aujourd'hui et j'ai trouvé le stream, Cela va charger toutes datatables du server distant et l'insert dans la table sur le server local. Cela nécessite un server lié sur votre server d'archives que vous pouvez utiliser pour interroger le server distant. Je suis sûr que vous pourriez inverser cela et pousser datatables mais je ne voulais pas mâcher des cycles sur le server de production.

-- Set up the variables --Tracer for the loop DECLARE @i int --Variable to hold the SQL queries DECLARE @SQLCode nvarchar(300) --Variable to hold the number of rows to process DECLARE @numrows int --Table to hold the SQL queries with and index for looping DECLARE @SQLQueries TABLE ( idx smallint Primary Key IDENTITY(1,1) , SQLCode nvarchar(300) ) --Set up a table with the SQL queries that will need to be run on the remote server. This section creates an INSERT statment --which is returning all the records in the remote table that do not exist in the local table. INSERT INTO @SQLQueries select 'INSERT INTO Local_Table_Name SELECT S.* FROM [Remote_ServerName].[Transformations].[dbo].[' + name + '] AS S LEFT JOIN Local_Table_Name AS T ON (T.Link_Field = S.Link_Field) WHERE T.Link_Field IS Null'+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) from [Remote_ServerName].[Transformations].sys.sysobjects where type = 'U' AND name Like '%_Table_Suffix' --Set up the loop to process all the tables SET @i = 1 --Set up the number of rows in the resultant table SET @numrows = (SELECT COUNT(*) FROM @SQLQueries) --Only process if there are rows in the database IF @numrows > 0 --Loop while there are still records to go through WHILE (@i <= (SELECT MAX(idx) FROM @SQLQueries)) BEGIN --Load the Code to run into a variable SET @SQLCode = (SELECT SQLCode FROM @SQLQueries WHERE idx = @i); --Execute the code EXEC (@SQLCode) --Increase the counter SET @i = @i + 1 END 

Initial a couru plus de 45 tables insérées environ 1,2 million d'loggings ont pris 2,5 min. Après que chaque course a pris environ 1,5 minute qui a seulement inséré environ 50-100 dossiers

En fait, j'ai créé une solution pour cela et l'ai posté sur GitHub. Il utilise une bibliothèque appelée EzAPI et synchronisera toutes les tables et colonnes d'un server à l'autre.

Vous pouvez l'utiliser, mais le process de base fonctionne en vérifiant d'abord les métadonnées entre les bases de données et en générant les objects modifiés. Après avoir apporté les modifications nécessaires au server de destination, il va générer un package SSIS par object, puis exécuter le package. Pouvez-vous choisir de supprimer ou de conserver les packages après leur génération.

https://github.com/thevinnie/SyncDatabases