<?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  - informix</title>
        <description></description>
        <link>http://wiki.redatek.de/</link>
        <image rdf:resource="http://wiki.redatek.de/_media/logo.png" />
       <dc:date>2026-10-16T19:09:06+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:alter_mode?rev=1788872966&amp;do=diff"/>
                <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:collate_umlaute?rev=1790493756&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:fehlervermeidung_cas_mon_ddl?rev=1791527548&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:informix_fdw?rev=1777790854&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:leap_16_informix_konfig?rev=1777790806&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.redatek.de/informix:onconfig_memory?rev=1791447423&amp;do=diff"/>
            </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:alter_mode?rev=1788872966&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-08T13:09:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>alter_mode</title>
        <link>http://wiki.redatek.de/informix:alter_mode?rev=1788872966&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;informixalter-mode_und_flag_8388608&quot;&gt;Informix: ALTER-MODE und Flag 8388608&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;Informix: ALTER-MODE und Flag 8388608&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;informixalter-mode_und_flag_8388608&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-53&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;kurzfassung&quot;&gt;Kurzfassung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Bei der Untersuchung von zwei replizierten Tabellen wurde das Flag
&lt;code&gt;8388608&lt;/code&gt; (hexadezimal &lt;code&gt;0x800000&lt;/code&gt;) zunaechst als ALTER-MODE-Flag
interpretiert. Das ist falsch. Das echte CDR-ALTER-MODE-Flag ist
&lt;code&gt;4194304&lt;/code&gt; (hexadezimal &lt;code&gt;0x400000&lt;/code&gt;).
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;0x800000&lt;/code&gt; kennzeichnet eine In-Place-Alter-Historie (IPA) im
Partition-Header. Es kann bestehen bleiben, obwohl alle Datenseiten bereits
auf der aktuellen Row-Version liegen.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;SERIAL&lt;/code&gt; kann als 4-Byte-&lt;code&gt;INTEGER&lt;/code&gt; repliziert werden. Die unterschiedliche
Definition ist daher kein Replikationsbruch: Der Leaf darf &lt;code&gt;id&lt;/code&gt; als
&lt;code&gt;SERIAL&lt;/code&gt; erzeugen, waehrend der Master &lt;code&gt;INTEGER&lt;/code&gt; ohne eigene
Serial-Sequenz speichert.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;cdr alter –off&lt;/code&gt; scheiterte trotzdem mit Return Code 137, weil die
Unset-Pruefung das Master-Dictionary (&lt;code&gt;coltype 2&lt;/code&gt;) streng mit dem lokalen
Katalog (&lt;code&gt;coltype 262&lt;/code&gt;) vergleicht. Zusaetzlich existierte ein
Shadow-Replicate. Der spaetere &lt;code&gt;MODIFY (id INTEGER)&lt;/code&gt; glich den Katalog zwar
kuenstlich an und entblockte &lt;code&gt;–off&lt;/code&gt;, war fachlich aber falsch, weil dadurch
die lokale Soll-Serial-Definition verloren ging.
&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;Kurzfassung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;kurzfassung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;54-1158&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;anonymisierte_umgebung&quot;&gt;Anonymisierte Umgebung&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; Informix: 12.10.FC14WE&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Leaf: &lt;code&gt;servera&lt;/code&gt;, begrenzter ER-Server, SEND-ONLY&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Master: &lt;code&gt;serverb&lt;/code&gt; (ID &lt;code&gt;server_id_b&lt;/code&gt;) auf &lt;code&gt;serverb_host&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Zieldatenbank: &lt;code&gt;datenbank_a&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Master-Datenbank: &lt;code&gt;datenbank_b&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Datenbank-Owner: &lt;code&gt;benutzerA&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tabellen: &lt;code&gt;tabelleA&lt;/code&gt; und &lt;code&gt;tabelleB&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Replicates: &lt;code&gt;replikatA&lt;/code&gt; und &lt;code&gt;replikatB&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;Anonymisierte Umgebung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;anonymisierte_umgebung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1159-1543&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;die_beiden_relevanten_bits&quot;&gt;Die beiden relevanten Bits&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&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; Dezimal &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Hexadezimal &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Bedeutung &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 4194304 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 0x400000 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Echtes CDR-ALTER-MODE-Flag &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; 8388608 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 0x800000 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; IPA-Historie im Partition-Header &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;:5,&amp;quot;range&amp;quot;:&amp;quot;1584-1731&amp;quot;} --&gt;
&lt;p&gt;
Das echte ALTER-MODE-Flag wird von &lt;code&gt;oncheck -pt&lt;/code&gt; als
&lt;code&gt;TBLspace flagged for CDR alter mode&lt;/code&gt; angezeigt. Bei gesetztem
&lt;code&gt;0x800000&lt;/code&gt; allein erscheint dieser Text 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;Die beiden relevanten Bits&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;die_beiden_relevanten_bits&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1544-1902&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;diagnoseabfrage&quot;&gt;Diagnoseabfrage&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die urspruengliche Suchabfrage nach dem Flag &lt;code&gt;8388608&lt;/code&gt; lautet:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;dbsname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;flags&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       BITAND&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;flags&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8388608&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; alter_mode_bit
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; sysmaster:systabnames t&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; sysmaster:sysptnhdr p&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; systables tab
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;partnum &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;partnum
  &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; BITAND&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;flags&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8388608&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; tab&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname
  &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; tab&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabid &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;99&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; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;dbsname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname;&lt;/pre&gt;

&lt;p&gt;
Diese Abfrage findet Partitionen mit IPA-Historie, beweist aber keinen
aktiven CDR-ALTER-MODE. Fuer die Unterscheidung der beiden Bits kann
beispielsweise folgende Abfrage verwendet werden:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;dbsname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       BITAND&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;flags&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;4194304&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; cdr_alter_mode&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       BITAND&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;flags&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8388608&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; ipa_history
  &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; sysmaster:systabnames t&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       sysmaster:sysptnhdr p&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       systables tab
 &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;partnum &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; p&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;partnum
   &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;dbsname &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;datenbank_a&#039;&lt;/span&gt;
   &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;tabelleA&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;tabelleB&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
   &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; t&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; tab&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabname
   &lt;span class=&quot;kw1&quot;&gt;AND&lt;/span&gt; tab&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;tabid &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;99&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Zusaetzlich zeigt &lt;code&gt;oncheck -pt&lt;/code&gt; den echten ALTER-MODE-Status:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;oncheck &lt;span class=&quot;re5&quot;&gt;-pt&lt;/span&gt; datenbank_a:benutzerA.tabelleA&lt;/pre&gt;

&lt;p&gt;
Bei der betroffenen Umgebung war &lt;code&gt;0x400000&lt;/code&gt; nicht gesetzt, waehrend
&lt;code&gt;0x800000&lt;/code&gt; gesetzt war. DML war deshalb nicht wegen des vermeintlichen
ALTER-MODE-Bits blockiert.
&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;Diagnoseabfrage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;diagnoseabfrage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1903-3204&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;zusammenhang_mit_in-place-alter&quot;&gt;Zusammenhang mit In-Place-Alter&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die Spalten &lt;code&gt;pta_oldvers&lt;/code&gt; und &lt;code&gt;pta_newvers&lt;/code&gt; im Partition-Header
beschreiben die IPA-Versionskette. Ein gesetztes &lt;code&gt;0x800000&lt;/code&gt; kann daher
zusammen mit einer solchen Versionsspanne auftreten.
&lt;/p&gt;

&lt;p&gt;
Ob noch alte Datenseiten vorhanden sind, wird mit &lt;code&gt;oncheck -pT&lt;/code&gt; geprueft,
nicht anhand des Bits:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Home Data Page Version Summary
       Version                         Count
       n (oldest)                      0
       ...
       m (current)                     Anzahl der Datenseiten&lt;/pre&gt;

&lt;p&gt;
Wenn alle alten Versionen den Count &lt;code&gt;0&lt;/code&gt; haben und nur die aktuelle Version
Datenseiten traegt, ist die IPA operativ abgeschlossen. Das Bit kann trotzdem
noch als Header-Historie vorhanden sein. &lt;code&gt;update_ipa&lt;/code&gt; raeumt alte
Datenseiten auf; es setzt den Partition-Header nicht zwingend zurueck.
&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;Zusammenhang mit In-Place-Alter&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;zusammenhang_mit_in-place-alter&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3205-4045&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;ursache_fuer_return_code_137&quot;&gt;Ursache fuer Return Code 137&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Im Online-Log erschien sinngemaess:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;GC operation alter mode unset operation on a replicated table failed:
Mismatch between local table dictionary and master dictionary

CDR WARNING: Column type or size mismatch detected&lt;/pre&gt;

&lt;p&gt;
Der einzige Schemaunterschied war:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit9&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; Spalte &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Leaf &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Master und Master-Dictionary &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;id&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;SERIAL NOT NULL&lt;/code&gt; (&lt;code&gt;coltype 262&lt;/code&gt;) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;code&gt;INTEGER&lt;/code&gt;, nullable (&lt;code&gt;coltype 2&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;table1&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;4361-4500&amp;quot;} --&gt;
&lt;p&gt;
&lt;code&gt;SERIAL&lt;/code&gt; und &lt;code&gt;INTEGER&lt;/code&gt; sind hinsichtlich der Speicherbreite kompatibel
und koennen ordnungsgemaess repliziert werden. Fuer das CDR-Dictionary sind
es trotzdem unterschiedliche Typen. Die Spalte &lt;code&gt;id&lt;/code&gt; war Teil des
Replikationsschluessels (&lt;code&gt;pknum 1&lt;/code&gt;, zusammen mit &lt;code&gt;nlcode&lt;/code&gt; als &lt;code&gt;pknum 2&lt;/code&gt;).
Deshalb scheiterte die strenge Unset-Pruefung von &lt;code&gt;cdr alter –off&lt;/code&gt; mit
Return Code 137. Das ist kein Beleg dafuer, dass die Replikation von SERIAL
nach INTEGER unzulaessig waere.
&lt;/p&gt;

&lt;p&gt;
Ein aktiver Shadow-Replicate vom Master kann diesen Zustand zusaetzlich
festhalten. Auf einem Limited Server ist das Loeschen von Replicates nicht
erlaubt (Return Code 75); solche Verwaltungsaktionen muessen auf dem Master
ausgefuehrt werden.
&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;Ursache fuer Return Code 137&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ursache_fuer_return_code_137&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;4046-5226&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;durchgefuehrte_bereinigung&quot;&gt;Durchgefuehrte Bereinigung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Shadow-Replicate auf &lt;code&gt;serverb&lt;/code&gt; geloescht.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fuer beide Tabellen ALTER-MODE kontrolliert gesetzt und ausgeschaltet.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
    Die anschliessende Aenderung von &lt;code&gt;id&lt;/code&gt; auf INTEGER war ein Fehler und
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  haette entfallen muessen:&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;cdr alter &lt;span class=&quot;re5&quot;&gt;--on&lt;/span&gt;  datenbank_a:benutzerA.tabelleA
ALTER TABLE tabelleA MODIFY &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;id&lt;/span&gt; INTEGER&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; FALSCH: nicht nachmachen
cdr alter &lt;span class=&quot;re5&quot;&gt;--off&lt;/span&gt; datenbank_a:benutzerA.tabelleA
&amp;nbsp;
cdr alter &lt;span class=&quot;re5&quot;&gt;--on&lt;/span&gt;  datenbank_a:benutzerA.tabelleB
cdr alter &lt;span class=&quot;re5&quot;&gt;--off&lt;/span&gt; datenbank_a:benutzerA.tabelleB&lt;/pre&gt;

