2012-10-25 5 views
11

Ich habe eine Anwendung, die SQL Server 2008 verwendet, um Daten zu speichern, die eine Reihe von Finanzinformationen von SAP (die in diesem Unternehmen Oracle 11 als Back-End verwendet) müssen.Exportieren von Daten von SAP zu SQL Server

Ich fragte die SAP-Jungs für den Zugriff auf die Tabellen zu lesen, sagten sie nicht. Ich bat sie, sich direkt mit meiner Datenbank zu verbinden, um meine Tabellen zu füllen, sagten sie nicht. (Ich habe einen Feed von einer Oracle-Datenbank, andere Anwendung als SAP, mit dem transparenten Gateway ohne Probleme, so dass darum gebeten)

Sie sagen, die einzige Möglichkeit zur Interaktion mit SAP ist durch die Verwendung von Web Dienstleistungen. Aber aufgrund der enormen Datenmenge glaube ich nicht, dass das der Weg ist.

Hat jemand Erfahrung beim Erstellen einer Schnittstelle zwischen SAP und einem SQL Server?

Ich werde meine Erklärung erweitern. Meine aktuelle Anwendung wird bereits von drei anderen Anwendungen gespeist (dies ist ein großes Unternehmen), die alle an die gleichen Tabellen gehen, wo ich die Daten zur weiteren Verarbeitung erhalte. Alle anderen Anwendungen (1 Oracle, 2 SQL Server) führen entweder eine direkte Aktualisierung oder gespeicherte Prozeduren durch, die die Daten speichern. Diese anderen 3 Anwendungen werden von verschiedenen Teams ohne Beziehung zueinander verwaltet. Alle haben sich am Anfang beschwert, aber am Ende haben alle akzeptiert, um ihre Daten zu dieser Anwendung zu exportieren.

Also wäre es ideal, die SAP-Leute davon zu überzeugen, dasselbe zu tun: Öffnen Sie eine Verbindung zu SQL Server und führen Sie einige Einfügungen durch oder führen Sie gespeicherte Prozeduren aus.

Antwort

9

Die grundlegende Frage ist - drücken oder ziehen? Sie können entweder über eine Art von Setup verfügen, bei dem das SAP-R/3-System in regelmäßigen Abständen Daten exportiert, die Sie dann erfassen, oder Sie können ein externes System erreichen lassen und die Daten abrufen. "Die einzige Notwendigkeit, mit SAP zu interagieren, besteht in der Verwendung von Web-Services" - technisch gesehen ist das so ähnlich wie der Kot des Partners der Kuh, den Sie bekommen. Es können nicht-technische Probleme auftreten - seltsame Richtlinien oder unwillige Systemadministratoren - aber konzentrieren wir uns auf die Details.

Wie bei einer "Push" -Lösung könnten Sie entweder einen der vorhandenen Berichte erstellen, die regelmäßig ausgeführt werden sollen, und die Ausgabe in einer Datei speichern oder irgendwo senden. Das ist relativ einfach, erfordert jedoch, dass es Berichte gibt, die Ihnen die gewünschten Daten liefern. Wenn sie nicht da sind, notieren Sie sich die Spezifikationen und programmieren Sie sie oder lassen Sie sie von jemandem programmieren. Es ist keine Zauberei, nur eine andere Programmiersprache.

Wenn Sie ziehen möchten, könnten Sie für die Datenbank direkt gehen, aber ich würde stark davon abraten. Sobald Sie Ihre erste cluster table treffen, haben Sie eine Sackgasse erreicht. Wenn Sie über große Datenmengen nachdenken, wäre der beste Weg, sie zu ziehen, wahrscheinlich eine RFC-Verbindung herzustellen (proprietäres Protokoll, siehe viele andere Fragen hier) und entweder ein BAPI zu verwenden, wenn es ein solches gibt wird zur offiziellen Verwendung freigegeben und von SAP gepflegt) oder verwenden Sie RFC_READ_TABLE, um auf die Daten zuzugreifen. Beachten Sie, dass Letzteres nicht für alle Tabellen verwendbar ist, sondern abhängig von der Struktur der Tabelle (Gesamtgröße und Feldtypen). Web-Services fügen nur eine weitere Ebene der Kodierung und eine verrauschte hinzu - nicht sehr geeignet für ETL-Prozesse mit hohem Volumen.

