InterSystems IRIS

In Sekunden in jeden IRIS-Global-Export (.gof) hineinsehen

SQL DATA LENS 4.02 ist am 4. September 2026 erschienen. Unter den Änderungen gibt es eine, die ich herausheben möchte, weil ich sie mir seit Jahren gewünscht und nirgends gefunden habe: SQL DATA LENS öffnet jetzt eine .gof-Datei — einen InterSystems-%GOF-Global-Export im Blockformat — direkt im Global Browser. Sie können einen Export in dem Moment durchsehen, in dem Sie ihn bekommen, bevor Sie ihn irgendwo importieren.

Die Funktion ist brandneu, und das Blockformat wurde als internes Transportformat zwischen IRIS-Instanzen entworfen, nie als etwas, das ein Drittwerkzeug lesen soll. Wir haben es deshalb nicht aus einer Spezifikation gelernt, sondern aus dem, was IRIS schreibt. Genau darum schreibe ich diesen Beitrag: Ich möchte, dass Sie die Funktion an Ihren Exporten ausprobieren und uns sagen, was Sie sehen. Unten steht, was die Funktion tut, warum ich sie für nützlich halte, wo ihre Grenzen heute liegen und welche Rückmeldung am meisten hilft.

Das Problem: Eine .gof-Datei lässt sich erst nach dem Import ansehen

Wer lange genug mit IRIS oder Caché arbeitet, sammelt .gof-Dateien an. Das Management Portal schreibt sie (System Explorer ▸ Globals ▸ Export, „block format”), ^%GOF schreibt sie, ##class(%Library.Global).Export(...) mit OutputFormat 7 schreibt sie. So schickt ein Kollege „das Konfigurations-Global vom Testsystem”, so hängt ein Kunde „die Daten, die das Problem reproduzieren” an ein Support-Ticket, und so archivieren viele Teams ihre Referenzdaten.

Und dann will man wissen, was in einer dieser Dateien steckt. Die ehrliche Antwort war bisher: importieren. Einen Namespace suchen, den man nicht ungern verschmutzt, ^%GI oder den Portal-Import laufen lassen, warten, den Global Browser oder ein Terminal öffnen, sich umsehen und danach ans Aufräumen denken. Bei einer Kundendatei von mehreren Gigabyte heißt das ein freier Namespace mit mehreren Gigabyte Platz. Bei einer Datei, die man nur prüfen will — ist das wirklich das Global, um das ich gebeten habe, ist es vollständig, enthält es den Knoten, der mich interessiert —, ist das viel Aufwand für eine Zwei-Minuten-Frage.

Eine .gof-Datei ist binär, blockorientiert und enthält $LIST-kodierte Werte und typisierte Subscripts; mit einem Texteditor oder Hex-Viewer kommt man also auch nicht weit. Bis jetzt gab es keine Möglichkeit, einfach hineinzusehen.

Was „File ▸ Open .gof File…” zeigt

Wählen Sie File ▸ Open .gof File… und eine Datei. SQL DATA LENS indexiert sie einmal — ein paar Sekunden pro Gigabyte, mit einer Fortschrittsanzeige, die sich abbrechen lässt — und öffnet einen Tab mit dem Namen der Datei.

Der Header sagt Ihnen, was Sie in der Hand halten, bevor Sie irgendetwas öffnen: Formatversion, Endianness und Blockgröße, den Exportzeitpunkt, den Namespace oder die Datenbank, aus der der Export stammt, den Beschreibungsdatensatz und die Summen — Globals, Knoten mit Wert, Long Strings, Datenblöcke, Bytes. Das allein beantwortet die Frage „haben sie das Richtige exportiert?”.

Die Globaltabelle links listet jedes Global der Datei mit seinen Knoten-, Datenknoten-, Long-String-, Block- und Byte-Zahlen. Ein Filterfeld darüber schränkt die Liste beim Tippen ein, mit den Platzhaltern * und ?.

Der Subscript-Baum rechts ist dieselbe dreispaltige Ansicht wie im lebenden Global Browser — Node Structure, Node, Value — plus eine Spalte Nodes, die zeigt, wie viele Knoten jeder Teilbaum enthält. Er klappt sich Ebene für Ebene auf und liest nur die Blöcke, die die geöffnete Ebene enthalten, sodass ein Export mit zig Millionen Knoten navigierbar bleibt. Max nodes begrenzt ein einzelnes Aufklappen genau wie bei einer lebenden Verbindung.

Alles ist schreibgeschützt. Die Datei wird nie verändert.

Die Wertansicht: Text, Hex und $LIST

Den Teil, den ich am meisten nutze, ist die Wertansicht unter dem Baum. Wählen Sie einen Knoten, und sein Wert erscheint in einem von drei Modi:

ModusWas Sie sehen
TextDer Wert als Text; $LIST-Werte als $lb(...), Doubles als $double(...) — dieselbe Schreibweise, die ZWRITE auf dem Server ausgibt
HexEin Hex-Dump der gespeicherten Bytes, bei typisierten Werten mit erklärtem Typ-Byte
$LISTEine Zeile je Listenelement mit seinem Typ, verschachtelte Listen eingerückt

