Detaillierte Einführung in die Installation und Verwendung des Python cx_Oracle-Moduls

高洛峰
Freigeben: 2017-02-13 13:51:00
Original
1690 Leute haben es durchsucht

Installation des Python cx_Oracle-Moduls

Kürzlich muss ich ein Datenmigrationsskript schreiben, um die Daten in einem einzelnen Oracle in den MySQL Sharding-Cluster zu migrieren. Die Installation von cx_Oracle unter Linux ist etwas mühsam es heraus und machen Sie eine Zusammenfassung.

Für den Oracle-Client müssen Sie nicht nur das entsprechende Python-Modul installieren (hier habe ich das offizielle Python-Modul von Oracle verwendet – cx_Oracle), sondern auch den Oracle-Client installieren. und Sie müssen es auch tnsnames.ora konfigurieren (natürlich kann es auch einfach über host:port/schema aufgerufen werden).

Installation:

1. Ermitteln Sie zunächst die Version. Da unsere Oracle-Daten etwas alt sind, habe ich mich für eine ältere Version entschieden – Oracle Instant Client 10.2.0.4.

2. Laden Sie Instantclient-Basic herunter. Download-Adresse: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html. . Das ist ein ernstzunehmender Schwachsinn gegen Oracle. Sie müssen sich registrieren, bevor Sie es herunterladen können. Der Schlüssel ist, dass das Passwort bei der Registrierung tatsächlich Zahlen und Buchstaben erfordert und dass diese in Groß- und Kleinbuchstaben geschrieben sein müssen mindestens 8 Zeichen. Es zwang mich, mir ein Passwort zu besorgen, das sicherer ist als mein Bankpasswort (naja, jetzt habe ich vergessen, was ich eingegeben habe ...) und einfach Basic herunterzuladen.

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip
Nach dem Login kopieren

3. Installationskonfiguration

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cd instantclient_10_2
$cp * /usr/lib  #直接放到动态库搜索路径中,不需要额外的环境配置

或
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cp -rf instantclient_10_2 /opt/
$vi /etc/profile
   export ORACLE_HOME=/opt/instantclient_10_2
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

$source /etc/profile
Nach dem Login kopieren

4. TNS-Namen konfigurieren .ora (tns muss nicht konfiguriert werden)

Beachten Sie, dass tnsnames.ora nicht wirklich existiert, Sie müssen es selbst erstellen (das ist auch ekelhaft, ich dachte zuerst, ich müsste etwas installieren). .), Ich habe diese Methode nicht verwendet, Interessenten können sie googeln.

5. Laden Sie das cx_Oracle-Python-Modul herunter und installieren Sie es

$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm 
$ls /usr/lib/python2.6/site-packages/cx_Oracle.so #有这个文件表示安装成功,根据python的位置,也可能在其他地方,自己找一下吧
Nach dem Login kopieren

6. Überprüfung und Problemlösung

$python
>>import cx_Oracle
Nach dem Login kopieren

Wenn ein Fehler gemeldet wird: import cx_Oracle gab ImportError: libclntsh.so.10.1: Shared Object File kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

bedeutet, dass die Wenn die dynamische Bibliothek des Instant-Clients nicht gefunden wurde, prüfen Sie, ob die Umgebungsvariablen konfiguriert sind, ob sie wirksam sind und ob die Version korrekt ist.

Wenn ein Fehler gemeldet wird: ImportError: ./cx_Oracle.so: undefiniertes Symbol: PyUnicodeUCS4_Decode

Google的信息:There is nothing wrong with Debian. Python supports two incompatible 
 modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,
 Redhat uses UCS4. You need to recompile the extension for UCS-2 mode
 (i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode
Nach dem Login kopieren

Also Python neu kompilieren

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install
Nach dem Login kopieren

Erneut überprüft und schließlich war der Import normal.

Verwendung:

1. Basisverbindung – unter Verwendung des Oracle TNS-Alias ​​

connection =cx_Oracle.connect("tp/tp@ocn_test")
#查看tns alias命令
cmd>tnsping ocn_test
TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48
Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.
Used parameter files:
/opt/……/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))
OK (10msec)
Nach dem Login kopieren

2. Benutzer Geben Sie das Passwort ein, um eine Verbindung herzustellen

pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")
Nach dem Login kopieren

3. Der Benutzer gibt die Verbindungskontoinformationen direkt in den Python-Befehl ein, beispielsweise im Format python script.py tp/tp@ocn_test

connection =cx_Oracle.connect(sys.argv[1])
Nach dem Login kopieren

4. Verwenden Sie die Easy Connect-Syntax, um über Drive eine Verbindung zur Datenbank herzustellen

connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')
#or
connection =cx_Oracle.connect('tp/tp@10.20.36.19:1521/ocntest')
Nach dem Login kopieren

5. Verwenden Sie zuerst DSN, um TNSNAME zu bilden

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)
Nach dem Login kopieren

6. Melden Sie sich als SYSDBA an

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)
#or as SYSOPER
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)
Nach dem Login kopieren

Beim Ausführen von Oracle-Vorgängen auf dem Linux-Server ist ein Fehler aufgetreten:

TNS:listener does not currently know of service requested in connect descriptor
Nach dem Login kopieren

Lösung :

Eine Problemanalyse finden Sie unter http://ora-12514.ora-code.com/. Nach vielen Problemen wurde das Problem schließlich mit der fünften Verbindungsmethode sofort gelöst.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Ausführlichere Informationen zur Installation und Verwendung des Python cx_Oracle-Moduls finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage