我的客户端是10gXE,给一远程ORACLE数据库设置了一个tns如下:META_WIN=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=133.37.58.237)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SE...
我的客户端是10gXE,给一远程ORACLE数据库设置了一个tns如下:
META_WIN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 133.37.58.237)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = META)
)
)
sqlplus tease/tease@META_WIN,连接成功。
使用OCI和OTL编写的测试程序也能连接成功。
用Pro*C编写了一个测试程序,如下:
#include
EXEC SQL BEGIN DECLARE SECTION;
char *username = "tease";
char *password = "tease";
char *dbname = "META_WIN";
char *uid = "tease/tease@META_WIN";
EXEC SQL END DECLARE SECTION;
void main(void)
{
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname;
if (sqlca.sqlcode != 0)
{ printf("%s\r\n", sqlca.sqlerrm.sqlerrmc); return; }
else
{ printf("Success\r\n"); }
}
编译成C文件成功,编译生成exe也成功,但运行时出现连接失败,错误信息如下:
“Error while trying to retrieve text for error ORA-12705”
将连接的那个语句替换成EXEC SQL CONNECT :uid; 再试,依然失败,错误信息相同
替换成EXEC SQL CONNECT :uid AT :dbname; 再试,依然失败,错误信息相同
难道Pro*C压根就不能连接远程数据库?
忘了说,XE自身是不带Pro*C的,我是从完整版的10g客户端里将它提取过来使用,将pc文件转化成c或cpp都是一切正常的,我查了一下ORA-12705的错误解释,貌似是说客户端组件不完整,建议重装客户端。看样子有可能是因为XE本身不含Pro*C而无法正常支持pc连接远程数据库,跟Pro*C无关。我觉得或许应该把XE卸掉重新装完整版的10g
展开