&lt;p&gt;
Der dokumentierte &lt;code&gt;MODIFY&lt;/code&gt;-Schritt wurde tatsaechlich ausgefuehrt und
entblockte &lt;code&gt;–off&lt;/code&gt;, war aber fachlich nicht korrekt. &lt;code&gt;id&lt;/code&gt; haette lokal
als &lt;code&gt;SERIAL NOT NULL&lt;/code&gt; bleiben muessen. Der Soll-Zustand ist daher in einem
separaten, kontrollierten Auftrag wiederherzustellen.
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Offene IPA-Datenseiten mit &lt;code&gt;update_ipa&lt;/code&gt; bereinigt:&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;DATABASE&lt;/span&gt; sysadmin;
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; task&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;table update_ipa&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;tabelleA&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;datenbank_a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; task&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;table update_ipa&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;tabelleB&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;datenbank_a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Anschliessend beide Partitionen mit einem Slow-Alter neu geschrieben:&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;code bash&quot;&gt;cdr alter &lt;span class=&quot;re5&quot;&gt;--on&lt;/span&gt; datenbank_a:benutzerA.tabelleA
ALTER FRAGMENT ON TABLE tabelleA INIT IN datenbankbereichA;
cdr alter &lt;span class=&quot;re5&quot;&gt;--off&lt;/span&gt; datenbank_a:benutzerA.tabelleA&lt;/pre&gt;

&lt;p&gt;
Der letzte Schritt wurde analog fuer &lt;code&gt;tabelleB&lt;/code&gt; ausgefuehrt. Dabei wurden
keine Daten per Unload/Load bewegt, kein Katalog manuell geaendert und kein
Remaster vom Leaf durchgefuehrt.
&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;Durchgefuehrte Bereinigung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;durchgefuehrte_bereinigung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;5227-6727&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;ergebnis&quot;&gt;Ergebnis&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit12&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; Tabelle &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Flags &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; 0x800000 &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; 0x400000 &lt;/th&gt;&lt;th class=&quot;col4&quot;&gt; pta_old/new &lt;/th&gt;&lt;th class=&quot;col5&quot;&gt; id-coltype &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;tabelleA&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 0x0000090A &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 0 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 0 &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; 0 / 0 &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;tabelleB&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 0x0000080A &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 0 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 0 &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; 0 / 0 &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 2 &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;table2&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;6750-6918&amp;quot;} --&gt;
&lt;p&gt;
&lt;code&gt;oncheck -pt&lt;/code&gt; zeigt jetzt nur noch die Replikationskennzeichnung, nicht
mehr &lt;code&gt;CDR alter mode&lt;/code&gt;. Die Zeilenanzahl blieb unveraendert. Die Primaer-
und Unique-Indizes wurden nicht veraendert.
&lt;/p&gt;

&lt;p&gt;
Wegen des falschen &lt;code&gt;MODIFY&lt;/code&gt; erzeugt ein INSERT ohne angegebene &lt;code&gt;id&lt;/code&gt; auf
dem Leaf aktuell keine lokale Seriennummer mehr. Das ist ein Fehlerzustand:
Der Soll-Zustand dieses SEND-ONLY-Knotens ist weiterhin &lt;code&gt;SERIAL NOT NULL&lt;/code&gt;
auf dem Leaf und &lt;code&gt;INTEGER&lt;/code&gt; im Master. Andere unabhaengige Serial-Spalten
bleiben davon unberuehrt.
&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;Ergebnis&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ergebnis&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;6728-7443&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;betriebsregeln&quot;&gt;Betriebsregeln&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; CDR-ALTER-MODE mit &lt;code&gt;oncheck -pt&lt;/code&gt;, dem Bit&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    &lt;code&gt;BITAND(flags, 4194304) &amp;gt; 0&lt;/code&gt;, dem Online-Log und Fehler 19992
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  diagnostizieren.
* Nicht &amp;#039;&amp;#039;BITAND(flags, 8388608)&amp;#039;&amp;#039; als ALTER-MODE-Nachweis verwenden.
* IPA mit &amp;#039;&amp;#039;oncheck -pT&amp;#039;&amp;#039; anhand der Version Counts beurteilen.
* Bei Return Code 137 die Unset-Pruefung und den Shadow-Zustand untersuchen.
  &amp;#039;&amp;#039;SERIAL&amp;#039;&amp;#039; lokal gegen &amp;#039;&amp;#039;INTEGER&amp;#039;&amp;#039; im Master ist als Replikationskonvertierung
  zulaessig, auch wenn das Dictionary coltype 262 gegen 2 meldet.
* Bei Replikationsschluesseln muessen Namen, Reihenfolge und die
  Replikationskompatibilitaet stimmen. SERIAL lokal und INTEGER im Master
  kann dabei eine beabsichtigte Konvertierung sein.
* Shadow-Replicates auf dem fuehrenden Master verwalten, nicht auf einem
  Limited Leaf.
