Oracle 11g + Nginx + php-fpm

2

Estou tentando configurar o php / nginx para se conectar a um banco de dados oracle.

Tudo está em um único servidor (teste)

Eu instalei o nginx e configurei tudo bem. Eu configurei php e php-fpm e isso funciona bem (testei algumas coisas php)

Eu instalei o módulo oci8 usando pecl install oci8 e forneci o caminho para o meu oracle_home, ele compilou muito bem.

mas não consigo me conectar a um banco de dados.

Eu tentei vários scripts.

Eu sou muito novo no oracle.

o log de erros da www para php-fpm diz para verificar meu caminho da biblioteca oracle_home e ld. Eu defino ambos no meu script php como um teste e ainda falha.

alguma ideia?

<?php
PutEnv("ORACLE_SID=orcl");
PutEnv("ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/");
PutEnv("TNS_ADMIN=/opt/app/oracle/product/11.2.0/dbhome_1/network/admin");
PutEnv("LD_LIBRARY_PATH=/opt/app/oracle/product/11.2.0/dbhome_1/lib");
   $c = oci_connect("testuser", "testpassword", "127.0.0.1");
   if (!$c) {
     echo "Unable to connect: " . var_dump( oci_error() );
     die();
   }

ETCETC

do log de erros:

[10-Dec-2010 17:25:58] PHP Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in /usr/share/nginx/html/orcl2.php on line 6

EDIT: Eu adicionei o usuário nginx ao grupo oinstall para fins de teste e agora recebo mensagens de erro melhores, então estou ficando ainda mais.

o erro agora é:

array(4) { ["code"]=> int(12504) ["message"]=> string(70) "ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA" ["offset"]=> int(0) ["sqltext"]=> string(0) "" } Unable to connect:

EDIT2: Depois de fazer o seguinte, agora posso usar o comando sqlplus para conectar-me ao meu usuário de teste, mas o php ainda falha.

SQL> alter system set LOCAL_LISTENER='10.99.101.2' scope=both;
SQL> alter system register;

SQL> alter system set SERVICE_NAMES='10.99.101.2' scope=both;

EDIT3: se eu usar a linha de comando php para executar o meu script de teste, ele funciona bem, então algo está errado com variáveis Nginx / env para o nginx.

EDIT4: Listener.ora:

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = orcl)
     (ORACLE_HOME = /opt/app/oracle/product/11.2.0/dbhome_1/)
     (PROGRAM = extproc)
   )
 (SID_DESC=
       (GLOBAL_DBNAME=orcl)
       (ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/)
       (SID_NAME=orcl)
  )
 )
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /opt/app/oracle

tnsnames.ora:
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /opt/app/oracle
    
por Luma 11.12.2010 / 02:41

1 resposta

1

Sua string de conexão está incorreta. Você tem certeza de que " orcl " é o SID do seu banco de dados e não o nome do serviço ou o nome em uma entrada no seu tnsnames.ora (deve estar em $ TNS_ADMIN /)?

Quais são os resultados dos seguintes comandos?

$ORACLE_HOME/bin/tnsping orcl
$ORACLE_HOME/bin/lsnrctl status

Você pode se conectar ao seu banco de dados usando o seguinte comando?

$ORACLE_HOME/bin/sqlplus "testuser"/"testpassword"@orcl
    
por 11.12.2010 / 12:34