+0

Wie würde eine Push-Lösung funktionieren? Können Sie mir irgendeine Dokumentation dafür zeigen? Ich habe [Probleme beim Erstellen eines PHP-Clients] (http://stackoverflow.com/questions/13969416/receiving-data-from-sap-web-application-server-over-https), die Push-XML-IDoc über HTTPS erhalten. – PiTheNumber

+0

@PiTheNumber: Da Sie dies bereits in q separate Frage gestellt haben (http://stackoverflow.com/questions/13969416/receiving-data-from-sap-web-application-server-over-https), würde ich lieber Beantworte es dort, wenn ich kann ... – vwegert

2

Ich habe dies ein paar Mal im Laufe der Jahre getan, und erhielt im Grunde die gleiche Antwort von SAP-Teams, die Sie bekommen haben. In fast allen Fällen bestand die Lösung darin, von SAP erzeugte Flat-File "reports" zu erzeugen, die wir mit SSIS-Paketen in SQL Server geladen haben. Der Trick besteht darin, sicherzustellen, dass die Berichte ordnungsgemäß erstellt werden. Ich habe gesehen, dass SAP-Teams bei der Erstellung dieser Berichte "Standardfilter" eingebaut haben, die sie erst erwähnen, nachdem der Prozess aktiv war und Daten fehlten. Viel Glück.

0

Wir führen SQL statt Oracle und hatten ein ähnliches Problem. Uns wurde gesagt, dass der direkte Zugriff auf die DB-Schicht eines SAP-Systems die Garantie ungültig machen würde. Deshalb haben wir SAP direkt gefragt - sie sind in Ordnung mit Auswahlen in der Datenbank, solange Sie nicht aktualisieren, einfügen oder löschen, ohne die App-Ebene zu durchlaufen. Wenn Sie außerhalb der App-Ebene aktualisieren, einfügen oder löschen, verlieren Sie Ihre Garantie, so dass dies kein Problem darstellt. Sie können veranlassen, dass Ihr SAP-Team eine OSS-Nachricht öffnet, wenn sie die gleiche Antwort erhalten möchten.

Das heißt, wenn dies eine kontinuierliche Schnittstelle ist, anstatt eine einmalige Datenlast, würde ich nur jemand bauen Sie einen RFC, einen Web-Service oder einen laufenden Extrakt, um die Daten aus der App zu greifen.

0

Wie Sie für solche Anwendungsschnittstelle wissen, hängt die beste Option von einer Reihe von Faktoren wie Datenvolumen, Modus der Schnittstelle gewünschte Echtzeit gegenüber Batch, synchron vs asynchron. Wenn das Datenvolumen groß ist und Sie keine Echtzeitaktualisierungen für Ihre Anwendung benötigen, sollte die Ausführung eines Berichts auf SAP-Seite und das Generieren einer Datendatei zum Hochladen in Ihre Anwendung eine akzeptable Option sein. Für Echtzeit-Updates können IDocs (mehrere Datendateien) verwendet werden. Andernfalls können Sie die SAP-Standard-APIs (BAPI) verwenden, um die benötigten Informationen aus SAP abzurufen. Sie können die SAP-Leute auch veranlassen, einen benutzerdefinierten RFC für die Funktion RFC_READ_TABLE zu erstellen und eine SQL-ähnliche Abfrage zu verwenden, um die Daten von SAP zu erhalten.

Es ist möglich, Ihre Anwendungsdatenbank direkt mit Native SQL im ABAP-Programm auf SAP-Seite zu aktualisieren. Ich habe es für MS-SQL-Server gemacht und sehe keine Einschränkung, es auch für Oracle zu verwenden.