<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://wiki.redatek.de/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://wiki.redatek.de/feed.php">
        <title>dynaDAT | UNIXoni | REDATEK | ITVeteran </title>
        <description></description>
        <link>http://wiki.redatek.de/</link>
        <image rdf:resource="http://wiki.redatek.de/_media/logo.png" />
       <dc:date>2026-10-16T16:01:47+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:chunks_pages?rev=1791558101&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:onconfig_memory?rev=1790153624&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/sap:mail?rev=1785410798&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:leap_16_informix_konfig?rev=1776538553&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/wiki:xfs_error_kernel?rev=1754321018&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/postgres:statistik_und_audit?rev=1752845584&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:informix_fdw?rev=1750425550&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/wiki:informix_rowid?rev=1750163005&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/wiki:dokuwiki?rev=1749392224&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Aenterpriselogorahmen2.png&amp;ns=wiki&amp;rev=1725089735&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=favicon.ico&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=logo.png&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Avt52.jpg&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Agfud.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Abanner.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Aitveteran.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=wiki%3Abdrthomas-336x400-1.jpg&amp;ns=wiki&amp;rev=1724247278&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=ksnip_20240821-144545.png&amp;ns=0&amp;rev=1724245125&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/?image=ksnip_20240821-144826.png&amp;ns=0&amp;rev=1724245092&amp;tab_details=history&amp;media_do=diff&amp;do=media"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.redatek.de/_media/logo.png">
        <title>dynaDAT | UNIXoni | REDATEK | ITVeteran </title>
        <link>http://wiki.redatek.de/</link>
        <url>http://wiki.redatek.de/_media/logo.png</url>
    </image>
    <item rdf:about="http://wiki.redatek.de/informix:chunks_pages?rev=1791558101&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-09T15:01:41+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>chunks_pages - [Beispiel 2 GiB] </title>
        <link>http://wiki.redatek.de/informix:chunks_pages?rev=1791558101&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;chunk-laenge_und_blob-page&quot;&gt;Chunk-Länge und Blob-Page&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Notiz zur Anlage eines Chunks in einem Blobspace. Eine Blob-Page muss vollständig im Chunk liegen. IBM legt die Blob-Page als Vielfaches der System-Page fest und verbietet, dass sie über die Chunk-Grenze geht. &lt;code&gt;onspaces -s&lt;/code&gt; rechnet in Kilobyte. Ein Wert, der nur in der System-Page aufgeht, ist für den Blobspace zu kurz oder zu lang.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Chunk-L\u00e4nge und Blob-Page&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;chunk-laenge_und_blob-page&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-383&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;regel&quot;&gt;Regel&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die System-Page steht in &lt;code&gt;onstat -d&lt;/code&gt; beim &lt;code&gt;rootdbs&lt;/code&gt; in &lt;code&gt;pgsize&lt;/code&gt;. Die Blob-Page steht dort beim Blobspace. Auf dem betroffenen Server ist die System-Page 2 KiB (2048) und die Blob-Page von &lt;code&gt;blobdbs&lt;/code&gt; 10 KiB (10240). 4 KiB wäre nur dann der Teiler, wenn die System-Page der Instanz 4 KiB ist.
&lt;/p&gt;

&lt;p&gt;
Die 5 ist dieses Vielfache in Pages. &lt;code&gt;onstat -d&lt;/code&gt; zeigt die Chunk-Länge &lt;code&gt;size&lt;/code&gt; als Anzahl System-Pages &lt;code&gt;S&lt;/code&gt;. Eine Blob-Page belegt
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;n = 10240 / 2048 = 5&lt;/pre&gt;

&lt;p&gt;
System-Pages. Im Chunk liegen &lt;code&gt;S / 5&lt;/code&gt; Blob-Pages. Das ist eine ganze Zahl genau dann, wenn &lt;code&gt;S&lt;/code&gt; durch 5 teilbar ist. Sonst bleibt am Ende ein Rest von 1 bis 4 System-Pages, und die nächste Blob-Page geht über die Chunk-Grenze.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;onspaces&lt;/code&gt; erwartet &lt;code&gt;-o&lt;/code&gt; und &lt;code&gt;-s&lt;/code&gt; in Kilobyte, mindestens 1000 KB. Mit &lt;code&gt;s&lt;/code&gt; als dieser Kilobyte-Zahl gilt
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;S = s * 1024 / 2048 = s / 2
S / 5 = s / 10&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;S&lt;/code&gt; ist durch 5 teilbar genau dann, wenn &lt;code&gt;s&lt;/code&gt; durch 10 teilbar ist. Die 10 ist dieselbe Blob-Page in Kilobyte, 10240 / 1024. Es sind nicht zwei Regeln.
&lt;/p&gt;

&lt;p&gt;
IBM formuliert bei &lt;code&gt;-s&lt;/code&gt; nur „a multiple of the page size“. Die System-Page erfüllt das für viele Größen, die die Blob-Page nicht erfüllt. Maßgeblich ist die Blob-Page, weil sie den Chunk nicht überqueren darf.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Regel&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;regel&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;384-1658&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;beispiel_2_gib&quot;&gt;Beispiel 2 GiB&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
2 GiB sind 2097152 KB. Geteilt durch 2 KiB geht das auf: 1048576 System-Pages. Geteilt durch 10 KiB nicht: 2097152 geteilt durch 10 ist kein Ganzes. 1048576 geteilt durch 5 lässt Rest 1. Es bleibt eine System-Page übrig. Der Schreibversuch am Ende fordert &lt;code&gt;pagecnt 5&lt;/code&gt; und landet hinter dem Chunk.
&lt;/p&gt;

&lt;p&gt;
Passend sind 2097150 KB. Das sind 209715 Blob-Pages ohne Rest und 1048575 System-Pages, teilbar durch 5.
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;onspaces &lt;span class=&quot;re5&quot;&gt;-a&lt;/span&gt; blobdbs &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;pfad&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;chunk &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2097150&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Offset 0. Dieselbe Rechnung für jede andere Wunschgröße: den KB-Wert auf das nächste Vielfache von 10 abrunden.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Der I/O-Fehler tritt beim Schreiben in &lt;code&gt;blobdbs&lt;/code&gt; auf, wenn diese Teilung einen Rest ungleich null lässt &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;. Die Blob-Page geht am Chunk-Ende physisch nicht auf. Der Server fordert die volle Blob-Page an und schreibt hinter das Chunk-Ende.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Beispiel 2 GiB&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispiel_2_gib&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1659-2531&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;datadbs&quot;&gt;datadbs&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Für Chunks in &lt;code&gt;datadbs&lt;/code&gt; ist das unkritisch. Dort ist die Zuordnungseinheit die Page dieses Dbspace, abzulesen in &lt;code&gt;onstat -d&lt;/code&gt; unter &lt;code&gt;pgsize&lt;/code&gt; in der Zeile von &lt;code&gt;datadbs&lt;/code&gt;, nicht die Blob-Page von &lt;code&gt;blobdbs&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Ist &lt;code&gt;pgsize&lt;/code&gt; dort 2048, ist der Teiler 2 KB. 2097152 KB sind 1048576 Pages ohne Rest. Eine Daten-Page überquert den Chunk nicht, weil sie selbst die Page-Größe ist. Den I/O-Fehler aus der angebrochenen Blob-Page gibt es dort nicht.
&lt;/p&gt;

&lt;p&gt;
IBM verlangt auch für einen Dbspace-Chunk ein Vielfaches der Page-Größe. Steht bei &lt;code&gt;datadbs&lt;/code&gt; eine eigene Page-Größe, zum Beispiel 16384, muss &lt;code&gt;-s&lt;/code&gt; durch 16 teilbar sein. Der Teiler 5 aus dem Blobspace gilt dann trotzdem nicht.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;datadbs&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;datadbs&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2532-3242&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;pruefen&quot;&gt;Prüfen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;onstat &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt;
onstat &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; update&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;pgsize&lt;/code&gt; von &lt;code&gt;rootdbs&lt;/code&gt; und vom Blobspace ablesen. In der Chunk-Liste ist &lt;code&gt;size&lt;/code&gt; die Zahl der System-Pages. Schief, wenn &lt;code&gt;size&lt;/code&gt; geteilt durch 5 einen Rest lässt. 2621440 und 2000000 gehen auf, 1048576 nicht.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;free&lt;/code&gt; nach &lt;code&gt;onstat -d update&lt;/code&gt; vor und nach einem Speichern vergleichen. Der Chunk, dessen &lt;code&gt;free&lt;/code&gt; sinkt, hat die Pages bekommen. Frei etwa 0 heißt, der Chunk wird übergangen. IBM kennzeichnet einen leeren Down-Chunk in dieser Liste gesondert. Das ist ein anderer Zustand als ein voller schiefer Chunk.
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;oncheck &lt;span class=&quot;re5&quot;&gt;-pe&lt;/span&gt; blobdbs&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;oncheck -pe&lt;/code&gt; zeigt, welche Tabelle schon Pages auf welchem Chunk hat. Den nächsten Schreibvorgang zeigt es nicht.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Pr\u00fcfen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pruefen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3243-3999&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;was_davon_bleibt&quot;&gt;Was davon bleibt&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Ein voller schiefer Chunk ist damit nicht repariert. Sobald dort Pages frei werden, ist die überstehende Page wieder wählbar. Den Blobspace mit dem Suffix alt deshalb nicht löschen, solange BYTE-Werte auf so einem Chunk liegen.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;onspaces -s&lt;/code&gt; mit &lt;code&gt;-D&lt;/code&gt; setzt den Chunk auf Down. Down ist offline: Lesen und Schreiben entfallen. Einen Nur-Lesen-Zustand gibt es nicht. Zurück auf Online geht mit &lt;code&gt;-O&lt;/code&gt;, nicht mit einem Lese-Flag. Einen leeren Chunk entfernen ist ein anderes Kommando (&lt;code&gt;onspaces -d&lt;/code&gt;) und setzt voraus, dass nichts mehr darauf liegt.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Was davon bleibt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;was_davon_bleibt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4000-4587&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;ibm&quot;&gt;IBM&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=storage-blobpages&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=storage-blobpages&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: Blobpages&lt;/a&gt; — Blob-Page ist ein Vielfaches der System-Page und liegt immer ganz in einem Chunk.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=utility-onspaces-add-chunk-dbspace-blobspace&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=utility-onspaces-add-chunk-dbspace-blobspace&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix 12.10: onspaces -a&lt;/a&gt; — &lt;code&gt;-o&lt;/code&gt; und &lt;code&gt;-s&lt;/code&gt; in Kilobyte, mindestens 1000 KB, Vielfaches der Page-Größe.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=utility-onspaces-c-b-create-blobspace&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=utility-onspaces-c-b-create-blobspace&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: onspaces -c -b&lt;/a&gt; — &lt;code&gt;-g&lt;/code&gt; ist die Blob-Page in Einheiten der Basis-Page, 2 KiB oder 4 KiB.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=utility-onstat-d-command-print-chunk-information&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=utility-onstat-d-command-print-chunk-information&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix 12.10: onstat -d&lt;/a&gt; — Chunk-Liste, &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;free&lt;/code&gt;, Flag Down.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=storage-chunks&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=storage-chunks&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: Chunks&lt;/a&gt; — &lt;code&gt;onstat -d&lt;/code&gt; überwacht die freien Pages. Frei 0 in allen Chunks eines Dbspace blockiert neue Objekte.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=alarms-event-alarm-ids&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=alarms-event-alarm-ids&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: Event alarm IDs&lt;/a&gt; — offline Chunk, Wiederherstellung mit &lt;code&gt;onspaces -s&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;IBM&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ibm&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4588-5785&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;Informix, Blobspace, datadbs, Blob-Page, Chunk, onspaces, onstat -d, pgsize, pagecnt, I/O, BYTE, TEXT&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5786-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/informix:onconfig_memory?rev=1790153624&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-23T08:53:44+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>onconfig_memory - [Informix-Memory-Konfiguration mit HugePages] </title>
        <link>http://wiki.redatek.de/informix:onconfig_memory?rev=1790153624&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;informix-speicher_mit_onconfig_memorypy&quot;&gt;Informix-Speicher mit onconfig_memory.py&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Notiz zum Skript &lt;a href=&quot;https://github.com/schillingbtk/informix_snippets/blob/main/onconfig_memory.py&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/schillingbtk/informix_snippets/blob/main/onconfig_memory.py&quot; rel=&quot;ugc nofollow&quot;&gt;onconfig_memory.py&lt;/a&gt;. Es setzt die Speicherzeilen einer Informix-onconfig aus dem RAM des Hosts, legt die Bufferpools fest und schaltet die HugePage-Reservierung aus.
