Zum Anpassen des Datenbestands an das geänderte Schema bzw. die geänderte Speicherstruktur beansprucht BALTER zusätzlichen freien Speicherplatz
zum Anlegen neuer Tabellen, Hashbereiche oder DBTTs
zum Umspeichern von Datensätzen, Tabellen, Hashbereichen oder DBTTs.
Reicht der freie Speicherplatz in den Realms dafür nicht aus, dann erweitert BALTER die betroffenen Realms automatisch, sofern dies möglich ist (Voraussetzung: Sekundärzuweisung für Speicherplatz > 0). Näheres hierzu siehe Handbuch „Datenbankbetrieb“, Automatische Realm-Erweiterung durch Dienstprogramme).
Falls keine automatische Realm-Erweiterung möglich ist (Sekundärzuweisung für Speicherplatz = 0 oder kein Plattenspeicher mehr verfügbar), bricht BALTER die Umstrukturierung ab! Ihre Datenbank ist dadurch inkonsistent und Sie müssen sie auf den Stand vor Beginn der Umstrukturierung zurücksetzen und wieder von vorne beginnen.
Realms ohne automatische Realm-Erweiterung
Wenn ein oder mehrere Realms mit einer Sekundärzuweisung = 0 eingerichtet sind, z.B. weil Sie keine automatische Realm-Erweiterung wünschen, müssen Sie vor dem Umstrukturieren sicherstellen, dass der verfügbare Speicherplatz ausreicht. Dazu müssen Sie sich von BSTATUS ausgeben lassen, wie viel Speicherplatz in den verschiedenen Realms Ihrer Datenbank noch frei ist und abschätzen, ob der freie Platz für die geplante Umstrukturierung ausreicht.
Wichtig ist dabei, dass Sie dies möglichst frühzeitig tun, denn BREORG kann die Realms Ihrer Datenbank nur erweitern, solange BCHANGE die Datenbank noch nicht für die Umstrukturierung vorbereitet hat.
Sie können zu diesem Zweck auch das Analyseprotokoll zu Hilfe nehmen (siehe Abschnitt „Beschreibung des Analyseprotokolls (REPORT-Phase)").
BALTER wählt die Verarbeitungsreihenfolge so, dass er als Erstes die Elemente aus der Datenbank löscht, die im neuen Schema nicht mehr vorhanden sind. Dieser Platz ist somit bei späteren Aktionen (Aufbauen neuer Tabellen, Anlegen neuer Hashbereiche, Umspeichern von Sätzen) wieder nutzbar. Ebenso kann der Platz, der beim Umspeichern einer Satzart frei wird, nach Abschluss des Umspeicherns wieder verwendet werden.
Durch ungünstige Konstellationen kann es jedoch vorkommen, dass zuerst der Platz belegt wird, der hinten im Realm frei ist, und vorne im Realm Lücken bleiben. In so einem Fall können Sie durch Reorganisieren mit dem Dienstprogramm BREORG nach dem Umstrukturieren Hashbereiche und Tabellen in die freien vorderen Seiten verlagern:
Hashbereiche mit REORGANIZE-CALC
Tabellen mit REORGANIZE-SET
Anschließend können Sie die Realms um die am Ende frei gewordenen Seiten verkleinern.
Die Übersichten auf den folgenden Seiten sollen Ihnen helfen, die Größe des Speicherplatzes abzuschätzen, der zum Umstrukturieren in den Realms Ihrer Datenbank unbedingt noch frei sein muss. Stellen Sie dabei fest, dass ein Realm zu wenig Speicherplatz frei hat, so müssen Sie ihn mit BREORG erweitern, bevor Sie BCHANGE zum Vorbereiten der Umstrukturierung starten.
DBTT
Den freien Speicherplatz, den BALTER zum Neuanlegen oder Umspeichern einer DBTT benötigt, listet er im Analyseprotokoll auf.
Sie können die neue Größe einer DBTT aber auch anhand der in der Tabelle angegebenen Formeln berechnen.
Änderung | U r s a c h e | S p e i c h e r b e d a r f | ||
Formel | SSL-Klausel, | Standard- | ||
neue DBTT anlegen | neue Satzart definiert | DBTT-Klausel | 1 Seite | |
DBTT umspeichern | Anzahl der DBTT-Spalten verändert (nur beim Ownersatz), durch
DBTT verlagert durch:
| - | ursprüngliche |
Hashbereiche
Die Anzahl der Seiten, die BALTER zum Einrichten eines Hashbereichs benötigt, listet er im Analyseprotokoll auf.
Sie können die Größe der Hashbereiche aber auch anhand von Formeln berechnen! Ein Hashbereich belegt immer zusammenhängende Seiten eines Realm.
Änderung in der Datenbank | U r s a c h e | S p e i c h e r b e d a r f | ||
Formel, | SSL-Klausel, | Standard- | ||
direkten |
| bzw. | POPULA-TION- | 1 Seite |
indirekten |
| DBTT-Klausel | 1 Seite | |
direkten Hashbereich umwandeln | Eine mit LOCATION CALC definierte Satzart
| POPULA-TION- | 1 Seite | |
indirekten | Bei einer mit LOCATION CALC definierten Satzart
|
Tabelle 30: Speicherbedarf bei Änderungen, die Hashbereiche betreffen
Tabellen
Verlagern von Tabellen
Verlagert BALTER Tabellen - nur einstufige Tabellen kann BALTER als ganzes verlagern - in einen anderen Realm, so entspricht der dort benötigte Platz dem ursprünglich von der Tabelle belegten Platz.
Neuaufbau von Tabellen:
SYSTEM-Set oder TYPE IS DATABASE-KEY-LIST:
Jede Set-Occurrence-Tabelle belegt mindestens eine Seite.Standard-Set und nicht TYPE IS DATABASE-KEY-LIST:
Jede Set-Occurrence-Tabelle belegt nur so viel Platz, wie sie benötigt.BALTER speichert Tabellen desselben Sets so Platz sparend ab, dass mehrere Tabellen in derselben Seite liegen können.
Tabelle | Änderung in der Schema- | Änderung in DBB | S p e i c h e r b e d a r f | |
Tabelle(n) | Tabelle(n) | |||
indizierte SEARCH- | neuen SEARCH-Key mit | X | - | min. 1 Seite max. siehe Formel 5 |
Schlüsselfeld geändert | X | - | ||
Typ der Tabelle geändert | X | - | ||
Definition eines SEARCH-Key in USING INDEX umgewandelt | X | - | ||
SEARCH-Key-Tabelle in | X | - | ||
indizierte SEARCH- (Setebene) | Typ der Tabelle geändert | X | - | min. 1 Seite pro Set-Occurrence-Tabelle
|
neuen SEARCH-Key mit | X | - | bei SYSTEM-Set: min. 1 Seite bei Standard-Set: Mindestangabe nicht möglich; max. Größe für eine einzelne | |
Schlüsselfeld geändert | X | - | ||
Typ der Tabelle geändert | X | - | ||
Definition eines SEARCH-Key in USING INDEX umgewandelt | X | - | ||
SEARCH-Key-Tabelle in | X | - | ||
indizierte Adressliste | MODE-Klausel in POINTER-ARRAY geändert | X | - | |
ASC/DSC-Key geändert | X | - | ||
Adressliste in einen | X | - | ||
neuen Set mit MODE IS | X | - | ||
indizierte Sort- (MODE IS | neuen Set definiert mit MODE IS CHAIN und ORDER SORTED INDEXED | X | - | |
Definition eines Sets geändert in MODE IS CHAIN und ORDER SORTED INDEXED | X | - | ||
ASC-/DESC-Key geändert | X | - | ||
Tabelle in einen anderen Realm verlagert | X | - | ||
nicht indizierte | Adressliste in einen anderen Realm verlagert | - | X | ursprüngliche Größe |
indizierte Liste | MODE-Klausel in LIST geändert | X | - | bei SYSTEM-Set:
|
ASC-/DESC-Key geändert | X | - | ||
neuen Set mit MODE IS LIST definiert | X | - |
Tabelle 32: Speicherbedarf bei Tabellenänderungen
Wird in einem leeren SYSTEM-Set eine Adressliste, Liste oder Kette SORTED INDEXED neu definiert, so legt BALTER eine leere Tabelle in der Größe einer Seite dafür an.
Folgende Änderungen sind nur dann zulässig, wenn keine Membersätze vorliegen:
Neuaufbau einer einstufigen Liste oder einer einstufigen Adressliste (bewirkt z.B. durch MODE-Definition, Änderung ORDER-Klausel)
Verlagern einer einstufigen Liste in demselben Realm (z.B. durch Satzverlängerung)
Verlagern einer Liste in einen anderen Realm
Umspeichern von Sätzen
BALTER unterscheidet beim Umspeichern von Sätzen zwischen teilweiser und vollständiger Verlagerung:
Vollständige Verlagerung
liegt vor, wenn das neue Schema eine besondere Ablageform zwingend vorschreibt. Dies ist der Fall bei LOCATION MODE IS CALC bei direkten Hashbereichen und bei Satzarten, die in einer Liste gespeichert sind.
Vollständige Verlagerung führt BALTER in folgenden Fällen durch:
Sie verwenden im neuen Schema eine eigene Hashroutine statt der Standard-Hashroutine
Sie ändern im neuen Schema bei einem direkten Hashbereich den CALC-Key
Sie lassen im neuen Schema den Grund weg für eine indirekte Hash-Speicherung
Sie führen im neuen Schema LOCATION MODE IS CALC neu ein
Sie ändern im neuen Schema den ASC-/DESC-Key einer Liste
Sie definieren im neuen Schema MODE IS LIST neu
Bei vollständiger Verlagerung speichert BALTER alle Sätze in neue Seiten um und gibt die alten Seiten frei. Das heißt jedoch, dass während des BALTER-Laufs das Doppelte des für die Speicherung der Sätze notwendigen Platzes vorhanden sein muss.
Verlängern Sie eine Satzart mit besonderer Ablageform, so führt dies zu vollständiger Verlagerung, auch wenn sich an der Ablageform selbst nichts ändert.
Teilweise Verlagerung
liegt vor, wenn sich die Sätze verlängern (Benutzer- oder Systemteil) und aus diesem Grund mehr Seiten zur Speicherung benötigen.
Bei teilweiser Verlagerung bleiben so viele Sätze in den bisherigen Seiten wie möglich, den Rest speichert BALTER in neue Seiten um.
Verkürzen von Sätzen
Verkürzen Sie eine Satzart mit besonderer Ablageform, so führt dies wie beim Verlängern einer solchen Satzart zu vollständiger Verlagerung, auch wenn sich an der Ablageform selbst nichts ändert.
Verkürzen Sie eine Satzart ohne besondere Ablageform, so schiebt BALTER jeweils die Sätze innerhalb einer Seite zusammen. Es wird also Platz innerhalb der einzelnen Seiten frei, BALTER speichert die Sätze aber nicht in andere Seiten um, sodass keine ganzen Seiten frei werden.
BALTER druckt den Platz, den er zum Umspeichern von Sätzen benötigt, nicht im Analyseprotokoll aus. Mit Hilfe von Tabelle 33 und der anschließend dargestellten Berechnungsformeln können Sie jedoch den benötigten Speicherplatz zum Teil berechnen.
Änderung | U r s a c h e | S p e i c h e r b e d a r f | |||
Formel | SSL-Klausel, | Standard- | |||
vollständige Verlagerung | direkter Hash- bereich | LOCATION MODE in CALC geändert | POPULATION- | 1 | |
Hashroutine/CALC-Key geändert | |||||
indirekten in direkten Hashbereich umgewandelt | |||||
indizierte Liste | neuen Set mit MODE IS LIST definiert | bei SYSTEM-Set: bei Standard-Set: Mindestangabe nicht möglich; max. Größe für eine einzelne Set-Occurrence-Tabelle siehe Formel 5 | |||
MODE-Klausel in LIST geändert | |||||
ASC-/DESC-Key geändert | |||||
teilweise Verlagerung (Satzart verlängert) | Benutzerteil verlängert | BALTER trägt so viele Sätze wie möglich in den bisherigen Seiten ein, den Rest verlagert er in andere Seiten. Da die Sätze in den meisten Fällen gestreut gespeichert sind, ist eine Berechnung des erforderlichen Speicherplatzes nicht möglich | |||
Systemteil verlängert | Satzart komprimiert | ||||
Owner verkettet mit seiner Tabelle | |||||
Member verkettet mit seinem Owner | |||||
MODE IS CHAIN eingeführt | |||||
Owner-/Membersatzart: | |||||
bei MODE IS CHAIN hinzugefügt: | |||||
Membersatzart: neuen Set hinzugefügt | |||||
(keine Verlagerung) Satzart verkürzt | Benutzerteil verkürzt | BALTER schiebt jeweils dieSätze innerhalb einer Seite zusammen Zusätzlicher freier Speicherplatz ist - außer bei einer Satzart mit besonderer Ablageform - nicht erforderlich. | |||
Systemteil verkürzt | Satzart entkomprimiert | ||||
die Verkettung | |||||
die Verkettung | |||||
mit MODE IS CHAIN definierte Sets gelöscht | |||||
bei MODE IS CHAIN | |||||
die MODE-Klausel geändert | |||||
Set gelöscht, in dem die Satzart Member war |
Tabelle 33: Speicherbedarf beim Umspeichern von Sätzen