[resolu] Connexion a une BDD Oracle sur serveur distant

Bonjour à tous,

J’ai besoin de me connecter a une instance oracle sur un serveur distant.

J’ai installé oracle-client venant directement de chez Oracle, version basique x86_64 php5-oci8 directement depuis les dépots. Je suppose que cela marche… parcequ’en fait j’ai parcouru une tonne de tutos et de forums… qui demandent une recompilation depuis les sources, mais ont tous l’air dépassés. Le site d’oracle ne spécifie rien à ce sujet.

Du coup j’essaie de lire ma base Oracle : rien, je n’ai qu’un timeout en réponse :

Warning: oci_connect(): ORA-12170: TNS:Connect timeout occurred in XXX

Le serveur oracle fonctionne bien (il est utilisé par une autre appli)
Comment savoir s’il s’agit d’un problème réseau ou d’un souci d’installation ou de paramétrage ?

D’avance merci
[edit]
J’ai installé la version oracle instantclient 12.1
Pour me connecter j’utilise simplement un script php :

<?php
//     /////// _a_decommenter

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$conn = oci_connect('USER', 'PASS', 'DATABASE');

/* if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
} */

$stid = oci_parse($conn, '____marequete____');
oci_execute($stid);

Comment essayes tu de te connecter à Oracle ? C’est PHP qui te sort ça ?
Sinon essaye déjà avec un autre client BDD a te connecter a ta base pour voir si c’est la base ou autre chose.

Oui, c’est avec un script PHP. Je l’ai rajouté pour info.
Avec quel autre client veux tu que je teste la connexion ?

Un client lourd type TOAD ou autre.

Je ne suis pas sûr de comprendre ce que tu me demandes… la BDD à laquelle je souhaite acceder est fonctionelle. Une appli l’utilisant est actuellement parfaitement accessible. Je n’ai pas TOAD, mais si je comprend bien, il s’installe sous windows. Je ne peux donc pas m’en servir sur mon serveur. Et de plus, depuis mon poste windows, le serveur de BDD n’est pas accessible, donc TOAD ne me servira a rien.

Les admins réseau m’ont assuré que le serveur Oracle était accessible depuis mon serveur LAMP, mais je ne sais pas comment vérifier cela. Un ping ?

[edit)
Je viens de tester https://superuser.com/questions/621870/test-if-a-port-on-a-remote-system-is-reachable-without-telnet
et je pense que le serveur n’est pas accessible. Je lance

et je n’ai rien en retour

Bon enfin quelques infos en plus.
Tu disais que tu avais une autre appli mais tu ne me spécifiait pas si elle était sur le réseau ou non.
Ton serveur est sur un réseau différent de ton poste client donc il faut que tous tes tests soient fait à partir de ton serveur LAMP.
Je te disais TOAD comme EXEMPLE, sachant que c’est l’un des outils préféré de ceux qui utilise Oracle. Tu as aussi SQLDevelopper dispo gratuitement et multi plateforme, mais passons.
Ta commande n’est pas bête mais pas sûr qu’elle soit pertinente avec Oracle. Ta commande se connecte a un port particulier et affiche ce qui lui ai envoyé, mais rien d’autre. Si Oracle ne dit rien tant que tu n’as pas engagé l’échange il est normal que tu n’ai rien d’affiché. Si tu as installé le client Oracle tu devrais avoir SQL+ qui est le client en ligne de commande officiel d’Oracle. Si lui n’arrive pas a se connecter c’est que ton soucis viens de ton serveur. Regarde le pare feu du serveur pour vérifier que les ports sont bien ouvert. Sinon c’est la configuration de ton application qui est en cause.

Je n’ai pas utilisé SQL+ qui est effectivement inclus dans le package oracle instantclient. Mais sinon tu as bien résumé la situation :
Mon serveur LAMP ne peut exécuter un simple test de connexion a la BDD Oracle (pour l’instant mon appli ne fait rien avec cette BDD).
Je ne sais pas si le problème est lié au réseau ou a mon installation de oracle instantclient.

Pour ce qui concerne l’accès réseau, je ne sais pas si la commande que j’ai indiqué fonctionne… sur un autre serveur (sur lequel j’ai accès, j’en suis sûr), je peux pinguer, mais un ‘nc’ me renvoie juste un connection timeout sur le port 80.
Sur l’adresse du serveur de BDD Oracle, je n’ai ni réponse au ping ni a nc.

Je ne peux t’encourager qu’a te renseigner sur SQL+, ou te rapprocher d’un DBA si tu as la chance d’en avoir un. Voir aussi avec un admin sys pour vérifier le parefeu du serveur.

Pour se connecter à Oracle tu as deux solutions :

  • Connexion JDBC (c’est à dire par Java), c’est la solution classique des serveurs d’application Java (JBoss, Tomcat, …)
  • Connexion par le client Oracle (Très difficile à installer correctement sur une Debian), c’est avec cette méthode que l’on se connecte par PHP habituellement.

Merci,
Oui, je n’ai pas le choix : je dois me connecter par le client Oracle. J’étais sur le point de tout reprendre à zéro, mais avec sqlplus, je me suis aperçu d’une faute de syntaxe dans mon tnsnames.ora !

Pour info, je mets la syntaxe d’un bon tnsnames.ora :

[code]DBNAME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xxx.xxx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)

[/code]
dbname est a adapter, en fonction du nom de la base distante

Du coup je progresse :

Et même chose avec le script php :

Donc, mon installation du client est OK \o/
Me reste juste à résoudre le problème avec les admins de la base oracle incapables de m’envoyer le bon login/mdp :wink:

Pour moi, le sujet est résolu

Attention si tu utlises une version > 10g les users / mot de passe sont “case sensitive” à moins d’indiquer sécifiquement le contraire dans le SPFILE, mais avec la nouvelle 12.2 tu ne peux plus faire autrement.

Merci,
Effectivement, j’avais un login en majuscules et un mdp minuscules+chiffres, mais le couple login/mdp avait changé :slight_smile:
Maintenant tout fonctionne.