[ROZWIĄZANY] Dlaczego baza danych Oracle działa wolno, gdy używamy docker?

[ROZWIĄZANY] Dlaczego baza danych Oracle działa wolno, gdy używamy docker?
Photo by Fernando Maté on Unsplash

Ostatnimi czasy, gdy potrzebowałem środowiska do testów, gdzie jednym z elementów była baza danych Oracle, napotkałem problem, który przysporzył mi wiele nerwów.

Problem

Gdy uruchomiłem baze danych Oracle 11g Express Edition (XE) w dokerze i próbowałem stworzyć konektor Kafka Connect do tej bazy to okazało się, że walidator konfiguracji połączenia można by powiedzieć, że sie zawiesił (tak myślałem na początku), ale okazało się, że po prostu tak długo oczekiwał na odpowiedź od bazy danych Oracle. Walidacja powinna trwać maksimum sekundę, a w tym przypadku odpowiedź była po kilku minutach.

Rozwiązanie

Z racji, że nie jestem ekspertem od Oracle, pomocy zacząłem szukać w internecie. Natknąłem się na komentarz, gdzie ktoś pisał, że należy po uruchomieniu kontenera wykonać dwa polecenia SQL i wyszstko będzie działać jak należy. Oto owe polecenia:

ALTER SYSTEM SET FILESYSTEMIO_OPTIONS=DIRECTIO SCOPE=SPFILE;
ALTER SYSTEM SET DISK_ASYNCH_IO=FALSE SCOPE=SPFILE;

Docker-Compose

Poniżej przedstawiam, gotowy skrypt YAML, gdzie powyższą konfigurację możemy trzymać w pliku init.sql w folderze “config“, który zostanie wykonany podczas uruchamiania kontenera.

pawel@pawel:~/Desktop/Blog/oracle-db$ find .
./config
./config/init.sql
./docker-compose.yml

Zawartość pliku docker-compose.yml:

version: '2.1'
services:
  oracle-db:
    hostname: oracle-db
    container_name: oracle-db
    image: wnameless/oracle-xe-11g-r2
    volumes:
      - ./config:/docker-entrypoint-initdb.d
    ports:
      - "1521:1521"
      - "15080:8080"

Tworzymy i uruchamiamy kontenery.

pawel@pawel:~/Desktop/Blog/oracle-db$ docker-compose up -d
Creating network "oracle-db_default" with the default driver
Creating oracle-db ... done

Następnie sprawdzamy logi z kontenera “oracle-db”. Widzimy w logach dwa wpisy: “System altered.”, które odpowidają własnie naszym dwóm poleceniom, które mamy w pliku init.sql w katalogu “config“.

pawel@pawel:~/Desktop/Blog/oracle-db$ docker logs -f oracle-db
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/init.sql

SQL*Plus: Release 11.2.0.2.0 Production on Sat Nov 30 14:20:01 2019

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


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production


System altered.


System altered.

SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

Leave a Reply

avatar
  Subscribe  
Powiadom o
Close Menu