Oracle 不知用户的密码时,如何获取dblink创建语句



作者: lōττéry ©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]


9i及以前版本可通过 dba_db_links的视图原表sys,link$的password字段获取密码;
SQL:s elect u.name,l.password/*9i版本会记录密码*/, l.name, l.userid, l.host, l.ctime,l.passwordx
     from sys.lin k$ l, sys.user$ u
     where l.owner# = u.user#;  

9i后,password 字段为空,且sys.link$多了一个passwordx(raw加密密码字段)

11.2.0.4以前,可通过 SELECT to_char(dbms_metadata.get_ddl('DB_LINK','ZBTMS_STANDBY','PUBLIC')) FROM dual;》获取创建dblink语句或者11.2.0.4及以后版本方法
 dbms_metadata.get_ddl 获取语句如下:    
  CREATE PUBLIC DATABASE LINK " ZBTMS_STANDBY
   CONNECT TO "USR_QUERY" IDENTIFIED BY VALUES ':1'/*比正常dblink创建语句多values关键字(values值在 sys.link$.passwordx 字段获取 )*/
   USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.240.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ZB_TMS)))' ;

11.2.0.4及以后版本,若通过 dbms_metadata.get_ddl获取语句直接执行会提示无效的values关键字; 可通过plsql developer 工具导出sys.links的insert语句再其他库中执行即可
     方法1、工具-->导出表-->部分范围
     
      aa.sql文本内容如下:
     
      更改aa.sql文件dblink名称name部分(更改为LOTTERY)保存并在测试环境进行导入;
       SQL> SELECT count(1) count_ FROM  LINK$  where name='LOTTERY';
       count_
       ----------
       导入:
       SQL>  @C:\Users\Administrator\Desktop\aa.sql
       PL/SQL Developer import file
       Created on 2016年7月26日 by Administrator
       Loading LINK$...
       1 records loaded
       Done.  
       验证:
       SQL> SELECT * FROM dual@LOTTERY;
       DUMMY
       -----
       X
       SQL>

      方法2、在sql窗口执行范围查询
       查询: SELECT owner#, name,host, userid, flag,passwordx FROM LINK$  where name='ZBTMS_STANDBY';
        导出: < Export Query Results>-->sql file 另存为 C:\Users\Administrator\Desktop\aa.sql
       导入: insert into LINK$ ( OWNER#, NAME, HOST, USERID, FLAG, PASSWORDX,ctime/*补充必填项*/ )
values ( 1,'LOTTERY','(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.240.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ZB_TMS)))','USR_QUERY',2, '06B39E07640DB9E1AF7609A48EB338AD8F7C078A30C75D249CE0E7D7BF4C471690A0FF15945B38185BEA41A611AC756B7FE5154F90CCBD562CA069E300025A24E342F0DE1BF56215EC52E2B6A86B4E7468EF87C7A1238D755F96BAF2CFF78918E7745CBBB' ,sysdate);
       1 row inserted
       验证:
       SQL> SELECT * FROM dual@LOTTERY;
       DUMMY
       -----
       X
       SQL>

   扩展:
     select utl_raw.cast_to_varchar2('值') from dual;  -->此passwordx 加密字段通过此函数转换 获取的是乱码....
     utl_raw.cast_to_raw('varchar2值');--将varchar2转换为raw类型
     utl_raw.cast_to_varchar2('raw值');--将raw转换为varchar2类型

  【源于微信群技术分享,特此整理】 若有书写错误,表达错误,请指正...


此条目发表在   Oracle   分类目录。将 固定连接 加入收藏夹。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28602568/viewspace-2122564/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28602568/viewspace-2122564/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值