Oracle-PL/SQL-XML Laden
Ich weiß nicht, der beste Weg, das zu Fragen, aber lassen Sie mich erklären Sie das Problem, und es kann helfen.
Wir haben derzeit ein feed-Daten, verteilten, um uns eine Oracle-OAI-hub. Die Daten werden an uns über DBLinks.
Informationen Anbieter wird die Aktualisierung auf Oracle ODI, und für eine Vielzahl von Gründen sind Vorschrift, dass alle Daten, die zu übertragen ist, unter Verwendung der verschlüsselten XML-Dateien über SFTP.
Jetzt dies führt zu einem neuen Problem für uns als Daten-Empfänger, wie wir jetzt ändern müssen unsere Systeme zum laden von XML-Daten in den Tabellen, die einst bevölkert waren, durch DBLinks.
Set-up, was wir derzeit haben ist:
- Oracle 10g (10.2.0.4)
- Oracle läuft auf Unix (HP-UX)
- Zahlreiche Win2k3 Server controlling-Schnittstelle /ETL fließen.
Also aktuell die OAI-hub, Daten in eine Anzahl von Tabellen in der ETL-Schicht. Sagen Sie zum Beispiel "PERSON". Die Struktur dieser Tabelle, ich glaube nicht, dass relevant ist...
Wenn die Daten geladen wurden, in die Tabelle PERSON, die OAI-Lieferung wird die übertragung einer Datei-Ende-Markierung in der Datenbank, dieser wird gespeichert in der Tabelle "EOF" - es enthält eine Anzahl von erhalten Datensätze erwartet in "PERSON".
Dem windows-server einen batch-Prozess, Abstimmungen alle 30 Sekunden prüft, ob ein Datensatz vorhanden, EOF, wenn es dann funktioniert, es startet unsere ETL-Verarbeitung.
Ich möchte, um zu vermeiden, ändern Sie diesen Teil des Systems, wenn möglich, also was ich dir Vorschlage, eine Lösung ist, analysieren die neuen XML-Dateien und laden Sie Sie in der Oracle-Datenbank, die Frage ist, was ist der beste Weg, dies zu tun:
- Die XML-Dateien geliefert werden, die Windows-Server
- Präferenz wäre die Verwendung von PL/SQL um die Daten zu laden
Was ist der beste Weg, um zum laden der Daten in die Oracle (Unix) Datenbank, mit der Quell-Daten auf der Windows-Seite.
Ich möchte vermeiden, dass auf jedem Unix-scripting-wenn möglich - als mein Entwicklungsteam nicht genug Unix-Erfahrung, lassen Sie Sie lose auf.
Anregungen werden dankbar sein.
XML-format ist wie unten - und Elementnamen anzeigen, um Spaltennamen in der DB:
<PERSON>
<HEADER>
<Creator>~</Creator>
<DigitalSigniture>~</DigitalSigniture>
<Owner>~</Owner>
<Title>~</Title>
<Marking>~</Marking>
</HEADER>
<PERSONS>
<EMPLOYEE_NUMBER>~</EMPLOYEE_NUMBER>
<FIRST_NAME>~</FIRST_NAME>
<LAST_NAME>~</LAST_NAME>
......
</PERSONS>
<PERSON>
BEARBEITEN:
Ich bin auch der Tatsache bewusst, volumes, auf einer normalen (durchschnittlichen) Tag, an dem ich die Verarbeitung etwa 80.000 von XML-Datensätzen und auf einen außergewöhnlichen Tag, an dem ich die Verarbeitung von bis zu 300.000 (in der Regel einmal pro Jahr).
InformationsquelleAutor diagonalbatman | 2011-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf shred XML-und laden Sie Sie in Oracle-Tabellen, die Sie verwenden können, die Technik, die ich beschrieben in diesem Beitrag: http://rwijk.blogspot.com/2010/03/shredding-xml-into-multiple-tables-in.html
Grüße,
Rob.
Einige links für die Dateien laden:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb25loa.htm#ADXDB2900
http://www.oracle-developer.net/display.php?id=416
So eine einzelne XML-Datei entspricht eins-zu-eins auf eine einzige relationale Tabelle? Wenn ja, sind Sie noch glücklicher als Sie tun können, einen einzigen "INSERT ... SELECT ... FROM XMLTABLE(...)". Oder bin ich etwas fehlt noch? Und für diejenigen Bände, Sie definitiv möchten Blick auf eine einzelne SQL-Anweisung anstelle der PL/SQL-Verarbeitung...
Das ist richtig, ich denke mein Problem ist mehr - wie man die Quelle der Daten (von windows) in die Datenbank in der ersten Instanz (unix).... es sei denn, ich kann dies tun, indem Sie SQL ausführen aus dem Windows-Rechner?
Wie wäre es mit etwas wie nur einem Druck auf den Quell-XML-Daten in eine neue Tabelle, die nur einen Schlüssel hat und eine CLOB-Spalte mit SQL*Loader oder vielleicht externe Tabellen. Und dann Schreddern, dass, wie Rob schon sagt, in Ihren relationalen Tabellen.
Ich habe gerade einige links auf meine Antwort, die genau das zum
InformationsquelleAutor Rob van Wijk
Ich würde anbieten, zu vergessen, das build-in-Oracle-XML-Funktionen verwenden und normale Sprache zur Verarbeitung von XML-Dateien auf der "client-Seite" und senden bereit, um Daten in die DB. (Suchen Sie nach Python oder .NET)
Könnte es ein Sicherheitsrisiko sein, wenn Sie erlaubt, access-DB-Datei-server-system vom Netz.
80 000 Datensätze pro Tag sollte nicht ein großes problem für Oracle. Wir tun viel mehr, nahezu in Echtzeit.
Yeh das ist, wo ich dachte, ich habe ein paar Java-Entwickler zur Verfügung, .NET ist ein Problem aufgrund der restriktiven Umgebungen, an dem ich arbeite.
Ich bin mit der Entwicklung sehr großen system, dass wir intern in unserem Unternehmen. Die meisten der business-Logik in PL/SQL-code. So könnte ich sagen, dass ich einen PL/SQL Entwickler. Zur gleichen Zeit, alle front-end-und Daten-import ist vb.net( Haupt-Voraus, dass es schön eingebunden, mit Excel, mit der wir als "browser" aus unseren Daten) würde ich Python empfehlen, um Daten zu verarbeiten. In einfacher Sprache und wirklich einfach zu verwenden mit SQL-Abfragen. Ich machte einen einfachen test: upload einige Daten in die DB. Die Ergebnisse waren viel besser als unsere "standard" - Weg mit .NET.
InformationsquelleAutor Anton Prokofiev
Wenn Sie analysieren große Mengen von XML-Dateien ODER sehr komplexen XML-Dateien basiert auf einem der vielen Industrie-Daten-standards, z.B. NDC -, XBRL -, FPML, ISO20022 etc. Ihre beste Wette ist, um ein dediziertes tool für den job. Flexter Daten-Befreier können Sie automatisieren den gesamten Prozess von Parsen von XML-Daten in Oracle ohne eine einzige Zeile code
InformationsquelleAutor Uli Bethke