Instalacja rozszerzenia ORACLE dla PHP

Generalnie całość instalacji przechodzi bez przeszkód, posługując się poniższą dokumentacją

https://help.ubuntu.com/community/Oracle%20Instant%20Client

z tą różnicą że w kilku miejscach nie zgadza się link do biblioteki jeśli serwer ma architekturę i386/i686 czyli 32bit (bo wówczas nazwa katalogu nie jest client64 tylko client.

Pobieramy 3 paczki (basic-client, sdk oraz sqlplus)

Na podstawie powyższej instrukcji wykonujemy następujące kroki. Instalacja pakietu Alien dla przekompilowania pakietów dla Debian Linux.

apt-get install alien

Następnie kompilujemy pakiety

alien -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
alien -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm

oraz instalujemy

apt-get install libaio1

Pamiętać konieczne o dodaniu ścieżek do /etc/profile. W tym celu należy edytorem np. [vim wiki:AdminGuide/Vim] otworzyć plik /etc/profile oraz do /etc/apache2/envvars i wpisać tam:

ORACLE_HOME=/usr/lib/oracle/12.2/client
export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME/bin

Klient już powinien działać, można przetestować:

sqlplus user/passwd@//192.168.1.4:1521/sid

Następnie możemy testować połączenie przez TNS, o ile utworzymy definicję połaczenia TNS:

mkdir -p /usr/lib/oracle/12.2/client/network/admin
vim /usr/lib/oracle/12.2/client/network/admin/tnsnames.ora

Do pliku tnsnames.ora należy wpisać dane: CERES zastepujemy nazwą:http://www.orafaq.com/wiki/Tnsnames.ora

CERES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SEARS)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CERES)
)
)

Następnie instalacja peclem rozszerzenia php (nie najnowsze bo jest zlinkowane z PHP7):

pecl install oci8-2.0.12
w trakcie należy podać ścieżkę do ORACLE_HOME (tą samą co wyżej w zmiennej ORACLE_HOME)

Następnie dodajemy plik z treścią: extension=oci8.so
vim /etc/php5/conf.d/20-oci.ini

W niektórych przypadkach może się okazać za samo utworzenie pliku z extension=oci8.so rozszerzenie nie będzie wykorzystywane przez PHP. W takim przypadku należy dodać rozszerzenie w następującej lokalizacji

/etc/php5/cli/conf.d/20-oci.ini
/etc/php5/apache2/conf.d/20-oci.ini

Restart apache. W tym momencie powinny działać już przykładowe skrypty php do połączenia z ORACLE. oci_connect.

Po udanym teście można rozpocząć konfigurację źródła ORACLE w eDokumenty.

Prawdopodobnie będziemy chcieli wykorzystać skrypty w zadaniach wsadowych wykonywanych z crontab. W tym celu należy również zadeklarować zmienne w /etc/crontab np:

vim /etc/crontab

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/oracle/12.2/client/bin
ORACLE_HOME=/usr/lib/oracle/12.2/client

TROUBLESHOOTING

Patrz wyżej - dokładnie przeczytaj manual z podanego linka i powyższe komentarze.

1. Połączenie działa z przeglądarki ale nie działają wsadowe akcje:

Pierwsze sprawdzamy log /var/log/php_error.log widać błędy: [05-Jul-2017 21:30:02 Europe/Warsaw] [2]: oci_connect(): ORA-12154: TNS:could not resolve the connect identifier specified in /home/edokumenty/public_html/framework/lib/db/OracleManager.inc:110

Uzupełnij w /etc/crontab prawidłowe zmienne środowiskowe ORACLE_HOME i PATH

Poprawność uruchomienia modułu możemy także sprawdzić za pomocą PHPinfo

Alternatywnie może korzystać także z poniższej dokumentacji: https://gist.github.com/hewerthomn/81eea2935051eb2500941a9309bca703