Oracle RAC 12c R2 - Teil 1 - Netzwerklayout

Die nächsten Kundenprojekte mit Oracle RAC stehen an und Oracle 12c R2 ist zum Download bereit. Es wird also Zeit die eigene Installationsdoku aufzufrischen und eine erste Evaluierungs-Installation durchzuführen. Planung und Vorbereitung sind wichtige Schritte bei jeder Cluster-Installation, daher werde ich meine Installationsvorbereitungen über mehrere Blog-Einträge aufgeteilt veröffentlichen. Geplant ist der Klassiker, eine "kleine" Zwei-Knoten-RAC Installation auf einem Notebook zu Evaluierungs-Zwecken. Die beiden RAC-Knoten werden als VMs mit Virtualbox (5.1.14) aufgesetzt, Host-Betriebssystem ist Windows und als Gast-Betriebssystem wird Oracle Linux 7.3 genutzt.

Das Netzwerklayout für diese Installation besteht aus zwei Host-Only-Netzwerken in Virtualbox:

  • Netz 1 - Public: 192.168.56.0/24
  • Netz 2 - Privat / Cluster-Interconnect: 192.168.59.0/24
  • DNS Subdomain: .t01.fm-berger.de

Neben den beiden VMs für die RAC-Knoten gibt es eine weitere VM für die Bereitstellung der Basisinfrastruktur:

  • Hostname: infra01.t01.fm-berger.de
  • IP im Netz 1: 192.168.56.10
  • IP im Netz 2: 192.168.59.10

Für die einzelnen Cluster-Knoten sind folgende Hostnamen und IPs geplant:

Knoten 1 Knoten 2
Hostname - Public ol73o122-1.t01.fm-berger.de ol73o122-2.t01.fm-berger.de
IP - Public 192.168.56.101 192.168.56.102
Hostname VIP - Public ol73o122-1-vip.t01.fm-berger.de ol73o122-2-vip.t01.fm-berger.de
IP VIP - Public 192.168.56.111 192.168.56.112
Hostname Private (Interconnect) ol73o122-1-priv.t01.fm-berger.de ol73o122-2-priv.t01.fm-berger.de
IP Private (Interconnect) 192.168.59.101 192.168.59.102

Und für den SCAN-Hostname:

  • Hostname: ol73o122-scan.t01.fm-berger.de
  • IPs: 192.168.56.121, 192.168.56.122, 192.168.56.123

Als ersten Schritt benötigen wir nun eine passende DNS-Server-Konfiguration auf dem System infra01.t01.fm-berger.de. Diese VM ist über zwei Netzwerkinterfaces angebunden:

[root@infra01 ~]# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:dd:27:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.10/24 brd 192.168.56.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::ebd5:891c:22a3:8d49/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:8f:52:06 brd ff:ff:ff:ff:ff:ff
    inet 192.168.59.10/24 brd 192.168.59.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::305:ba33:311a:c878/64 scope link
       valid_lft forever preferred_lft forever

Zur Vereinfachung ist die Firewall auf diesem System deaktiviert:

[root@infra01 ~]# systemctl disable firewalld
[root@infra01 ~]# systemctl stop firewalld

Als DNS-Server wird BIND eingesetzt:

[root@infra01 yum.repos.d]# yum install bind-libs bind bind-utils

Die Konfigurationsdateien wurden wie folgt angepasst:
/etc/named.conf

options {
  listen-on port 53 { 127.0.0.1; 192.168.56.10; 192.168.59.10; };
  directory     "/var/named";
  dump-file     "/var/named/data/cache_dump.db";
  statistics-file "/var/named/data/named_stats.txt";
  memstatistics-file "/var/named/data/named_mem_stats.txt";
  allow-query     { localhost; 192.168.56.0/24; 192.168.59.0/24; };
  recursion no;
  dnssec-enable no;
  dnssec-validation no;
  pid-file "/run/named/named.pid";
  session-keyfile "/run/named/session.key";
};

logging {
  channel default_debug {
    file "data/named.run";
    severity dynamic;
  };
};

zone "t01.fm-berger.de" IN {
  type master;
  file "t01.fm-berger.de.zone";
  allow-update { none; };
};

zone "56.168.192.in-addr.arpa." IN {
  type master;
  file "192.168.56.zone";
  allow-update { none; };
};

zone "59.168.192.in-addr.arpa." IN {
  type master;
  file "192.168.59.zone";
  allow-update { none; };
};

/var/named/t01.fm-berger.de.zone

@ IN SOA infra01. root.localhost. (
  2017030201; serial
       28800; refresh, seconds
        7200; retry, seconds
      604800; expire, seconds
       86400 ); minimum, seconds
;
  NS infra01.;
