VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 914|回复: 4

请教一个判断语句。

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-27 14:40:01 | 显示全部楼层 |阅读模式
有一个备份数据库B,在备份好后才会向我们开放,但是有时候这一天都不会开。

我有一个数据库A,在A上建了到数据库B的DBLINK。

在A上跑了一个应用,要用到B的数据,比如:
select * from all_tables@B

我要怎样判断数据库B是否已经可用,我试了用异常,如下:
declare
aa number(10);
begin
select count(*) into aa from all_tables@B where rownum<2;
exception
when others then
dbms_output.put_line('数据库未准备好');
end;

但捕捉不到,报的错误是ORA-00942:表或视图不存在。
不知还有什么别的办法?请教。
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-2-21 21:15:01 | 显示全部楼层
首先判断db_link是否通了?

select sysdate from dual@B;
如果有返回值,说明通了。否则需要看看是什么问题不通,有可能是网络问题,有可能是tnsnames.ora没有配置好

如果有返回值,需要给远程数据库的你要访问的表在本地建立公共同义词的

如:
create publis synonym tabl_name for sys.tabl_name@B;
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-2-21 23:15:02 | 显示全部楼层
但捕捉不到

是因为你的异常不符合该报错的条件。
你的异常应该是权限不够
回复

使用道具 举报

0

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-22 21:15:01 | 显示全部楼层
如楼上所说的,首先是看看你用<@连接名>这种方式是否有问题,包括权限;(你可以看看用B.all_tables的方式访问看看)如果没有问题,从user_tables里看看该表是否存在,然后才是记录数的比较.
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-29 21:30:01 | 显示全部楼层
dblink不好用时确实捕获不到异常的
我是用返回的'ORA-00942:表或视图不存在'来判断数据库是否连接准备好的(前提是肯定有连接的表)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表