&lt;/p&gt;

&lt;p&gt;
Die onconfig wird erst nach einem Neustart von Informix gelesen. Die Sysctl-Änderung gilt sofort, soweit der Kernel HugePages freigeben kann.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Informix-Speicher mit onconfig_memory.py&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;informix-speicher_mit_onconfig_memorypy&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-466&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;aufruf&quot;&gt;Aufruf&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; python3 onconfig_memory.py &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;RAM_GB&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;ONCONFIG&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
python3 onconfig_memory.py &lt;span class=&quot;re5&quot;&gt;--self-check&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;RAM_&lt;abbr title=&quot;Gigabyte&quot;&gt;GB&lt;/abbr&gt;&lt;/code&gt; ist optional und muss eine ganze Zahl ohne Einheit sein. &lt;code&gt;32&lt;/code&gt; wird als 32 GiB gelesen und intern in Kibibyte umgerechnet (32 GiB = 33554432 KiB). &lt;code&gt;32.5&lt;/code&gt;, &lt;code&gt;32GB&lt;/code&gt; oder ein negativer Wert gelten nicht als Zahl. Dann nimmt das Skript &lt;code&gt;MemTotal&lt;/code&gt; aus &lt;code&gt;/proc/meminfo&lt;/code&gt;. Diese Angabe steht im Kernel bereits in Kibibyte.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;ONCONFIG&lt;/code&gt; ist optional. Standard ist &lt;code&gt;/opt/IBM/informix/etc/onconfig.local&lt;/code&gt;. Die Argumente stehen fest: zuerst RAM, danach der Pfad.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;–self-check&lt;/code&gt; darf an beliebiger Stelle der Argumente stehen. Dann prüft das Skript nur die Formel für 8 GiB und 64 GiB, druckt &lt;code&gt;self-check ok&lt;/code&gt; und beendet sich mit Exit 0. Es wird keine Datei angefasst.
&lt;/p&gt;

&lt;p&gt;
Unter 4 GiB RAM endet der Lauf mit Exit 1, bevor etwas geschrieben wird. Genau 4 GiB läuft durch. Der Benutzer &lt;code&gt;informix&lt;/code&gt; muss existieren (&lt;code&gt;id -g informix&lt;/code&gt;). Fehlt er, bricht Python ab, ebenfalls bevor etwas geschrieben wird. Root-Rechte, Schreibrechte und ob Informix online ist, prüft das Skript nicht. Es gibt keinen Probelauf.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Aufruf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;aufruf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;467-1622&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;rechnung&quot;&gt;Rechnung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Alle Teilungen runden ab. Für ein ganzes GiB-Vielfaches sind die Anteile exakt.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Anteil &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Rechnung aus dem RAM &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 2K-Pool &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 40/64, also 62,5 % &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 16K-Pool &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 10/64, also 15,625 % &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; erstes virtuelles Segment &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 4/64, also 6,25 % &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Summe &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 54/64, also 84,375 % &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1727-1912&amp;quot;} --&gt;
&lt;p&gt;
Der Rest von 10/64 bleibt für das Betriebssystem, den Overhead im Resident-Segment und für später nachgelegte virtuelle Segmente. Diesen Rest reserviert das Skript nicht.
&lt;/p&gt;

&lt;p&gt;
Die Poolgrößen stehen in der onconfig in Megabyte, &lt;code&gt;SHMVIRTSIZE&lt;/code&gt; in Kilobyte. Kontrolle, dieselben Werte wie im Self-Check:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; RAM &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; 2K-Pool &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; 16K-Pool &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; SHMVIRTSIZE &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 8 GiB &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 5120 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 1280 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 524288 KB &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 64 GiB &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 40960 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 10240 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 4194304 KB &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2218-2348&amp;quot;} --&gt;
&lt;p&gt;
Bei 4 GiB sind es 2560 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt;, 640 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; und 262144 KB. Die drei Größen zusammen bleiben unter dem RAM.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;SHMADD&lt;/code&gt; ist fest 256000 KB, &lt;code&gt;EXTSHMADD&lt;/code&gt; fest 8192 KB. Beides hängt nicht vom RAM ab.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Rechnung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;rechnung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1623-2541&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;was_in_die_onconfig_geschrieben_wird&quot;&gt;Was in die onconfig geschrieben wird&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Vorher liegt eine bytegenaue Kopie neben der Datei: &lt;code&gt;onconfig.bak_YYYYMMDD_HHMMSS&lt;/code&gt;. Zwei Läufe in derselben Sekunde treffen denselben Namen. Die zweite Kopie enthält dann schon die erste Änderung.
&lt;/p&gt;

&lt;p&gt;
Bestehende Zeilen &lt;code&gt;SHMVSIZE&lt;/code&gt; mit Wert werden auskommentiert. Alle Zeilen, die am Zeilenanfang mit &lt;code&gt;BUFFERPOOL&lt;/code&gt; beginnen, werden auskommentiert. Danach setzt oder ergänzt das Skript:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;SHMTOTAL 0
SHMADD 256000
EXTSHMADD 8192
RESIDENT 1
SHMVIRTSIZE &amp;lt;Kilobyte aus 4/64 des RAM&amp;gt;
SHMVIRT_ALLOCSEG 0,3
BUFFERPOOL size=2K,extendable=0,start_memory=&amp;lt;MB&amp;gt;MB,memory=&amp;lt;MB&amp;gt;MB
BUFFERPOOL size=16K,extendable=0,start_memory=&amp;lt;MB&amp;gt;MB,memory=&amp;lt;MB&amp;gt;MB&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;start_memory&lt;/code&gt; und &lt;code&gt;memory&lt;/code&gt; sind gleich. &lt;code&gt;extendable=0&lt;/code&gt; lässt die Pools nicht wachsen. &lt;code&gt;lrus&lt;/code&gt;, &lt;code&gt;lru_min_dirty&lt;/code&gt;, &lt;code&gt;lru_max_dirty&lt;/code&gt; und &lt;code&gt;buffers&lt;/code&gt; schreibt das Skript nicht.
&lt;/p&gt;

&lt;p&gt;
Ein zweiter Lauf kommentiert die zuvor geschriebenen Poolzeilen und hängt ein neues Paar an. Die alten Zeilen bleiben als Kommentar in der Datei.
&lt;/p&gt;

&lt;p&gt;
Ersetzt wird nur die erste Zeile eines Parameters, die am Zeilenanfang steht. Eine eingerückte Zeile bleibt stehen, das Skript hängt eine zweite Zeile an. Informix würde dann beide sehen.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Was in die onconfig geschrieben wird&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;was_in_die_onconfig_geschrieben_wird&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2542-3768&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;dateien_am_betriebssystem&quot;&gt;Dateien am Betriebssystem&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Erst nach dem Schreiben der onconfig. Scheitert ein späterer Schritt, ist die onconfig schon neu.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;/etc/security/limits.d/99-informix-memlock.conf&lt;/code&gt; wird vollständig ersetzt. Inhalt nur noch &lt;code&gt;informix soft memlock unlimited&lt;/code&gt; und &lt;code&gt;informix hard memlock unlimited&lt;/code&gt;. Vorhandene andere Limits in dieser Datei sind danach weg.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; In &lt;code&gt;/etc/profile.d/profile.local.sh&lt;/code&gt; wird &lt;code&gt;export IFX_LARGE_PAGES=0&lt;/code&gt; gesetzt oder angehängt. Fehlt die Datei, wird sie nicht angelegt und die Variable bleibt dort ungesetzt.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;/etc/sysctl.d/99-informix-hugepages.conf&lt;/code&gt; wird vollständig ersetzt durch &lt;code&gt;vm.nr_hugepages = 0&lt;/code&gt; und &lt;code&gt;vm.hugetlb_shm_group&lt;/code&gt; mit der GID von &lt;code&gt;informix&lt;/code&gt;. Anschließend lädt &lt;code&gt;sysctl -p&lt;/code&gt; diese Datei. Den Rückgabewert wertet das Skript nicht aus.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Bleibt &lt;code&gt;HugePages_Total&lt;/code&gt; danach größer als 0, gibt es einen Hinweis auf der Konsole und der Lauf endet trotzdem erfolgreich. Belegte HugePages gibt der Kernel nicht frei, solange Informix sie hält. Das Skript leert keinen Cache und fährt Informix nicht herunter.
&lt;/p&gt;

&lt;p&gt;
Abschlusszeile für den Start:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;IFX_LARGE_PAGES&lt;/span&gt;=&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;ulimit&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-l&lt;/span&gt; unlimited
oninit&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;memlock&lt;/code&gt; aus der Limits-Datei gilt für neue Anmeldungen. Ein bereits laufender &lt;code&gt;oninit&lt;/code&gt; bekommt sie nicht. &lt;code&gt;ulimit -l&lt;/code&gt; muss in der Startumgebung stehen.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Dateien am Betriebssystem&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dateien_am_betriebssystem&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3769-5120&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;wirkung_und_verbleibender_oom&quot;&gt;Wirkung und verbleibender OOM&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;code&gt;SHMTOTAL 0&lt;/code&gt; ist der Herstellerstandard: keine Obergrenze für Resident-, Virtual-, Communication- und Extension-Anteile.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;RESIDENT 1&lt;/code&gt; hält das Resident-Segment im RAM. Darin liegen die Bufferpools. Dafür braucht &lt;code&gt;oninit&lt;/code&gt; &lt;code&gt;memlock&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;SHMVIRTSIZE&lt;/code&gt; ist das erste virtuelle Segment beim Start. Weitere Segmente legt Informix in der Größe &lt;code&gt;SHMADD&lt;/code&gt; bzw. &lt;code&gt;EXTSHMADD&lt;/code&gt; an.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;SHMVIRT_ALLOCSEG 0,3&lt;/code&gt; ist die Vorgabe aus &lt;code&gt;onconfig.std&lt;/code&gt;. Die 0 bedeutet laut IBM: der Server legt ein Shared-Memory-Segment an, wenn er es braucht. Ein Wert von 0,40 bis 0,99 wäre ein Füllgrad für eine vorausschauende Anlage, ein Wert von 256 bis 10000000 eine Restmenge in Kilobyte. Die 3 ist nur die Alarmstufe, wenn die Anlage scheitert (Klasse 24, Ereignis 24003). Der Alarm wiederholt sich alle 30 Minuten. Einen onconfig-Wert, der diese Bedarfsanlage abschaltet, gibt es nicht.
&lt;/p&gt;