;
infra01         IN A    192.168.56.10
ol73o122-1      IN A    192.168.56.101
ol73o122-2      IN A    192.168.56.102
ol73o122-1-priv IN A    192.168.59.101
ol73o122-2-priv IN A    192.168.59.102
ol73o122-1-vip  IN A    192.168.56.111
ol73o122-2-vip  IN A    192.168.56.112
ol73o122-scan   IN A    192.168.56.121
ol73o122-scan   IN A    192.168.56.122
ol73o122-scan   IN A    192.168.56.123

/var/named/192.168.56.zone

$ORIGIN 56.168.192.in-addr.arpa.
$TTL 1H
@ IN SOA infra01.t01.fm-berger.de. root.infra01.t01.fm-berger.de. (
  2017030201; serial
       28800; refresh, seconds
        7200; retry, seconds
      604800; expire, seconds
       86400 ); minimum, seconds
;
56.168.192.in-addr.arpa. IN NS infra01.t01.fm-berger.de.
IN  NS infra01.t01.fm-berger.de.
101 IN PTR ol73o122-1.t01.fm-berger.de.
102 IN PTR ol73o122-2.t01.fm-berger.de.
111 IN PTR ol73o122-1-vip.t01.fm-berger.de.
112 IN PTR ol73o122-2-vip.t01.fm-berger.de.
121 IN PTR ol73o122-scan.t01.fm-berger.de.
122 IN PTR ol73o122-scan.t01.fm-berger.de.
123 IN PTR ol73o122-scan.t01.fm-berger.de.

/var/named/192.168.59.zone

$ORIGIN 59.168.192.in-addr.arpa.
$TTL 1H
@ IN SOA infra01.t01.fm-berger.de. root.infra01.t01.fm-berger.de. (
  2017030201; serial
       28800; refresh, seconds
        7200; retry, seconds
      604800; expire, seconds
       86400 ); minimum, seconds
;
59.168.192.in-addr.arpa. IN NS infra01.t01.fm-berger.de.
IN  NS infra01.t01.fm-berger.de.
101 IN PTR ol73o122-1-priv.t01.fm-berger.de.
102 IN PTR ol73o122-2-priv.t01.fm-berger.de.

Start von named und dauerhafte Aktivierung:

[root@infra01 ~]# systemctl enable named
[root@infra01 ~]# systemctl start named

Oracle Database 11.2 Express Edition Beta

Seit ein paar Tage ist eine Beta Version für die Oracle Database 11.2 Express Edition verfügbar. Die Beta basiert auf dem Release Stand 11.2.0.2.0. Eine erste Installation unter Oracle Enterprise Linux 6 verlief relativ problemlos.

Wichtig ist das der Hostname des Systems auflösbar ist:

[root@centos6 log]# ping `hostname`
PING centos6 (192.168.56.101) 56(84) bytes of data.
64 bytes from centos6 (192.168.56.101): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from centos6 (192.168.56.101): icmp_seq=2 ttl=64 time=0.078 ms

Die Installation erfolgt dann wie von der 10g Version gewohnt:

[root@centos6 mnt]# rpm -i oracle-xe-11.2.0-0.5.x86_64.rpm
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

[root@centos6 log]# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press  to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

Auf meinem System gab es beim ersten Versuch Schwierigkeiten mit folgenden Einträgen in der Datei /etc/sysctl.conf:

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Ein zweiter Versuch das RPM-Paket zu installieren lief reibungslos durch. Auf dem Testsystem ist eine Firewall aktiv. Für den Remote-Zugriff auf die Datenbank und die APEX-Weboberfläche wurden folgende Firewall-Regeln in /etc/sysconfig/iptables ergänzt:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

Zum Schluss muss der Remote-Zugriff auf die Web-Oberfläche in der XDB-Konfiguration ebenfalls eingetragen werden:

[root@centos6 ~]# su - oracle
-bash-4.1$ . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
-bash-4.1$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Beta on Tue Apr 5 18:07:08 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Beta
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
PL/SQL procedure successfully completed.
SQL>

Oracle Enterprise Manager 11g - Teil 1

Gestern Abend hat Oracle die Version 11g für den Enterprise Manager veröffentlicht. Entsprechende Infos und Videos zu diesem Launch gibts bei Oracle unter: Introducing Oracle Enterprise Manager 11g Grid Control!. Für mich überraschend steht die Software (zumindest für Linux) auch gleich zum Download bereit (Oracle Enterprise Manager Downloads). Da lohnt sich natürlich gleich ein Blick was sich alles verändert hat!

Middleware und RDBMS sind nicht mehr im Installationsumfang enthalten

D.h. diese Komponenten müssen vorab bereits installiert werden! Dies war einer der Punkte der mich bei Grid Control immer gestört hatte die enthaltenen Versionen von Middleware und RDBMS waren meist etwas angestaubt. So hat man mehr Flexibiltät bei der Installation.

