Question

J'ai écrit un script PHP pour extraire une requête d'une base de données Oracle et écrire les résultats dans un fichier csv.J'utilise Zend Framework pour me connecter à la base de données.Je sais que les informations d'identification sont correctes car je peux me connecter via un terminal à l'aide de SQLPlus.

Voici l'erreur:

Zend_Db_Adapter_Exception: SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor (/home/http/php-5.3.3/ext/pdo_oci/oci_driver.c:579) in /opt/http/Zend/ZendFramework-1.10.3/library/Zend/Db/Adapter/Pdo/Abstract.php on line 144

J'ai essayé de faire des recherches, mais pas de solutions solides.J'ai lu qu'il pouvait être associé à tnsnames.ora mais je n'ai pas pu trouver ce fichier sur le serveur.J'ai déjà utilisé Zend dans d'autres projets sans aucun problème.

Pour info: je n'ai pas de root, donc je ne peux pas faire beaucoup de magie sur le serveur.

Quelles sont vos suggestions?

Était-ce utile?

La solution

C'est un message d'erreur courant d'Oracle, il n'y a rien à voir avec zend ou même php.Je reçois généralement ce message dans SQLDeveloper ou Toad.Vérifiez les fichiers tnsnames.ora, listener.ora, sqlnet.ora, les fichiers journaux, etc. et essayez de vous connecter à une application cliente.(si cela ne fonctionne pas, vous pouvez le signaler aux administrateurs)

Autres conseils

Vous devez créer un fichier appelé tnsnames.ora dans votre dossier $ORACLE_HOME/network/admin et y mettre votre SID.

ou si vous ne pouvez pas créer votre tnsnames.ora, essayez de définir votre configuration de base de données en utilisant cette syntaxe:

$config = new Zend_Config(
array(
'database' => array(
'adapter' => 'oracle',
'params' => array(
    'dbname'=> '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hostname.domain.tld)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service_name)))',
    'username' => 'dev',
    'password' => 'pwd')
    )
)
);
$db = Zend_Db::factory($config->database);
Zend_Db_Table::setDefaultAdapter($db);

Bien qu'il soit préférable de créer tnsnames.ora avec votre configuration de base de données.

Pour ceux qui n'utilisent pas Zend Framework, mais qui ont un problème similaire, une solution à ce problème peut être trouvée sur http://docs.php.net/manual/en/ref.pdo-oci.php#64756

$tns = "  
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = yourip)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
       ";
$db_username = "youname";
$db_password = "yourpassword";
try{
    $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);
}catch(PDOException $e){
    echo ($e->getMessage());
}

Si vous utilisez le SID pour vous connecter, modifiez

(SERVICE_NAME = orcl) 

à

(SID = yourSid) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top