&lt;p&gt;
Zusammen mit &lt;code&gt;SHMTOTAL 0&lt;/code&gt; hat die Bedarfsanlage keine Informix-Decke. Jedes weitere Segment vergrößert den virtuellen Anteil um 256000 KB bzw. 8192 KB, solange das Betriebssystem den Speicher gibt. Ist der RAM aufgebraucht, kann der OOM-Killer &lt;code&gt;oninit&lt;/code&gt; beenden. &lt;code&gt;RESIDENT 1&lt;/code&gt; verschärft das, weil die Bufferpools nicht ausgelagert werden können.
&lt;/p&gt;

&lt;p&gt;
Auch eine nachträglich gesetzte &lt;code&gt;SHMTOTAL&lt;/code&gt;-Decke schließt den Pfad nicht. Page Cleaner und Checkpoint dürfen sie überschreiten. Das steckt im Server. Schlägt die Anlage fehl, steht im Nachrichtenlog unter anderem &lt;code&gt;No memory available for page cleaners&lt;/code&gt;, und die verursachenden Transaktionen werden zurückgesetzt. Fehlt dann Betriebssystemspeicher, bleibt der OOM-Killer möglich.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=parameters-shmvirt-allocseg-configuration-parameter&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=parameters-shmvirt-allocseg-configuration-parameter&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix 12.10: SHMVIRT_ALLOCSEG&lt;/a&gt;. Dieselbe Beschreibung bei HCL: &lt;a href=&quot;https://help.hcl-software.com/hclinformix/1410/adr/ids_adr_0159.html&quot; class=&quot;urlextern&quot; title=&quot;https://help.hcl-software.com/hclinformix/1410/adr/ids_adr_0159.html&quot; rel=&quot;ugc nofollow&quot;&gt;SHMVIRT_ALLOCSEG&lt;/a&gt; und &lt;a href=&quot;https://help.hcl-software.com/hclinformix/1410/admin/ids_admin_0345.html&quot; class=&quot;urlextern&quot; title=&quot;https://help.hcl-software.com/hclinformix/1410/admin/ids_admin_0345.html&quot; rel=&quot;ugc nofollow&quot;&gt;Shared-memory size&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Wirkung und verbleibender OOM&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wirkung_und_verbleibender_oom&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5121-7166&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;pruefung&quot;&gt;Prüfung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-E&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;^(SHMTOTAL|SHMADD|EXTSHMADD|RESIDENT|SHMVIRTSIZE|SHMVIRT_ALLOCSEG|BUFFERPOOL)&#039;&lt;/span&gt; \
  &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;opt&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;IBM&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;informix&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;onconfig.local
&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-E&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;^(MemTotal|HugePages_Total):&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;proc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;meminfo
onstat &lt;span class=&quot;re5&quot;&gt;-g&lt;/span&gt; seg&lt;/pre&gt;

&lt;p&gt;
Nach dem Neustart trägt das Resident-Segment die beiden festen Pools. Das erste virtuelle Segment hat die Größe von &lt;code&gt;SHMVIRTSIZE&lt;/code&gt;. Jedes weitere virtuelle Segment in &lt;code&gt;onstat -g seg&lt;/code&gt; ist die Bedarfsanlage und der Weg in den OOM.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Pr\u00fcfung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pruefung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;7167-7641&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;Informix, onconfig, SHMTOTAL, SHMADD, EXTSHMADD, SHMVIRTSIZE, SHMVIRT_ALLOCSEG, BUFFERPOOL, RESIDENT, memlock, HugePages, OOM&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;7642-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/sap:mail?rev=1785410798&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-07-30T11:26:38+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>mail - [3. Testen des E-Mail-Versands] </title>
        <link>http://wiki.redatek.de/sap:mail?rev=1785410798&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;konfiguration_und_test_von_e-mails_im_sap_netweaver_system&quot;&gt;Konfiguration und Test von E-Mails im SAP NetWeaver System&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Konfiguration und Test von E-Mails im SAP NetWeaver System&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;konfiguration_und_test_von_e-mails_im_sap_netweaver_system&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-74&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;allgemeine_vorbereitung&quot;&gt;1. Allgemeine Vorbereitung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SICF:&lt;/strong&gt; Aktivierung des ICF-Service `/sap/bc/mail` zur Nutzung des SAPconnect.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Navigiere zu `SICF` und suche den Service `/sap/bc/mail`.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Rechtsklick auf den Service und wähle „Aktivieren“.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Stelle sicher, dass der Service im Status „Aktiv“ ist.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SMICM:&lt;/strong&gt; Überprüfung und Konfiguration des Internet Communication Manager (ICM), um sicherzustellen, dass der SMTP-Server ordnungsgemäß konfiguriert ist.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Im Menü `Goto → Services` überprüfen, ob der SMTP-Server aktiv ist.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Falls nicht aktiv, über das Menü `Administration → ICM → Restart` den ICM neu starten.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1. Allgemeine Vorbereitung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;allgemeine_vorbereitung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;75-746&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;konfiguration_des_sapconnect&quot;&gt;2. Konfiguration des SAPconnect&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SCOT:&lt;/strong&gt; Zentrale Konfiguration für ausgehende E-Mails.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Erstelle einen neuen SMTP-Node:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Navigiere zu `Node for Internet Mail` und erstelle einen neuen Node mit `SMTP`.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Konfiguriere den Hostnamen und den Port deines Mailservers.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Optional: Füge Authentifizierungsdaten hinzu, wenn der SMTP-Server diese erfordert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Konfiguriere die Zeitpläne:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Gehe zu `Send Jobs` und lege Zeitpläne für den Versand von E-Mails fest.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Stelle sicher, dass mindestens ein Zeitplan aktiv ist, um den automatischen Versand zu gewährleisten.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Definiere Empfängerregeln:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; In den Node-Einstellungen kannst du spezifische Empfängerregeln hinzufügen, um zu steuern, welche E-Mails über welchen Weg gesendet werden.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;E-Mail-Adressen:&lt;/strong&gt; Stelle sicher, dass im Benutzerstamm (Transaktion SU01) eine gültige E-Mail-Adresse hinterlegt ist.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bearbeite den Benutzer in `SU01` und gib eine gültige E-Mail-Adresse im Reiter „E-Mail“ ein.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2. Konfiguration des SAPconnect&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;konfiguration_des_sapconnect&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;747-1792&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;testen_des_e-mail-versands&quot;&gt;3. Testen des E-Mail-Versands&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SOST:&lt;/strong&gt; Überwachung des E-Mail-Versands.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; In `SOST` werden alle ausgehenden E-Mails angezeigt.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; SOST WORKFLOW TRACE ist sehr hilfreich bei Problemen!&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Prüfe den Status der E-Mails: `Waiting`, `Error`, `Sent`, etc.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bei Fehlern: Klicke auf den Eintrag, um Details und Fehlermeldungen einzusehen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SOIN:&lt;/strong&gt; Prüfen eingehender E-Mails.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; In `SOIN` &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; werden alle eingehenden E-Mails angezeigt, die im System verarbeitet werden sollen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Falls eingehende E-Mails verarbeitet werden sollen, muss der entsprechende Node in SCOT konfiguriert sein.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3. Testen des E-Mail-Versands&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;testen_des_e-mail-versands&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1793-2452&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;troubleshooting&quot;&gt;4. Troubleshooting&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Überprüfe Protokolle in &lt;strong&gt;SOST&lt;/strong&gt; bei Problemen.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Achte auf häufige Fehler wie falsche SMTP-Konfiguration, fehlende Authentifizierung oder Netzwerkprobleme.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sicherstellen, dass der ICM korrekt läuft und die SMTP-Verbindung besteht (Transaktion &lt;strong&gt;SMICM&lt;/strong&gt;).&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Prüfe, ob der SMTP-Dienst aktiv ist, und verwende den Befehl `telnet &amp;lt;SMTP-Server&amp;gt; &amp;lt;Port&amp;gt;`, um die Verbindung zu testen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Transaktion SCOT:&lt;/strong&gt; Prüfe, ob der Node korrekt konfiguriert ist und ob die Verbindung zum Mailserver funktioniert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4. Troubleshooting&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;troubleshooting&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2453-3006&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;SAP, NetWeaver, SMTP, SCOT, SICF, SMICM, SOST, SU01, ICM&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3007-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;SOADM&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/informix:leap_16_informix_konfig?rev=1776538553&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-18T18:55:53+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>leap_16_informix_konfig</title>
        <link>http://wiki.redatek.de/informix:leap_16_informix_konfig?rev=1776538553&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;informix_unter_opensuse_leap_160fehlende_etc_services_und_etc_hostsequiv&quot;&gt;Informix unter openSUSE Leap 16.0: fehlende /etc/services und /etc/hosts.equiv&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Nach einem Update auf &lt;strong&gt;openSUSE Leap 16.0&lt;/strong&gt; startet ein Informix-Server,
der in der &lt;code&gt;sqlhosts&lt;/code&gt; mit einem &lt;strong&gt;Servicenamen&lt;/strong&gt; konfiguriert ist,
nicht mehr auf dem erwarteten Port. Zusätzlich werden Client-Verbindungen
mit Fehler &lt;strong&gt;-956 „Client host or user is not trusted by the server“&lt;/strong&gt;
abgewiesen, weil &lt;code&gt;/etc/hosts.equiv&lt;/code&gt; fehlt.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Informix unter openSUSE Leap 16.0: fehlende \/etc\/services und \/etc\/hosts.equiv&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;informix_unter_opensuse_leap_160fehlende_etc_services_und_etc_hostsequiv&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-429&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;ursache&quot;&gt;Ursache&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Mit Leap 16.0 hat openSUSE den Weg der Trennung von
&lt;strong&gt;Distribution-Defaults&lt;/strong&gt; (&lt;code&gt;/usr/etc&lt;/code&gt;) und &lt;strong&gt;lokalen Overrides&lt;/strong&gt; (&lt;code&gt;/etc&lt;/code&gt;)
konsequent umgesetzt:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  /etc/services ist nur noch eine **leere Dummy-Datei** und soll
  künftig ganz entfallen. Der eigentliche Inhalt liegt jetzt unter
  /usr/etc/services. Das Paket netkit-rsh / rsh-server ist abgelöst durch
  **OpenSSH**. Dadurch werden die klassischen Trust-Dateien /etc/hosts.equiv und /etc/hosts.lpd **nicht mehr automatisch angelegt**.&lt;/pre&gt;

