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
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
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的位置,也可能在其他地方,自己找一下吧
6. Überprüfung und Problemlösung
$python >>import cx_Oracle
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
Also Python neu kompilieren
$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4 $make;make install
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)
2. Benutzer Geben Sie das Passwort ein, um eine Verbindung herzustellen
pwd =getpass.getpass() connection =cx_Oracle.connect("tp",pwd,"ocn_test")
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])
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')
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)
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)
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
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!