Mon objectif est de me connecter à une base de données Oracle sur une machine invitée VMWare (OpenSuse) d'Ubuntu.
Pour l'instant, je n'ai installé que le pilote oracledb , et j'essayais d'exécuter exemple de programme de connexion donné.
Les étapes que je suis viennent de la page github INSTALL . Ce que j'ai fait jusqu'à présent sont les suivants:
1) Étant donné que node.js est déjà installé, j'ai ignoré étape 3.1 .
2) J'ai téléchargé et extrait avec succès le basique et sdk comme mentionné dans étape 3.2 .
3) Comme je n'ai trouvé aucun paquet nommé libaio
mais j'ai trouvé libaio1
. J'ai donc installé libaio1
.
4) J'ai fait la variable d'environnement LD_LIBRARY_PATH
et son contenu sur mon PC est /opt/Oracle/instantclient
.
5) Comme mentionné dans étape 3. ; même si ce n'était pas obligatoire dans mon cas; J'ai fait deux variables d'environnement: OCI_LIB_DIR
avec contenu /opt/Oracle/instantclient
et OCI_INC_DIR
avec contenu /opt/Oracle/instantclient/sdk/include
.
6) Installé node-oracledb
.
J'essaie d'exécuter l'exemple de programme de connexion. Le code que j'utilise est ici https://github.com/ishanatmuz/Oracle-test . Quand je lance node connect.js
Je reçois cette erreur.
/home/ishan/node.js/Oracle-test/node_modules/oracledb/lib/oracledb.js:28
throw err;
^
Error: libclntsh.so.12.1: cannot open shared object file: No such file or directory
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/ishan/node.js/Oracle-test/node_modules/oracledb/lib/oracledb.js:23:15)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (modullibclntsh.so.12.1e.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
Comme je n'ai pas encore démarré la machine invitée VMware; J'espérais obtenir une erreur concernant aucune telle instance de base de données trouvée. Et puis seulement après cela, exécutez la machine VMWare et connectez-vous à la base de données à l'intérieur. Mais à la place, j'obtiens l'erreur de cannot open shared object file
pour libclntsh.so.12.1
.
Mon premier soupçon serait que LD_LIBRARY_PATH n'est pas réellement défini ou exporté correctement. Vérifiez qu'il est défini et que le répertoire est lisible par le shell réel qui tente de démarrer le nœud.
export LD_LIBRARY_PATH=/opt/Oracle/instantclient_12_2
Vous devez le faire dans n'importe quel shell qui démarre Node.js.
Je vérifierais également quelles autres bibliothèques Oracle sont installées sur la machine et m'assurer que vous n'avez pas de conflits.
Utiliser ldconfig pour définir le chemin globalement sera presque certainement plus facile que de définir LD_LIBRARY_PATH. Vous pouvez faire quelque chose comme:
Sudo sh -c "echo /opt/Oracle/instantclient_12_2 > /etc/ld.so.conf.d/Oracle-instantclient.conf"
Sudo ldconfig
Voir les instructions Installation instantanée du client pour plus de détails.
Si vous avez des fichiers de configuration Net facultatifs comme sqlnet.ora
ou tnsnames.ora
, ils peuvent être placés dans un répertoire /opt/Oracle/instantclient_12_2/network/admin
qui est un emplacement par défaut pour les fichiers de configuration. Voir Configuration Oracle Net facultative .
Mise à jour: si vous installez les packages Instant Client 19.3 RPM, l'étape ldconfig
est automatiquement effectuée. (Vous avez toujours besoin/pourriez/devriez le faire pour une installation de fichier Zip 19.3)
l'exportation ne fonctionne que pour un seul processus. Il semble, il ne se présente pas à votre fenêtre de terminal (c'est un processus distinct). Donc, vous devez exécuter à nouveau la suite avant de commencer node connect.js
(dans la même fenêtre de terminal où vous allez démarrer le nœud):
export LD_LIBRARY_PATH=/opt/Oracle/instantclient:$LD_LIBRARY_PATH