&lt;p&gt;
Quellen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://doc.opensuse.org/release-notes/x86_64/openSUSE/Leap/16.0/html/release-notes-leap-160/&quot; class=&quot;urlextern&quot; title=&quot;https://doc.opensuse.org/release-notes/x86_64/openSUSE/Leap/16.0/html/release-notes-leap-160/&quot; rel=&quot;ugc nofollow&quot;&gt;openSUSE Leap 16.0 Release Notes&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://forums.opensuse.org/t/leap-16-etc-services-has-invalid-content-causing-error-servname-not-supported-for-ai-socktype/193001&quot; class=&quot;urlextern&quot; title=&quot;https://forums.opensuse.org/t/leap-16-etc-services-has-invalid-content-causing-error-servname-not-supported-for-ai-socktype/193001&quot; rel=&quot;ugc nofollow&quot;&gt;openSUSE Forum – /etc/services invalid content&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Ursache&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ursache&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;430-1286&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;auswirkung_auf_informix&quot;&gt;Auswirkung auf Informix&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Auswirkung auf Informix&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;auswirkung_auf_informix&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1287-1323&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;sqlhosts_mit_servicename&quot;&gt;sqlhosts mit Servicename&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Enthält &lt;code&gt;$INFORMIXDIR/etc/sqlhosts&lt;/code&gt; einen Servicenamen statt einer
Portnummer, z. B.:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ol_azur   onsoctcp   azur.local   sqlexec&lt;/pre&gt;

&lt;p&gt;
… dann löst Informix über &lt;code&gt;getservbyname()&lt;/code&gt; gegen &lt;code&gt;/etc/services&lt;/code&gt; auf.
Unter Leap 16.0 ist diese Datei leer, der Start schlägt mit Meldungen wie
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;listener-thread: err = -25595: oserr = 0: errstr = ...: Service not found&lt;/pre&gt;

&lt;p&gt;
fehl bzw. der Server bindet nicht auf dem erwarteten Port.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sqlhosts mit Servicename&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sqlhosts_mit_servicename&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1324-1812&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;trusted-host-authentifizierung&quot;&gt;Trusted-Host-Authentifizierung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Informix prüft eingehende Verbindungen standardmäßig gegen eine
Trusted-Hosts-Datei:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; entweder &lt;code&gt;/etc/hosts.equiv&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; oder die in &lt;code&gt;onconfig&lt;/code&gt; über &lt;strong&gt;&lt;code&gt;REMOTE_SERVER_CFG&lt;/code&gt;&lt;/strong&gt; konfigurierte Datei&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sowie &lt;code&gt;~/.rhosts&lt;/code&gt; des Zielusers&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Fehlt &lt;code&gt;/etc/hosts.equiv&lt;/code&gt; komplett, meldet der Client:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;-908  Attempt to connect to database server (...) failed.
-956  Client host or user (...) is not trusted by the server.&lt;/pre&gt;

&lt;p&gt;
Siehe: &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=files-trusted-host-information&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=files-trusted-host-information&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Docs – Trusted-host information&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Trusted-Host-Authentifizierung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;trusted-host-authentifizierung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1813-2430&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;loesungen&quot;&gt;Lösungen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;L\u00f6sungen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;loesungen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2431-2453&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;aportnummer_direkt_in_sqlhosts&quot;&gt;A: Portnummer direkt in sqlhosts&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Am robustesten: den Servicenamen durch die numerische Portnummer ersetzen.
Damit entfällt die Abhängigkeit von &lt;code&gt;/etc/services&lt;/code&gt; vollständig.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ol_azur   onsoctcp   azur.local   9088&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A: Portnummer direkt in sqlhosts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;aportnummer_direkt_in_sqlhosts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2454-2698&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;variante_betc_services_wiederherstellen&quot;&gt;Variante B: /etc/services wiederherstellen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Eintrag für Informix manuell ergänzen (auf &lt;strong&gt;Server&lt;/strong&gt; und &lt;strong&gt;Client&lt;/strong&gt;):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sqlexec       9088/tcp
sqlexec-ssl   9089/tcp&lt;/pre&gt;

&lt;p&gt;
Wahlweise als Override in &lt;code&gt;/etc/services&lt;/code&gt; (wird gegenüber
&lt;code&gt;/usr/etc/services&lt;/code&gt; vorgezogen) oder als Drop-in.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; IANA-konforme Ports: &lt;code&gt;9088/tcp&lt;/code&gt; (&lt;code&gt;sqlexec&lt;/code&gt;), &lt;code&gt;9089/tcp&lt;/code&gt; (&lt;code&gt;sqlexec-ssl&lt;/code&gt;).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Siehe: &lt;a href=&quot;https://www.ibm.com/docs/SSGU8G_14.1.0/com.ibm.admin.doc/ids_admin_0159.htm&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/SSGU8G_14.1.0/com.ibm.admin.doc/ids_admin_0159.htm&quot; rel=&quot;ugc nofollow&quot;&gt;IANA standard service names in sqlhosts.std&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Variante B: \/etc\/services wiederherstellen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;variante_betc_services_wiederherstellen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2699-3223&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;hostsequiv_wiederherstellen&quot;&gt;hosts.equiv wiederherstellen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Datei &lt;code&gt;/etc/hosts.equiv&lt;/code&gt; mit den vertrauenswürdigen Hosts neu anlegen:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;# hostname        user
client1.local     informix
client1           informix
10.0.0.15         informix&lt;/pre&gt;

&lt;p&gt;
Zwingende Voraussetzungen (laut IBM Docs):
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Besitzer: &lt;code&gt;informix:informix&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Rechte: &lt;code&gt;0644&lt;/code&gt;, &lt;code&gt;0640&lt;/code&gt;, &lt;code&gt;0444&lt;/code&gt; oder &lt;code&gt;0440&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sowohl &lt;strong&gt;Kurzname&lt;/strong&gt; als auch &lt;strong&gt;FQDN&lt;/strong&gt; eintragen, um &lt;abbr title=&quot;Domain Name System&quot;&gt;DNS&lt;/abbr&gt;-Probleme zu vermeiden.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;touch&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts.equiv
&lt;span class=&quot;kw2&quot;&gt;chown&lt;/span&gt; informix:informix &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts.equiv
&lt;span class=&quot;kw2&quot;&gt;chmod&lt;/span&gt; 0644 &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts.equiv&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hosts.equiv wiederherstellen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hostsequiv_wiederherstellen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3224-3789&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;variante_empfohlenremote_server_cfg_nutzen&quot;&gt;Variante empfohlen: REMOTE_SERVER_CFG nutzen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Seit Informix 11.70 kann die Trusted-Hosts-Datei über die &lt;code&gt;onconfig&lt;/code&gt;
umgelenkt werden – damit ist kein Root-Zugriff auf &lt;code&gt;/etc/hosts.equiv&lt;/code&gt;
nötig und das Problem ist zukunftssicher gelöst:
&lt;/p&gt;

&lt;p&gt;
In &lt;code&gt;$INFORMIXDIR/etc/onconfig&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;REMOTE_SERVER_CFG  trusted_hosts.cfg&lt;/pre&gt;

&lt;p&gt;
Dann Datei &lt;code&gt;$INFORMIXDIR/etc/trusted_hosts.cfg&lt;/code&gt; mit den erlaubten
Hosts füllen. Änderungen lassen sich im laufenden Betrieb übernehmen:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;onmode &lt;span class=&quot;re5&quot;&gt;-wf&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;REMOTE_SERVER_CFG&lt;/span&gt;=trusted_hosts.cfg&lt;/pre&gt;

&lt;p&gt;
Quelle: &lt;a href=&quot;https://www.xtivia.com/blog/ibm-informix-trusted-client-connections/&quot; class=&quot;urlextern&quot; title=&quot;https://www.xtivia.com/blog/ibm-informix-trusted-client-connections/&quot; rel=&quot;ugc nofollow&quot;&gt;XTIVIA – Informix Trusted Client Connections&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Variante empfohlen: REMOTE_SERVER_CFG nutzen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;variante_empfohlenremote_server_cfg_nutzen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3790-4470&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;pruefbefehle&quot;&gt;Prüfbefehle&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Existiert /etc/services und hat es Inhalt?&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;services &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;services
&lt;span class=&quot;kw2&quot;&gt;getent&lt;/span&gt; services sqlexec
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Kann Informix den Servicenamen auflösen?&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;su&lt;/span&gt; - informix &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;getent services sqlexec&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Trusted-Host-Datei prüfen&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts.equiv &lt;span class=&quot;re1&quot;&gt;$INFORMIXDIR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts.equiv &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null
onstat &lt;span class=&quot;re5&quot;&gt;-g&lt;/span&gt; cfg &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; REMOTE_SERVER_CFG&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Pr\u00fcfbefehle&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pruefbefehle&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;4471-4845&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Leap 16.0 liefert &lt;code&gt;/etc/services&lt;/code&gt; nur noch als Dummy aus – echter&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    Inhalt liegt in &lt;code&gt;/usr/etc/services&lt;/code&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;/etc/hosts.equiv&lt;/code&gt; fehlt, da &lt;code&gt;rsh&lt;/code&gt; durch OpenSSH ersetzt wurde.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Informix bricht deshalb mit Servicename-basierter &lt;code&gt;sqlhosts&lt;/code&gt; und&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    bei Trusted-Connections (Fehler -956) nach dem Update.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Schnellste Lösung: &lt;strong&gt;Portnummer direkt&lt;/strong&gt; in &lt;code&gt;sqlhosts&lt;/code&gt; verwenden, &lt;code&gt;/etc/hosts.equiv&lt;/code&gt; wiederherstellen oder auf &lt;code&gt;REMOTE_SERVER_CFG&lt;/code&gt; umstellen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Zusammenfassung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;zusammenfassung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;4846-5347&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;weiterfuehrende_quellen&quot;&gt;Weiterführende Quellen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://doc.opensuse.org/release-notes/x86_64/openSUSE/Leap/16.0/html/release-notes-leap-160/&quot; class=&quot;urlextern&quot; title=&quot;https://doc.opensuse.org/release-notes/x86_64/openSUSE/Leap/16.0/html/release-notes-leap-160/&quot; rel=&quot;ugc nofollow&quot;&gt;openSUSE Leap 16.0 – Release Notes&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=communication-sqlhosts-information&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=communication-sqlhosts-information&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Docs – The sqlhosts information&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=files-trusted-host-information&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=files-trusted-host-information&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Docs – Trusted-host information&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.ibm.com/docs/SSGU8G_14.1.0/com.ibm.admin.doc/ids_admin_0159.htm&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/SSGU8G_14.1.0/com.ibm.admin.doc/ids_admin_0159.htm&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Docs – IANA standard service names in sqlhosts.std&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.xtivia.com/blog/ibm-informix-trusted-client-connections/&quot; class=&quot;urlextern&quot; title=&quot;https://www.xtivia.com/blog/ibm-informix-trusted-client-connections/&quot; rel=&quot;ugc nofollow&quot;&gt;XTIVIA – IBM Informix Trusted Client Connections&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://stackoverflow.com/questions/62197785/connect-to-informix-without-an-entry-in-etc-services-matching-sqlhosts&quot; class=&quot;urlextern&quot; title=&quot;https://stackoverflow.com/questions/62197785/connect-to-informix-without-an-entry-in-etc-services-matching-sqlhosts&quot; rel=&quot;ugc nofollow&quot;&gt;Stack Overflow – Connect to Informix without /etc/services&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Weiterf\u00fchrende Quellen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;weiterfuehrende_quellen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5348-6254&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;Informix, openSUSE Leap 16, sqlhosts, /etc/services, hosts.equiv, REMOTE_SERVER_CFG, Fehler -956, Trusted Host&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6255-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/wiki:xfs_error_kernel?rev=1754321018&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-04T15:23:38+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>xfs_error_kernel</title>
        <link>http://wiki.redatek.de/wiki:xfs_error_kernel?rev=1754321018&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;xfs_fehler_nach_kernel-update&quot;&gt;XFS Fehler nach Kernel-Update&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;