Ein gültiges $LIST schaltet automatisch in den Modus $LIST. Damit wird das Storage-Global einer persistenten Klasse — das ^Package.ClassD-Global mit einem $LIST je Objekt — Feld für Feld lesbar. Ist ein Wert kein gültiges $LIST, sagt die Ansicht das und nennt die Regel und die Position, an der die Dekodierung gescheitert ist. Nichts wird geraten: Ein Wert, den der Leser nicht dekodieren kann, wird als solcher angekündigt, und seine Rohbytes sind in Hex immer einen Klick entfernt.

Dinge finden und herausholen

  • Go to nimmt eine Global-Referenz wie ^Data("ACC",42) und klappt den Baum direkt bis zu diesem Knoten auf. Lässt sich eine Ebene nicht erreichen — meist, weil sie mehr Kinder hat, als Max nodes erlaubt —, hält der Baum so tief wie möglich an, und die Statuszeile nennt den Knoten, an dem er stehen geblieben ist.
  • Export selection as ZWRITE text schreibt eine Zeile je Knoten in der Form ^A(1,"x")="value", genau das, was ZWRITE auf dem Server ausgeben würde. Zwei Exporte lassen sich so mit jedem Textwerkzeug vergleichen.
  • Export selection as CSV schreibt global,sub1,...,subN,value mit Quoting nach RFC 4180, UTF-8 — der schnellste Weg von „einem Global in einer Datei” zu einer Tabellenkalkulation oder einer anderen Datenbank.
  • Copy node reference und Copy selection as ZWRITE text legen dasselbe für ein Ticket oder eine Chat-Nachricht in die Zwischenablage.

Mehrere Knoten wählen Sie mit Strg/Umschalt; Zeigerknoten ohne Wert werden in beiden Exporten übersprungen.

Gebaut für große Dateien

Ein Export aus einem Produktivsystem ist selten klein, also wurde gegen echte getestet. Zwei Dateien aus unserem Testkorpus, auf einem gewöhnlichen Laptop, mit dem Heap absichtlich auf 256 MB begrenzt:

DateiGrößeGlobalsÖffnen (Index)Heap nach dem ÖffnenEine Ebene aufklappen
Export A1,97 GB11,1 s30 MB4 ms
Export B3,73 GB192,9 s (5,5 s kalt)84 MB21 ms (2.909 Kinder)

Der Index ist das Einzige, was mit der Datei wächst — rund 1,2 % ihrer Größe —, alles andere ist pro Aktion konstant.

Und es wurde gründlich getestet: gegen mehrere hundert in IRIS erzeugte Exporte, die die Ecken des Formats abdecken, und gegen 7 GB echte Exporte mit rund 100 Millionen Knoten — was der Viewer zeigt, stimmt mit dem überein, was ZWRITE auf dem Server ausgibt.

Warum das mehr als ein Viewer ist

Ein paar Situationen, in denen der Offline-Leser meine Arbeit bereits verändert hat:

  1. Support-Fälle. Ein Kunde schickt eine .gof-Datei. Öffnen, zum Knoten aus dem Fehlerbericht springen, die ZWRITE-Zeile ins Ticket kopieren. Kein Import, kein Namespace, kein Aufräumen.
  2. Einen Export prüfen, bevor man sich auf ihn verlässt. Header, Knotenzahlen und Byte-Summen zeigen auf einen Blick, ob der Export vollständig ist und die erwarteten Globals enthält — bevor Sie ihn jemandem schicken und bevor jemand ihn in ein System importiert, auf das es ankommt.
  3. Zwei Zustände vergleichen. Dasselbe Global aus zwei Systemen exportieren, beide Dateien öffnen, die relevanten Teilbäume als ZWRITE-Text exportieren und vergleichen.
  4. Storage lesen ohne laufenden Server. Im Zug, auf einem Rechner ohne IRIS, aus einem Archivordner mit Exporten eines Systems, das es nicht mehr gibt.
  5. Lernen. Wer sich je gefragt hat, was ein %GOF-Export eigentlich enthält: Der Hex-Modus mit seinen erklärten Typ-Bytes ist der freundlichste Weg, den ich kenne, um es herauszufinden.

Was die Funktion (noch) nicht kann

