Always-On für die Always-Free Database

In einem vorangegangenen Blog-Eintrag haben wir erklärt, wie man eine kostenlose Oracle Datenbank in der Cloud erstellt. Nur leider wird diese Datenbank nach 7 Tagen Inaktivität automatisch gestoppt. Um das zu verhindern, muss die Datenbank regelmäßig verwendet werden. Zu diesem Zweck kann man sich einfach einer ebenfalls immer kostenfreien Compute Instance in der Oracle Cloud bedienen. Diese hat zwar nur 1 OCPU, 1GB RAM und 50GB Storage, das ist für diese Zwecke aber mehr als ausreichend.

Die Idee ist, in regelmäßigen Abständen eine Verbindung zum Autonomous Database Service aufzubauen und eine Abfrage gegen die Datenbank zu starten. Mehr bedarf es nicht, um den Service am Laufen zu halten. Man benötigt also einen Oracle Client auf der Compute Instance. Oracle stellt dafür auf yum.oracle.com verschiedene Packages für die unterschiedlichen Oracle Linux Versionen bereit. Die Compute Instances laufen mit Oracle Linux 7, dementsprechend muss das passende YUM Repository verwendet werden. Dieses Repository wird als neue Datei in /etc/yum.repos.d/ bereitgestellt:

[opc@dbamarco-02 ~]$ sudo su -

[root@dbamarco-02 ~]# cat /etc/yum.repos.d/oracle-linux-ol7.repo

[ol7_instant_client]

name=Oracle Instant Client ($basearch)

baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

gpgcheck=1

enabled=1

Damit ist das Repository verwendbar und der Instant Client kann installiert werden. Für das Keep-Alive wird ledglich das SQL*Plus benötigt. Weitere Tools wie "tnsping" usw. können ebenfalls mit dieser Methode installiert werden.

[root@dbamarco-02 yum.repos.d]# yum install oracle-instantclient19.6-sqlplus

Loaded plugins: langpacks, ulninfo

Resolving Dependencies

--> Running transaction check

---> Package oracle-instantclient19.6-sqlplus.x86_64 0:19.6.0.0.0-1 will be installed

--> Processing Dependency: oracle-instantclient19.6-basic >= 19.6.0.0.0 for package: oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64

--> Running transaction check

---> Package oracle-instantclient19.6-basic.x86_64 0:19.6.0.0.0-1 will be installed

--> Finished Dependency Resolution

 

Dependencies Resolved

 

==========================================================================================

Package Arch Version Repository Size

==========================================================================================

Installing:

oracle-instantclient19.6-sqlplus x86_64 19.6.0.0.0-1 ol7_instant_client 687 k

Installing for dependencies:

oracle-instantclient19.6-basic x86_64 19.6.0.0.0-1 ol7_instant_client 52 M

 

Transaction Summary

==========================================================================================

Install 1 Package (+1 Dependent package)

 

Total download size: 52 M

Installed size: 229 M

Is this ok [y/d/N]: y

Downloading packages:

(1/2): oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64.rpm | 687 kB 00:00:01

(2/2): oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm | 52 MB 00:02:19

-----------------------------------------------------------------------------------------------------

Total 385 kB/s | 52 MB 00:02:19

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Installing : oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64 1/2

Installing : oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64 2/2

Verifying : oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64 1/2

Verifying : oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64 2/2

 

Installed:

oracle-instantclient19.6-sqlplus.x86_64 0:19.6.0.0.0-1

 

Dependency Installed:

oracle-instantclient19.6-basic.x86_64 0:19.6.0.0.0-1

 

Complete!

Nachdem der Oracle Client nun installiert ist, kann er auch von anderen Benutzern verwendet werden. Für die Verbindung zur Autonomous Database wird die ZIP-Datei auf die Compute Instance kopiert. Dort entpackt man die Datei am besten in separates Verzeichnis.

[opc@dbamarco-02 ~]$ mkdir ADB

[opc@dbamarco-02 ~]$ unzip -d ADB Wallet_MMIATP.zip

Archive: Wallet_MMIATP.zip

inflating: ADB/cwallet.sso

inflating: ADB/tnsnames.ora

inflating: ADB/truststore.jks

inflating: ADB/ojdbc.properties

inflating: ADB/sqlnet.ora

inflating: ADB/ewallet.p12

inflating: ADB/keystore.jks

Zum Schluß muss nur der Pfad zum Wallet in der sqlnet.ora angepasst werden. Der Pfad muss auf das Verzeichnis verweisen, in das die Dateien entpackt wurden.

Die Zeile

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))

wird zu

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/oracle/ATP")))

Damit der Oracle Client nun auch die gewünschten Informationen findet, wird die Umgebungsvariable TNS_ADMIN entsprechend gesetzt. Danach kann eine Verbindung mit SQL*Plus zur Autonomous Database hergestellt werden.

[opc@dbamarco-02 ADB]$ export TNS_ADMIN=/home/opc/ADB

[opc@dbamarco-02 ADB]$ sqlplus admin/**********@mmiatp_high

 

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 3 11:02:57 2020

Version 19.6.0.0.0

 

Copyright (c) 1982, 2019, Oracle. All rights reserved.

 

Last Successful login time: Tue May 05 2020 13:47:50 +00:00

 

Connected to:

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0

 

SQL> select name from v$database;

 

NAME

---------

FEDB1POD

 

SQL> exit

Mit diesen Voraussetzungen kann nun ein Script erstellt werden, dass sich zur Datenbank verbindet und eine Abfrage ausführt. Wird dieses Script dann per cron Job regelmäßig ausgeführt, so wird die Datenbank auch nicht mehr von Oracle angehalten.


Über den Autor

Marco Mischke

Weitere Beiträge dieses Autors

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich