[PHP] Oracle, faire une requète sur une BBD distante?

Oracle, faire une requète sur une BBD distante? [PHP] - Programmation

Marsh Posté le 13-06-2001 à 10:34:54    

Comment fait-on pour se connecter à une BDD qui se situe sur un autre PC?
D'habitude je fait ça :

$conn = Ora_Logon("scott","tiger" );
 
//création d'un curseur
$curs = ora_open($conn);
 
//création d'une requête
$queryauto=sprintf("select ...." );
 
//on relie la requête au curseur
ora_parse($curs,$queryauto);
 
//on lance l'exécution du curseur
ora_exec($curs);

Mais je ne spécifiait pas le chemin. Maintenant,j'ai installé PHP sur un autre serveur et je dois accéder à la BDD qui est restée sur l'ancien poste. Je sais pas où spécifier le chemin? Ni comment d'ailleurs?
 
Merci de votre éventuelle aide!

Reply

Marsh Posté le 13-06-2001 à 10:34:54   

Reply

Marsh Posté le 13-06-2001 à 11:44:22    

apparement c'est un truc du style :
 
$conn=ora_logon("scott@TNSNAME","tiger" );
 
Mais c'est quoi TNSNAME ???

Reply

Marsh Posté le 13-06-2001 à 11:46:36    

apparement c'est un truc du style :
 
$conn=ora_logon("scott@TNSNAME","tiger" );
 
Mais c'est quoi TNSNAME ???

Reply

Marsh Posté le 13-06-2001 à 11:59:26    

shinji a écrit a écrit :

apparement c'est un truc du style :
 
$conn=ora_logon("scott@TNSNAME","tiger" );
 
Mais c'est quoi TNSNAME ???




 
TNSNAMES, c'est l'identifiant de la base à laquelle tu veut te connecter.
Tu doit déclarer tes bases dans un fichier du client Oracle qui s'appeller tnsnames.ora qui contient le nom des bases que tu utilise, l'adresse du serveur, le port ...
Le fichier se trouve dans le répertoire network/admin du client oracle en principe.
(ça, c'est pour oracle 7, c'est un peu différent avec oracle8)
Voila

Reply

Marsh Posté le 13-06-2001 à 12:11:49    

ok, justement c'est Oracle8 que j'ai, t'aurais pas un exemple si c'est pas trop demander car j'ai bien trouvé TNSNAMES.ORA mais je sais pas comment la déclarer ni par quoi remplacer TNSNAME dans ora_logon("scott@TNSNAME","tiger" );
Merci

Reply

Marsh Posté le 13-06-2001 à 12:18:28    

shinji a écrit a écrit :

ok, justement c'est Oracle8 que j'ai, t'aurais pas un exemple si c'est pas trop demander car j'ai bien trouvé TNSNAMES.ORA mais je sais pas comment la déclarer ni par quoi remplacer TNSNAME dans ora_logon("scott@TNSNAME","tiger" );
Merci




 
Voila a quoi ressemble une entrée de tnsnames.ora :
WEB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.94.0.66)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = WEB)
    )
  )    
 
Il faut que tu remplace WEB (le nom de ma base) par le vrai nom de ta base sur le serveur et aussi l'ip et le port.
 
Après pour te connecter tu fais $conn=ora_logon("scott@LENOMDETABASEDANSLETNSNAMES.ORA","tiger" );  
 
En principe avec oracle8, on utilise pas le tnsnames.ora mais je sais faire que comme ça.

Reply

Marsh Posté le 13-06-2001 à 12:20:17    

Si tu as Oracle 8, tu as un utilitaire qui permet d'écrire dans le fichier tnsname.ora : il s'agit de Oracle Net8 Easy Config, qui se trouve dans Démarrer/Programmes/Oracle forWindows NT/

Reply

Marsh Posté le 13-06-2001 à 14:19:10    

Merci, j'essaye de suite!

Reply

Marsh Posté le 13-06-2001 à 14:42:18    

J'ai réussi je pense pour tnsname.ora :  
YANN.WORLD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 126.234.1.4)(PORT = 1521))
    (CONNECT_DATA = (SID = ORCL))
)
(sur le serveur de la BDD)
 
Mon script PHP :
$conn = Ora_Logon("scott@YANN.WORLD","tiger" );
 
ça marche pas?
J'ai essayé YANN (ce que j'ai tapé avec l'assistant)
(sur le serveur Apache\PHP)
 
Mais il y a un truc que ke ne comprends pas :  
Comment le script php sur le serveur Apache sait qu'il faut aller voir la BDD sur le serveur Oracle à l'adresse 126.234.1.4?  
Il faut installer un truc Orcale sur le serveur Apache?
C'est sur le serveur Apache que je devrais avoir TNSNAME.ORA non?

Reply

Marsh Posté le 13-06-2001 à 15:01:42    

shinji a écrit a écrit :

 
Mais il y a un truc que ke ne comprends pas :  
Comment le script php sur le serveur Apache sait qu'il faut aller voir la BDD sur le serveur Oracle à l'adresse 126.234.1.4?  
Il faut installer un truc Orcale sur le serveur Apache?
C'est sur le serveur Apache que je devrais avoir TNSNAME.ORA non?




 
Ben oui, il faut installer le client Oracle sur ton serveur apache et ensuite renseigner le tnsnames.ora

Reply

Marsh Posté le 13-06-2001 à 15:01:42   

Reply

Marsh Posté le 13-06-2001 à 15:07:27    

ok, je comprends mieux!

Reply

Marsh Posté le 14-06-2001 à 09:40:08    

J'ai essayé, en fait il y a un serveur(126.234.1.3) web apache+php (et qui fait aussi serveur d'une BDD Oracle7 en plus) et un autre serveur(126.234.1.4) de BDD Oracle que je cherche à contacter.
J'ai donc configurer le TNSNAME.ORA du serveur 1 comme suit :
ORCL=(DESCRIPTION=
          (ADRESS=(PROTOCOL=TCP)(HOST=126.234.1.4)(PORT=1521)
          (CONNECT_DATA=(SID=ORCL))
)
Voilà mon script PHP avec la dll Oracle8:
<?
$db="ORCL";
$conn=ocilogon("scott","tiger",$db);
$curs=ociparse ($conn, "select * from POLYGONEBRE" );
ociexecute($curs);
while(ocifetch($curs)){
      $i = ociresult($curs,1);
      echo $i."<br>";
}
OCILogoff($conn);
?>
 
J'obtiens un message d'erreur :
Warning: _oci_open_server: Error while trying to retrieve text for error ORA-12154 in
c:\tomcat\webapps\onel\php\oracle8i.php on line 3
 
J'ai le même message avec ce srcipt:
<?
$conn = Ora_Logon("scott@ORCL","tiger" );
$curs = ora_open($conn);
$queryauto=sprintf("select * from POLYGONEBRE" );
ora_parse($curs,$queryauto);
ora_exec($curs);
while(ora_fetch($curs)){
 $note=ora_getcolumn($curs,1);
 echo $note."<br>";
}
?>
 
Pourtant du serveur 126.234.1.3 j'arrive à interroger la BDD du serveur 126.234.1.4 par des requêtes avec "SQL Worksheet".
Je ne comprends pas bien l'erreur, d'après vous, c'est dû à PHP ou à la configuration d'Oracle?

Reply

Marsh Posté le 14-06-2001 à 09:57:42    

Tu as un database link qui existe entre tes deux bases Oracles ?

Reply

Marsh Posté le 14-06-2001 à 10:02:27    

Non il n'y a aucun lien entre les deux, la première est en Oracle7 la deuxième en Oracle8i.

Reply

Marsh Posté le 14-06-2001 à 10:23:38    

On doit pouvoir créer un database link de la base 8i vers la 7 sans problème, et le contraire doit aussi être possible, non ?

Reply

Marsh Posté le 14-06-2001 à 10:27:38    

Je comprends pas à quoi cela servirait?
Je cherche juste à accéder à la BDD Oracle8 du serveur 126.234.1.4 depuis mon script PHP qui est sur le serveur 126.234.1.3.
Je m'en fou de la BDD Oracle7, c'était juste pour dire qu'il y avait déjà un tnsname.ora et que j'ai pas eu besoin d'installer de client Oracle8 sur le serveur 126.234.1.3.
Peut ê que je ne comprends pas bien ce que tu veux dire?

Reply

Marsh Posté le 14-06-2001 à 10:34:50    

En fait tu cherches à accéder à ta base 8i en utilisant la base Oracle 7 qui se trouve déjà sur ton serveur PHP, si je comprends bien ?
Or pour voir la base 8i, le plus simple est de déclarer un database link (à voir dans le Schéma Manager d'Oracle) qui pointe vers cette dernière, sur la base Oracle 7.
En fait dans le database link, tu déclares un utilisateur et un mot de passe que la base oracle 7 utilisera pour se connecter à la base 8i.

Reply

Marsh Posté le 14-06-2001 à 10:58:29    

ouais, ça se résume à ça je pense.  
(pour l'instant  je peux pas créer le lien mais j'essayerai dès que possible, merci)
Donc après avoir déclarer le datalink, dans mon script PHP je fait comme si je me connectait à la BDD Oracle7?
Merci de ton aide, je connais pas grand chose et encore moins à la config d'Oracle!

Reply

Marsh Posté le 14-06-2001 à 11:03:24    

Comme je peux pas encore ajouter le datalink, je vais installer Apache,PHP et un client Oracle8 sur un autre poste pour montrer que ça marche bien PHP ;)

Reply

Marsh Posté le 14-06-2001 à 11:04:38    

Effectivement, c'est le plus simple et le plus efficace en attendant ! ;)

Reply

Marsh Posté le 14-06-2001 à 11:10:36    

je te tiens au courant, merci

Reply

Marsh Posté le 14-06-2001 à 11:46:46    

Le messages 12154, c'est que le client n'arrive pas a résoudre le nom dans le tnsnames.
Ton tnsnames.ora n'est sans doute pas bon regarde aussi le sqlnet.ora.
 
Vérifie aussi que le répertoire bin d'oracle est dans le path

Reply

Marsh Posté le 14-06-2001 à 12:16:17    

Voilà ce que j'ai dans sqlnet.ora:
TRACE_LEVEL_CLIENT = OFF
names.directory_path = (TNSNAMES)
names.default_domain = world
name.default_zone = world
names.default_domain=world
Pour tnsnames.ora, voir mon post un peu plus haut.
Pour :  
Vérifie aussi que le répertoire bin d'oracle est dans le path  
Je vois pas où vérifier.
Merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed