DOAG Datenbank Kolumne: Desupport der Policy-Managed-Oracle-Cluster-Architektur

  • Erstellt von Matthias Mann
  • Datenbank Kolumne, Oracle, Datenbank

Matthias Mann erläutert, was der Desupport der Policy-Managed-Oracle-Cluster-Architektur bedeutet und worin die Unterschiede zwischen Policy-Managed- und Admin-Managed-Cluster-Setups bestehen.

Laut den Oracle AI Database 26ai Release Notes wird die Policy-Managed-Datenbank-Deployment-Option nicht mehr supported.

(siehe https://docs.oracle.com/en/database/oracle/oracle-database/26/upgrd/oracle-database-changes-deprecations-desupports.html#GUID-DAD2E673-D259-4799-9812-867969DCD6AA)

Policy-managed databases were deprecated in Oracle Database 21c, and admin-managed database deployment was enhanced with functions similar to policy managed databases. By converging the automation provided by policy-managed database with the consistency of an admin-managed database, Oracle seeks to simplify database management tasks for database administrators. This converged database deployment provides the best of both options, such as providing the options to rank and define the order of database startup, without requiring you to choose a specific style during deployment.

Was ist der Unterschied zwischen Policy-Managed- und Admin-Managed-Cluster-Setups?

Im Policy-Managed-Deployment-Modus legt der Clusteradministrator fest, wie viele Ressourcen (Datenbankinstanzen) basierend auf Bedingungen (Richtlinien) gestartet werden. Es ist nicht definiert, wo diese Instanzen gestartet werden. Üblicherweise werden die Cluster für eine solche Einrichtung in Serverpools unterteilt, und die Datenbankinstanzen können innerhalb der Grenzen eines solchen Pools frei gestartet oder gestoppt werden. Der Server, auf welchem eine Instanz startet, wird erst zu diesem Zeitpunkt festgelegt. Die Pools können vergrößert oder verkleinert werden, ohne die Konfiguration der Datenbankinstanz zu ändern.

Im Gegensatz hierzu definiert der Clusteradministrator im Admin-Managed-Deployment-Modus ein Mapping zwischen den zu startenden Datenbankinstanzen und -services und den verfügbaren Servern im Cluster. Das Konzept des Serverpools gibt es hier nicht.

Der folgende Text beschreibt im Überblick, wie ein Policy-Managed-Cluster in einen Admin-Managed-Cluster umkonfiguriert werden kann.

Inventur und Backup

Die Codeschnipsel im Folgenden beziehen sich auf einen 2-Knoten-RAC-Cluster. Da im Folgenden alle Datenbank-relevanten Clusterressourcen gelöscht werden, ist ein Backup der Metadaten erforderlich.

Die Inventur, beziehungsweise das Backup muss folgende Informationen sichern:

  • Liste aller Database Unique Names (${DBUN}
  • Pro DB: UNDO-Tablespaces
  • Pro DB: Lokation des spfile
  • ORACLE_HOME(s)
  • Pro DB: Lokation des Password-Files
  • Pro DB: Abhängigkeiten von Diskgruppen oder Filesystemen
  • Liste aller Oracle Database Services mit ihrer Kardinalität (sofern als Cluster-Ressource definiert)
  • Zuordnung der Database Services zu Pluggable Databases (leider in 19c noch keine Cluster-Ressourcen) 

 

${ORACLE_HOME}/bin/srvctl config database -d ${DBUN} 

>${WORKDIR}/${DBUN}/${DBUN}.cfg 

${ORACLE_HOME}/bin/srvctl getenv database -d ${DBUN} 

>${WORKDIR}/${DBUN}/${DBUN}.getenv

${ORACLE_HOME}/bin/srvctl config service  -d ${DBUN} 

>${WORKDIR}/${DBUN}/${DBUN}.svc

 

${GRID_HOME}/bin/crsctl stat res ora.${DBUN}.db -f 

>${WORKDIR}/${DBUN}/${DBUN}.var

${GRID_HOME}/bin/crsctl stat res ora.${DBUN.${service_name}.svc -f 

>${WORKDIR}/${DBUN}/${service_name}.var

 

UNDO-Tablespaces

Da in der Policy-Managed-Architektur die UNDO-Tablespaces erst beim Start der Instanz angelegt werden, müssen wir nun dafür sorgen, daß die fehlenden UNDO-Tablespaces nun im Voraus angelegt werden, entsprechend der geplanten Anzahl von Instanzen pro Datenbank in der Admin-Managed-Architektur.

 

Vorbereitung der spfile(s)

In Offline-Backups der spfile(s) müssen folgende statische Einträge definiert werden, welche die Instanznamen und -nummern, die Anzahl der Redolog-Threads sowie die Zuordnung der UNDO-Tablespaces zu den Instanzen definieren. 

${DBUN}1.instance_name='${DBUN}1'

${DBUN}2.instance_name='${DBUN}2'

${DBUN}1.instance_number=1

${DBUN}2.instance_number=2

${DBUN}1.thread=1

${DBUN}2.thread=2

${DBUN}1.undo_tablespace='undo01'

${DBUN}2.undo_tablespace='undo02'

 

Löschen der Clusterressourcen und Serverpools

Alle Datenbanken und Services müssen nun gestoppt und die Clusterressourcen gelöscht werden.

srvctl stop database -db ${DBUN}

srvctl remove database -db ${DBUN}

 

srvctl status serverpool

Server pool name: Free

Active servers count: 0

Server pool name: Generic

Active servers count: 0

Server pool name: p1

Active servers count: 2

 

srvctl remove serverpool -serverpool p1

# All servers must appear in the pool Free.

 

srvctl status serverpool

Server pool name: Free

Active servers count: 2

Server pool name: Generic

Active servers count: 0

 

Neuanlegen der Clusterressourcen

Mit Hilfe unserer Backupdaten werden nun alle gelöschten Clusterressourcen neu im Admin-Managed-Stil angelegt.

srvctl add database -db ${DBUN} 

                    -pwfile +${DATA}/${DBUN}/orapw${DBUN}

                    -oraclehome ${ORACLE_HOME} 

                    -spfile +${DATA}/${DBUN}/spfile${DBUN}.ora

                    -dbname ${DB_NAME} 

                    -policy automatic

 

srvctl modify database -db ${DBUN} -diskgroup “${DATA},${FRA}”

 

srvctl add instance -d ${DBUN} -i ${DBUN}1 -n ${NODE_1}

srvctl add instance -d ${DBUN} -i ${DBUN}2 -n ${NODE_2}

 

srvctl setenv database -d ${DBUN} -t "ORACLE_UNQNAME=${DBUN}"

srvctl setenv database -d ${DBUN} -t "ORACLE_BASE=/app/oracle"

srvctl setenv database -d ${DBUN} -t 

"TNS_ADMIN=/app/oracle/admin/${DBUN}/network/pfile"

 

srvctl add service -db ${DBUN} -preferred "${DBUN}1,${DBUN}2" -pdb 

<pdb_name> -service <service name> -role primary-policy automatic -

failover_restore level1 -drain_timeout 300

 

Refresh der spfile(s)

Die weiter oben modifizierten Offline-Kopien der spfile(s) werden nun an den richtigen Lokationen als spfiles bereitgestellt.

sqlplus /nolog <<EOF${DBUN}

connect / as sysdba

startup nomount pfile='${WORKDIR}/${DBUN}/pfile.ora';

create spfile='+${DATA}/${DBUN}/spfile${DBUN}.ora' from 

pfile='${WORKDIR}/${DBUN}/pfile.ora';

shutdown immediate;

exit;

EOF${DBUN}

 

Start der Clusterressourcen

Letztendlich können nun alle Clusterressourcen gestartet werden.

srvctl start database -db ${DBUN}

 

Automatisierung 

Die gesamte Prozedur lässt sich sehr gut automatisieren, so dass die Downtime, auch bei sehr großen Clustern mit vielen Ressourcen kurz gehalten werden kann.

 

Matthias Mann

 

Grafik mit Gegenüberstellung Policy-Managed Cluster und Admin-Managed Cluster