关于Oracle的Easy Config问题,UP有分呀,分不够再加,多少都有!!!也欢迎大家进来参观,共同学习。

hujun614 2001-12-13 10:37:05
就是如何在程序中自动配置Oracle的Easy Config.代码示例能行者,200分,感谢大家的支持。
...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
maptrix 2001-12-13
  • 打赏
  • 举报
回复
void CreateLocalSvrName(char *FileName,char *LocalSvrName,char *Server,char *OraServiceName)
{
FILE *fp;
if((fp=fopen(FileName,"r+"))==NULL)
return;

fseek(fp,0,SEEK_END);
fputs(LocalSvrName,fp);
fputs(" =\r\n",fp);
fputs(" (DESCRIPTION =\r\n",fp);
fputs(" (ADDRESS_LIST =\r\n",fp);
fputs(" (ADDRESS = (PROTOCOL = TCP)(HOST = ",fp);
fputs(Server,fp);
fputs(")(PORT = 1521))\r\n",fp);
fputs(" )\r\n",fp);
fputs(" (CONNECT_DATA =\r\n",fp);
fputs(" (SERVICE_NAME = ",fp);
fputs(OraServiceName,fp);
fputs(")\r\n",fp);
fputs(" )\r\n",fp);
fputs(" )\r\n\r\n",fp);

fclose(fp);
}

程序中执行:

...
CreateLocalSvrName("e:\\Oracle\\Ora81\\network\\admin\\tnsnames.ora",
"MYLOCALNAME","192.168.128.81","MYORACLE.COM");
hujun614 2001-12-13
  • 打赏
  • 举报
回复
SERVICE_NAME 通常都是ORCL对吧。
本地服务名本不重要,自已知道就可以用了啥。

200分求教一段代码,包括根据内存变量名称确定oracle下的tnsnames.ora的路径,用不重复的名称命名新建的本地服务名,并返回本地服务名。可以帮助我吗?

maptrix 2001-12-13
  • 打赏
  • 举报
回复
还需要给出两个必要条件,一是你配置的本地服务名的名称,比如叫MYLOCALNAME,还有就是Oracle的服务名称,比如叫MYORACLE.COM(我是的是Oracle8i),就可以用普通的文件读写方法,形成下面的文件

# TNSNAMES.ORA Network Configuration File: E:\Oracle\Ora81\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

MYLOCALNAME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.128.81)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = MYORACLE.COM)
)
)

因为在用 Easy config的时候也要用户输入连接串的名称(即本地服务名),服务器的名称或者其IP,再就是Oracle的服务名。根据这三个输入的条件,形成一个本地连接。
说明,上面例子中的MYLOCALNAME就是本地服务名,HOST = 192.168.128.81,在HOST = 后面写上服务器的名称或者IP,SERVICE_NAME = 后面写上Oracle的服务名。
hujun614 2001-12-13
  • 打赏
  • 举报
回复
To:maptrix(),我也这样想过,但有些细节还不是很清楚,所以想请你给出详细代码,好吗。
多少分都给,就比如服务器地址是192.168.128.81,其它的都缺省,你看该怎样配比较好。代码怎样写
maptrix 2001-12-13
  • 打赏
  • 举报
回复
在你的Oracle目录下,读写下面的文件,就可以用程序配置一个或者多个连接
?:\Oracle\Ora81\network\ADMIN\tnsnames.ora

内容如下
# TNSNAMES.ORA Network Configuration File: E:\Oracle\Ora81\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

MYLINK =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mapsvr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abcd.com)
)
)

你用程序写好其中的关键配置部分,然后就可以使用了。
三杯倒 2001-12-13
  • 打赏
  • 举报
回复
1111
maptrix 2001-12-13
  • 打赏
  • 举报
回复
BOOL GetTNSNameFile(char *FileName,DWORD nSize)
{
LPTSTR AppRegKey=_T("SOFTWARE\\ORACLE\\HOME0");

HKEY hKey = NULL;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, AppRegKey, 0, KEY_READ, &hKey)!=ERROR_SUCCESS)
return FALSE;
if(!hKey)
return FALSE;

DWORD dwType = NULL;

if(RegQueryValueEx(hKey, (LPTSTR)"ORACLE_HOME", NULL, &dwType,
(LPBYTE)FileName, &nSize)!=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
strcat(FileName,"\\network\\admin\\tnsnames.ora");

return TRUE;
}

程序中执行:

...
char FileName[128];
if(GetTNSNameFile(FileName,sizeof(FileName)))
CreateLocalSvrName(FileName,
"MYLOCALNAME","192.168.128.81","MYORACLE.COM");
maptrix 2001-12-13
  • 打赏
  • 举报
回复
BOOL GetTNSNameFile(char *FileName,DWORD nSize)
{
LPTSTR AppRegKey=_T("SOFTWARE\\ORACLE\\HOME0");

HKEY hKey = NULL;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, AppRegKey, 0, KEY_READ, &hKey)!=ERROR_SUCCESS)
return FALSE;
if(!hKey)
return FALSE;

DWORD dwType = NULL;

if(RegQueryValueEx(hKey, (LPTSTR)"ORACLE_HOME", NULL, &dwType,
(LPBYTE)FileName, &nSize)!=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);

return TRUE;
}

程序中执行:

...
char FileName[128];
if(GetTNSNameFile(FileName,sizeof(FileName)))
CreateLocalSvrName(FileName,
"MYLOCALNAME","192.168.128.81","MYORACLE.COM");
maptrix 2001-12-13
  • 打赏
  • 举报
回复
tnsnames.ora的路径可以根据注册表中的
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0
中的ORACLE_HOME来获得它一般Oracle的主目录,比如E:\Oracle\Ora81 有了它,加上\network\admin\tnsnames.ora,就可以找到文件的路径了。
hujun614 2001-12-13
  • 打赏
  • 举报
回复
谢谢你了。: maptrix();还要分的话,我只有另开贴子给你了。

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