* Den Datenbank- und Owner-Qualifier bei &amp;#039;&amp;#039;cdr alter&amp;#039;&amp;#039; immer angeben.
* &amp;#039;&amp;#039;sysmaster&amp;#039;&amp;#039;-Pseudo-Tabellen nicht per UPDATE veraendern.
* Replizierte Tabellen nur nach kontrolliertem &amp;#039;&amp;#039;cdr alter --on&amp;#039;&amp;#039;,
  Shadow-/Participant-Bereinigung und anschliessendem &amp;#039;&amp;#039;--off&amp;#039;&amp;#039; aendern.
  Die lokale SERIAL-Definition dabei nicht auf INTEGER aendern, nur um
  die Unset-Pruefung zu umgehen.&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;Betriebsregeln&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;betriebsregeln&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;7444-8655&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;betroffene_objekte_und_umgebung&quot;&gt;Betroffene Objekte und Umgebung&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; Informix: 12.10.FC14WE, &lt;code&gt;INFORMIXSERVER=tcp_servera&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Leaf: &lt;code&gt;servera&lt;/code&gt;; Master: &lt;code&gt;serverb&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Datenbank: &lt;code&gt;datenbank_a&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tabellen: &lt;code&gt;tabelleA&lt;/code&gt; und &lt;code&gt;tabelleB&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Replicates: &lt;code&gt;replikatA&lt;/code&gt; (Teilnehmer &lt;code&gt;tabelleA&lt;/code&gt;) und&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    &lt;code&gt;replikatB&lt;/code&gt; (Teilnehmer &lt;code&gt;tabelleB&lt;/code&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;Betroffene Objekte und Umgebung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;betroffene_objekte_und_umgebung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;8656-8980&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;befund&quot;&gt;Befund&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;code&gt;ipa_history&lt;/code&gt; ist kein Spaltenflag. Informix In-Place-Alter (IPA) laesst
Datenseiten nach einem &lt;code&gt;ALTER TABLE&lt;/code&gt; zunaechst in der alten Row-Version.
Erst ein spaeteres INSERT oder UPDATE schreibt die jeweilige Zeile in das
neue Layout. Sichtbar ist dies in &lt;code&gt;oncheck -pT&lt;/code&gt; unter &lt;code&gt;Home Data Page
Version Summary&lt;/code&gt; sowie in &lt;code&gt;sysmaster:sysptnhdr&lt;/code&gt; mit &lt;code&gt;pta_oldvers&lt;/code&gt; und
&lt;code&gt;pta_newvers&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Bei &lt;code&gt;tabelleA&lt;/code&gt; wurden 1504 Seiten in Version 0 (oldest) und 656 Seiten in
Version 1 (current) gefunden; &lt;code&gt;nupdates&lt;/code&gt; war 3596. Bei &lt;code&gt;tabelleB&lt;/code&gt; waren
2034 Seiten in Version 0 und nur 1 Seite in Version 1; &lt;code&gt;nupdates&lt;/code&gt; war 11.
In beiden Faellen gab es nur eine neue Version (0 → 1). Der groesste Teil
der Zeilen war daher noch nicht auf das neue Layout umgeschrieben. Das ist
kein Datenfehler.
&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;Befund&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;befund&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;8981-9785&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;ursache_und_zeitlicher_ablauf&quot;&gt;Ursache und zeitlicher Ablauf&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ursache waren manuelle &lt;code&gt;ALTER TABLE … MODIFY&lt;/code&gt;-Laeufe als User
&lt;code&gt;informix&lt;/code&gt;, nicht ein automatischer Job und nicht das Flag selbst.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Am 04.09.2026 erledigte &lt;code&gt;task(&amp;#039;table update_ipa&amp;#039;)&lt;/code&gt; eine aeltere IPA.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    Danach wurden die Partitionen neu aufgebaut; die neuen Partitionen
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  hatten anschliessend keine offene IPA.
* Am 07.09.2026 wurden unter anderem &amp;#039;&amp;#039;nbwvorwahl CHAR(7)&amp;#039;&amp;#039; und
  &amp;#039;&amp;#039;tabelleB.handynr CHAR(16)&amp;#039;&amp;#039; gesetzt. Diese Definitionen waren bereits
  in frueheren Dictionary-Dumps vorhanden und waren nicht der Ausloeser
  der zweiten Seitenversion.
* Die IPA-treibende Aenderung war der Wechsel von &amp;#039;&amp;#039;id INTEGER&amp;#039;&amp;#039; zu
  &amp;#039;&amp;#039;id SERIAL NOT NULL&amp;#039;&amp;#039;: bei &amp;#039;&amp;#039;tabelleA&amp;#039;&amp;#039; am 07.09.2026 und bei
  &amp;#039;&amp;#039;tabelleB&amp;#039;&amp;#039; am 08.09.2026. Dazu kamen Syntaxversuche am Serial-Typ,
  ein UPDATE auf &amp;#039;&amp;#039;id IS NULL&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;cdr alter --off&amp;#039;&amp;#039;.
* Am 08.09.2026 wurden Sitzungen von einem Arbeitsplatz beendet, die
  betroffene Sitzungen hielten.&lt;/pre&gt;

&lt;p&gt;
Die lokalen und Master-Dictionary-Staende waren dabei nicht gleich: Im
Master war &lt;code&gt;id&lt;/code&gt; als &lt;code&gt;INTEGER&lt;/code&gt; definiert, lokal als &lt;code&gt;SERIAL&lt;/code&gt;. Der
Nahtabzug zeigte fuer &lt;code&gt;tabelleA&lt;/code&gt; bereits &lt;code&gt;SERIAL NOT NULL&lt;/code&gt; und fuer
&lt;code&gt;tabelleB&lt;/code&gt; noch &lt;code&gt;INTEGER&lt;/code&gt;; im aktuellen Schema sind beide lokal
&lt;code&gt;SERIAL NOT NULL&lt;/code&gt;. Dadurch bleibt das ER-Dictionary fachlich zu klaeren,
auch wenn die Speicherbreite von &lt;code&gt;SERIAL&lt;/code&gt; und &lt;code&gt;INTEGER&lt;/code&gt; kompatibel 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;Ursache und zeitlicher Ablauf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ursache_und_zeitlicher_ablauf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;9786-11209&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;warum_die_historie_stehen_blieb&quot;&gt;Warum die Historie stehen blieb&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;code&gt;task(&amp;#039;table update_ipa&amp;#039;)&lt;/code&gt; vom 04.09.2026 bezog sich nur auf die damaligen
Partitionen. Nach den neuen Alters am 07. und 08.09. wurde die Bereinigung
nicht erneut ausgefuehrt. IPA schreibt die alten Seiten nicht sofort um,
sondern erst bei spaeterem DML.
&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;Warum die Historie stehen blieb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;warum_die_historie_stehen_blieb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;11210-11510&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;empfohlene_behebung&quot;&gt;Empfohlene Behebung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Eine offene IPA nur aufloesen, wenn dies fuer Reorg, Versionswechsel,&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
    Revert oder Monitoring erforderlich ist. Normale DML konvertiert Zeilen
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  nach und nach.
- Wenn alle Seiten bewusst auf die aktuelle Version gebracht werden
  sollen, dies in einem Wartungsfenster und nach Abstimmung mit ER
  ausfuehren:&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;DATABASE&lt;/span&gt; sysadmin;
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; task&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;table update_ipa&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;tabelleA&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;datenbank_a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FUNCTION&lt;/span&gt; task&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;table update_ipa&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;tabelleB&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;datenbank_a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;  Optional kann die Task-Variante mit &amp;#039;&amp;#039;parallel&amp;#039;&amp;#039; verwendet werden. Nicht
  unter Last und nicht parallel zu Anwendungsschreibern auf denselben
  Tabellen ausfuehren; bei replizierten Tabellen ist der ER-Alter-Mode zu
  beruecksichtigen. Nach dem Checkpoint erneut &amp;#039;&amp;#039;oncheck -pT&amp;#039;&amp;#039; ausfuehren.
  Bei abgeschlossener IPA traegt nur noch die aktuelle Version Seiten;
  die alten Versionen haben Count 0.
- Nicht nochmals &amp;#039;&amp;#039;ALTER TABLE ... MODIFY&amp;#039;&amp;#039; auf &amp;#039;&amp;#039;id&amp;#039;&amp;#039;, &amp;#039;&amp;#039;nbwvorwahl&amp;#039;&amp;#039; oder
  &amp;#039;&amp;#039;handynr&amp;#039;&amp;#039; zur Sicherheit ausfuehren. Auch gleiche oder kompatible
  MODIFYs koennen erneut Alter-Mode und IPA-Versionen erzeugen.
- Die ER-Masterdefinition und den lokalen Soll-Typ abstimmen. Wenn
  &amp;#039;&amp;#039;id&amp;#039;&amp;#039; absichtlich &amp;#039;&amp;#039;SERIAL&amp;#039;&amp;#039; sein soll, muss die Replicate-Definition
  kontrolliert nachgezogen werden; ein weiteres lokales Alterieren loest
  den Dictionary-Mismatch nicht.
- Kein zweites &amp;#039;&amp;#039;update_ipa&amp;#039;&amp;#039; auf Verdacht starten: Die Task schreibt alle
  Restzeilen um und erzeugt I/O, Log- sowie ER-Apply-Last. Vorher muss
  &amp;#039;&amp;#039;oncheck -pT&amp;#039;&amp;#039; den Bedarf bestaetigen.
- Nacharbeiten dokumentieren: verantwortlicher Aenderer, Soll-Typ im
  Master und die Frage, ob weitere Leaf-Knoten denselben Stand benoetigen.&lt;/pre&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; IBM/HCL: Troubleshooting Tips for Alter Operations&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; IBM/HCL: Resolve outstanding in-place alter operations&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; IBM/HCL: CDR Return Codes 137 (Dictionary-Mismatch) und 75 (Limited Server)&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;Empfohlene Behebung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;empfohlene_behebung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;11511-13467&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit19&quot; id=&quot;stichworte&quot;&gt;Stichworte&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;em&gt;Informix, Enterprise Replication, CDR, ALTER-MODE, In-Place-Alter, IPA, sysptnhdr, oncheck, cdr alter, Dictionary-Mismatch, Shadow-Replicate, Limited Server&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;:19,&amp;quot;range&amp;quot;:&amp;quot;13468-&amp;quot;} --&gt;</description>
    </item>
    <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>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>chunks_pages</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:collate_umlaute?rev=1790493756&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-27T07:22:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>collate_umlaute</title>
        <link>http://wiki.redatek.de/informix:collate_umlaute?rev=1790493756&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;informixcodeset_collation_und_deutsche_umlaute&quot;&gt;Informix: Codeset, Collation und deutsche Umlaute&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;Informix: Codeset, Collation und deutsche Umlaute&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;informixcodeset_collation_und_deutsche_umlaute&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-65&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;ziel_und_rahmen&quot;&gt;Ziel und Rahmen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Diese Notiz beschreibt die operative Ursache von Problemen mit deutschen Umlauten in Informix aus Sicht eines System- oder Datenbankadministrators. Der Schwerpunkt liegt nicht auf der Sprachtheorie, sondern auf den tatsächlichen Betriebsebenen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; wie die Datenbank Zeichen kodiert,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; welche Rolle die Locale spielt,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; wo die eigentliche Ursache in Client/Server-Konvertierung liegt,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; wann eine Collation nur die Sortierung beeinflusst und wann sie in Wirklichkeit ein Encoding-Problem maskiert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wichtig: In Informix sind Codeset und Collation getrennte Konzepte. Eine falsche Annahme, sie seien identisch oder austauschbar, erzeugt die typischen Umlaut-Fehler.
&lt;/p&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;Ziel und Rahmen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ziel_und_rahmen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;66-774&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;locale-architektur_in_gls&quot;&gt;1. Locale-Architektur in GLS&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Informix verwendet GLS (Global Language Support). Eine Locale hat die Form:
&lt;/p&gt;

&lt;p&gt;
Sprache_Territorium.Codeset[@Modifikator]
&lt;/p&gt;

&lt;p&gt;
Typische Beispiele:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ll_CC.819&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ll_CC.819@dict&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ll_CC.utf8&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ll_CC.57372&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Die Bestandteile bedeuten:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sprache/Territorium: sprachliche und regionale Defaults, z. B. Datumsformate, Meldungen, kulturelle Regeln&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Codeset: definierte Byte-Tabelle für die gespeicherten Zeichen&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Modifikator: Vergleichs- und Sortierregeln, z. B. @dict&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Das Entscheidende:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Codeset bestimmt das Speicherformat in CHAR/VARCHAR/LVARCHAR.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Collation bestimmt Vergleich, Sortierung und semantische Ordnung.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Collation ist keine zweite Kodierung, sondern eine Vergleichslogik.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;1. Locale-Architektur in GLS&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;locale-architektur_in_gls&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;775-1529&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;codeset_vs_collationdie_zentrale_trennung&quot;&gt;2. Codeset vs. Collation: die zentrale Trennung&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;2. Codeset vs. Collation: die zentrale Trennung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;codeset_vs_collationdie_zentrale_trennung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1530-1590&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;codeset&quot;&gt;2.1 Codeset&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Der Codeset beschreibt, welche Bytes in der Datenbank für ein Zeichen verwendet werden. Beispiel für ISO-8859-1 / IBM CCSID 819:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ä = C4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ö = D6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ü = DC&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ä = E4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ö = F6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ü = FC&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ß = DF&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In UTF-8 dagegen sind dieselben Zeichen mehrere Bytes, beispielsweise:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ä = C3 A4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ö = C3 B6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ü = C3 BC&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Das bedeutet: Die logische Rune „ü“ kann in verschiedenen Codesets als unterschiedliche Bytefolge erscheinen. Deshalb ist der tatsächliche Fehler oft ein Encoding-Mismatch, nicht ein Unicode-Problem der Datenbank selbst.
&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;2.1 Codeset&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;codeset&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1591-2172&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;collation&quot;&gt;2.2 Collation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die Collation beschreibt, wie Zeichen verglichen und sortiert werden. Sie betrifft SQL-Regeln wie:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ORDER BY&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; BETWEEN&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; LIKE, je nach Typ und Locale&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Unique-Index-Validierung&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Range- und Partitionierungslogik&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Replikations- und Vergleichssemantik je nach Definition&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Ein Modifikator wie @dict ändert nicht das gespeicherte Byte für ü, sondern nur die Reihenfolge, in der Zeichen als vergleichbar bzw. sortierbar behandelt werden. 
&lt;/p&gt;

&lt;p&gt;
Praktisch:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 819 und 819@dict sind identisch in der Byte-Tabelle.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 819@dict kann die Sortierung ändern.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 819@dict ändert nicht FC zu einem anderen Byte.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein Wechsel des Codesets (819 → UTF-8 oder umgekehrt) ändert dagegen das physische Bytebild der Daten.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;2.2 Collation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;collation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2173-2931&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;db_locale_und_client_locale&quot;&gt;3. DB_LOCALE und CLIENT_LOCALE&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Der Ablauf ist immer:
&lt;/p&gt;

&lt;p&gt;
Anwendung → CLIENT_LOCALE → GLS-Konvertierung → DB_LOCALE → Datenseite / Chunk
&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;3. DB_LOCALE und CLIENT_LOCALE&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;db_locale_und_client_locale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2932-3086&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;client_locale&quot;&gt;3.1 CLIENT_LOCALE&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
CLIENT_LOCALE beschreibt die Zeichenkodierung, mit der die Anwendung die Zeichen an den Server sendet. Ein Client kann Latin-1, UTF-8, UCS-2 oder ein anderer von GLS unterstützter Codeset verwenden.
&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;3.1 CLIENT_LOCALE&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;client_locale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;3087-3316&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;db_locale&quot;&gt;3.2 DB_LOCALE&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
DB_LOCALE beschreibt den Codeset der Datenbank selbst. Sobald die Daten in die Datenbank gelangen, werden sie im DB-Codeset gespeichert. Die Datenbank selbst kennt nur diese interne Byte-Repräsentation.
&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;3.2 DB_LOCALE&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;db_locale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3317-3546&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;konvertierung&quot;&gt;3.3 Konvertierung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Wenn Client und Datenbank unterschiedliche Codesets verwenden, führt Informix eine Konvertierung durch. Das ist genau die Stelle, an der viele Fehler entstehen.
&lt;/p&gt;

&lt;p&gt;
Beispiele:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Client sendet UTF-8-C3-BC für ü, DB erwartet 819: die Konvertierung wird zu FC erwartet, sofern alle Locales korrekt gesetzt sind.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Client sendet Latin-1 FC, DB erwartet UTF-8: der Server wandelt FC nach UTF-8, wenn die Konvertierung korrekt ist.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Client behauptet UTF-8, liefert aber Latin-1-Bytes oder umgekehrt: Die Konvertierung interpretiert die Faustdaten fälschlich, und das Ergebnis ist Mojibake.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Das ist genau die Ursache, wenn im Feld plötzlich „Ã¼“ oder andere verzerrte Zeichen auftauchen.
&lt;/p&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;3.3 Konvertierung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;konvertierung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3547-4276&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;warum_dict_kein_encoding-problem_ist&quot;&gt;4. Warum @dict kein Encoding-Problem ist&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Der häufigste Fehler im operativen Umgang ist die falsche Gleichsetzung von Collation und Encoding.
&lt;/p&gt;

&lt;p&gt;
Korrekt:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; @dict ist Sortier-/Vergleichsregeln.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 819 ist das Code-Schema.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Falsch:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; @dict geändert das Byte für „ü“.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; @dict macht aus einem latin-1-Byte ein UTF-8-Zeichen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Diese Annahmen sind technisch falsch.
&lt;/p&gt;

&lt;p&gt;
Beispiel:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ll_CC.819 und ll_CC.819@dict speichern ü als FC, sofern der Codeset unverändert bleibt.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Nur die Vergleichsregeln und die Reihenfolge bei ORDER BY, BETWEEN und ähnlichen Operationen ändern sich.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wenn Umlaute in einer Datenbank falsch erscheinen, ist der Fehler in der Regel nicht @dict, sondern:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falscher DB_LOCALE beim CREATE DATABASE,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falscher CLIENT_LOCALE,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falsche Umgebungsvariablen beim Import/Export,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fehlinterpretation der Bytes durch ein Werkzeug.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;4. Warum @dict kein Encoding-Problem ist&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;warum_dict_kein_encoding-problem_ist&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;4277-5164&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;was_auf_der_platte_wirklich_liegt&quot;&gt;5. Was auf der Platte wirklich liegt&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Informix speichert im Regelfall keine abstrakten „Buchstaben“, sondern Bytefolgen im DB-Codeset. Für 819 gilt:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ä = E4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ö = F6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ü = FC&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ä = C4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ö = D6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ü = DC&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ß = DF&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wer in einer 819-DB einen Ausdruck wie &amp;#039;Müller&amp;#039; speichert, speichert in Wirklichkeit eine Bytefolge wie:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; M&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ü = FC&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; l&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; l&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; e&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; r&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Das ist nicht UTF-8, keine kombinierende Darstellung und kein „U+00FC plus Trema“ in einem Zeichensatz-Container. Es ist einfach das DB-Byte.
&lt;/p&gt;

&lt;p&gt;
Das ist der Kernpunkt für Betrieb und Diagnose:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn der Codeset 819 ist, ist ein Umlaut ein Latin-1-Byte.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn der Codeset UTF-8 ist, wird derselbe logische Buchstabe als zweibyte-Sequenz gespeichert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;5. Was auf der Platte wirklich liegt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;was_auf_der_platte_wirklich_liegt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;5165-5924&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;einfluss_auf_laenge_like_substring_und_unique&quot;&gt;6. Einfluss auf Länge, LIKE, Substring und Unique&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die Collation beeinflusst nicht die physische Bytefolge, aber sie wirkt auf die Semantik.
&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;6. Einfluss auf L\u00e4nge, LIKE, Substring und Unique&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;einfluss_auf_laenge_like_substring_und_unique&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5925-6079&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;length_und_substring&quot;&gt;6.1 LENGTH und Substring&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Bei 819 ist ein deutsches Zeichen ein einzelnes Byte. Ein Wert wie &amp;#039;Müller&amp;#039; hat in einer 819-DB eine andere Byte-Länge als in einer UTF-8-DB.
&lt;/p&gt;

&lt;p&gt;
Das ist operational wichtig:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CHAR- und VARCHAR-Längen können im Vergleich zu UTF-8 deutlich anders aussehen,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Substring-Operationen auf Bytes/Zeichen müssen vor dem Hintergrund des Codesets verstanden werden,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; bei Exporten/Imports oder dbload-Workflows muss die Byte-Kodierung konsistent sein.&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;6.1 LENGTH und Substring&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;length_und_substring&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6080-6569&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;like_und_vergleichslogik&quot;&gt;6.2 LIKE und Vergleichslogik&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Collation beeinflusst, wie SQL-Engines Zeichen als „gleich“ oder in einer Reihenfolge behandeln. Damit können Werte in WHERE, ORDER BY, BETWEEN und Unique-Prüfungen unterschiedlichen Vergleichsergebnissen unterliegen, obwohl die gespeicherten Bytes identisch sind.
&lt;/p&gt;

&lt;p&gt;
Dieser Effekt ist besonders deutlich bei:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Groß-/Kleinschreibung&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Umlaute und Sonderzeichen&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sortierung in Dictionary-Order&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Vergleichsregeln über Sprache/Gebiet&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Bei &lt;code&gt;CHAR&lt;/code&gt; und &lt;code&gt;VARCHAR&lt;/code&gt; richtet sich die normale Vergleichsreihenfolge grundsätzlich nach der Codeset-Reihenfolge; ein in der Locale definierter Modifikator wie &lt;code&gt;@dict&lt;/code&gt; kann die Sortierregeln beeinflussen. &lt;code&gt;NCHAR&lt;/code&gt; und &lt;code&gt;NVARCHAR&lt;/code&gt; verwenden die lokalisierte Kollationsreihenfolge der Datenbank-Locale. Die genaue Wirkung hängt von &lt;code&gt;DB_LOCALE&lt;/code&gt; und dessen Collation ab; deshalb sollten Sortierung und Vergleiche mit den tatsächlich verwendeten Datentypen getestet werden.
&lt;/p&gt;

&lt;p&gt;
Je nach Locale und Kollationsregeln können &lt;code&gt;ß&lt;/code&gt; und &lt;code&gt;ss&lt;/code&gt; beziehungsweise &lt;code&gt;Ä&lt;/code&gt; und &lt;code&gt;Ae&lt;/code&gt; oder &lt;code&gt;A&lt;/code&gt; beim Sortieren ähnlich oder gleich gewichtet werden. Eine ähnliche Sortierposition bedeutet jedoch nicht automatisch, dass die Werte bei &lt;code&gt;=&lt;/code&gt; oder in einem Unique-Index als gleich gelten. Diese Fälle separat mit &lt;code&gt;ORDER BY&lt;/code&gt;, Gleichheitsvergleichen und gegebenenfalls einem Test-Unique-Index prüfen.
&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;6.2 LIKE und Vergleichslogik&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;like_und_vergleichslogik&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;6570-7953&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;unique-index_und_replikation&quot;&gt;6.3 Unique-Index und Replikation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Wenn die Collation zwei Werte als gleich behandelt, kann ein Unique-Index den zweiten Datensatz ablehnen, obwohl die Bytefolgen auf den ersten Blick unterschiedlich aussehen. Das ist ein Kollationsproblem, kein Codepage-Problem.
&lt;/p&gt;

&lt;p&gt;
Dasselbe gilt bei Replikation und ER: Die Vergleichssemantik und die lokale DB-Locale der beteiligten Kataloge und Tabellen müssen für die beteiligten Datenbanken konsistent sein. Eine scheinbar reine Sortierfrage kann sich als Vergleichs-/Katalogproblem zeigen.
&lt;/p&gt;

&lt;p&gt;
Ändert eine logische Migration die Locale oder die zugrunde liegenden Vergleichsregeln, müssen die Indizes in der Zieldatenbank unter diesen Regeln angelegt werden. Vorhandene Indexstrukturen nicht ungeprüft übernehmen: nach dem Import die betroffenen B-Tree-Indizes und Unique-Bedingungen kontrollieren und sie bei Bedarf mit dem für die Informix-Version vorgesehenen Verfahren neu aufbauen, notfalls durch Löschen und erneutes Anlegen. Eine physische Wiederherstellung derselben Datenbank-Locale ist davon zu unterscheiden.
&lt;/p&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;6.3 Unique-Index und Replikation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;unique-index_und_replikation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;7954-9032&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit17&quot; id=&quot;typische_betriebssymptome&quot;&gt;7. Typische Betriebssymptome&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;7. Typische Betriebssymptome&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;typische_betriebssymptome&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;9033-9074&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;mojibake&quot;&gt;7.1 Mojibake&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Beispiel: Ein Client sendet UTF-8-C3-BC, der Server erwartet 819, und die Daten werden als zwei falsche Latin-1-Bytes interpretiert. Ergebnis: Zeichen wie Ã¼, Ã¤, Ã¶ oder ähnliches.
&lt;/p&gt;

&lt;p&gt;
Typische Ursache:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falscher CLIENT_LOCALE,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falscher Client-Charset,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ein Tool, das Bytes als UTF-8 ausgibt, obwohl der Server 819 erwartet,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; UNLOAD/dbload mit inkonsistenter Locale-Mischung.&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;7.1 Mojibake&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mojibake&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;9075-9494&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;abgeschnittene_strings&quot;&gt;7.2 Abgeschnittene Strings&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Wenn UTF-8-Sequenzen in einen 819-Server oder umgekehrt in die falsche Definition geraten, können die Zeichen als ungültig oder unvollständig interpretiert werden. Das führt zu:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; abgeschnittenen Werten,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falschen String-Längen,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Umlautverlusten,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fehlern bei String-Funktionen.&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;7.2 Abgeschnittene Strings&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;abgeschnittene_strings&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;9495-9829&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit20&quot; id=&quot;falscher_sortier-_eindeutigkeitsfehler&quot;&gt;7.3 Falscher Sortier-/Eindeutigkeitsfehler&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Diese Fälle sind häufig ein Kollationsproblem:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ORDER BY liefert rätselhafte Reihenfolge,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Umlaute erscheinen an unerwarteter Stelle,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Unique-Index verhält sich nach Collation, nicht nach Byte-Byte-Logik,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; BETWEEN schließt Werte ein/aus, die bei reiner Byte-Logik nicht zusammenpassen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;7.3 Falscher Sortier-\/Eindeutigkeitsfehler&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;falscher_sortier-_eindeutigkeitsfehler&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;9830-10194&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit21&quot; id=&quot;relevante_operative_regeln&quot;&gt;8. Relevante operative Regeln&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;8. Relevante operative Regeln&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;relevante_operative_regeln&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;10195-10237&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit22&quot; id=&quot;die_besonderheitcollation_wird_beim_create_database_fixiert&quot;&gt;8.1 Die Besonderheit: Collation wird beim CREATE DATABASE fixiert&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die entscheidende Eigenschaft von Informix-GLS ist: Die Locale der Datenbank, inklusive der Collation, wird beim CREATE DATABASE in die Datenbankstruktur eingepflanzt und bleibt für die Existenz der Datenbank relevant. Das gilt nicht nur für den Sprach-Default, sondern auch für die Vergleichs- und Sortiersemantik der DB.
&lt;/p&gt;

&lt;p&gt;
Das bedeutet praktisch:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Nach dem CREATE DATABASE ist die DB-Locale nicht nur eine Umgebungsvariable, sondern ein Bestandteil der Datenbank-Identität.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein späteres SET mit anderen Variablen oder ein geändertes Shell-Environment ändert die gespeicherten Daten nicht.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Datenbank selbst bleibt in der bereits festgelegten Locale-Definition verankert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Dies ist der Grund, warum eine „Collation-Korrektur“ nachträglich nicht einfach über eine Environment-Variable oder einen einmaligen SET-Block erfolgen kann. Sobald die DB mit einem bestimmten Codeset und einer bestimmten Collation angelegt wurde, ist die physische und semantische Grundlage der Datenbank damit fixiert.
&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;8.1 Die Besonderheit: Collation wird beim CREATE DATABASE fixiert&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;die_besonderheitcollation_wird_beim_create_database_fixiert&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;10238-11333&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit23&quot; id=&quot;warum_environment-aenderungen_keine_korrektur_sind&quot;&gt;8.2 Warum Environment-Änderungen keine Korrektur sind&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die häufige falsche Annahme lautet: „Ich ändere DB_LOCALE oder CLIENT_LOCALE und die DB sortiert dann anders.“ Das ist nur für neue Verbindungen und neue Konvertierungen relevant, nicht für die bereits in der Datenbank gespeicherten Bytes und nicht für die bereits definierte DB-Locale.
&lt;/p&gt;

&lt;p&gt;
Das ist ein wichtiger Punkt:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB_LOCALE bestimmt den internen Codedata-Storage der DB.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CLIENT_LOCALE bestimmt die Interpretation der Client-Daten.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Eine angepasste Umgebung kann nur den Zugriff und die Konvertierung auf dem Weg steuern.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sie kann eine bestehende DB nicht in eine andere Collation umwandeln, solange die DB nicht neu angelegt oder in einer kompatiblen Ziel-DB migriert wurde.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Kurz gesagt: Environment-Variablen sind nur die Konvertierungs- und Verbindungslogik; sie sind keine Definition der bereits gespeicherten DB-Semantik.
&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;8.2 Warum Environment-\u00c4nderungen keine Korrektur sind&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;warum_environment-aenderungen_keine_korrektur_sind&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;11334-12251&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit24&quot; id=&quot;die_abhaengigkeit_zwischen_client_locale_db_locale_und_collation&quot;&gt;8.3 Die Abhängigkeit zwischen CLIENT_LOCALE, DB_LOCALE und Collation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die operative Abhängigkeit ist:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CLIENT_LOCALE muss zur tatsächlichen Kodierung der Anwendungsdaten passen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB_LOCALE muss zum tatsächlichen DB-Codeset passen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Collation bestimmt Sortier-/Vergleichsregeln nur innerhalb dieses fixierten Codesets.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wenn diese drei Seiten nicht zusammenpassen, ist der Effekt:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; fehlerhafte Konvertierung an der Client-/Server-Grenze,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; falsche Interpretation der Bytes,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; irreführende ORDER BY-/LIKE-/Unique-Ergebnisse,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; scheinbar „verschiedene Umlauten“ bei identischen Bytes,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fehler bei Imports/Exports und bei Replikations-/ER-Prozessen.&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;8.3 Die Abh\u00e4ngigkeit zwischen CLIENT_LOCALE, DB_LOCALE und Collation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;die_abhaengigkeit_zwischen_client_locale_db_locale_und_collation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;12252-12940&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit25&quot; id=&quot;warum_eine_korrektur_oft_nur_ueber_neue_db_oder_migration_geht&quot;&gt;8.4 Warum eine Korrektur oft nur über neue DB oder Migration geht&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Wenn eine DB mit dem falschen Codeset oder falscher Collation erstellt wurde, dann ist das Problem nachträglich nicht nur eine Frage der aktuellen Umgebung. Die logische Ursache liegt in der zu früh festgelegten DB-Locale und im fehlenden konsistenten Client-/Server-Codepfad.
&lt;/p&gt;

&lt;p&gt;
In der Praxis ist die saubere Korrektur meist:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; neue Ziel-DB mit gültiger DB_LOCALE und entsprechender Collation,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; konsistente CLIENT_LOCALE beim Transfer,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sauberer Import/Export oder Copy-Workflow,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Prüfung der gespeicherten Bytes vor und nach dem Transfer,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Verifikation der Sortierung und Vergleichssemantik in der neuen DB.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Bei &lt;code&gt;dbexport&lt;/code&gt;/&lt;code&gt;dbimport&lt;/code&gt; die erzeugte Schema-Datei im Exportverzeichnis vor dem Import prüfen. Sie kann das ursprüngliche &lt;code&gt;CREATE DATABASE&lt;/code&gt;-Statement und damit die bisherige Locale enthalten; nicht ungeprüft annehmen, dass &lt;code&gt;dbimport&lt;/code&gt; automatisch die gewünschte Ziel-Locale verwendet. Falls nötig, den Datenbankkopf in der Schema-Datei auf die Zieldefinition anpassen. &lt;code&gt;DB_LOCALE&lt;/code&gt; muss zur Ziel-Datenbank passen; &lt;code&gt;CLIENT_LOCALE&lt;/code&gt; muss beim Export und Import jeweils zur tatsächlichen Kodierung der Textdateien passen. Nach dem Import Daten, Collation-Verhalten und neu angelegte Indizes verifizieren.
&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;8.4 Warum eine Korrektur oft nur \u00fcber neue DB oder Migration geht&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;warum_eine_korrektur_oft_nur_ueber_neue_db_oder_migration_geht&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;12941-14265&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit26&quot; id=&quot;praktischer_dba-checkhost_client_und_db&quot;&gt;8.5 Praktischer DBA-Check: Host, Client und DB&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ein valider Admin-Workflow für die Diagnose sieht typischerweise so aus:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Host-Umgebung prüfen&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welche Locale ist im Betriebssystem gesetzt?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welche Werte tragen DB_LOCALE, CLIENT_LOCALE, LANG, LC_ALL?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ist das erwartete Codeset wirklich aktiv, oder wird ein anderes Umwelt-Setting übernommen?&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Client-Umgebung prüfen&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welche Zeichenkodierung nutzt die Anwendung wirklich?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Gibt das Client-Tool bzw. die Sprache tatsächlich UTF-8 oder Latin-1 aus?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Werden beim Schreiben von Daten die Bytes eindeutig in der erwarteten Kodierung erzeugt?&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB-Locale prüfen&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welche DB_LOCALE gilt für die Datenbank?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welcher Codeset ist für die Tabelle bzw. Datenbank festgelegt?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ist die DB bereits mit einem anderen Codeset oder einem anderen Modifikator angelegt worden?&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Reale Daten prüfen&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Hex- oder Byte-Ausgabe der betroffenen Spalten prüfen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ist ein ü als FC im 819-Format sichtbar oder wird eine UTF-8-Sequenz erwartet?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wurden beim Import/Export Rohbytes falsch interpretiert?&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Semantik prüfen&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ORDER BY, BETWEEN, LIKE, Unique-Checks separat auf Kollation testen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn die Sorte logisch auffällig ist, liegt die Ursache oft beim Modifikator / @dict.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn die gespeicherten Bytes verfälscht sind, liegt die Ursache eher am Codeset-Mismatch.&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;8.5 Praktischer DBA-Check: Host, Client und DB&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;praktischer_dba-checkhost_client_und_db&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;14266-15653&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit27&quot; id=&quot;diagnostische_unterscheidungcodeset-problem_vs_collation-problem&quot;&gt;8.6 Diagnostische Unterscheidung: Codeset-Problem vs. Collation-Problem&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ein typischer Entscheidungsbaum:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fehler zeigt sich als „verzerrte Zeichen“ oder „Mojibake“&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  → wahrscheinliches Codeset-/Konvertierungsproblem
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fehler zeigt sich als „falsche Sortierung“ oder „verwirrte Eindeutigkeit“&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  → wahrscheinliches Collation-Problem
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Bytes in der DB sind technisch korrekt, aber ORDER BY oder Unique-Checks wirken falsch&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  → Collation oder Locale-Semantik ist die Ursache
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Bytes in der DB sind technisch falsch, obwohl die gleiche Bedeutung erwartet wurde&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  → codeset-/CLIENT_LOCALE-/DB_LOCALE-Mismatch
&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;8.6 Diagnostische Unterscheidung: Codeset-Problem vs. Collation-Problem&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;diagnostische_unterscheidungcodeset-problem_vs_collation-problem&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;15654-16297&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit28&quot; id=&quot;zielgerichtete_korrekturstrategie&quot;&gt;8.7 Zielgerichtete Korrekturstrategie&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Im Betrieb sollte die Korrektur immer dem Ursachepfad folgen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn die DB in einem falschen Codeset angelegt wurde, muss man die Datenbasis in eine korrekt definierte Ziel-DB migrieren.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn nur die Konvertierung zwischen Client und DB falsch ist, reicht oft eine konsistente Locale-Konfiguration.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn nur die Sortierung falsch ist, liegt eine Collation- und Vergleichssemantikfrage vor, nicht ein Unicode-Transferproblem.&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;8.7 Zielgerichtete Korrekturstrategie&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;zielgerichtete_korrekturstrategie&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;16298-16784&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit29&quot; id=&quot;betriebsregel_in_kurzform&quot;&gt;8.8 Betriebsregel in Kurzform&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; Collation wird bei CREATE DATABASE festgelegt und ist nicht nachträglich einfach „umzuschalten“.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB_LOCALE legt das eigentliche Speicher-Codeset der Datenbank fest.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CLIENT_LOCALE legt die Codierung der Client-Daten fest.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Nur die Kombination aus korrekter DB_LOCALE, korrekter CLIENT_LOCALE und der passenden Collation liefert konsistente Umlaute und stabile Vergleiche.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wenn zwei dieser Ebenen nicht zusammenpassen, entstehen die typischen Probleme mit ä, ö, ü, ß und anderen Sonderzeichen.
&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;8.8 Betriebsregel in Kurzform&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;betriebsregel_in_kurzform&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;16785-17339&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit30&quot; id=&quot;runbooksymptom_ursache_pruefung_korrektur&quot;&gt;8.9 Runbook: Symptom → Ursache → Prüfung → Korrektur&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Symptom A: Zeichen werden als Ã¼, Ã¤, Ã¶ dargestellt&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Ursache:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; UTF-8-Bytes werden in eine 819-DB oder als Latin-1 interpretiert.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Prüfung:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;locale
&lt;span class=&quot;kw2&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&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;LANG|LC_|CLIENT_LOCALE|DB_LOCALE&#039;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE_NAME&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; name &lt;span class=&quot;kw1&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;%M%&#039;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Korrektur:
&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;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819&lt;/pre&gt;

&lt;p&gt;
Falls die Datenbank bereits im falschen Codeset steht, keine reine Laufzeitkorrektur, sondern neue DB oder sauberer Transfer planen.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Symptom B: ORDER BY oder Unique zeigt falsche Reihenfolge&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Ursache:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Collation / @dict entspricht nicht den erwarteten Vergleichsregeln.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Prüfung:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab &lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; col;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab &lt;span class=&quot;kw1&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; col &lt;span class=&quot;kw1&quot;&gt;HAVING&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Korrektur:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB-Locale mit passender Collation neu definieren oder passende Ziel-DB anlegen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Nicht allein durch CLIENT_LOCALE beheben.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Symptom C: Import/Export zeigt Umlaute erst nach Transfer falsch&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Ursache:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Prozess- oder Tool-Kodierung inkonsistent.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Prüfung:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt; datafile
&lt;span class=&quot;kw2&quot;&gt;hexdump&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-C&lt;/span&gt; datafile &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;head&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Korrektur:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Daten explizit mit passender CLIENT_LOCALE/DB_LOCALE transferieren.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Lade-/Export-Tools mit gleicher Kodierung konfigurieren.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;8.9 Runbook: Symptom \u2192 Ursache \u2192 Pr\u00fcfung \u2192 Korrektur&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;runbooksymptom_ursache_pruefung_korrektur&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;17340-18715&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit31&quot; id=&quot;interner_runbook-block&quot;&gt;9. Interner Runbook-Block&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;9. Interner Runbook-Block&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;interner_runbook-block&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;18716-18754&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit32&quot; id=&quot;problem&quot;&gt;Problem&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Umlaute oder Sonderzeichen werden im Informix-System falsch dargestellt, sortieren falsch oder erzeugen Unique-/Vergleichsfehler.
&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;Problem&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;problem&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;18755-18903&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit33&quot; id=&quot;ursache&quot;&gt;Ursache&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Die häufigste Ursache ist keine fehlende Informix-Funktionalität, sondern ein Mismatch zwischen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB_LOCALE,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CLIENT_LOCALE,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; realer Client-Kodierung,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; angelegter DB-Collation beim CREATE DATABASE.&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;:5,&amp;quot;secid&amp;quot;:33,&amp;quot;range&amp;quot;:&amp;quot;18904-19134&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit34&quot; id=&quot;pruefung&quot;&gt;Prüfung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;locale
&lt;span class=&quot;kw2&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&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;LANG|LC_|CLIENT_LOCALE|DB_LOCALE&#039;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;VALUE&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; sysmaster:sysdbslocale
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; name &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;dbs_collate&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;dbs_cset&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;col&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Müller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_mueller&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Muller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_muller
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab
&lt;span class=&quot;kw1&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; col;&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt; exportfile
&lt;span class=&quot;kw2&quot;&gt;hexdump&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-C&lt;/span&gt; exportfile &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;head&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;Pr\u00fcfung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pruefung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:34,&amp;quot;range&amp;quot;:&amp;quot;19135-19604&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit35&quot; id=&quot;diagnose&quot;&gt;Diagnose&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; Wenn Zeichen verzerrt sind: Codeset-/Konvertierungsproblem wahrscheinlich.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn Sortierung/Unique falsch ist: Collation-/@dict-Problem wahrscheinlich.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn die DB bereits existiert und die Locale beim CREATE DATABASE falsch war: keine reine Laufzeit-Umstellung, sondern neue DB oder Migration.&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;Diagnose&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;diagnose&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:35,&amp;quot;range&amp;quot;:&amp;quot;19605-19930&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit36&quot; id=&quot;loesung&quot;&gt;Lösung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&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;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819&lt;/pre&gt;

&lt;p&gt;
Oder mit UTF-8:
&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;CLIENT_LOCALE&lt;/span&gt;=en_US.utf8
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.utf8&lt;/pre&gt;

&lt;p&gt;
Wenn die Datenbank bereits mit einem falschen Codeset oder falscher Collation angelegt wurde:
&lt;/p&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;DATABASE&lt;/span&gt; db_new &lt;span class=&quot;kw1&quot;&gt;WITH&lt;/span&gt; LOG
   DB_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819@dict&#039;&lt;/span&gt;
   CLIENT_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819&#039;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Danach Daten mit konsistenter Locale transferieren und die Ergebnisse erneut prüfen.
&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;L\u00f6sung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;loesung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:36,&amp;quot;range&amp;quot;:&amp;quot;19931-20423&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit37&quot; id=&quot;verifikation&quot;&gt;Verifikation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;col&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Müller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_mueller&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Muller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_muller
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; col;&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;locale&lt;/pre&gt;

&lt;p&gt;
Erwartung:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Umlaute werden konsistent dargestellt,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sortierung entspricht der definierten Collation,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Vergleichssemantik stimmt mit der DB-Locale überein,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; keine neuen Verzerrungen beim Transfer.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;Verifikation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;verifikation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:37,&amp;quot;range&amp;quot;:&amp;quot;20424-20838&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit38&quot; id=&quot;diagnostik_im_betrieb&quot;&gt;10. Diagnostik im Betrieb&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Für den Admin ist die wichtigste Frage nicht „Ist @dict aktiv?“, sondern:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welche DB_LOCALE gilt für die Datenbank?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Welcher Codeset wird auf dem Client verwendet?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Werden die Daten tatsächlich im gleichen Codeset geschrieben und gelesen?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Werden beim Import/Export Bytes mit einer falschen Interpretation behandelt?&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;10. Diagnostik im Betrieb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;diagnostik_im_betrieb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:38,&amp;quot;range&amp;quot;:&amp;quot;20839-21211&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit39&quot; id=&quot;richtige_pruefungen&quot;&gt;9.1 Richtige Prüfungen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Checkliste:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB-Locale mit Informationen zur Datenbank ermitteln.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Client-Umgebung prüfen: Locale, Codeset, Terminal-/Applikationskette.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Daten vor und nach Export/Import hexadezimal prüfen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Relevante String-Operationen gegen erwartete Bytewerte prüfen.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wenn die Datenbank ein Latin-1-Codeset verwendet, nachsehen, ob der Client tatsächlich Latin-1 liefert oder fälschlich UTF-8 behauptet.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sortier- und Vergleichsregeln separat prüfen, da @dict die Sortierung ändern kann, aber nicht das physische Zeichen selbst.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;9.1 Richtige Pr\u00fcfungen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;richtige_pruefungen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:39,&amp;quot;range&amp;quot;:&amp;quot;21212-21790&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit40&quot; id=&quot;beispielhafte_logik&quot;&gt;9.2 Beispielhafte Logik&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Wenn ein ü in der Datenbank anstelle von UTF-8-C3-BC als FC auftaucht, ist der Speicher korrekt für 819. Wenn der Client aber UTF-8-Strings liefert und der Server 819 erwartet, entsteht ein Konvertierungsfehler. Das muss am Übergang korrigiert werden, nicht durch einen Collation-Wechsel.
&lt;/p&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;9.2 Beispielhafte Logik&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispielhafte_logik&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:40,&amp;quot;range&amp;quot;:&amp;quot;21791-22124&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit41&quot; id=&quot;seiten-checkliste_fuer_den_betrieb&quot;&gt;10. 1-Seiten-Checkliste für den Betrieb&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;10. 1-Seiten-Checkliste f\u00fcr den Betrieb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;seiten-checkliste_fuer_den_betrieb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:41,&amp;quot;range&amp;quot;:&amp;quot;22125-22178&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit42&quot; id=&quot;kurzfassung&quot;&gt;Kurzfassung&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; Problem = falsch dargestellte Umlaute, falsche Sortierung oder Unique-/Vergleichsfehler.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ursache = Mismatch zwischen DB_LOCALE, CLIENT_LOCALE und realer Client-Kodierung; ggf. falsche DB-Locale beim CREATE DATABASE.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wichtig = Collation kann nur innerhalb eines bereits fest definierten Codesets wirksam werden; sie ändert keine gespeicherten Bytes.&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;Kurzfassung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;kurzfassung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:42,&amp;quot;range&amp;quot;:&amp;quot;22179-22563&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit43&quot; id=&quot;schnellpruefung&quot;&gt;Schnellprüfung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;locale
&lt;span class=&quot;kw2&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&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;LANG|LC_|CLIENT_LOCALE|DB_LOCALE&#039;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;VALUE&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; sysmaster:sysdbslocale
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; name &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;dbs_collate&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;dbs_cset&#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;Schnellpr\u00fcfung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schnellpruefung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:43,&amp;quot;range&amp;quot;:&amp;quot;22564-22776&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit44&quot; id=&quot;entscheidungsregel&quot;&gt;Entscheidungsregel&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; Verzerrte Zeichen = Codeset-/Konvertierungsproblem&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Falsche Reihenfolge / Unique-Fehler = Collation-/@dict-Problem&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DB existiert bereits mit falscher Locale = neue DB oder Migration nötig&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;Entscheidungsregel&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;entscheidungsregel&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:44,&amp;quot;range&amp;quot;:&amp;quot;22777-23005&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit45&quot; id=&quot;korrektur&quot;&gt;Korrektur&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&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;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819&lt;/pre&gt;

&lt;p&gt;
Oder:
&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;CLIENT_LOCALE&lt;/span&gt;=en_US.utf8
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.utf8&lt;/pre&gt;

&lt;p&gt;
Wenn die DB bereits falsch angelegt wurde:
&lt;/p&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;DATABASE&lt;/span&gt; db_new &lt;span class=&quot;kw1&quot;&gt;WITH&lt;/span&gt; LOG
   DB_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819@dict&#039;&lt;/span&gt;
   CLIENT_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819&#039;&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;Korrektur&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;korrektur&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:45,&amp;quot;range&amp;quot;:&amp;quot;23006-23352&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit46&quot; id=&quot;verifikation1&quot;&gt;Verifikation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; col&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;col&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Müller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_mueller&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       col &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Muller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; eq_muller
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; tab
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; col;&lt;/pre&gt;

&lt;p&gt;
Erwartung:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Zeichen korrekt dargestellt,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Vergleichs- und Sortiersemantik passen zur DB-Locale,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; keine neuen Konvertierungsfehler beim Transfer.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;Verifikation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;verifikation1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:20,&amp;quot;secid&amp;quot;:46,&amp;quot;range&amp;quot;:&amp;quot;23353-23684&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit47&quot; id=&quot;ibm-referenzen&quot;&gt;11. IBM-Referenzen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die folgenden IBM-Dokumentationsstellen sind die maßgeblichen offiziellen Referenzen für die Kernregeln von Informix GLS und Locales:
&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.ibm.com/docs/en/informix-servers/14.10?topic=locales-db_locale&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10?topic=locales-db_locale&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix Documentation: DB_LOCALE&lt;/a&gt;: Beschreibt die Datenbank-Locale und die Beziehung zwischen Locale, Codeset und gespeicherten Zeichen.&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?topic=locales-client_locale&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10?topic=locales-client_locale&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix Documentation: CLIENT_LOCALE&lt;/a&gt;: Beschreibt die Client-Seite und die GLS-Konvertierung an der Client-/Server-Grenze.&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&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix Documentation: GLS und Locales&lt;/a&gt;: Beschreibt Codeset-, Collation- und localebezogene Regeln.&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&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix Documentation: CREATE DATABASE und Locale&lt;/a&gt;: Beschreibt die Einbettung der Datenbank-Locale beim Anlegen der Datenbank.&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&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix Documentation: Zeichensatzkonvertierung&lt;/a&gt;: Beschreibt, dass die Konvertierung nach Codeset und nicht nach Collation erfolgt.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Hinweis: IBM-Dokumentation kann je nach Version und Produktseite leicht verlinkt werden; die oben genannten Referenzen sind die offiziellen Einstiegspunkte für die hier beschriebenen Funktionen.
&lt;/p&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;11. IBM-Referenzen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ibm-referenzen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:47,&amp;quot;range&amp;quot;:&amp;quot;23685-25043&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit48&quot; id=&quot;schlussfolgerung&quot;&gt;11. Schlussfolgerung&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Das entscheidende technische Ergebnis lautet:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Deutsche Umlaute sind in einer 819-DB nicht „nicht unterstützt“.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sie werden als einzelne Latin-1-Bytes im Codeset gespeichert.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Der Fehler entsteht typischerweise durch falsche Locale- und Codeset-Kombinationen auf Client/Server-Grenze.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; @dict beeinflusst Sortierung und Vergleich, nicht das physische Byte.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Für die operative Analyse muss man immer zwischen Datenspeicherung, Collation und Client-/Server-Umsetzung sauber trennen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Nur wenn Codeset, Collation und Client-Locale zusammenpassen, funktionieren ä, ö, ü, ß korrekt in Informix.
&lt;/p&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;11. Schlussfolgerung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schlussfolgerung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:48,&amp;quot;range&amp;quot;:&amp;quot;25044-25699&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit49&quot; id=&quot;konkrete_konfigurationsbeispiele&quot;&gt;12. Konkrete Konfigurationsbeispiele&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;12. Konkrete Konfigurationsbeispiele&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;konkrete_konfigurationsbeispiele&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:49,&amp;quot;range&amp;quot;:&amp;quot;25700-25749&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit50&quot; id=&quot;typische_umgebungsvariablen&quot;&gt;12.1 Typische Umgebungsvariablen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Beispiel für eine Linux-/bash-Umgebung, in der der Client als UTF-8 arbeitet und die DB als 819 erwartet:
&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;LANG&lt;/span&gt;=en_US.UTF-&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;LC_ALL&lt;/span&gt;=en_US.UTF-&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;CLIENT_LOCALE&lt;/span&gt;=en_US.utf8
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819&lt;/pre&gt;

&lt;p&gt;
Beispiel für eine Latin-1-/819-Spezifikation im Client:
&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;LANG&lt;/span&gt;=en_US.ISO8859-&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;LC_ALL&lt;/span&gt;=en_US.ISO8859-&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819&lt;/pre&gt;

&lt;p&gt;
Wichtig: Diese Werte sind nur richtig, wenn die Anwendung wirklich exakt in diesem Codeset arbeitet. Ein falscher oder „nur vermuteter“ Wert erzeugt echte Byte-Verzerrungen.
&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;12.1 Typische Umgebungsvariablen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;typische_umgebungsvariablen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:50,&amp;quot;range&amp;quot;:&amp;quot;25750-26405&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit51&quot; id=&quot;beispiel_fuer_create_database_mit_fixierter_locale&quot;&gt;12.2 Beispiel für CREATE DATABASE mit fixierter Locale&lt;/h3&gt;
&lt;div class=&quot;level3&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;DATABASE&lt;/span&gt; dbname &lt;span class=&quot;kw1&quot;&gt;WITH&lt;/span&gt; LOG
   &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; dbspace1
   DB_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819@dict&#039;&lt;/span&gt;
   CLIENT_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819&#039;&lt;/span&gt;
   MODE ANSI;&lt;/pre&gt;

&lt;p&gt;
Oder ebenfalls üblich:
&lt;/p&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;DATABASE&lt;/span&gt; dbname &lt;span class=&quot;kw1&quot;&gt;WITH&lt;/span&gt; LOG
   DB_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.819&#039;&lt;/span&gt;
   CLIENT_LOCALE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;en_US.utf8&#039;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Das ist der kritische Punkt: Nach dem CREATE DATABASE ist diese Locale für die DB fest. Ein späteres Setzen von CLIENT_LOCALE oder DB_LOCALE in der Shell ändert die bereits vorhandenen Daten 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;12.2 Beispiel f\u00fcr CREATE DATABASE mit fixierter Locale&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispiel_fuer_create_database_mit_fixierter_locale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:23,&amp;quot;secid&amp;quot;:51,&amp;quot;range&amp;quot;:&amp;quot;26406-26955&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit52&quot; id=&quot;beispiel_fuer_eine_sichere_sql-pruefung_der_db-locale&quot;&gt;12.3 Beispiel für eine sichere SQL-Prüfung der DB-Locale&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;VALUE&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; sysmaster:sysdbslocale
&lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; name &lt;span class=&quot;kw1&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;dbs_collate&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;dbs_cset&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Wenn die DB definiert ist, zeigt die Datenbankkataloginformation, welcher Codeset und welche Collation für die DB gelten. Das ist der richtige Nachweis, nicht die aktuelle Shell-Umgebung.
&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;12.3 Beispiel f\u00fcr eine sichere SQL-Pr\u00fcfung der DB-Locale&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispiel_fuer_eine_sichere_sql-pruefung_der_db-locale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:25,&amp;quot;secid&amp;quot;:52,&amp;quot;range&amp;quot;:&amp;quot;26956-27325&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit53&quot; id=&quot;beispiel_fuer_einen_host-_client-check&quot;&gt;12.4 Beispiel für einen Host-/Client-Check&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$LANG&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$LC_ALL&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$CLIENT_LOCALE&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$DB_LOCALE&lt;/span&gt;&amp;quot;&lt;/span&gt;
locale&lt;/pre&gt;

&lt;p&gt;
Prüfungen, die in der Praxis sinnvoll sind:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;locale charmap
iconv &lt;span class=&quot;re5&quot;&gt;--list&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-Ei&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;UTF-8|ISO-8859-1|IBM-819&#039;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Wenn der Client als UTF-8 deklariert ist, aber tatsächlich Latin-1-Bytes ausliefert, ist die Konvertierung falsch, obwohl die Shell-Umgebung „gut“ aussieht.
&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;12.4 Beispiel f\u00fcr einen Host-\/Client-Check&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;beispiel_fuer_einen_host-_client-check&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:26,&amp;quot;secid&amp;quot;:53,&amp;quot;range&amp;quot;:&amp;quot;27326-27772&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit54&quot; id=&quot;testbeispiele_fuer_codeset_und_umlaut&quot;&gt;12.5 Testbeispiele für Codeset und Umlaut&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Beispiel A: Datenbank ist 819, Client ist korrekt als 819 gesetzt.
&lt;/p&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; test_umlaut &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    id SERIAL&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    name &lt;span class=&quot;kw1&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; test_umlaut&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&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;Müller&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; test_umlaut;&lt;/pre&gt;

&lt;p&gt;
Erwartung:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Der Wert wird als Latin-1-Byte im DB-Codeset abgelegt.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; LENGTH ist an der gespeicherten Byte-Länge orientiert; bei 819 ist „ü“ ein einzelnes Byte.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Beispiel B: Client liefert UTF-8, DB erwartet 819.
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SET&lt;/span&gt; CLIENT_LOCALE &lt;span class=&quot;st0&quot;&gt;&#039;en_US.utf8&#039;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; test_umlaut&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&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;Müller&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;
Wenn die Client-Umgebung nicht exakt mit den tatsächlich gesendeten Bytes übereinstimmt, kann der String als falsche Bytefolge interpretiert werden. Der Gefahrensignal: sichtbare Verzerrung, Spracheingang fehlerhaft, Abweichungen bei LENGTH oder ORDER BY.
&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;12.5 Testbeispiele f\u00fcr Codeset und Umlaut&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;testbeispiele_fuer_codeset_und_umlaut&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:28,&amp;quot;secid&amp;quot;:54,&amp;quot;range&amp;quot;:&amp;quot;27773-28657&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit55&quot; id=&quot;test_fuer_sortierung_ohne_encoding-wechsel&quot;&gt;12.6 Test für Sortierung ohne Encoding-Wechsel&lt;/h3&gt;
&lt;div class=&quot;level3&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; test_sort &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    id SERIAL&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    name &lt;span class=&quot;kw1&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; test_sort&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&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;Muller&#039;&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;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Müller&#039;&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;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Muller2&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name &lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; test_sort &lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; name;&lt;/pre&gt;

&lt;p&gt;
Erwartung:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Die Reihenfolge hängt von Collation und codesetbezogener Vergleichslogik ab.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Das ist ein Vergleichsproblem, nicht automatisch ein Zeichen-/Byteproblem.&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;12.6 Test f\u00fcr Sortierung ohne Encoding-Wechsel&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;test_fuer_sortierung_ohne_encoding-wechsel&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:30,&amp;quot;secid&amp;quot;:55,&amp;quot;range&amp;quot;:&amp;quot;28658-29090&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit56&quot; id=&quot;test_fuer_sichere_konvertierung_bei_export_import&quot;&gt;12.7 Test für sichere Konvertierung bei Export/Import&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Beispiel für einen Import-Workflow mit festem Client-Codeset:
&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;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;DB_LOCALE&lt;/span&gt;=en_US.819
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Beispiel: Export mit konsistentem Format&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Danach Import in die Ziel-DB mit derselben DB_LOCALE&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Wenn Import/Export mit widersprüchlichen Locales läuft, wird das Zeichenmaterial falsch geordnet oder verfälscht.
&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;12.7 Test f\u00fcr sichere Konvertierung bei Export\/Import&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;test_fuer_sichere_konvertierung_bei_export_import&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:31,&amp;quot;secid&amp;quot;:56,&amp;quot;range&amp;quot;:&amp;quot;29091-29516&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit57&quot; id=&quot;typischer_verifikations-block_nach_einer_aenderung&quot;&gt;12.8 Typischer Verifikations-Block nach einer Änderung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       &lt;span class=&quot;kw1&quot;&gt;LENGTH&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;name&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       name &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Müller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; match_1&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
       name &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Muller&#039;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;AS&lt;/span&gt; match_2
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; test_umlaut;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; name
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; test_sort
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; name;&lt;/pre&gt;

&lt;p&gt;
Ziel dieser Prüfung:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sind die gezeigten Bytes und Zeichen konsistent?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Stimmt die Sortierung zur erwarteten Collation?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ist die DB-Locale wirklich die gewünschte und nicht nur ein Shell-Setting?&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;12.8 Typischer Verifikations-Block nach einer \u00c4nderung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;typischer_verifikations-block_nach_einer_aenderung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:32,&amp;quot;secid&amp;quot;:57,&amp;quot;range&amp;quot;:&amp;quot;29517-29977&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit58&quot; id=&quot;praktischer_entscheidungsbaum&quot;&gt;12.9 Praktischer Entscheidungsbaum&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code text&quot;&gt;1. Werden Zeichen verzerrt dargestellt?
   Ja -&amp;gt; Codeset-/Konvertierungsproblem prüfen
   Nein -&amp;gt; Sortier-/Collation-Problem prüfen
&amp;nbsp;
2. Sind Daten in DB bereits gespeichert?
   Ja -&amp;gt; DB_LOCALE und DB-Definition prüfen, kein bloßes SET erwartet
   Nein -&amp;gt; CREATE DATABASE / locale-Definition erneut prüfen
&amp;nbsp;
3. Ist CLIENT_LOCALE konsistent mit den tatsächlich gelieferten Bytes?
   Nein -&amp;gt; Client- oder Import-Fehler
   Ja -&amp;gt; DB_LOCALE prüfen
&amp;nbsp;
4. Ist ORDER BY / LIKE / Unique inkonsistent?
   Ja -&amp;gt; Collation und @dict prüfen
   Nein -&amp;gt; auf Export/Import oder Anwendungskodierung schauen&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;12.9 Praktischer Entscheidungsbaum&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;praktischer_entscheidungsbaum&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:33,&amp;quot;secid&amp;quot;:58,&amp;quot;range&amp;quot;:&amp;quot;29978-30638&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit59&quot; id=&quot;betriebskorrektur_in_der_praxis&quot;&gt;12.10 Betriebskorrektur in der Praxis&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Minimaler, robuster Ablauf:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# 1. Umgebung prüfen&lt;/span&gt;
locale
&lt;span class=&quot;kw2&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&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;LANG|LC_|CLIENT_LOCALE|DB_LOCALE&#039;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# 2. Ziel-DB mit korrekter Locale anlegen&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# CREATE DATABASE ... DB_LOCALE = &#039;en_US.819@dict&#039;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# 3. Client auf dieselbe Semantik stellen&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;CLIENT_LOCALE&lt;/span&gt;=en_US.819
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# 4. Daten transferieren, danach Byte- und Vergleichsprüfungen durchführen&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Wichtig: Wenn die vorhandene DB bereits im falschen Codeset bzw. mit falscher Collation erstellt wurde, ist eine reine Laufzeit-Umstellung meistens keine saubere Lösung. Dann ist eine neue, korrekt definierte DB oder eine glasklare Migration die belastbare Korrektur.
&lt;/p&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;12.10 Betriebskorrektur in der Praxis&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;betriebskorrektur_in_der_praxis&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:34,&amp;quot;secid&amp;quot;:59,&amp;quot;range&amp;quot;:&amp;quot;30639-31337&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit60&quot; id=&quot;schlagwoerter&quot;&gt;13. Schlagwörter&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Informix, GLS, Locale, DB_LOCALE, CLIENT_LOCALE, Codeset, Collation, @dict, ISO-8859-1, CCSID-819, Latin-1, UTF-8, Unicode, deutsche Umlaute, äöüß, Byte-Repräsentation, Datenbankspeicher, ORDER BY, BETWEEN, LIKE, Unique-Index, String-Länge, Substring, Mojibake, dbload, UNLOAD, Import, Export, Replication, ER, Encoding, Character Conversion, Client-Server-Konvertierung, Datenbankadministrator, Troubleshooting, CREATE DATABASE, locale-check, hex-dump, shell-environment
&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;13. Schlagw\u00f6rter&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;schlagwoerter&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:35,&amp;quot;secid&amp;quot;:60,&amp;quot;range&amp;quot;:&amp;quot;31338-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/informix:fehlervermeidung_cas_mon_ddl?rev=1791527548&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-09T06:32:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>fehlervermeidung_cas_mon_ddl</title>
        <link>http://wiki.redatek.de/informix:fehlervermeidung_cas_mon_ddl?rev=1791527548&amp;do=diff</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;sysadmin-schedulercas_mon_ddl_und_panic&quot;&gt;Sysadmin-Scheduler: cas_mon_ddl und PANIC&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Notiz zur Datenbank &lt;code&gt;sysadmin&lt;/code&gt;. Der Scheduler führt Tasks und Sensoren aus der Tabelle &lt;code&gt;ph_task&lt;/code&gt; innerhalb von &lt;code&gt;oninit&lt;/code&gt; aus, als Benutzer &lt;code&gt;informix&lt;/code&gt;. Ein normaler SQL-Fehler beendet nur diesen Task-Lauf. Ein NULL-Zeiger im aufgerufenen Servercode nicht: der Thread stirbt, im Online-Log steht &lt;code&gt;PANIC: Attempting to bring system down&lt;/code&gt;, die Instanz geht herunter.
&lt;/p&gt;

&lt;p&gt;
Konkreter Fall hier: der Sensor &lt;code&gt;cas_mon_ddl&lt;/code&gt;. Er wertet den SQL-Trace aus. NULL im Trace (Anweisungstext oder Host-Variable) läuft in diesen Zeiger und damit in den PANIC. Abhilfe ist, den Sensor abzuschalten, nicht &lt;code&gt;sysadmin&lt;/code&gt; zu löschen.
&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;Sysadmin-Scheduler: cas_mon_ddl und PANIC&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sysadmin-schedulercas_mon_ddl_und_panic&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-678&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;pruefen&quot;&gt;Prüfen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Als &lt;code&gt;informix&lt;/code&gt;, gegen die Datenbank &lt;code&gt;sysadmin&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;SELECT tk_name, tk_enable FROM ph_task WHERE tk_name = &#039;cas_mon_ddl&#039;;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; dbaccess sysadmin&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;tk_enable&lt;/code&gt; ist &lt;code&gt;t&lt;/code&gt;, solange der Sensor läuft, und &lt;code&gt;f&lt;/code&gt;, wenn er aus ist. Fehlt die Zeile, ist der Sensor nicht installiert.
&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;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;679-1002&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;abschalten&quot;&gt;Abschalten&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;UPDATE ph_task SET tk_enable = &#039;f&#039; WHERE tk_name = &#039;cas_mon_ddl&#039;;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; dbaccess sysadmin&lt;/pre&gt;

&lt;p&gt;
Das ist der von IBM dokumentierte Schalter. Dieselbe Spalte setzt IBM in der Gegenrichtung auf &lt;code&gt;t&lt;/code&gt;, zum Beispiel für &lt;code&gt;idle_user_timeout&lt;/code&gt;. Die Zeile in &lt;code&gt;ph_task&lt;/code&gt; bleibt stehen. Nur der nächste geplante Lauf entfällt. Ein Lauf, der schon im Server steckt, wird von diesem UPDATE nicht abgebrochen.
&lt;/p&gt;

&lt;p&gt;
Nach einem PANIC zuerst starten, dann diese Abschaltung, bevor der Sensor wieder an der Reihe ist. Danach die SELECT-Abfrage erneut ausführen. &lt;code&gt;tk_enable&lt;/code&gt; muss &lt;code&gt;f&lt;/code&gt; sein.
&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;Abschalten&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;abschalten&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1003-1622&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;warum_der_scheduler_die_instanz_mitnimmt&quot;&gt;Warum der Scheduler die Instanz mitnimmt&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Tasks und Sensoren sind SPL oder SQL in &lt;code&gt;sysadmin&lt;/code&gt;, oft mit &lt;code&gt;admin()&lt;/code&gt; oder &lt;code&gt;task()&lt;/code&gt; und mit Abfragen auf &lt;code&gt;sysmaster&lt;/code&gt;. Das läuft im Adressraum von &lt;code&gt;oninit&lt;/code&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein SQL-Fehler (fehlende Tabelle, Rechte, Datenkonflikt) wird protokolliert. Die Instanz bleibt oben.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ein Assert oder ein NULL-Zeiger im Servercode, den der Task dabei betritt, ist kein SQL-Fehler. IBM fährt die Instanz dann mit PANIC herunter. Eine Assertion-Datei muss dabei nicht entstehen.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;code&gt;cas_mon_ddl&lt;/code&gt; gehört in die zweite Klasse, weil er den SQL-Trace liest. IBM hat genau diesen Pfad als Absturz dokumentiert, ohne den Sensornamen zu nennen:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; SQL-Trace eingeschaltet und Host-Variablen mit NULL: Absturz der Instanz (IC60371).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;SELECT&lt;/code&gt; aus &lt;code&gt;syssqltrace&lt;/code&gt; kann die Engine zum Absturz bringen (IC63448).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NULL-Zeichen über eine Host-Variable bei &lt;code&gt;SQLTRACE HIGH&lt;/code&gt;: Absturz (IC67763).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;SELECT&lt;/code&gt; auf &lt;code&gt;syssqltrace&lt;/code&gt; oder der dbCron-Task &lt;code&gt;sql_showsnap&lt;/code&gt;: Speicherfehler (IC70193).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Der Sensor schaltet den Trace und liest &lt;code&gt;syssqltrace&lt;/code&gt;. Trifft er dabei auf NULL, ist das derselbe Codepfad. Weil der Aufruf aus dem Scheduler kommt, ist das Ergebnis ein PANIC der Instanz.
&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;Warum der Scheduler die Instanz mitnimmt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;warum_der_scheduler_die_instanz_mitnimmt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1623-2855&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&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=scheduler-built-in-tasks-sensors&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=scheduler-built-in-tasks-sensors&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: Built-in tasks and sensors&lt;/a&gt; — Task über &lt;code&gt;tk_enable = f&lt;/code&gt; in &lt;code&gt;ph_task&lt;/code&gt; abschalten.&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-automatically-terminating-idle-connections&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=communication-automatically-terminating-idle-connections&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix 12.10: idle_user_timeout&lt;/a&gt; — offizielles &lt;code&gt;UPDATE ph_task SET tk_enable&lt;/code&gt; gegen &lt;code&gt;sysadmin&lt;/code&gt; als &lt;code&gt;informix&lt;/code&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=scheduler-creating-task&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/docs/en/informix-servers/12.10.0?topic=scheduler-creating-task&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Informix 12.10: Creating a task&lt;/a&gt; — Tasks liegen in &lt;code&gt;ph_task&lt;/code&gt;, Verbindung nur als &lt;code&gt;informix&lt;/code&gt; oder ein berechtigter Benutzer.&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/support/pages/informix-master-daemon-died&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/support/pages/informix-master-daemon-died&quot; rel=&quot;ugc nofollow&quot;&gt;IBM: Master Daemon Died&lt;/a&gt; — Online-Log &lt;code&gt;PANIC: Attempting to bring system down&lt;/code&gt;. Eine Assertion-Datei muss nicht da sein.&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/support/pages/fix-list-informix-dynamic-server-1150xc4&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/support/pages/fix-list-informix-dynamic-server-1150xc4&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Fix List 11.50.xC4&lt;/a&gt; — IC60371, SQL-Trace und NULL in Host-Variablen.&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/support/pages/fix-list-informix-dynamic-server-1150xc5w4&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/support/pages/fix-list-informix-dynamic-server-1150xc5w4&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Fix List 11.50.xC5W4&lt;/a&gt; — IC63448, Lesen von &lt;code&gt;syssqltrace&lt;/code&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/support/pages/fix-list-informix-1150xc7-pids-1150xc7w1-1150xc7w3-and-1150xc7w4&quot; class=&quot;urlextern&quot; title=&quot;https://www.ibm.com/support/pages/fix-list-informix-1150xc7-pids-1150xc7w1-1150xc7w3-and-1150xc7w4&quot; rel=&quot;ugc nofollow&quot;&gt;IBM Fix List 11.50.xC7&lt;/a&gt; — IC67763 und IC70193.&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;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2856-4193&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;Informix, sysadmin, ph_task, Scheduler, cas_mon_ddl, tk_enable, SQLTRACE, syssqltrace, NULL, PANIC&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;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4194-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://wiki.redatek.de/informix:informix_fdw?rev=1777790854&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-03T06:47:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>informix_fdw</title>
        <link>http://wiki.redatek.de/informix:informix_fdw?rev=1777790854&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/informix:leap_16_informix_konfig?rev=1777790806&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-03T06:46:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>leap_16_informix_konfig</title>
        <link>http://wiki.redatek.de/informix:leap_16_informix_konfig?rev=1777790806&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/informix:onconfig_memory?rev=1791447423&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-08T08:17:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>onconfig_memory</title>
        <link>http://wiki.redatek.de/informix:onconfig_memory?rev=1791447423&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>
</rdf:RDF>
