# Linux-Shell vs. Stored Procedure



## luigied (27. Oktober 2009)

Hi Leute,

ich steck etwas in ner Gewissenskrise 
Ich soll eine Programm schreiben (in Java), welches Daten von verschiedenen MS SQLServer-Datenbanken nach DB2 migriert. Soweit so einfach. 

Bisher schreibt mein Programm die Daten auch wunderbar von in extra angelegte Tabellen der DB2. Allerdings müssen diese Daten dann noch in andere Tabellen einsortiert werden.

Mein Chef meinte, dazu könnte man ein Linux-Shell-Skript schreiben, um nicht jeden Query einzeln absetzen zu müssen.

Jetzt ist mir aber aufgefallen, dass das Shell-Skript doch aber auch nix anderes macht, als die Querys einzeln zur DB zu schicken, oder
Wäre es nicht sinnvoller das Ganze über Stored Procedures oder Trigger zu lösen?

Oder haben Linux-Shell-Skripte Fähigkeiten, die mir bisher verborgen geblieben sind

Danke schonmal.

Mfg LuigiEd


----------



## Enumerator (27. Oktober 2009)

Hi!

Die "Linux-Shell" (toller Begriff, kannst' Deinem Chef mal zur fachlichen Präzision gratulieren) hat keine Super-Kuh-Kräfte. Die hat nur apt.
Mal im Ernst:

Ja, Du kannst in der Shell auch nicht mehr machen als im Programm.
Nein, Du bist nicht gezwungen jedes Query einzeln abzusetzen. Dafür gibt's Semikola - außer natürlich Du brauchst die Ergebnisse.
Ja, Stored Procedures sind definitiv schneller. Aber die Frage ist, ob sich der Aufwand lohnt sie zu schreiben zumal ich annehme, das Portieren ist eine Einmalige Sache?

Gruß
Enum

[EDIT]
Übrigens gibt es für den Task einen sehr guten Guide vom IBM.
Und auch Software, z.B. die hier...


----------



## luigied (27. Oktober 2009)

Hey, danke erstmal für die schnelle Antwort.

Ich glaube ich hab das etwas zu schwammig formuliert.

1. "Linux-Shell" hab ich jetzt einfach gesagt, weil ich es nicht besser weiß *Chef in Schutz nehm*
2. Das mit den Semikolons weiß ich auch  meinte jeden Query einzeln an den Server schicken^^
3. Das Programm soll einmal am Tag laufen und die neuen Daten migrieren

Ein Cron-Job soll mein Java-Programm dann entsprechend starten und die Daten sollen migriert werden. Deshalb dachte ich, Stored Procedures wären hier angebrachter.
Gut: Der Vorteil bei Shell-Skripten (oder Bash) ist, dass man sie leichter anpassen kann, da es sich ja nur um Plain-Text handelt


----------



## Enumerator (27. Oktober 2009)

Hi!

Also ich verstehe die Aufgabe so, dass Den Java-Programm die Daten aus der SQLServer holt und in nach DB2 schreibt. Anschließend sollen die Daten in DB2 "einsortiert" werden und dafür war der Vorschlag mit dem Shellskript.
Wenn das wirklich täglich passiert und über Trigger in den Eingangs-Tabellen zu lösen ist, dann sind die vor allen anderen Methoden vorzuziehen; sauberer geht's nicht.
Alternativ oder in Addition sind Stored Procedures eine gute Wahl, doch egal ob die notwenigen Queries direkt aus dem Programm kommen oder es nur eine Stored Procedure aufruft: vergiss' das Shellskript, sonst musst Du zwei unabhängige Quellcodes pflegen wo einer reichen würde.
Der einzige Vorteil den ich im Shellskript sehe ist, dass es ohne Probleme auf den Datenbank-Server geladen werden kann und seine Arbeit von dort aus erledigen, doch wenn Du sowieso einen Java-Prozess zum sammeln der Daten brauchst und mit Triggern und SPs arbeitest, ist der Gewinn minimal und in jedem Fall die leichtere Wartbarkeit einer integrierten Lösung vorzuziehen.

Gruß
Enum


----------