Kleiner wird das Installationsumfang dadurch allerdings nicht. Die drei Zip-Files sind zusammen 4 GB groß:

[root@w0007 linux64]# ls -l
total 4324640
-rwxr-xr-x 1 frank frank 1430649163 2010-04-23 14:34 GridControl_11.1.0.1.0_Linux_x86-64_1of3.zip
-rwxr-xr-x 1 frank frank 1589674193 2010-04-23 14:56 GridControl_11.1.0.1.0_Linux_x86-64_2of3.zip
-rwxr-xr-x 1 frank frank 1408054490 2010-04-23 14:36 GridControl_11.1.0.1.0_Linux_x86-64_3of3.zip
Der Installationsvorgang

Die Installation lief in meinem Fall problemlos ab, die einzige wirkliche Änderung gegenüber Version 10gR5 ist das eine Datenbank-Instanz und der Weblogic Applicationserver bereits vor der Installation des Enterprise Manager aufgesetzt werden müssen.

Komponenten-Stack / Verzeichnisse

An der Verzeichnisstruktur des Enterprise Manager hat sich in Version 11gR1 hingegen einiges getan, man erkennt deutlich wie nun unterschiedliche Produktlinien langsam zusammenkommen. Neu ist der Begriff des Middleware-Home. Unterhalb dieses Verzeichnisses gibt es dann eine Fülle weiterer Verzeichnissbäume und Oracle Homes:

[oracle@oragrid middleware]$ ls -l
total 152
drwxr-xr-x 45 oracle oinstall  4096 Apr 24 13:27 agent11g
-rw-r-----  1 oracle oinstall   218 Apr 24 12:43 domain-registry.xml
drwxr-x---  7 oracle oinstall  4096 Apr 23 12:45 jdk160_14_R27.6.5-32
drwxr-x---  7 oracle oinstall  4096 Apr 23 12:45 jrockit_160_14_R27.6.5-32
drwxr-x---  2 oracle oinstall  4096 Apr 23 12:47 logs
drwxr-x---  7 oracle oinstall 24576 Apr 23 12:58 modules
-rw-r-----  1 oracle oinstall   623 Apr 23 13:00 ocm.rsp
drwxr-x---  5 oracle oinstall  4096 Apr 23 12:47 oepe_11gR1PS1
drwxr-xr-x 55 oracle oinstall  4096 Apr 24 12:39 oms11g
drwxr-xr-x 28 oracle oinstall  4096 Apr 23 21:05 oracle_common
drwxr-xr-x 48 oracle oinstall  4096 Apr 23 21:11 Oracle_WT
drwxr-xr-x  4 oracle oinstall  4096 Apr 23 12:58 patch_oepe1032
drwxr-xr-x  5 oracle oinstall  4096 Apr 23 13:03 patch_wls1032
-rw-r-----  1 oracle oinstall 57384 Apr 23 12:47 registry.dat
-rw-r-----  1 oracle oinstall  2640 Apr 23 12:47 registry.xml
drwxr-x---  3 oracle oinstall  4096 Apr 24 12:43 user_projects
drwxr-x---  8 oracle oinstall  4096 Apr 23 12:40 utils
drwxr-x---  7 oracle oinstall  4096 Apr 23 12:47 wlserver_10.3

Der Plattenplatz-Bedarf hat mit dieser Version ebenfalls nochmals zugelegt, das Middleware Home belegt nach der Installation satte 8 GB, hier eine grobe Aufteilung:

[oracle@oragrid middleware]$ du -sh *
1.1G	agent11g
4.0K	domain-registry.xml
172M	jdk160_14_R27.6.5-32
187M	jrockit_160_14_R27.6.5-32
8.0K	logs
122M	modules
4.0K	ocm.rsp
254M	oepe_11gR1PS1
3.9G	oms11g
833M	oracle_common
1.2G	Oracle_WT
16K	patch_oepe1032
60K	patch_wls1032
64K	registry.dat
4.0K	registry.xml
12K	user_projects
35M	utils
518M	wlserver_10.3

In den nächsten Teilen folgt dann eine Übersicht zu neuen Features und der Bedienung des Enterprise Managers.

Test-Drive: Quest - LiteSpeed Engine for Oracle

Die Firma Quest hat vor wenigen Tagen die Software LiteSpeed Engine for Oracle veröffentlicht. Hierbei handelt es sich um eine RMAN-Erweiterung. Die LiteSpeed Engine bietet vor allem Kompremierung von Backup-Pieces und Verschlüsselung. Die nachfolgenden Zeilen geben einen Überblick zu Installation und Konfiguration.

Schritt 1 - Download
Eine Test-Version (30 Tage Laufzeit) kann von der Quest-Homepage nach einer Registierung heruntergeladen werden.

Schritt 2 - Installation
Um die Software installieren zu können, benötigt man das Package sharutils (Shell Archive Utilities). Beim verwendeten Fedora 9 war dieses Package noch nicht intalliert.

# rpm -q sharutils
sharutils-4.6.3-2.fc9.x86_64
# yum install sharutils

Anschließend kann die Quest-Software selbst installiert werden, die Installation erfolgt als Oracle-User nicht als root! Die üblichen Oracle Umgebungs-Variablen ($ORACLE_HOME) müssen passend gesetzt sein.

$ bash LiteSpeedEngineforOracle_110168.sh install

Die Software wird direkt ins entsprechende ORACLE_HOME unter $ORACLE_HOME/Quest/LEO installiert.

Schritt 3 - RMAN Konfiguration
Damit die LiteSpeed Engine richtig mit RMAN zusammenarbeitet, muss sie im RMAN entsprechend konfiguriert werden:

$ rman
RMAN> connect target /
RMAN> CONFIGURE CHANNEL DEVICE TYPE sbt 
PARMS='SBT_LIBRARY=/opt/oracle/ora10g/Quest/LEO/libleo64.so';

Schritt 4 - Backup durchführen
Ein Backup könnte dann wie folgt durchgeführt werden:

RMAN> backup device type sbt database format='leo://level=4://tmp/backup_%U.leo';

Die LiteSpeed Engine verfügt mit leo auch über ein Kommandozeilen-Werkzeug, hiermit lassen sich z.B. Informationen über kompremierte Backup-Pieces anzeigen:

$ leo stat backup_2nk8dgql_1_1.leo

/tmp/backup_2nk8dgql_1_1.leo

  Raw size (bytes)             597164032
  Compressed size (bytes)      115510927
  Compression ratio            80.66%
  Compression level            4
  Encryption type              None
  Start time                   Fri 27 Feb 2009 10:47:49 AM CET
  End time                     Fri 27 Feb 2009 10:48:27 AM CET
  Real time (sec)              37.68
  User CPU time (sec)          17.21
  System CPU time (sec)        0.66
  Written by LEO version       1.1.0.168
  Method                       RMAN
  DBNAME                       B08
  DBID                         229074788
  Filetype                     Datafile

Oracle Database Control - User Defined Metrics

Die Web-Oberfläche Database Control zur Verwaltung einer Oracle Datenbank Instanz bietet die Möglichkeit eigene benutzerdefinierte Metriken (UDM - User Defined Metrics) anzulegen. Möchte man eine Reihe von eigenen Metriken in verschiedenen Instanzen verwalten, wird dies über die Web-Oberfläche schnell mühsam.

In diesem Fall bietet es sich an, die von der Web-Oberfläche im Hintergrund erzeugte XML-Datei selbst zu editieren. Die XML-Datei befindet sich im Pfad $ORACLE_HOME/INSTANZNAME/sysman/emd/collection und nennt sich oracle_database_ORACLESID.xml.

Wird die XML-Datei von Hand editiert, ist besonders darauf zu achten, dass die Struktur der Datei erhalten bleibt. Als Beispiel für einen entsprechenden Eintrag wird die Anzahl Zeilen der Tabelle EMP stündlich ermittelt, die Warn-Schwelle liegt bei einem Wert von 10:

<!-- this file is generated by collector -->
<targetcollection TYPE="oracle_database" NAME="B05">
...
        <CollectionItem NAME="BLOG_TEST">
                <Schedule>
                        <IntervalSchedule INTERVAL="1" TIME_UNIT="Hr"/>
                </Schedule>
                <MetricColl NAME="SQLUDM">
                        <Condition COLUMN_NAME="NumValue" WARNING="10" MESSAGE="%Message%">
                                <KeyColumn COLUMN_NAME="ID">BLOG_TEST</KeyColumn>
                        </Condition>
                        <ItemProperty NAME="ID">BLOG_TEST</ItemProperty>
                        <ItemProperty NAME="sqlstmt">select count(*) from scott.emp</ItemProperty>
                        <ItemProperty NAME="UserName">system</ItemProperty>
                        <ItemProperty NAME="password" ENCRYPTED="TRUE">de3503b8b5736253</ItemProperty>
                        <ItemProperty NAME="valuetype">NUMBER</ItemProperty>
                </MetricColl>
        </CollectionItem>
</TargetCollection>

Werden in einem Unternehmen viele Datenbank-Instanzen auf unterschiedlichen Servern eingesetzt, empfiehlt sich der Einsatz von Oracle Grid Control als großer Bruder zu Database Control. Hier lassen sich beliebig viele Oralce-Instanzen zentral verwalten.