Das sollten Sie wissen, bevor Sie es ausprobieren:

  • Unterstützt werden Exporte von 8-KB-Datenbanken im Little-Endian-Blockformat, Formatversion 3 — das, was aktuelles IRIS und Caché ab 2017.1 schreiben. Exporte von 2-KB-Datenbanken und Big-Endian-Dateien werden mit einer Meldung abgelehnt, die nennt, was gefunden wurde, weil wir keine Beispieldateien haben, gegen die wir sie prüfen könnten (siehe unten).
  • Ein Mehrbandexport wird auf dieselbe Weise und aus demselben Grund abgelehnt. Der Writer trennt einen solchen Export an einer Bandwechsel-Marke, die in keiner unserer Beispieldateien vorkommt; der Leser hat dafür also keine geprüfte Regel und sagt das, statt zu raten. Exportieren Sie in eine einzelne Datei, oder schicken Sie uns eine solche Datei — sie steht weit oben auf der Liste unten.
  • In 4.02 werden Subscripts mit mehreren breiten (Nicht-Latin-1-)Zeichen und kompakte Unicode-Werte in Rohform statt als Text gezeigt. Diese Kodierungen sind inzwischen verstanden, ihre Dekodierung ist für das nächste Release geplant — zusammen mit $DOUBLE-Werten, die mit denselben Ziffern ausgegeben werden wie in ObjectScript, und sehr langen Unicode-Werten, die 4.02 noch nicht öffnet.
  • Der Leser ist bewusst heuristikfrei: Jedes Byte wird nach genau einer Regel aus unserer Formatbeschreibung gelesen. Passt eine Datei nicht, wird sie mit der Regel und dem Byte-Offset des Problems abgelehnt, statt mit einer Vermutung angezeigt zu werden. Das macht die Fehlermeldungen sehr präzise — und Ihre ungewöhnlichen Dateien wertvoll für uns.

Hier kommen Sie ins Spiel

Das Blockformat ist das eigene Transportformat von IRIS, und zu Recht gibt es keine öffentliche Spezifikation, an die sich ein Drittwerkzeug halten könnte. Was SQL DATA LENS heute liest, hat es aus einer großen Zahl selbst erzeugter Exporte gelernt, die wir gegen ZWRITE-Ausgaben verifiziert haben. Der Leser ist also nur so gut wie die Vielfalt der Dateien, die wir gesehen haben. Ihre sind mit ziemlicher Sicherheit anders als unsere.

Deshalb bitte: Installieren Sie 4.02, exportieren Sie ein oder zwei Globals im Blockformat, öffnen Sie die Datei und sagen Sie uns, was passiert. Besonders interessieren mich

  • Dateien, die abgelehnt werden — die Meldung nennt eine Regel-ID und einen Byte-Offset; dieses Paar reicht uns meist, um zu verstehen, was wir noch nicht gesehen haben;
  • Exporte aus älteren Caché-Versionen, von 2-KB-Block-Datenbanken, von Big-Endian-Plattformen oder Mehrvolumen-Exporte;
  • Globals mit nicht standardmäßigen Collations, Unicode-lastigen Daten (Japanisch, Chinesisch, Kyrillisch, Arabisch, Emoji …), sehr langen Strings, $DOUBLE-Werten, tief verschachtelten $LIST-Strukturen;
  • alles, bei dem der Baum oder ein Wert nicht zu ZWRITE auf dem Server passt, von dem die Datei stammt;
  • und, ebenso nützlich: was der Viewer als Nächstes können soll.

Sie müssen uns Ihre Daten nicht schicken. Für die meisten Meldungen genügt die Fehlermeldung oder eine Beschreibung des Knotens, der falsch aussieht. Wenn Sie eine Datei teilen können, ist ein kleines synthetisches Global, mit ^%GOF exportiert, das den Fall reproduziert, ideal.

Schreiben Sie an support@sqldatalens.com.

Außerdem in 4.02

Da dieser Beitrag von einer Funktion handelt, hier die übrigen 4.02-Änderungen, die IRIS- und Caché-Anwender bemerken werden, in einem Atemzug: Die Klassenansicht zeigt Methoden, Eigenschaften und Parameter mit Signaturen und Beschreibungen; der Datenfilter des Tabellenbrowsers merkt sich, was Sie auf dieser Tabelle eingegeben haben; ein Suchfeld über dem Server Navigator findet eine Verbindung beim Tippen; der SQL-Editor hat einen AI Assistant, der SQL aus einer Beschreibung erzeugt und Statements und Ausführungspläne erklärt; eine Ergebniszeile gegen IRIS/Caché springt direkt zu ihrem Storage-Global; und eine lange Liste von Operationen, die früher das Fenster einfrieren ließen, läuft jetzt im Hintergrund. Das vollständige 4.02-Changelog hat alle 29 Änderungen.

Ausprobieren

SQL DATA LENS läuft unter Windows und bringt seine eigene Java-Laufzeit mit — herunterladen, entpacken, starten. Der .gof-Viewer ist Teil der kostenlosen Testversion, Sie können Ihren ersten Export also in wenigen Minuten öffnen, ohne etwas zu kaufen. Nach der Testphase bleibt die Funktion in den Editionen Named User, Team und Enterprise verfügbar.

Ihre Testphase ist schon länger abgelaufen? Schreiben Sie mir eine Zeile an support@sqldatalens.com, und ich verlängere sie gern — mir sind Ihre getesteten Dateien lieber als eine Testuhr, die im Weg steht.

Ich freue mich auf Ihre Dateien, Ihre Befunde und Ihre Ideen. Viel Spaß beim Durchsehen!

← Alle Artikel

Explore your IRIS data from SQL down to globals

Download, unzip, connect. Your first namespace is on screen in about three minutes.

Windows 10, 11 and Windows Server (64-bit) · ~132 MB · version 4.02 · full 30-day Pro trial included