&lt;h4 id=&quot;fehlerbeschreibung&quot;&gt;Fehlerbeschreibung&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Nach einem Update auf folgenden Kernel:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Linux 4.18.0-553.58.1.el8_10.x86_64&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
trat beim Booten bzw. Mounten des XFS-Dateisystems folgender Fehler auf:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `kernel: XFS (dm-0): Corruption detected. Unmount and run xfs_repair`&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `kernel: XFS (dm-0): Internal error i != 1 at line 481 of file fs/xfs/libxfs/xfs_alloc.c. Caller xfs_alloc_fixup_trees+0x198/0x3b0 [xfs]`&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;aenderungen_an_kernel-konfiguration&quot;&gt;Änderungen an Kernel-Konfiguration&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
In der Datei `config-4.18.0-553.58.1.el8_10.x86_64` wurden folgende Optionen aktiviert:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CONFIG_XFS_FS=y&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CONFIG_XFS_QUOTA=y&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CONFIG_XFS_POSIX_&lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt;=y&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CONFIG_XFS_RT=y&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CONFIG_XFS_ONLINE_SCRUB=y&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;analyse_hintergrundwissen&quot;&gt;Analyse &amp;amp; Hintergrundwissen&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Fehlerursache&lt;/strong&gt;: Der Fehler `i != 1` in `xfs_alloc.c` deutet auf eine Inkonsistenz in den freien Speicherbaumstrukturen des Dateisystems hin. Dies kann durch eine beschädigte Metastruktur oder durch eine fehlerhafte Kernel-Implementierung ausgelöst werden.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;xfs_repair&lt;/strong&gt;: Das Tool `xfs_repair` sollte verwendet werden, um die Dateisystemstruktur zu prüfen und zu reparieren. Wichtig: Das Dateisystem muss vorher &lt;strong&gt;ausgehängt&lt;/strong&gt; werden.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;CONFIG_XFS_RT&lt;/strong&gt;: Aktiviert Unterstützung für „Real-Time Subvolumes“, eine selten genutzte Funktion. Falls nicht benötigt, kann sie deaktiviert werden, um Komplexität zu reduzieren.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;CONFIG_XFS_ONLINE_SCRUB&lt;/strong&gt;: Ermöglicht die Online-Prüfung von Dateisystemstrukturen. Diese Funktion ist experimentell und kann bei bestimmten Kernel-Versionen instabil sein.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Kernel-Kompatibilität&lt;/strong&gt;: Änderungen an XFS-bezogenen Optionen können zu Inkompatibilitäten mit bestehenden Dateisystemen führen, insbesondere wenn das Dateisystem mit einem älteren Kernel erstellt wurde.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;empfehlung&quot;&gt;Empfehlung&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; System im &lt;strong&gt;Rescue-Modus&lt;/strong&gt; starten.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; betroffene Partition &lt;strong&gt;aushängen&lt;/strong&gt; (`umount /dev/dm-0`)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `xfs_repair /dev/dm-0` ausführen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bei wiederholtem Auftreten: Kernel-Konfiguration prüfen, insbesondere experimentelle Optionen wie `CONFIG_XFS_RT` und `CONFIG_XFS_ONLINE_SCRUB`.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Backup wichtiger Daten vor weiteren Tests!&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In meinem konkreten Fall war das root Filesystem betroffen &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; und ich bin das Risiko, ohne xfs_repair auf ausgegangenem Device, mit geänderter Konfiguration neu zu starten, eingegangen.  
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;quellen_tools&quot;&gt;Quellen &amp;amp; Tools&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `man xfs_repair`&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://xfs.org&quot; class=&quot;urlextern&quot; title=&quot;https://xfs.org&quot; rel=&quot;ugc nofollow&quot;&gt;https://xfs.org&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Kernel-Quellcode: `fs/xfs/libxfs/xfs_alloc.c`&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;XFS Fehler nach Kernel-Update&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;xfs_fehler_nach_kernel-update&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-2445&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;XFS, Kernel, RHEL, EL8, xfs_repair, Filesystem, Korruption, CONFIG_XFS_RT, Rescue&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2446-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/postgres:statistik_und_audit?rev=1752845584&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-07-18T13:33:04+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>statistik_und_audit</title>
        <link>http://wiki.redatek.de/postgres:statistik_und_audit?rev=1752845584&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;postgresql_ddl-audit_setup&quot;&gt;PostgreSQL DDL-Audit Setup&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Dieses Setup dokumentiert alle &lt;strong&gt;strukturverändernden Aktionen (DDL)&lt;/strong&gt; in PostgreSQL, wie z. B. &lt;code&gt;CREATE TABLE&lt;/code&gt;, &lt;code&gt;ALTER FUNCTION&lt;/code&gt;, &lt;code&gt;DROP INDEX&lt;/code&gt; usw.  
Die Änderungen werden automatisch in einer zentralen Audit-Tabelle gespeichert und sind über ein Dashboard oder View auswertbar.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; &lt;strong&gt;Verwandter Artikel:&lt;/strong&gt; Tabellen, Trigger-Funktionen, Event Trigger und &lt;strong&gt;Wartung (DISABLE/ENABLE)&lt;/strong&gt; sind in &lt;a href=&quot;http://wiki.redatek.de/postgres:ddl_logging&quot; class=&quot;wikilink1&quot; title=&quot;postgres:ddl_logging&quot; data-wiki-id=&quot;postgres:ddl_logging&quot;&gt;PostgreSQL DDL Audit Logging&lt;/a&gt; beschrieben (Referenzimplementierung).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;PostgreSQL DDL-Audit Setup&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;postgresql_ddl-audit_setup&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-540&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;ziel&quot;&gt;Ziel&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
* Nachvollziehbare Dokumentation aller DDL-Änderungen
* Speicherung in einer zentralen Tabelle im Schema &lt;code&gt;public&lt;/code&gt;
* Unterstützung für &lt;code&gt;CREATE&lt;/code&gt;, &lt;code&gt;ALTER&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt; und verwandte Befehle
* Trennung von Schema und Objektname für bessere Auswertbarkeit
* Minimale Belastung für produktive Systeme
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Ziel&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ziel&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;541-862&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;komponenten&quot;&gt;Komponenten&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
* &lt;strong&gt;Audit-Tabelle:&lt;/strong&gt; Speicherung der DDL-Ereignisse
* &lt;strong&gt;Event Trigger:&lt;/strong&gt; Reaktion auf DDL-Befehle
* &lt;strong&gt;Trigger-Prozeduren:&lt;/strong&gt; Extrahieren der Metadaten aus Systemfunktionen
* &lt;strong&gt;Optional: pg_stat_statements:&lt;/strong&gt; Ergänzende Erfassung von DDL-Texten
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Komponenten&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;komponenten&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;863-1132&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;schritt_1audit-tabelle_erstellen&quot;&gt;Schritt 1: Audit-Tabelle erstellen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_log &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
id SERIAL &lt;span class=&quot;kw1&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
command_tag TEXT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;             &lt;span class=&quot;co1&quot;&gt;-- z. B. CREATE TABLE, DROP FUNCTION&lt;/span&gt;
object_type TEXT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;             &lt;span class=&quot;co1&quot;&gt;-- z. B. TABLE, FUNCTION, INDEX&lt;/span&gt;
schema_name TEXT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;             &lt;span class=&quot;co1&quot;&gt;-- z. B. public&lt;/span&gt;
object_name TEXT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;             &lt;span class=&quot;co1&quot;&gt;-- z. B. users&lt;/span&gt;
executed_by TEXT &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;CURRENT_USER&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
executed_at &lt;span class=&quot;kw1&quot;&gt;TIMESTAMP&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;CURRENT_TIMESTAMP&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Schritt 1: Audit-Tabelle erstellen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schritt_1audit-tabelle_erstellen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1133-1577&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;schritt_2prozedur_fuer_create_alter&quot;&gt;Schritt 2: Prozedur für CREATE/ALTER&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;OR&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;REPLACE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;log_ddl_command&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;RETURNS&lt;/span&gt; event_trigger
&lt;span class=&quot;kw1&quot;&gt;LANGUAGE&lt;/span&gt; plpgsql
&lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; $$
&lt;span class=&quot;kw1&quot;&gt;DECLARE&lt;/span&gt;
ddl_record RECORD;
&lt;span class=&quot;kw1&quot;&gt;BEGIN&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; ddl_record &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; pg_event_trigger_ddl_commands&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
LOOP
&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_log &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
command_tag&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_type&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
schema_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
executed_by
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
ddl_record&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;command_tag&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
ddl_record&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_type&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
split_part&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ddl_record&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_identity&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;.&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
split_part&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ddl_record&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_identity&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;.&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CURRENT_USER&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt; LOOP;
&lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt;;
$$;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Schritt 2: Prozedur f\u00fcr CREATE\/ALTER&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schritt_2prozedur_fuer_create_alter&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1578-2136&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;schritt_3event_trigger_fuer_create_alter&quot;&gt;Schritt 3: Event Trigger für CREATE/ALTER&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; EVENT &lt;span class=&quot;kw1&quot;&gt;TRIGGER&lt;/span&gt; ddl_audit_trigger
&lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; ddl_command_end
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;log_ddl_command&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Schritt 3: Event Trigger f\u00fcr CREATE\/ALTER&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schritt_3event_trigger_fuer_create_alter&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2137-2313&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;schritt_4prozedur_fuer_drop-aktionen&quot;&gt;Schritt 4: Prozedur für DROP-Aktionen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;OR&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;REPLACE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;log_ddl_drop&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;RETURNS&lt;/span&gt; event_trigger
&lt;span class=&quot;kw1&quot;&gt;LANGUAGE&lt;/span&gt; plpgsql
&lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; $$
&lt;span class=&quot;kw1&quot;&gt;DECLARE&lt;/span&gt;
obj RECORD;
&lt;span class=&quot;kw1&quot;&gt;BEGIN&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; obj &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; pg_event_trigger_dropped_objects&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
LOOP
&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_log &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
command_tag&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_type&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
schema_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
executed_by
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
&lt;span class=&quot;st0&quot;&gt;&#039;DROP&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
obj&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_type&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
split_part&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;obj&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_identity&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;.&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
split_part&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;obj&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;object_identity&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;.&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CURRENT_USER&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt; LOOP;
&lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt;;
$$;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Schritt 4: Prozedur f\u00fcr DROP-Aktionen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schritt_4prozedur_fuer_drop-aktionen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2314-2822&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;schritt_5event_trigger_fuer_drop-aktionen&quot;&gt;Schritt 5: Event Trigger für DROP-Aktionen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; EVENT &lt;span class=&quot;kw1&quot;&gt;TRIGGER&lt;/span&gt; ddl_drop_audit_trigger
&lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; sql_drop
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;log_ddl_drop&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Schritt 5: Event Trigger f\u00fcr DROP-Aktionen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schritt_5event_trigger_fuer_drop-aktionen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2823-2995&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;wartungtrigger_aktivieren_deaktivieren&quot;&gt;Wartung: Trigger aktivieren/deaktivieren&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Befehle und Erläuterung: &lt;a href=&quot;http://wiki.redatek.de/postgres:ddl_logging&quot; class=&quot;wikilink1&quot; title=&quot;postgres:ddl_logging&quot; data-wiki-id=&quot;postgres:ddl_logging&quot;&gt;PostgreSQL DDL Audit Logging&lt;/a&gt; — Abschnitt &lt;strong&gt;Wartung: Trigger aktivieren/deaktivieren&lt;/strong&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Wartung: Trigger aktivieren\/deaktivieren&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wartungtrigger_aktivieren_deaktivieren&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;2996-3194&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;beispielddl-aktion_und_auswertung&quot;&gt;Beispiel: DDL-Aktion und Auswertung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;\&lt;span class=&quot;co1&quot;&gt;-- Beispielaktion&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;audit_test &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
id SERIAL &lt;span class=&quot;kw1&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
name TEXT
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;audit_test;
&amp;nbsp;
\&lt;span class=&quot;co1&quot;&gt;-- Auswertung&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_log &lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; executed_at &lt;span class=&quot;kw1&quot;&gt;DESC&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Beispiel: DDL-Aktion und Auswertung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispielddl-aktion_und_auswertung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3195-3460&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;optionalview_fuer_dashboard&quot;&gt;Optional: View für Dashboard&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;VIEW&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_summary &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt;
executed_at::&lt;span class=&quot;kw1&quot;&gt;DATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; datum&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
schema_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
command_tag&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
object_type&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
executed_by
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;ddl_audit_log
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; executed_at &lt;span class=&quot;kw1&quot;&gt;DESC&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Optional: View f\u00fcr Dashboard&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;optionalview_fuer_dashboard&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;3461-3715&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;erweiterungpg_stat_statements&quot;&gt;Erweiterung: pg_stat_statements&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die PostgreSQL-Erweiterung &lt;code&gt;pg_stat_statements&lt;/code&gt; kann ergänzend verwendet werden, um &lt;strong&gt;vollständige DDL-Befehle&lt;/strong&gt; (inkl. Spaltennamen) zu erfassen, die über Event Trigger nicht verfügbar sind.
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; query&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; calls&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; userid&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; dbid&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; queryid&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; total_time
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; pg_stat_statements
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; query &lt;span class=&quot;kw1&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;ALTER TABLE%&#039;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; query \~\&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;ADD COLUMN|DROP COLUMN|RENAME COLUMN&#039;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; total_time &lt;span class=&quot;kw1&quot;&gt;DESC&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
oder eben selektiv mit lesbarem User und Datenbanknamen:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; a&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;rolname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;b&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;datname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;c&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;query
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; public&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;pg_stat_statements c&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; pg_roles a&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; pg_database b
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; a&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;oid &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; c&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;userid &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; b&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;oid &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; c&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;dbid
&lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; c&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;query &lt;span class=&quot;kw1&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;ALTER%&#039;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Hinweis:
&lt;/p&gt;

