数据库DBLink的失效检测
时间:2011-09-02
来源:互联网
最近碰到个问题,应用A需要用访问应用B的数据,两个应用的数据在不同的数据库上。为了实现A对B的访问,利用了数据库Dblink访问远程表,运行正常了一段时间。某日发现应用A异常,查原因发现是应用B的数据库down了,此时查询远程表的数据,SQL语句就会一直等待下去,直到会话超时。也就是说应用B的数据库down会导致应用A异常,错误异常号是:-12170。加入异常处理后,用户3-5分钟才会得到提示,这个用户是难以接受的,请问如何缩短这个时间?
Report
------------------------------------------------------------------
procedure A1(p_type number, p_engn varchar2) is
l_address varchar2(2000);
l_string varchar2(1000);
l_key varchar2(100);
begin
l_address := getldURL;
if p_type = 1 then
IF l_address is not null THEN
l_string := 'web_view_query.j_list?p_engn='
begin
exception
when others then
p_sqlcode := sqlcode;
p_sqlerrm := sqlerrm;
if p_sqlcode = '-12170' then
p_result_msg := p_SQLERRM || ':' || '系统连接超时';
else
p_result_msg := p_sqlcode || '-' || p_SQLERRM;
end if;
raise my_error;
end;
l_address := l_address || l_string || '&p_key=' || l_key; --拼地址
owa_util.redirect_url(l_address);
END IF;
end;
Report
------------------------------------------------------------------
procedure A1(p_type number, p_engn varchar2) is
l_address varchar2(2000);
l_string varchar2(1000);
l_key varchar2(100);
begin
l_address := getldURL;
if p_type = 1 then
IF l_address is not null THEN
l_string := 'web_view_query.j_list?p_engn='
begin
exception
when others then
p_sqlcode := sqlcode;
p_sqlerrm := sqlerrm;
if p_sqlcode = '-12170' then
p_result_msg := p_SQLERRM || ':' || '系统连接超时';
else
p_result_msg := p_sqlcode || '-' || p_SQLERRM;
end if;
raise my_error;
end;
l_address := l_address || l_string || '&p_key=' || l_key; --拼地址
owa_util.redirect_url(l_address);
END IF;
end;
作者: ostart2006 发布时间: 2011-09-02
没人理,自己先来一个
考虑作个监测程序,如果发现数据库链路断了,把数据库链路设为无效状态。
考虑作个监测程序,如果发现数据库链路断了,把数据库链路设为无效状态。
作者: ostart2006 发布时间: 2011-09-02
应用都放到应用层去解决,为什么要用DBLINK呢
作者: maolinxie 发布时间: 2011-09-02
你试试这样的格式吧:
ORCL =
(DESCRIPTION =
(CONNECT_TIMEOUT=5)(RETRY_COUNT=1)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(CONNECT_TIMEOUT=5)(RETRY_COUNT=1)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
作者: ocpdba591 发布时间: 2011-09-02
恩,应用的部分程序用了存储过程,所以只能用DBLink。
谢谢ocpdba591 ,我试下。
谢谢ocpdba591 ,我试下。
作者: ostart2006 发布时间: 2011-09-02
有新发现,就是如果对方数据库彻底down了,错误也可以很快出来的。但是如果对方数据库可以运行,但是因为归档满,进程数超出限制时,就会陷入长时间的等待。
作者: ostart2006 发布时间: 2011-09-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28