核心数据库的dblink放出去以后,用到的数据库、系统、程序太多,连数据库密码都不敢改了。
有没有一个方法可以收集到这些信息?究竟哪些人在用?怎么用的?至少要知道哪些dblink被用到了?

解决方案 »

  1.   

    使用这个可以看到创建了多少个dblink
    select * from dba_db_links
    但是多少正在用,多少没被用..
    这个不知道..
    期待高手出现..
      

  2.   


    除非这些通过dblink的会话当前正登入到数据库中,否则看不到什么信息。
    如果某时刻别人都没用dblink连,自然不会有什么DBLINK信息。
      

  3.   

    通过v$dblink视图可以查看目前那些dblink目前正在被应用,以及打开的cursor数/是否在执行update/是否在事务中等的一些信息.
    写个定时任务,没隔1s访问一下这个表,把出现的dblink放到其它的表中,跟踪一段时间后你就知道那些在使用了.
      

  4.   

        通过v$dblink视图可以查看目前那些dblink目前正在被应用,以及打开的cursor数/是否在执行update/是否在事务中等的一些信息. 
        写个定时任务,没隔1s访问一下这个表,把出现的dblink放到其它的表中,跟踪一段时间后你就知道那些在使用了. 
      

  5.   

    楼主描述的不准确
    本地建多少个DBlink远程也是调用不了的,
    远程建立连接本地数据库的DBlink在本地是无法直接查询的。
    只能通过类似对v$session等试图的监视,或者after logon触发器把一段时间内连接过的应用记录下来。
      

  6.   

    谢谢楼上各位的解答,但解决方案还是没有出来。
    有没有方法区分对方通过是通过dblink登陆我的数据库,还是通过普通的用户+密码方式登陆的?
    如果能够区分,那么也可以间接获知dblink的使用情况了。
      

  7.   

    我的思路,使用after logon 触发器,
    检查当前用户的sessionid和serial#然后在v$session表中查他的IP、机器名、和program。
    oracle不同版本的Program明虽然有差异,但是毕竟是有限的几个。如果吻合并且IP不是本地服务器的IP,说明是来自其他oracle的访问主要是dblink访问。
    不过:
    1、首先没有尝试过,所以不确定可行性
    2、这种匹配本身就存在不准确的地方,难以保证正确性。
    3、这倒是一个很好玩而得尝试。
      

  8.   

    那如果从别的软件进行dblink访问,能通过Program区分出来dblink吗?
      

  9.   

    应该可以,
    因为首先就不存在从别的软件使用DBLink的情况。
    别的软件只能访问别的数据库,再由那个数据库通过自己所有的DBLink对楼主的数据库进行访问。而别的软件本身不能建立什么DBLINK只能建立连接数据库的“连接”而已。
      

  10.   

    生产库最终没有这么搞,还是一个个去统计了。
    谢谢楼上各位。csdn一直登不上,现在才结贴,抱歉。