Oracle Cluster: Konvertierung einer Single-Instance-Datenbank in eine RAC-One-Node-Datenbank

12. Juli 2017 Aus Von Markus Flechtner

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:

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)