Announcement

Collapse
No announcement yet.

Oracle --> MS SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle --> MS SQL

    Hallo Ihr!

    Ich habe folgenden Fall vorliegen:
    Es gibt eine Oracle-DB, welche unter Anderem etwa 15 Tabellen enthält, die mit Textfeldern bzw einigen Integern gefüllt sind, d.h. die Felder der Tabellen werden selbst nie wirklich gross.
    Weiterhin gibt es einen MS-SQL Server, der dieselben Tabellen innehat.
    Aus einem nicht änderbaren Grund müssen periodisch die Daten aus den besagten Oracle-Tabellen in selbige des MS-SQL-Servers geschrieben werden.

    Die momentane Lösung dafür ist eher unbefridigend: Per Java Query Language-Scripts werden die Daten aus Oracle zum MS-SQL kopiert. Dabei werden aber die Tabellen auf dem MS-SQL jeweils vollständig gedropt und neu angelegt. Das ist nicht wünschenswert, denn so gehen auch an die Tabellen geknüpfte Benutzerberechtigungen verloren.

    Ich möchte diesen Prozess nun optimieren, und möchte euch daher fragen
    wie Ihr das realisieren würdet. Es stehen alle Möglichkeiten offen. Es gibt keine Voraussetzungen, was das Updateintervall angeht, mindestens jedoch einmal am Tag.

    Varianten die ich mir überlegt habe:
    - Trigger auslösen on update. Wisst ihr von einem Weg, einem Trigger einen
    Aufruf nach aussen mitzugeben (auf eine andere DB oder ein Script, etc...)
    - Verschiedene periodische Scripts

    Versch. Herangehensweisen:
    - Tabelle nicht droppen, sondern nur die Inhalte löschen und neu schreiben
    - Bei Script-Auslösung zeilenweise vergleichen und nur geändertes aufnehmen (z.B. mit Timestamps)

    Kennt Ihr für dieses Problem schon Lösungen, die gut anpassbar sind?
    Sind vlt. ähnliche FUnktionen schon im MS-SQL Server oder im Oracle enthalten?
    Für was für eine Methode würdet ihr euch entscheiden, und warum?

    Herzlichen Dank im Voraus euch Allen!
    Orkano

  • #2
    Ich gehe mal davon aus, dass die Daten zuerst in Oracle abgelegt werden. Da würde ich dann (außer es muß aus einem bestimmten Grund so sein) auf keinen Fall mit einem Trigger arbeiten, ist nämlich der SQL-Server mal nicht verfügbar, kann auch auf dem Oracle-Server nichts eingetragen werden.
    Der SQL-Server kann andererseits über "linked servers" den Oracle ziemlich gut integriren, dazu noch einen Job, der mittels stored procs täglich oder wie immer die Tabellen abgleicht und fertig.
    Damit ist gewährleistet, dass der Oracle-Server immer verfügbar ist und der SQL-Server dann abgleicht, wenn es passt. Dazu sollten die Records am besten eine fortlaufende ID haben, damit kann man gleich mal feststellen, was neu ist. Und über einen Timestamp im Record könnte man leicht bei den bestehenden die rausfinden, die sich geändert haben. Die zu finden, die inzwischen gelöscht wurden, dürfte auch kein Problem sein. Allerdings gibt es dazu auch schon passende Einrichtungen am SQL-Server (über Oracle kann ich da nichts sagen, weil von mir nicht verwendet), einfach mal nach "replication" suchen

    bye,
    Helmut

    Comment


    • #3
      Herzlichen Dank für deine Antwort, Helmut!
      war echt hilfreich, ohne sie würde ich wohl jetzt stundenlang
      ein blödes Script proggen müssen oder so ;-)

      Eine Frage hätte ich dann doch noch: Wenn ich also auf dem MS-SQL einen linked server einrichte, der ein paar tabellen des oracle-systems einblendet, kann ich dann auf diese tabellen die ganz normale benutzerverwaltung des MS-SQL-servers anwenden? (views erzeugen, schreibrechte geben, etc...)

      Gruss Orkano

      Comment


      • #4
        Wie das genau aussieht kann ich dir leider nicht beantworten, da ich wie gesagt selber Oracle nicht verwende. Aber ich denke mal, dass sich der SQL-Server unter einem bestimmten User an Oracle anmeldet und damit mal dessen Rechte hat. Und dann sind die "normalen" User am SQL-Server, die über den linked server dieselben oder weniger Rechte in den Oracle-Tabellen haben. Meldet sich also der SQL-Server mit einem User in Oracle an, der nur Leserechte hat, wird das auch nicht anders, wenn man dem SQL-User Schreibrechte auf diese Table gibt, da der SQL.Server das dann nicht umsetzen kann. Hat der SQL-Server hingegen Schreibrechte, könnte man die dann beim SQL-User zB auf Leserecht begrenzen. Aber wie gesagt, ist reine vermutung!

        bye,
        helmut

        Comment

        Working...
        X