[ROZWIĄZANY] Baza danych Oracle działa wolno w Docker – 1 nieoczywisty powód?

You are currently viewing [ROZWIĄZANY] Baza danych Oracle działa wolno w Docker – 1 nieoczywisty powód?
Photo by Fernando Maté on Unsplash
Share This Post, Help Others, And Earn My Heartfelt Appreciation! :)
4.8
(262)

Problem z tym, że baza danych Oracle działa wolno w Docker nie jest taki oczywisty jakby się mogło wydawać. Ostatnimi czasy, gdy potrzebowałem środowiska do testów, gdzie jednym z elementów była baza Oracle, napotkałem problem, który przysporzył mi wiele nerwów. (Baza danych Oracle Docker)

Problem -> Baza danych Oracle Działa Wolno w Docker

Gdy uruchomiłem bazę danych Oracle 11g Express Edition (XE) w kontenerze 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 się 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. (Baza danych Oracle działa wolno w Docker)

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: Skopiuj poniższy kod do Twojego pliku 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 odpowiadają właśnie naszym dwóm poleceniom, które mamy w pliku init.sql w katalogu „config„. Po uruchomieniu poniższej komendy zobaczysz pełen log pochodzący z wnętrza kontenera. (Baza danych Oracle działa wolno w Docker)

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

I to by było na tyle. Z mojego doświadczenia zastosowanie powyższych wskazówek, pomogło mi rozwiązać moje problemy. Kontener od tego czasu zaczął działać już stabilnie.

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

How useful was this post?

Click on a star to rate it!

Average rating 4.8 / 5. Vote count: 262

No votes so far! Be the first to rate this post.

Subscribe
Powiadom o
guest
0 Comments
Inline Feedbacks
View all comments