&lt;p&gt;
* Die Erweiterung speichert normierte SQL-Befehle
* Die Statistik wird nicht sofort aktualisiert
* Für produktive Systeme mit hoher Last kann die Kombination mit Event Triggern zu Performance-Einbußen führen
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Erweiterung: pg_stat_statements&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;erweiterungpg_stat_statements&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;3716-4635&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;hinweise&quot;&gt;Hinweise&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
* Die Spalte &lt;code&gt;ddl&lt;/code&gt; wurde entfernt, da der Typ &lt;code&gt;pg_ddl_command&lt;/code&gt; nicht direkt gespeichert werden kann.
* Spaltenänderungen (z. B. &lt;code&gt;ADD COLUMN&lt;/code&gt;) enthalten keine Spaltennamen über Event Trigger.
* Die Lösung ist leichtgewichtig und für produktive Systeme geeignet.
* DDL-Audit vorübergehend aus: &lt;a href=&quot;http://wiki.redatek.de/postgres:ddl_logging&quot; class=&quot;wikilink1&quot; title=&quot;postgres:ddl_logging&quot; data-wiki-id=&quot;postgres:ddl_logging&quot;&gt;PostgreSQL DDL Audit Logging&lt;/a&gt;, Abschnitt &lt;strong&gt;Wartung: Trigger aktivieren/deaktivieren&lt;/strong&gt; (&lt;code&gt;ALTER EVENT TRIGGER … DISABLE&lt;/code&gt; / &lt;code&gt;ENABLE&lt;/code&gt;).
* Event Trigger und Tabellen-Trigger sind verschiedene Mechanismen — siehe folgender Unterabschnitt.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hinweise&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hinweise&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;4636-5228&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;event_trigger_versus_tabellen-trigger&quot;&gt;Event Trigger versus Tabellen-Trigger&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit15&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Aspekt &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Event Trigger (dieses DDL-Audit) &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Tabellen-Trigger &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Zweck &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Reaktion auf &lt;strong&gt;DDL&lt;/strong&gt; (&lt;code&gt;CREATE TABLE&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt;, …) auf Datenbankebene &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Reaktion auf &lt;strong&gt;Datenänderungen&lt;/strong&gt; in einer Tabelle: &lt;code&gt;INSERT&lt;/code&gt; / &lt;code&gt;UPDATE&lt;/code&gt; / &lt;code&gt;DELETE&lt;/code&gt;, oft &lt;code&gt;FOR EACH ROW&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Anlage &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;CREATE EVENT TRIGGER …&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;CREATE TRIGGER … ON eine_tabelle …&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Abschalten (Beispiel) &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;ALTER EVENT TRIGGER … DISABLE&lt;/code&gt; / &lt;code&gt;… ENABLE&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; z. B. &lt;code&gt;ALTER TABLE … DISABLE TRIGGER …&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;5278-5759&amp;quot;} --&gt;
&lt;p&gt;
Zum &lt;strong&gt;vorübergehenden Abschalten dieses DDL-Audits&lt;/strong&gt; werden nur &lt;strong&gt;Event Trigger&lt;/strong&gt; mit &lt;code&gt;ALTER EVENT TRIGGER …&lt;/code&gt; gesteuert. &lt;code&gt;ALTER TABLE … DISABLE TRIGGER …&lt;/code&gt; betrifft &lt;strong&gt;Tabellen-Trigger&lt;/strong&gt; auf einer konkreten Tabelle und hat mit diesem DDL-Protokoll &lt;strong&gt;nichts&lt;/strong&gt; zu tun.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Event Trigger versus Tabellen-Trigger&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;event_trigger_versus_tabellen-trigger&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;5229-6037&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit16&quot; id=&quot;erweiterungen_moeglich&quot;&gt;Erweiterungen möglich&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
* Filterung nach Objektarten oder Benutzer
* Integration mit Git zur Versionskontrolle
* Visualisierung der Änderungen über Dashboards
* Benachrichtigung bei kritischen Änderungen (z. B. DROP TABLE)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Erweiterungen m\u00f6glich&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;erweiterungen_moeglich&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;6038-6278&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit17&quot; id=&quot;bemerkung&quot;&gt;Bemerkung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Für mich ist das Standard Vorgehen meist unbrauchbar, da pg_stat_statements wie auch pgaudit nicht das Objekt selbst aufzeichnet. Ich schreibe meine eigene Triggerfunction — dokumentiert in &lt;a href=&quot;http://wiki.redatek.de/postgres:ddl_logging&quot; class=&quot;wikilink1&quot; title=&quot;postgres:ddl_logging&quot; data-wiki-id=&quot;postgres:ddl_logging&quot;&gt;PostgreSQL DDL Audit Logging&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Bemerkung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;bemerkung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;6279-6554&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit18&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;PostgreSQL, DDL, Audit, Event Trigger, pg_stat_statements, Dashboard&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;6555-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/informix:informix_fdw?rev=1750425550&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-20T13:19:10+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>informix_fdw - angelegt</title>
        <link>http://wiki.redatek.de/informix:informix_fdw?rev=1750425550&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;import_foreign_schema_von_informix_nach_postgresql&quot;&gt;IMPORT FOREIGN SCHEMA von Informix nach PostgreSQL&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;IMPORT FOREIGN SCHEMA von Informix nach PostgreSQL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;import_foreign_schema_von_informix_nach_postgresql&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-66&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;vorbereitung&quot;&gt;Vorbereitung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Zur besseren Nachverfolgung aktivieren wir das erweiterte Debugging:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SET&lt;/span&gt; client_min_messages &lt;span class=&quot;kw1&quot;&gt;TO&lt;/span&gt; DEBUG2;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Vorbereitung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;vorbereitung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;67-214&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;vollstaendiger_import_aller_tabellen_eines_informix-datenbank-schemas&quot;&gt;Vollständiger IMPORT aller Tabellen eines Informix-Datenbank-Schemas&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;IMPORT &lt;span class=&quot;kw1&quot;&gt;FOREIGN&lt;/span&gt; SCHEMA daten
    &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; SERVER tcp_azur_Test
    &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; test
    OPTIONS &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;test&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Vollst\u00e4ndiger IMPORT aller Tabellen eines Informix-Datenbank-Schemas&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;vollstaendiger_import_aller_tabellen_eines_informix-datenbank-schemas&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;215-418&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;limitierter_import_z b_nur_eine_tabelle&quot;&gt;LIMITIERTER IMPORT (z. B. nur eine Tabelle)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;IMPORT &lt;span class=&quot;kw1&quot;&gt;FOREIGN&lt;/span&gt; SCHEMA informix
    &lt;span class=&quot;kw1&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;abfrage&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; SERVER tcp_azur_Test
    &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; test
    OPTIONS &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;test&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Hinweis:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `IMPORT FOREIGN SCHEMA` bezieht sich &lt;strong&gt;nicht&lt;/strong&gt; auf das PostgreSQL-Schema, sondern auf den &lt;strong&gt;Owner&lt;/strong&gt; der Tabellen im Informix-System.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Angabe wie z. B. `daten` ist ein Benutzer (Owner) in Informix, &lt;strong&gt;nicht&lt;/strong&gt; der Name eines Schemas.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Beispielhafte vom Server generierte Abfrage:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code sql&quot;&gt;    DEBUG:  &lt;span class=&quot;kw1&quot;&gt;PREPARE&lt;/span&gt; query &lt;span class=&quot;st0&quot;&gt;&amp;quot;SELECT tabid, trim(owner), tabname FROM systables 
    WHERE tabid &amp;gt;= 100 AND owner = &#039;daten&#039; 
    AND tabname IN (&#039;abfrage&#039;) ORDER BY tabname DESC&amp;quot;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;LIMITIERTER IMPORT (z.\u202fB. nur eine Tabelle)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;limitierter_import_z\u202fb_nur_eine_tabelle&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;419-1134&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;wichtiger_hinweis_zur_richtung_des_imports&quot;&gt;Wichtiger Hinweis zur Richtung des Imports&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein `IMPORT FOREIGN SCHEMA` ist &lt;strong&gt;nur unidirektional möglich&lt;/strong&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    Von Informix nach PostgreSQL. &lt;strong&gt;Nicht umgekehrt!&lt;/strong&gt; Ein Export oder Zugriff von Informix auf PostgreSQL über dieselbe Methode ist nicht möglich. Das Schema muss also zwingend auf Informix vorhanden sein! &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Wichtiger Hinweis zur Richtung des Imports&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wichtiger_hinweis_zur_richtung_des_imports&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1135-1475&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;kopieren_der_tabellen_lokal_in_postgresql_struktur_daten&quot;&gt;Kopieren der Tabellen lokal in PostgreSQL (struktur+daten)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die folgende PL/pgSQL-Prozedur kopiert Tabellen aus dem per Foreign Schema importierten Schema (`quelle`) in ein lokales Zielschema (`ziel`).
&lt;/p&gt;

&lt;p&gt;
Dabei wird:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; das Zielschema ggf. neu angelegt,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; jede Tabelle zuerst strukturell dupliziert (`LIKE … INCLUDING ALL`),&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; anschließend werden die Daten kopiert.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bei einem Fehler wird trotzdem die leere Tabelle erstellt (zur späteren Analyse oder Wiederholung).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;OR&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;REPLACE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;PROCEDURE&lt;/span&gt; db&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;kopie&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; quelle TEXT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; ziel TEXT&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;LANGUAGE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;plpgsql&#039;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; $$
&lt;span class=&quot;kw1&quot;&gt;DECLARE&lt;/span&gt;
    tabelle TEXT;
&lt;span class=&quot;kw1&quot;&gt;BEGIN&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;-- Schema prüfen und ggf. erstellen&lt;/span&gt;
    PERFORM &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; information_schema&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;schemata &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; schema_name &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; ziel;
    &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; FOUND &lt;span class=&quot;kw1&quot;&gt;THEN&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; format&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;CREATE SCHEMA %I&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; ziel&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;-- Tabellenstruktur kopieren&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; tabelle &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE_NAME&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; information_schema&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tables
        &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; table_schema &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; quelle
    LOOP
        &lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; format&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;DROP TABLE IF EXISTS %I.%I&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; ziel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
        RAISE NOTICE &lt;span class=&quot;st0&quot;&gt;&#039;Struktur % verarbeitet&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle;
        &lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; format&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;CREATE TABLE %I.%I (LIKE %I.%I INCLUDING ALL)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            ziel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; quelle&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt; LOOP;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;-- Daten kopieren mit Fehlerbehandlung&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; tabelle &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE_NAME&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; information_schema&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tables
        &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; table_schema &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; quelle
    LOOP
        &lt;span class=&quot;kw1&quot;&gt;BEGIN&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; format&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;INSERT INTO %I.%I SELECT * FROM %I.%I&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                           ziel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; quelle&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
            RAISE NOTICE &lt;span class=&quot;st0&quot;&gt;&#039;Tabelle % verarbeitet&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle;
        EXCEPTION &lt;span class=&quot;kw1&quot;&gt;WHEN&lt;/span&gt; OTHERS &lt;span class=&quot;kw1&quot;&gt;THEN&lt;/span&gt;
            RAISE NOTICE &lt;span class=&quot;st0&quot;&gt;&#039;------------ FEHLER bei % --------------&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; tabelle;
            COMMIT;
        &lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt;;
    &lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt; LOOP;
&lt;span class=&quot;kw1&quot;&gt;END&lt;/span&gt;;
$$;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;PROCEDURE&lt;/span&gt; db&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;kopie&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;text&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; text&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    OWNER &lt;span class=&quot;kw1&quot;&gt;TO&lt;/span&gt; postgres;&lt;/pre&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Kopieren der Tabellen lokal in PostgreSQL (struktur+daten)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;kopieren_der_tabellen_lokal_in_postgresql_struktur_daten&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1476-3365&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `IMPORT FOREIGN SCHEMA` erlaubt das Einbinden externer Informix-Tabellen als &lt;em&gt;Foreign Tables&lt;/em&gt; in PostgreSQL.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein vollständiger Import kann auf Wunsch auf einzelne Tabellen beschränkt werden.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Für dauerhafte Nutzung oder Fehlerunabhängigkeit empfiehlt sich die Kopie der Tabellen lokal via PL/pgSQL.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Der Prozess ist &lt;strong&gt;einseitig&lt;/strong&gt; – nur &lt;strong&gt;von Informix zu PostgreSQL&lt;/strong&gt; möglich.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Zusammenfassung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;zusammenfassung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3366-3792&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;PostgreSQL, Informix, IMPORT FOREIGN SCHEMA, FDW, Foreign Data Wrapper&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;3793-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/wiki:informix_rowid?rev=1750163005&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-17T12:23:25+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>informix_rowid - angelegt</title>
        <link>http://wiki.redatek.de/wiki:informix_rowid?rev=1750163005&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;nutzung_der_rowid_in_sql_statements&quot;&gt;Nutzung der rowid in SQL Statements&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Die Verwendung der `rowid` in SQL-Statements sollte mit Vorsicht erfolgen und nach Möglichkeit vermieden werden. Dies gilt insbesondere im Kontext von Datenbankmigrationen oder bei der Verwendung von Datenbank-Wrapping-Technologien wie z.B. dem &lt;strong&gt;Informix-Wrapper&lt;/strong&gt; für PostgreSQL.
&lt;/p&gt;

&lt;p&gt;
Laut IBM-Dokumentation wird empfohlen, sich nicht auf `rowid` zu verlassen, da sie systemabhängig ist und sich unter bestimmten Umständen ändern kann.
(vgl. &lt;a href=&quot;https://www.ibm.com/docs/de/informix-servers/12.10.0?topic=statements-rowid-values-in-select&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/de/informix-servers/12.10.0?topic=statements-rowid-values-in-select&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.ibm.com/docs/de/informix-servers/12.10.0?topic=statements-rowid-values-in-select&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
In Informix ist `rowid` ein Integer-Wert. In PostgreSQL gibt es kein direktes Äquivalent, aber es existiert die systeminterne Spalte `ctid`, die eine ähnliche Funktion übernimmt.
(vgl. &lt;a href=&quot;https://www.enterprisedb.com/postgres-tutorials/what-equivalent-rowid-postgresql?lang=en&quot; class=&quot;urlextern&quot; title=&quot;https://www.enterprisedb.com/postgres-tutorials/what-equivalent-rowid-postgresql?lang=en&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.enterprisedb.com/postgres-tutorials/what-equivalent-rowid-postgresql?lang=en&lt;/a&gt; und &lt;a href=&quot;https://www.postgresql.org/docs/current/ddl-system-columns.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.postgresql.org/docs/current/ddl-system-columns.html&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.postgresql.org/docs/current/ddl-system-columns.html&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Nutzung der rowid in SQL Statements&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nutzung_der_rowid_in_sql_statements&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-950&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;unterschiede_zwischen_informix_rowid_und_postgresql_ctid&quot;&gt;Unterschiede zwischen Informix rowid und PostgreSQL ctid&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Der Informix-Wrapper leitet die `rowid` grundsätzlich an die PostgreSQL-`ctid` weiter. Dabei gibt es jedoch wichtige technische Unterschiede:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `rowid` in Informix ist ein einfacher &lt;strong&gt;Integer&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `ctid` in PostgreSQL ist ein &lt;strong&gt;Tupel bestehend aus (page_number, tuple_index)&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Der Informix-Wrapper setzt `rowid` auf den ersten Wert von `ctid`, also ergibt sich die übergebene Form: &lt;strong&gt;`ctid = (rowid, 0)`&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Unterschiede zwischen Informix rowid und PostgreSQL ctid&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;unterschiede_zwischen_informix_rowid_und_postgresql_ctid&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;951-1440&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;technische_eigenschaften_der_ctid_in_postgresql&quot;&gt;Technische Eigenschaften der ctid in PostgreSQL&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; `ctid` ändert sich bei jeder &lt;strong&gt;UPDATE-Operation&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wird durch &lt;strong&gt;VACUUM FULL&lt;/strong&gt; neu zugewiesen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Kann nach &lt;strong&gt;VACUUM ANALYZE&lt;/strong&gt; wiederverwendet werden.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ist systemintern und nicht als dauerhaft eindeutiger Schlüssel geeignet.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Technische Eigenschaften der ctid in PostgreSQL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;technische_eigenschaften_der_ctid_in_postgresql&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1441-1738&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;beste_praktiken&quot;&gt;Beste Praktiken&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Statt `rowid` oder `ctid` zu verwenden, sollten möglichst &lt;strong&gt;logische Identifikatoren&lt;/strong&gt; eingesetzt werden. Empfohlene Alternativen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Primärschlüssel&lt;/strong&gt; nutzen (z.B. durch `SERIAL` oder `BIGSERIAL` erzeugt).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Aufbau geeigneter &lt;strong&gt;Indexstrukturen&lt;/strong&gt; zur Performanceoptimierung.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Logische Referenzen&lt;/strong&gt; statt physischer Adressen (z.B. Foreign Keys auf Primärschlüssel).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Anpassung der Anwendung, um auf `rowid`/`ctid` zu verzichten.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Beste Praktiken&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beste_praktiken&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1739-2215&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;moegliche_loesungen_bei_migration_oder_wrapper-nutzung&quot;&gt;Mögliche Lösungen bei Migration oder Wrapper-Nutzung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Wenn eine bestehende Anwendung auf `rowid` angewiesen ist, gibt es folgende Workarounds:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Anlage einer &lt;strong&gt;eigenen physischen Spalte&lt;/strong&gt; `rowid` vom Typ `BIGSERIAL` in der PostgreSQL-Zielstruktur.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Aufbau eines &lt;strong&gt;dedizierten Index&lt;/strong&gt; zur effizienten Suche.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Anpassung der SQL-Statements in der Anwendung, um die neue Struktur zu unterstützen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Hinweis&lt;/strong&gt;: Die Verwendung von `ctid` als langfristiger Zeilenidentifikator sollte vermieden werden, da er sich durch normale Datenbankoperationen wie `UPDATE`, `VACUUM`, etc. verändern kann und somit nicht stabil ist.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;M\u00f6gliche L\u00f6sungen bei Migration oder Wrapper-Nutzung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;moegliche_loesungen_bei_migration_oder_wrapper-nutzung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2216-2855&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;fazit&quot;&gt;Fazit&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die `rowid` bzw. `ctid` sind für temporäre oder systeminterne Zwecke nützlich, sollten jedoch &lt;strong&gt;nicht als zuverlässige Referenz&lt;/strong&gt; in langlebigen Anwendungen oder Datenmodellen verwendet werden. Stattdessen ist auf &lt;strong&gt;Primärschlüssel-basierte Logik&lt;/strong&gt; umzusteigen.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Fazit&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;fazit&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2856-3143&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;Informix, PostgreSQL, rowid, ctid, FDW, Migration, Primärschlüssel&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3144-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/wiki:dokuwiki?rev=1749392224&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-08T14:17:04+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>dokuwiki</title>
        <link>http://wiki.redatek.de/wiki:dokuwiki?rev=1749392224&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;dokuwiki&quot;&gt;DokuWiki&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.dokuwiki.org/wiki%3Adokuwiki&quot; class=&quot;media&quot; title=&quot;https://www.dokuwiki.org/wiki%3Adokuwiki&quot;&gt;&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:dokuwiki-128.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; DokuWiki is a simple to use and highly versatile Open Source &lt;a href=&quot;https://en.wikipedia.org/wiki/wiki&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/wiki&quot;&gt;wiki&lt;/a&gt; software that doesn&amp;#039;t require a database. It is loved by users for its clean and readable &lt;a href=&quot;http://wiki.redatek.de/wiki:syntax&quot; class=&quot;wikilink2&quot; title=&quot;wiki:syntax&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:syntax&quot;&gt;syntax&lt;/a&gt;. The ease of maintenance, backup and integration makes it an administrator&amp;#039;s favorite. Built in &lt;a href=&quot;https://www.dokuwiki.org/acl&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/acl&quot;&gt;access controls&lt;/a&gt; and &lt;a href=&quot;https://www.dokuwiki.org/auth&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/auth&quot;&gt;authentication connectors&lt;/a&gt; make DokuWiki especially useful in the enterprise context and the large number of &lt;a href=&quot;https://www.dokuwiki.org/plugins&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/plugins&quot;&gt;plugins&lt;/a&gt; contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.
&lt;/p&gt;

&lt;p&gt;
Read the &lt;a href=&quot;https://www.dokuwiki.org/manual&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/manual&quot;&gt;DokuWiki Manual&lt;/a&gt; to unleash the full power of DokuWiki.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;DokuWiki&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwiki&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-704&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
DokuWiki is available at &lt;a href=&quot;https://download.dokuwiki.org/&quot; class=&quot;urlextern&quot; title=&quot;https://download.dokuwiki.org/&quot; rel=&quot;ugc nofollow&quot;&gt;https://download.dokuwiki.org/&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Download&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;705-784&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;read_more&quot;&gt;Read More&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
All documentation and additional information besides the &lt;a href=&quot;http://wiki.redatek.de/wiki:syntax&quot; class=&quot;wikilink2&quot; title=&quot;wiki:syntax&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:syntax&quot;&gt;syntax description&lt;/a&gt; is maintained in the DokuWiki at &lt;a href=&quot;https://www.dokuwiki.org/&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/&quot;&gt;www.dokuwiki.org&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;About DokuWiki&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/features&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/features&quot;&gt;A feature list&lt;/a&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/users&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/users&quot;&gt;Happy Users&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/press&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/press&quot;&gt;Who wrote about it&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/blogroll&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/blogroll&quot;&gt;What Bloggers think&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.wikimatrix.org/show/DokuWiki&quot; class=&quot;urlextern&quot; title=&quot;https://www.wikimatrix.org/show/DokuWiki&quot; rel=&quot;ugc nofollow&quot;&gt;Compare it with other wiki software&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Installing DokuWiki&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/requirements&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/requirements&quot;&gt;System Requirements&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://download.dokuwiki.org/&quot; class=&quot;urlextern&quot; title=&quot;https://download.dokuwiki.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Download DokuWiki&lt;/a&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/changes&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/changes&quot;&gt;Change Log&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/Install&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/Install&quot;&gt;How to install or upgrade&lt;/a&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/config&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/config&quot;&gt;Configuration&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Using DokuWiki&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/syntax&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/syntax&quot;&gt;Wiki Syntax&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/manual&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/manual&quot;&gt;The manual&lt;/a&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/FAQ&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/FAQ&quot;&gt;Frequently Asked Questions (FAQ)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/glossary&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/glossary&quot;&gt;Glossary&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Customizing DokuWiki&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/tips&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/tips&quot;&gt;Tips and Tricks&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/Template&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/Template&quot;&gt;How to create and use templates&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/plugins&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/plugins&quot;&gt;Installing plugins&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/development&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/development&quot;&gt;Development Resources&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;DokuWiki Feedback and Community&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/newsletter&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/newsletter&quot;&gt;Subscribe to the newsletter&lt;/a&gt; &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/mailinglist&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/mailinglist&quot;&gt;Join the mailing list&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://forum.dokuwiki.org&quot; class=&quot;urlextern&quot; title=&quot;https://forum.dokuwiki.org&quot; rel=&quot;ugc nofollow&quot;&gt;Check out the user forum&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/irc&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/irc&quot;&gt;Talk to other users in the IRC channel&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/splitbrain/dokuwiki/issues&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/splitbrain/dokuwiki/issues&quot; rel=&quot;ugc nofollow&quot;&gt;Submit bugs and feature wishes&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/thanks&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/thanks&quot;&gt;Some humble thanks&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Read More&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;read_more&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;785-2217&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;copyright&quot;&gt;Copyright&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
2004-2020 © Andreas Gohr &lt;a href=&quot;mailto:&amp;#97;&amp;#110;&amp;#100;&amp;#105;&amp;#64;&amp;#115;&amp;#112;&amp;#108;&amp;#105;&amp;#116;&amp;#98;&amp;#114;&amp;#97;&amp;#105;&amp;#110;&amp;#46;&amp;#111;&amp;#114;&amp;#103;&quot; class=&quot;mail&quot; title=&quot;&amp;#97;&amp;#110;&amp;#100;&amp;#105;&amp;#64;&amp;#115;&amp;#112;&amp;#108;&amp;#105;&amp;#116;&amp;#98;&amp;#114;&amp;#97;&amp;#105;&amp;#110;&amp;#46;&amp;#111;&amp;#114;&amp;#103;&quot;&gt;&amp;#97;&amp;#110;&amp;#100;&amp;#105;&amp;#64;&amp;#115;&amp;#112;&amp;#108;&amp;#105;&amp;#116;&amp;#98;&amp;#114;&amp;#97;&amp;#105;&amp;#110;&amp;#46;&amp;#111;&amp;#114;&amp;#103;&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; and the DokuWiki Community
&lt;/p&gt;

&lt;p&gt;
The DokuWiki engine is licensed under &lt;a href=&quot;https://www.gnu.org/licenses/gpl.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.gnu.org/licenses/gpl.html&quot; rel=&quot;ugc nofollow&quot;&gt;GNU General Public License&lt;/a&gt; Version 2. If you use DokuWiki in your company, consider &lt;a href=&quot;https://www.dokuwiki.org/donate&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/donate&quot;&gt;donating&lt;/a&gt; a few bucks &lt;img src=&quot;http://wiki.redatek.de/lib/images/smileys/wink.svg&quot; class=&quot;icon smiley&quot; alt=&quot;;-)&quot; /&gt;.
&lt;/p&gt;

&lt;p&gt;
Not sure what this means? See the &lt;a href=&quot;https://www.dokuwiki.org/faq%3Alicense&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/faq%3Alicense&quot;&gt;FAQ on the Licenses&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Copyright&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;copyright&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2218-2730&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;DokuWiki, Wiki, Wiki-Syntax, Dokumentation, Open Source, Installation, Konfiguration, Plugins, &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt;, Authentifizierung, Backups&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Stichworte&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stichworte&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2731-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Please do not contact me for help and support – use the &lt;a href=&quot;https://www.dokuwiki.org/mailinglist&quot; class=&quot;interwiki iw_doku&quot; title=&quot;https://www.dokuwiki.org/mailinglist&quot;&gt;mailinglist&lt;/a&gt; or &lt;a href=&quot;https://forum.dokuwiki.org&quot; class=&quot;urlextern&quot; title=&quot;https://forum.dokuwiki.org&quot; rel=&quot;ugc nofollow&quot;&gt;forum&lt;/a&gt; instead&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Aenterpriselogorahmen2.png&amp;ns=wiki&amp;rev=1725089735&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T07:35:35+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>enterpriselogorahmen2.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Aenterpriselogorahmen2.png&amp;ns=wiki&amp;rev=1725089735&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:enterpriselogorahmen2.png?w=500&amp;amp;h=500&amp;amp;tok=41f699&quot; alt=&quot;enterpriselogorahmen2.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=favicon.ico&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T06:50:21+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>favicon.ico - angelegt</title>
        <link>http://wiki.redatek.de/?image=favicon.ico&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/favicon.ico?w=500&amp;amp;h=500&amp;amp;tok=36a69b&quot; alt=&quot;favicon.ico&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=logo.png&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T06:50:21+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>logo.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=logo.png&amp;ns=0&amp;rev=1725087021&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/logo.png?w=500&amp;amp;h=500&amp;amp;tok=9a464a&quot; alt=&quot;logo.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Avt52.jpg&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T05:59:40+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>vt52.jpg - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Avt52.jpg&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:vt52.jpg?w=500&amp;amp;h=500&amp;amp;tok=222e7c&quot; alt=&quot;vt52.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Agfud.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T05:59:40+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>gfud.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Agfud.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:gfud.png?w=500&amp;amp;h=500&amp;amp;tok=85ca85&quot; alt=&quot;gfud.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Abanner.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T05:59:40+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>banner.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Abanner.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:banner.png?w=500&amp;amp;h=500&amp;amp;tok=0bad4f&quot; alt=&quot;banner.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Aitveteran.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-31T05:59:40+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>itveteran.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Aitveteran.png&amp;ns=wiki&amp;rev=1725083980&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:itveteran.png?w=500&amp;amp;h=500&amp;amp;tok=7d3924&quot; alt=&quot;itveteran.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=wiki%3Abdrthomas-336x400-1.jpg&amp;ns=wiki&amp;rev=1724247278&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:34:38+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>bdrthomas-336x400-1.jpg - angelegt</title>
        <link>http://wiki.redatek.de/?image=wiki%3Abdrthomas-336x400-1.jpg&amp;ns=wiki&amp;rev=1724247278&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/wiki:bdrthomas-336x400-1.jpg?w=500&amp;amp;h=500&amp;amp;tok=a5241d&quot; alt=&quot;bdrthomas-336x400-1.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=ksnip_20240821-144545.png&amp;ns=0&amp;rev=1724245125&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T12:58:45+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>ksnip_20240821-144545.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=ksnip_20240821-144545.png&amp;ns=0&amp;rev=1724245125&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/ksnip_20240821-144545.png?w=500&amp;amp;h=500&amp;amp;tok=031063&quot; alt=&quot;ksnip_20240821-144545.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/?image=ksnip_20240821-144826.png&amp;ns=0&amp;rev=1724245092&amp;tab_details=history&amp;media_do=diff&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T12:58:12+00:00</dc:date>
        <dc:creator>Thomas Schilling (admin@undisclosed.example.com)</dc:creator>
        <title>ksnip_20240821-144826.png - angelegt</title>
        <link>http://wiki.redatek.de/?image=ksnip_20240821-144826.png&amp;ns=0&amp;rev=1724245092&amp;tab_details=history&amp;media_do=diff&amp;do=media</link>
        <description>&lt;img src=&quot;http://wiki.redatek.de/_media/ksnip_20240821-144826.png?w=500&amp;amp;h=500&amp;amp;tok=ec9f90&quot; alt=&quot;ksnip_20240821-144826.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
</rdf:RDF>
