[Resolved]: Uncaught Error: Call to undefined function oci_connect()

Php ile oracle veritabanlarına bağlanmaya balıştığınızda aşağıdaki gibi bir hata alıyorsanız çözümü bu yazıda bulabilirsiniz.

<?php
$dbconn = pg_connect("host=localhost port=5432 dbname=testdb user=testusr password=12345");
Fatal error: Call to undefined function oci_connect() in /var/www/html/index.php on line 3

İlk olarak oracle download sayfasından ihtiyacınız olan client sürümünü indirebilirsiniz. Basic ve sdk paketini mutlaka indirmelisiniz. Diğer paketleri ihtiyacınız doğrultusunda indirebilirsiniz. Ben aşağıdaki tüm paketleri indirdim.

instantclient-basic-linux.x64-19.3.0.0.0dbru.zip
instantclient-sqlplus-linux.x64-19.3.0.0.0dbru.zip
instantclient-tools-linux.x64-19.3.0.0.0dbru.zip
instantclient-sdk-linux.x64-19.3.0.0.0dbru.zip
instantclient-jdbc-linux.x64-19.3.0.0.0dbru.zip
instantclient-odbc-linux.x64-19.3.0.0.0dbru.zip

İndirdiğiniz tüm paketleri /opt/oracle dizini altına çıkartın.

# mkdir /opt/oracle
# unzip instantclient-basic-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# unzip instantclient-sqlplus-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# unzip instantclient-tools-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# unzip instantclient-sdk-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# unzip instantclient-jdbc-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# unzip instantclient-odbc-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle/
# ls /opt/oracle
instantclient_19_3
# mv instantclient_19_3 instantclient

Dizin yapısı yukarıdaki gibi olacaktır.

Eğer httpd kullanıyorsanız aşağıdaki dosyaların en altına ilgili komutları kopyalayın.

# cat /etc/sysconfig/httpd
LD_LIBRARY_PATH=/opt/oracle/instantclient
PATH=/opt/oracle/instantclient:$PATH
ORACLE_HOME=/opt/oracle/instantclient 
# cat /etc/bashrc
export LD_LIBRARY_PATH=/opt/oracle/instantclient
export PATH=/bin:/opt/oracle/instantclient:$PATH
export ORACLE_HOME=/opt/oracle/instantclien

Bu ayarlamaları yaptıktan sonra oci8 modülü kurulması gerekmektedir. Bu modülü pecl veya remi repository’i tanıtarak yum install şeklinde kurabilirsiniz. pecl ile aşağıdaki şekilde kurabilirsiniz.

# pecl download oci8
# tar -zxf oci8-1.4.10.tgz
# cd oci8-1.4.10

phpize ile paketi kurulum için hazırlamak gerekiyor. phpize kurulu değilse yum install phpize şeklinde kurabilirsiniz.

# phpize
# ./configure -with-oci8=shared,instantclient,/opt/oracle/instantclient
veya
# ./configure -with-oci8=shared,$ORACLE_HOME

Son aşama olarak paket kurulumunu aşağıdaki gibi gerçekleştirebilirsiniz.

# make install

PostgreSQL Hot Backup Script

Bu yazıda postgreSQL’in bash scriptleri ile backup alınmasını paylaşacağım. Bu backup yöntemi sayesinde veritabanınızı kapatmaya gerek kalmadan backup alabiliriniz. Bu işlemi yaparken veritabanınızın archivelog modda olduğu varsayılmaktadır.

Postgresql’in kurulu olduğu dizin yapısı şu şekildedir.

/
postgresql
--10
----archives
----data
------base
------pg_wal
------logs
------....
------....
------....
--backup

/postgresql/data dizini postgresql’in base dizinidir. Burdaki dosyaları tar’layıp /postgresql/backup dizinine atacağız. Bunu yapan bash scripti aşağıdadır. Bu scriptin postgres kullanıcısı ile çalıştırılması gerekmektedir.

datetoday=$(date '+%Y-%m-%d')
psql -c "SELECT pg_start_backup('hotbackup start');"
cd /postgres/10/
tar -cf /postgres/backup/PGDBBACKUP_$datetoday.tar data/
psql -c "select pg_stop_backup();"
tar -cf /postgres/backup/PGDBBACKUPARC_$datetoday.tar archives/
find /postgres/backup/ -name '*.tar' -mtime +10 -exec rm {} \;
cd ./archives/
for i in $(find . -name "*.backup" -mtime +3); do
   echo "$i"
   walname=$(echo $i | cut -c3-42)
   /usr/pgsql-10/bin/pg_archivecleanup -d /postgres/10/archives "$walname"
done