分类: C/C++
2010-05-19 14:30:09
在win上安装oracle,在cygwin上连接数据库。使用默认方式建库,数据库名为orcl, 用户nari。
0. 将oracle的路径下文件拷贝到指定文件夹下,然后在编译makefile中写明相关路径,修改unix下程序编译的库文件名为-loci,程序编译成功。
1. 执行时,发现程序连接数据库不成功,sqlplus nari/xxx@orcl正常,检查程序,发现程序中连接数据库使用的是localhost而不是主机名。
2. 于是修改oracle的listener.ora和tnsnames.ora文件,将其中所有写主机名的地方修改为127.0.0.1,重启数据库服务后使用sqlplus nari/xxx@orcl登录不上去。
3. 在网上查了好多帖子后来试了把下面的:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
改成:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
#(PROGRAM = extproc)
)
)
sqlplus nari/xxx@orcl登录成功,但是使用程序连接数据库仍然失败;程序中调用OCIEnvCreate的函数执行后返回-1,而且参数pOraEnv->envhp分配空间未成功;
4. 最后发现, 程序中OCIEnvCreate换成OCIInitialize和OCIEnvInit 则程序正常,不知道是否是兼容性方面的问题;此外,使用单用户方式连接数据库OK,使用多用户方式连接数据库出现异常。