C语言无法连接Oracle数据库的痛苦经历(c 连接不上oracle)

C语言无法连接Oracle数据库的痛苦经历

作为一名开发者,我们经常会遇到无法连接数据库的情况,但是如果你是用C语言编写数据库应用程序时无法连接Oracle数据库,就会有别样的痛苦。在这篇文章中,我将分享我的痛苦经历以及解决这个问题的方法。

まず、Oracle Instant Client 12.1のインストールを行い、libフォルダにパスを通しました。

接下来,我用C语言尝试连接Oracle数据库时,遇到了以下错误:

“ORA-12514: TNS:リスナーは現在、リクエストされた接続の識別子に対してサービスを提供していません”

这个错我翻译一下,大概就是 “ORA-12514: TNS: Listener does not currently know of service requested in connect descriptor”,也就是说在连接描述符中请求的服务可能还不存在或不可用。

尽管我不确定出现这个错误的原因是什么,但是在我的案例中,我检查了我的tnsnames.ora配置并确认我正在访问正确的数据库服务名称。

接下来,我转向搜索引擎来找到解决方法,发现了一些相关的文章并尝试了几项方法:

– 检查tnsnames.ora的内容是否正确

– 使用sqlplus连接数据库,检查连接是否可以使用

– 确定环境变量ORACLE_HOME是否正确设置

但是,无论我如何尝试,都无法解决这个问题。

最终,我找到了以下方法来解决我的问题。我首先在代码中添加了一些此前没有的错误处理代码来调试问题,以确认程序是否能够找到正确的库路径:

void print_error_and_exit(const char *err_msg) {

fprintf(stderr, “%s\n”, err_msg);

perror(“”);

exit(EXIT_FLURE);

}

int mn(int argc, char **argv) {

OCIEnv *envhp;

if (OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid *)0,

(dvoid * (*)(dvoid *,size_t))0,

(dvoid * (*)(dvoid *, dvoid *, size_t))0,

(void (*)(dvoid *, dvoid *))0, (size_t)0, (dvoid **)0))

print_error_and_exit(“OCIEnvCreate fled”);

exit(EXIT_SUCCESS);

}

然后,我得到了以下错误消息:

OCIEnvCreate fled

Error: No such file or directory

看到这个错误消息后,我意识到我的路径可能存在问题,因此我对我的环境变量进行了一次全面的检查。最终,我发现我的LD_LIBRARY_PATH环境变量中缺少Oracle Instant Client库路径。因此,我将以下命令添加到我的.bashrc文件中:

export LD_LIBRARY_PATH=/path/to/instant/client

运行了这行命令后,我重新运行程序并成功连接Oracle数据库。最终的解决办法是确认环境变量是否被正确设置,并验证应用程序路径是否正确。

这个问题困扰了我很久,但是最终我找到了一个解决方法。如果你曾经遇到类似的问题,请首先检查tnsnames.ora文件是否正确,以及环境变量是否正确设置,如果还是无法解决,那么你可以使用上面的方法来进行调试。


数据运维技术 » C语言无法连接Oracle数据库的痛苦经历(c 连接不上oracle)