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.
Kommentare
Keine Kommentare