DB auf Entfernten Rechner

Alles, was PHP betrifft, kann hier besprochen werden.

DB auf Entfernten Rechner

Postby ollidroll » 18. April 2005 12:55

Hallo zusammen,
ich habe ein lokale MYSQL DB sowie auf einem anderen Rechner eine ORACLE DB.
Ich möchte jetzt mittels PHP Daten aus der Oracle DB vom entfernten Rechner auf dem lokalem Rechner anzeigen lassen. Es geht hier nur um einen Lesezugriff.
Ist dieses möglich, wenn ja wie?
Es soll aber weiterhin (also Parallel) Zugriff auf die MySQl DB möglich sein.

Besten Dank und Gruß
Olli
ollidroll
 
Posts: 45
Joined: 17. February 2003 10:41

Postby jakimo72 » 18. April 2005 13:39

Um nicht vollkommen durcheinander zu kommen
empfielt es sich eine datenbankunabhängige Datenbankzugriffsschicht zu verwenden. Eine einfache, bei PHP standardmäßig dabei, ist PearDB
http://pear.php.net/package/db/
Code: Select all
/* Envirementvariablen für die Datenbankverbindung zu Oracle
    bitte anpassen */
PutEnv("ORACLE_SID=MYDB");
PutEnv("ORACLE_HOME=c:/Programme/oracle/instantclient");
PutEnv("TNS_ADMIN=c:/Programme/oracle/instantclient");

$dsn1 = "oci8://scott:tiger@MYDB" //Username und password
//Optionen sehe pear.php.net
$options1 = array('debug'       => 2,
                         'persistent'  => true );

$dbentfernt = & DB::connect($dsn1, $options1);
if (DB::isError($dbentfernt))
{
    echo 'Keine Verbindung zur Datenbank'
 }
$dbentfernt->setFetchMode(DB_FETCHMODE_ASSOC);
// gerade beim Umstieg von MySQL auf Oracle hilft folgende Option:
$dbentfernt->setOption('portability',DB_PORTABILITY_LOWERCASE);

// Username, Password und Datenbank anpassen
$dsn2 = "mysql://root:@localhost/mydb"
//Optionen sehe pear.php.net
$options2 = array('debug'       => 2,
                         'persistent'  => true );

$dblocal = & DB::connect($dsn2, $options2);
if (DB::isError($dblocal))
{
    echo 'Keine Verbindung zur Datenbank'
 }
$dblocal->setFetchMode(DB_FETCHMODE_ASSOC);


// Zugriff auf entfernte Datenbank
$array1 = $dbentfernt->getAll('select * from table1');

//Zugriff auf lokale Datenbank
$array2 = $dblocal->getAll('select * from table2');



PearDB hat viele Möglichkeiten von Selects, getAll ist nur eine.
Der Zugriff auf die Datenbanken kann aber (bis auf wenige Ausnahmen)
vollkommen Identisch ablaufen.

Für den Zugriff auf Oracle muss die OCI8 Erweiterung geladen sein,
und ein Oracle-Client installiert sein. Der kleinste und einfachste
Client ist der Instantclient (Instantclient 10 kann auch Verbindungen
mit Oracle 8 oder 9 herstellen). In dem Verzeichnis des
Instantclient kannst Du dann auch die Datei TNSNAMES.ORA erzeugen.[url][/url]
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby ollidroll » 18. April 2005 14:02

Danke!
Viele Grüße
Olli
ollidroll
 
Posts: 45
Joined: 17. February 2003 10:41

Postby ollidroll » 19. April 2005 11:17

Hai ,
das klappt irgendwie nicht.

Habe den instant client entpackt und die tnsname.ora in das Verzeichnis gepackt.
Benutze allerdings auch nicht pear sondern gehe wie folgt vor:

putenv("ORACLE_HOME=/opt/instantclient");
putenv("ORACLE_SID=test");
PutEnv("TNS_ADMIN=/opt/instantclient");
OCILogon("benutzer@entfernetRechner","Passwort","test");

Was ist daran falsch oder was habe ich noch vergessen?
Betsen Dank und Gruß
Olli
ollidroll
 
Posts: 45
Joined: 17. February 2003 10:41

Postby jakimo72 » 20. April 2005 11:08

Da in der tnsnames.ora (Mit plural-s) hoffentlich
"test" definiert ist, mit Hostname und Port,
benötigt OCILogon nicht mehr die
Adresse des entfernten Rechners.

Code: Select all
OCILogon("benutzer","Passwort","test");

oder einfach
Code: Select all
OCILogon("benutzer","Passwort");


Im meistens sollte eine solche tnsnames.ora helfen:
(Bitte entfernt und entferntdb anpassen)
Code: Select all
test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = entfernt)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = entferntdb)
    )
  )


[/code]
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby ollidroll » 22. April 2005 07:26

Noch mal Danke jakimo72! :-)
Habe alles os gemacht, bekomme aber noch folgende Fehlermeldung:

"Warning: ocilogon() [function.ocilogon]: _oci_open_server: Error while trying to retrieve text for error ORA-12154 in /localhost/unl/oratest.php on line 20"

Ich habe nachgelesen, das dann was mit den Umgebungsvariablen nicht stimmen kann. Das habe ich im PHP Script ebenfalls überprüft, die Pfade stimmen alle.

Muss ich evtl. den instantclient noch irgendwie kompilieren oder so etwas?
Habe den einfach nur in das Verzeichniss gepackt.
Ist übrigens die 10er Version. Die DB ist die 9.2.0.1.0 . Aber das soll ja abwärtkompatibel sein. Und ich benutze PHP 5.0.2.

Wäre schöne wenn noch jemand ein Tipp hätte.
Danke und Viele Grüße
Olli
ollidroll
 
Posts: 45
Joined: 17. February 2003 10:41

Postby jakimo72 » 22. April 2005 09:39

Entschuldige bitte mein Halbwissen,
unter Windoofs funktioniert es genau so,
auch mit 10er Client und 9er Datenbank...

Ich habe eben mal Linux installiert, und
dort auch das Script ausprobiert,
leider auch ohne Erfolg...
Ich bin leider auch nicht umbedingt ein Linuxperte.


Kann uns jemand helfen?
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests