Endlich SQL Abfragen direkt im SAP System ausführen
Autor: Alexander Depold | 18. Mai 2017
Kennen Sie eine Möglichkeit, SQL Befehle auf die Tabellen in Ihrem SAP-System auszuführen? In der Vergangenheit habe ich mir dieselbe Frage gestellt, als ich vorbereitete Querys auf eine Tabelle ausführen wollte, ohne diese für eine Abfrage über die SE16N mit entsprechenden Filtern zu konvertieren. Nach meiner Recherche bin ich auf eine einfache Möglichkeit gestoßen, wie Sie Ihre SQL Statements transaktionsbasiert durch einen Editor auflösen lassen können.
Vielleicht kennen Sie die Situation, dass Sie schnell eine kurzes SQL-Statement auf Ihr SAP-System absetzen wollen, ohne viel Aufwand in eine ABAP-Programmierung investieren zu müssen. Vielleicht haben Sie auch nicht die nötigen Kenntnisse in ABAP, um Daten aus einer Tabelle zu extrahieren, sind aber durchaus mit SQL vertraut. Für diese Fälle sollten Sie sich die Transaktion DBACOCKPIT genauer ansehen. Diese Transaktion stellt Ihnen neben vielen weiteren Funktionen zur Verwaltung der Datenbank einen Editor zur Verfügung, mit dem Sie Ihre SQL-Abfragen auf Ihr SAP-System einfach ausführen können. Bei dieser Methode erhalten Sie kurz nach dem Absenden der Abfrage das Ergebnis in der GUI angezeigt.
Vorgehensweise zur Ausführung einer SQL Abfrage
Um den Editor für die SQL Abfragen im DBACOCKPIT aufrufen zu können, bestehen folgende Voraussetzungen für den Nutzer:
- Der Nutzer benötigt entsprechende Rechte um die Transaktionen SM49 und SM69 auszuführen.
- Die Ausprägungen STOR und SMSS müssen im Berechtigungsobjekt S_ADMI_FCD gepflegt sein.
- Für die SQL-Abfragen muss die Datenbankverbindung aufrechterhalten werden. Den aktuellen Status einer Datenbankverbindung erhalten Sie durch das Anzeigen der DBCON-Tabelle.
- Rechte für den Aufruf der abzufragenden Tabelle(n) müssen vergeben sein. Weitere Details hierzu finden Sie im Abschnitt “Weitere Hinweise zum DBACOCKPIT” dieses Blog-Beitrags.
Nachdem Ihr Nutzer die benötigten Rechte für den SQL-Editor besitzt, gehen Sie wie folgt vor:
- Rufen Sie die Transaktion “DBACOCKPIT” auf.
- Öffnen Sie die folgende Ordnerstruktur in der Datenbankadministration: Performance -> Additional Functions -> SQL Command Editor
- Geben Sie Ihre erste Query in die Eingabeabfrage ein.
- Anschließend klicken Sie auf Ausführen oder drücken alternativ auf F8
Erfahrungswerte und Alternativen
Zu erwähnen ist an dieser Stelle, dass es lediglich Sinn ergibt, lesend mittels SELECT-Statement auf die Tabellen zuzugreifen, um eine schnelle Ansicht der Ergebnisse zu erhalten. Mittels des DBACOCKPITs ist es nicht möglich, ganze Tabellenstrukturen mittels Create Table zu erstellen. Für solche Anwendungszwecke stellt SAP andere, bessere Möglichkeiten zur Verfügung. Ein weiterer wichtiger Punkt ist, dass sobald ein Nutzer die notwendigen Berechtigungen zur Nutzung der Transaktion DBACOCKPIT besitzt, dieser potentiell (bei entsprechenden Berechtigungen auf die Tabellen) lesend auf das gesamte SAP-System zugreifen kann. So kann mit einer Query beispielsweise die gesamte Nutzertabelle ausgelesen werden. Daher ist die Transaktion grundsätzlich mit Vorsicht zu genießen und ausschließlich an Administratoren zu vergeben.
Darüber hinaus besteht die Möglichkeit, einmal ausgeführte SQL Statements zu speichern und so jederzeit erneut auszuführen, um Änderungen in der Ergebnismenge zu erkennen, ohne jedes Mal das SQL-Statement neu formulieren zu müssen. Der Editor bietet Ihnen zudem die Möglichkeit, die Abfrage der SQL Statements im Hintergrund zu starten. Das Ergebnis erhalten Sie durch den Aufruf der Transaktion SM37, in der Ihnen das Ergebnis in einem Spool-File ausgegeben wird.
Die richtige Berechtigung
Die Berechtigung zur Steuerung der Aufrufe durch das DBACOCKPIT werden ähnlich wie in der Transaktion SE16 / SE16N gehandhabt. Beim Aufruf der Tabelle wird das Berechtigungsobjekt S_TABU_DIS bzw. S_TABU_NAM mit einer bestimmten Aktivität geprüft. So kann lediglich auf die Tabellen bzw. Tabellenberechtigungsgruppen zuegegriffen werden, für die entsprechende Werte in den genannten Berechtigungsobjekten zugewiesen sind. Genaueres zur Vergabe von Berechtigungen auf einzelne Tabellen können Sie hier nachlesen.
SAP Berechtigungen für Entwickler (Produktion)
Sie wollen Ihre SAP Berechtigungen für Entwickler auf der Produktion einschränken? Wir helfen Ihnen dabei mit unserem Best-Practice-Ansatz.
Zum Schluss
Haben Sie ähnliche Erfahrungen mit dem DBACOCKPIT gemacht oder kennen Sie alternative Wege SQL-Abfragen auf Ihr System auszuführen? Ich freue mich auf Ihr Feedback und lade Sie herzlich dazu ein diesen Beitrag zu kommentieren.
14 Kommentare zu "Endlich SQL Abfragen direkt im SAP System ausführen"
Befindet sich in neueren Releases (z.B. 7.40) die SQL-Befehlszeile unter Diagnose, und nicht mehr unter Performance?
Guten Tag Herr Bauer,
vielen Dank für Ihren Kommentar. Unabhängig von der Version können Sie gerne den Weg über den Menüpunkt “Diagnose” gehen. Dies funktioniert ebenso in den neueren, von Ihnen angesprochenen Releases von 7.40. Dies habe ich soeben getestet.
Hallo Herr Bauer,
wir haben einige wirklich lange SQL-Statements.
Wissen Sie, wie lang (in Zeilen und/oder Zeichen) ein SQL-Statement sein darf, damit es noch ausgeführt wird?
Danke & freundliche Grüße,
Stephan Hartmann
Hallo Herr Hartmann.
Eine Limitation für “normale” Änderungen ist mir nicht bekannt. Sollten Sie an die Grenze stoßen, empfiehlt sich auf Systemebene die Verwendung von Input-Dateien.
Mit freundlichen Grüßen,
Tobias Harmes
Danke für diesen Artikel!
Wie gibt man ein Datum literal als Abfragewert ein?
Ich hab schon alloes versucht, die SQL-Server Syntax mit
‘YYYY-MM-DD’ funktioniert nicht.
Danke & Grüße
S. Hartmann
Hallo Herr Hartmann.
Ich würde mal mit einer Abfrage schauen, wie die Timestamps aktuell in der Tabelle gespeichert sind. Dann dieses Format verwenden. Ggf. auch mit
oder dem
arbeiten.
Mit freundlichen Grüßen
Tobias Harmes
Interessanter Artikel. Ich sehe allerdings den Zugriff mittels DBACockpit doch relativ kritisch. Da hier auch modifizierende SQL Statements durchgeführt werden können. In einem Produktivsystem würde ich den Nutzerkreis für diese Transaktion doch relativ stark einschränken.
Da sie aber nach alternativen Wegen gefragt haben: Wir bieten seit knapp 10 Jahren ein entsprechendes Tool an. Eigene Transaktion, revisionssicher, mit Listvergleichen, etc. http://www.cadaxo.com/sql/
vG
Oliver Wahrstötter
Hallo Herr Wahrstötter.
Sie haben absolut recht, diese Transaktion sollte überhaupt nicht in die Hand von “normalen” Anwendern. Und selbst Admins sollten sich hier mittels Tabellenprotokollierung und Audit-Log zusätzlich absichern.
Mit freundlichen Grüßen
Tobias Harmes
In 7.40 mit einer Sybase DB ist die Eingabe eines Selects wie
select * from t0001 nicht möglich.
Hier existiert ein ganz andere Syntax.
Hallo Herr Stangl,
T0001 ist hoffentlich nur ein Typo? T001 wäre richtig.
MfG
Braucht es wirklich die SM49 oder SM69? Ich habe davon in der gesamten SAP-Doku zu dem Thema nichts gelesen. Und auch in Ihrem Artikel steht nichts mehr von den beiden TA drin.
Und laut dieser SAP-Doku: https://help.sap.com/saphelp_SCM700_ehp02/helpdata/en/4d/0ecf9b7ed60f6ae10000000a42189e/content.htm?no_cache=true
heißt das Feld in S_ADMI_FCD ST0R. (Mit Null statt Oh)
STOR ist laut einer anderen SAP Doku für Traces zuständig.
Hallo,
ist es über diese Funktion auch möglich das Resultset des Select Statements als Spool auszugeben und in einem Job per Email zu versenden?