【求助】使用occi连接数据库时出错:ORA-12537:TNS:connection closed

cnblackmamba 2014-02-21 11:21:33
我的想法很简单很简单。。。

只不过是:刚在新装的Centos下安装了oracle11g。在sqlplus下使用select table_name from user_tables,能够成功执行并返回结果,说明数据库已经正常运行了。
现在想要通过写一个occi连接oracle的小程序在本机测验一下是否能够正常操作oracle数据库。代码极其简单:

#include <iostream>
#include <occi.h>
#include <sstream>
#include <time.h>
using namespace std;
using namespace oracle::occi;

int main()
{
Environment *env = Environment::createEnvironment(Environment::DEFAULT);
string name = "sys";
string pass = "123";
string srvName = "xxx.xxx.xxx.xxx:1521/ORCL"; //ip是本机的ip地址。
cout << " run to 1 !!!!!!!!" << endl;
Connection *conn = env->createConnection(name,pass,srvName);
cout << " run to 2 !!!!!!!!" << endl;
if(conn) cout << "con suc" << endl;
Statement *stmt = NULL;
string sql = "select table_name from user_tables where rownum<=5";
stmt = conn->createStatement();
stmt->setSQL(sql);
ResultSet *rs = NULL;
rs = stmt->executeQuery();
while(rs->next())
{
cout << "name: " << rs->getString(1) << endl;
}

return 0;
}

编译通过后,先sqlplus>startup,后lsnrctl start。
运行程序,出现错误:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
出现此问题后,查询解决方法,在listener.ora文件中加入:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL.LOCAL)
(ORACLE_HOME = /opt/oracle/11g)
(SID_NAME = ORCL)
)
)
先关闭后重启数据库服务和监听。再次运行程序又出现错误:ORA-12537: TNS:connection closed

使用lsnrctl status查看监听状态显示如下:

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 21-FEB-2014 18:50:56

Copyright (c) 1991, 2009, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 21-FEB-2014 18:01:47
Uptime 0 days 0 hr. 49 min. 9 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/11g/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/ma/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=222.201.139.194)(PORT=1521))(PROTOCOL_STACK=(PRESENTATION=GIOP)(SESSION=RAW)))
Services Summary...
Service "ORCL.LOCAL" has 1 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

状态是unknown是否不对啊,是不是应该是ready才对呢?
此问题,在网上查了好多资料还是不知道如何解决,网上有说是限制ip的问题,在我的配置里边没有限制。
我只是想使用occi编程操作数据库,数据库现在应该是正常运行了,可能是网络连接配置的问题,现在连接不上数据。

现在真的迷茫了,大家帮帮忙,这是怎么回事。
...全文
113 点赞 收藏 8
写回复
8 条回复
cnblackmamba 2014年02月21日
引用 1 楼 zhao4zhong1 的回复:
先用查询分析器手动连接数据库试试。
你好,不是很理解,查询分析器指的是?oracle自带的查询分析器还是?不是很懂
回复 点赞
赵4老师 2014年02月21日
先用查询分析器手动连接数据库试试。
回复 点赞
cnblackmamba 2014年02月21日
引用 6 楼 zhao4zhong1 的回复:
问题解决了,首先是登录名和密码的问题,其次是数据库连接串的问题:conn sys/123@ORCL as sysdba 应该是@ORCL.LOCAL 最后程序成功运行,并且在笔记本的oracle客户端也连接成功了。 谢谢前辈的指导。
回复 点赞
cnblackmamba 2014年02月21日
引用 6 楼 zhao4zhong1 的回复:
移驾oracle论坛再问问。
恩,好的,谢谢前辈了先
回复 点赞
赵4老师 2014年02月21日
引用 5 楼 cnblackmamba 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] plsqldev ?
我在另外一台机器上,下载了oracle的客户端instant client,连接有oracle数据库的机器 sqlplus>conn sys/123@ORCL as sysdba 也出现上述错误ORA-12537: TNS:connection closed 那么是什么问题呢。是数据库的监听程序配置有问题么[/quote] 移驾oracle论坛再问问。
回复 点赞
cnblackmamba 2014年02月21日
引用 4 楼 zhao4zhong1 的回复:
plsqldev ?
我在另外一台机器上,下载了oracle的客户端instant client,连接有oracle数据库的机器 sqlplus>conn sys/123@ORCL as sysdba 也出现上述错误ORA-12537: TNS:connection closed 那么是什么问题呢。是数据库的监听程序配置有问题么
回复 点赞
赵4老师 2014年02月21日
plsqldev ?
回复 点赞
赵4老师 2014年02月21日
引用 2 楼 cnblackmamba 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 先用查询分析器手动连接数据库试试。
你好,不是很理解,查询分析器指的是?oracle自带的查询分析器还是?不是很懂[/quote] 用oracle自带的数据库查询客户端。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告