Oracle Cluster: Konvertierung einer Single-Instance-Datenbank in eine RAC-One-Node-Datenbank
Ein Oracle-Cluster wird üblicherweise dazu genutzt, RAC-Datenbanken zu betreiben. Aber natürlich können auf einem Cluster auch Single-Instance-Datenbanken laufen. Diese können über die Oracle-Clusterware als Failover-Datenbanken abgesichert werden. Eine weitere Variante sind RAC-One-Node-Datenbanken. Das sind Single-Instance-Datenbanken, die von der Clusterware abgesichert sind und mit denen ein praktisch unterbrechungsfreier Wechsel von einem Cluster-Knoten zu einen anderen Knoten möglich ist. Wie kann man nun eine vorhandene Single-Instance-Datenbank in eine RAC-One-Node-Datenbank konvertieren?
Hinweis: RAC One Node ist eine lizenzpflichtige Option der Enterprise Edition der Oracle Datenbank.
Ausgangspunkt ist eine einfache Single-Instance-Datenbank:
oracle@ernie:~/ [CONV] srvctl config database -d CONV Database unique name: CONV Database name: CONV Oracle home: /u00/app/oracle/product/12.2.0.1 Oracle user: oracle Spfile: +DATA/CONV/PARAMETERFILE/spfile.265.949185775 Password file: Domain: markusdba.net Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA,FRA Mount point paths: Services: Type: SINGLE OSDBA group: dba OSOPER group: oper Database instance: CONV Configured nodes: ernie CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed
Schritt 1: Spfile anpassen
vorher das SPFILE sichern:
oracle@ernie:~/ [CONV] sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Wed Jul 12 23:06:10 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create pfile='/tmp/initCONV.ora' from spfile;
File created.
Dann einige Einträge im SPFILE löschen:
SQL> alter system reset instance_number scope=spfile sid='*'; alter system reset instance_number scope=spfile sid='*' * ERROR at line 1: ORA-32010: cannot find entry to delete in SPFILE SQL> alter system reset thread scope=spfile sid='*'; alter system reset thread scope=spfile sid='*' * ERROR at line 1: ORA-32010: cannot find entry to delete in SPFILE SQL> alter system reset undo_tablespace scope=spfile sid='*'; System altered.
Abschließend müssen wir die Datenbank noch zur Cluster-Datenbank machen:
SQL> alter system set cluster_database=true scope=spfile; System altered. SQL> exit
Der letzte Schritt ist wichtig, denn beim Switchover (Wechsel der Datenbank von einem Cluster-Knoten auf einen anderen) sind kurzzeitig zwei Instanzen aktiv, d.h. kurzzeitig ist die Datenbank eine RAC-Datenbank.
Schritt 2: Kopieren der Password-Datei etc. auf den zweiten Rechner
oracle@ernie:~/ [CONV] cd $ORACLE_HOME/dbs oracle@ernie:/u00/app/oracle/product/12.2.0.1/dbs/ [CONV] scp orapwCONV bert:/u00/app/oracle/product/12.2.0.1/dbs/. orapwCONV 100% 3584 3.5KB/s 00:00 oracle@ernie:/u00/app/oracle/product/12.2.0.1/dbs/ [CONV] cd /u00/app/oracle/admin/ oracle@ernie:/u00/app/oracle/admin/ [CONV] scp -r * bert:/u00/app/oracle/admin/.
Schritt 3: Löschen der vorhandenen Datenbank-Konfiguration in der Cluster Registry und Stoppen der Datenbank
oracle@ernie:~/ [CONV] srvctl stop database -d CONV oracle@ernie:~/ [CONV] srvctl remove database -d CONV Remove the database CONV? (y/[n]) y
Schritt 4: Neu-Anlegen der Cluster-Resource für die Datenbank
oracle@ernie:~/ [CONV] srvctl add database \ -db CONV \ -oraclehome $ORACLE_HOME \ -dbtype RACONENODE \ -server "ernie,bert" \ -spfile "+DATA/CONV/PARAMETERFILE/spfile.265.949185775" \ -dbname CONV \ -diskgroup "DATA,FRA" \ -timeout 15
Kontrolle:
oracle@ernie:~/ [CONV] srvctl config database -d CONV Database unique name: CONV Database name: CONV Oracle home: /u00/app/oracle/product/12.2.0.1 Oracle user: oracle Spfile: +DATA/CONV/PARAMETERFILE/spfile.265.949185775 Password file: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA,FRA Mount point paths: Services: Type: RACOneNode Online relocation timeout: 15 Instance name prefix: CONV Candidate servers: ernie,bert OSDBA group: dba OSOPER group: oper Database instances: CONV_1 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed
Schritt 5: Start der Datenbank
oracle@ernie:/u00/app/oracle/admin/ [CONV] srvctl start database -d CONV oracle@ernie:/u00/app/oracle/admin/ [CONV] srvctl status database -d CONV Instance CONV_1 is running on node ernie Online relocation: INACTIVE
Wie bei Policy-Managed-Datenbanken werden die Instanzen mit „_1“ bzw. „_2“ benannt.
Schritt 6: Test: Verschieben der Datenbank auf den anderen Cluster-Knoten
oracle@ernie:/u00/app/oracle/admin/ [CONV] srvctl relocate database -d CONV -node bert -v Configuration updated to two instances Instance CONV_2 started Waiting for up to 15 minutes for instance CONV_1 to stop ... Instance CONV_1 stopped Configuration updated to one instance
Beim Verschieben einer Datenbank auf einen anderen Cluster-Knoten wird eine zweite DB-Instanz gestartet (in diesem Fall CONV_2). Neue Verbindungen landen direkt bei CONV_2, vorhandene Sitzungen werden nach COMMIT oder ROLLBACK auf den zweiten Server geschoben („transaktional“). Aber spätestens nach 15 Minuten (beim „srvctl add database“ festgelegter Timeout) wird die erste Instanz geschlossen und die dort immer noch vorhandenen Sitzungen werden abgebrochen.
Links:
- http://allthingsoracle.com/rac-one-node/
- http://dbathoughts.blogspot.de/2010/04/oracle-rac-one-node-what-is-it.html
MOS-Notes:
- Naming Of RAC ONE NODE Instances Across RAC Nodes (Doc ID 2063599.1)
Instance Name changes during RAC One Node Failover/Switchover (Doc ID 1540629.1)
Oracle-Dokumentation
Werbung (Amazon-Partner-Link)