Parametermanagement mit Multitenant
Bis zur Einführung der Multitenant Architektur war das Management der Initialisierungsparameter einer Oracle Datenbankinstanz recht simpel, einfach per "ALTER SYSTEM" setzen, die Instanz ggf. neu starten und die Änderung war erledigt. Mit der neuen Architektur können Parameter nun aber sowohl auf Ebene des Root-Containers (CDB) als auch auf Ebene der Pluggable Datenbanken (PDB) durchgeführt werden. Die CDB gibt dabei den großen Rahmen vor innerhalb dessen die PDBs sich entsprechend bewegen können. Aber wie verhält sich eine PDB , wenn Parameter in der CDB geändert werden? Man kann sich durch die Dokumentation hangeln von den Database Concepts über den Administrators Guide hin zum Multitenant Administrators Guide mit den Abschnitten Modifying a CDB with ALTER SYSTEM und Modifying a PDB with ALTER SYSTEM, aber das gibt leider auch keinen genauen Aufschluß über das Verhalten.
Die allgemeine Annahme ist, dass die Parameter in die PDBs übertragen werden sofern diese nicht bereits eigene Werte gesetzt haben. Dem ist aber nicht so. Wir haben für Sie das Verhalten analysiert und dabei folgendes Verhalten festgestellt.
In der View V$PARAMETER existiert eine Spalte ISPDB_MODIFIABLE, die entweder TRUE oder FALSE enthält. Hierüber kann also ermittelt werden, ob ein Parameter überhaupt separat in einer PDB verändert werden kann oder nicht. Änderungen an Parametern mit ISPDB_MODIFIABLE=FALSE werden an PDBs weitergegeben, das ist erst einmal nicht überraschend. Nun scheint es aber so zu sein, dass Änderungen an Parametern in der CDB, die ISPDB_MODIFIABLE=TRUE haben, nicht immer an PDBs weitergereicht werden sondern lediglich auf Ebene der CDB geändert werden. Die Parameter "undo_retention" und "sga_target" zeigen z.B. so ein Verhalten.
Wie sorgt man also nun dafür, dass Änderungen an Parametern in der CDB auch an alle PDBs weitergereicht werden? Dafür hat Oracle die Syntax von "ALTER SYSTEM" erweitert. Mit "CONTAINER=ALL" werden die Änderungen an alle PDBs übertragen, mit "CONTAINER=CURRENT" werden die Änderungen nur im aktuellen Container durchgeführt. Letzteres ist das Standardverhalten.
Daraus ergeben sich zwei wichtige Schlußfolgerungen. Zum Ersten ist es wichtig, explizit "ALTER SYSTEM SET ... CONTAINER=ALL" zu verwenden, wenn Parameteränderungen auch für alle PDBs gelten sollen. Zum Zweiten ist es immer eine gute Idee, im Nachgang zu prüfen, ob die Änderungen in der CDB und in allen PDBs tatsächlich angekommen und in Benutzung sind.
Kommentare
Keine Kommentare