2016-09-01 5 views
0

Wir haben eine große Produktion MSSQL Datenbank (MDF appx. 400GB) und ich habe eine Test-Datenbank. Alle Tabellen, Indizes, Ansichten usw. sind gleich. Ich muss sicherstellen, dass die Daten in den Tabellen dieser beiden Datenbanken konsistent sind. Also muss ich alle neuen Zeilen einfügen und alle aktualisierten Zeilen jeden Tag in die Test-DB aus der Produktion aktualisieren.Wie werden SSIS-Pakete dynamisch ausgeführt?

Ich kam auf die Idee, SSIS-Pakete zu verwenden, um die Daten konsistent zu machen, indem aktualisierte Zeilen und neue Zeilen in allen Tabellen überprüft werden. Mein SSIS-Fluss ist;

Ich habe Pakete in SSIS für jede Tabellen separat, weil; Ordentlich;

  1. Ich bekomme den Timestamp-Wert in der Tabelle, um die letzten 1 Tageszeilen zu bekommen, anstatt die ganze Tabelle zu bekommen.
  2. Ich bekomme die Zeilen der Tabelle in der Produktion
  3. Dann im 'Lookup' Tool verwenden, um diese Daten mit der Test-Datenbanktabelle Daten zu vergleichen.
  4. Dann im bedingten Sprit, um eine Ahnung zu bekommen, ob die Daten neu oder aktualisiert sind. Wenn die Daten neu sind, füge ich diese Daten in das Ziel 5_2 ein. Wenn die Daten aktualisiert werden, aktualisiere ich die Daten in der Zieltabelle.

enter image description here

Datenfluß im MTRule und STBranch Paket im Bild

Das Problem besteht darin, für jede Tabelle alle diese Einzelstrom zu schaffen im sich wiederholenden und ich habe mehr als 300 Tabelle wie folgt . Es dauert viele Stunden :(

Was im fragen ist;

Gibt es eine Möglichkeit in SSIS diese dynamisch zu tun

PS: Jede einzelne Tabelle hat seine eigenen Spalten und PK-Werte, aber meine Daten? fließen Schema ist immer gleich.. (Unten)

enter image description here

+0

Warum nicht nächtliche Backup-Wiederherstellung für Test db? Wenn es zu Testzwecken ist, können wir die Produktionsdaten nicht überlasten. Haben Sie im Test eine Waschanforderung? –

+0

Ich habe vergessen zu sagen, dass ich keine Backup-Restore-Operationen durchführen kann, da unser prod sql in der Cloud ist, aber der Test sql nicht ist. Aus anderen Gründen kann die Sicherungsdatei nicht von der Cloud zum Testserver verschoben werden. –

+0

Wie viele Daten haben sie? Haben Sie Delta-Attribut für alle wichtigen Tabellen festgelegt? Wenn Sie Volllast für alle Tabellen mit großem Volumen durchführen wollen, dann wird das auch eine kostspielige Operation sein. –

Antwort

1

Sie können in BiMLScript nachsehen, mit dem Sie Pakete dynamisch basierend auf Metadaten erstellen können.

+0

Ja, es scheint richtig und am logischsten, einfacher Weg. Vielen Dank. –

0

ich die beste Art und Weise glauben, dass dies zu erreichen, ist Ausdrücke zu verwenden. Sie befähigen Sie dynamisch die Quelle und Ziel festgelegt. Ein mögl ible Lösung könnte wie folgt aussehen:

  • eine Tabelle erstellen, die alle Ihre Tabelle speichert Namen und PK Spalten
  • ein Paket definieren, die durch diese Tabelle Loops und die analysiert eine SQL-Anweisung
  • Rufen Sie Ihre Haupt-Paket und passieren die Anw es
  • Verwenden sie die Anw als Datenquelle für die Datenfluss
  • ggf. die Zieltabelle als Parameter übergeben als auch (andere Spalte in Ihrer Konfigurationstabelle)

So habe ich mehrere sehr große Tabellen bearbeitet: Die Daten mussten aus 20 Tabellen geholt und auf einen einzigen Tisch verschoben werden.

+0

Ich werde das sicher versuchen. Ich werde dir die Ergebnisse erzählen. danke –

+0

Da ich gerade an einem dieser Pakete arbeiten musste, hier ein weiterer Hinweis: In der Quelle brauchst du keinen Ausdruck sondern den "SQL Command from Variable" - dort musst du den Parameter mit dem stmt ablegen. – Tyron78

0

Sie sind besser dran, eine gespeicherte Prozedur zu schreiben, die den Tabellennamen als Parameter verwendet und dort Ihre CRUD ausführt.

Rufen Sie dann die gespeicherte Prozedur in einer Komponente in SSIS auf.

0

Warum benötigen Sie SSIS?

Sie sind besser dran, eine gespeicherte Prozedur zu schreiben, die den Tabellennamen als Parameter verwendet und dort Ihre CRUD ausführt. Rufen Sie dann die gespeicherte Prozedur in einer Komponente in SSIS auf.

In der Tat können Sie möglicherweise alles mit einer Stored Procedure tun und in einem SQL Agent-Job planen.

Verwandte Themen