ITPub博客

首页 > 数据库 > Oracle > Oracle 不知用户的密码时,如何获取dblink创建语句

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

原创 Oracle 作者:maohaiqing0304 时间:2016-07-26 14:01:17 0 删除 编辑


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


* 9i及以前版本可通过 dba_db_links的视图原表sys,link$的password字段获取密码;
SQL:select u.name,l.password/*9i版本会记录密码*/, l.name, l.userid, l.host, l.ctime,l.passwordx
     from sys.link$ 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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
擅长SQL编写及SQL优化,分析瓶颈,性能调优、故障处理,根据实际情况定制备份策略; 擅长编写脚本来实现自动化功能,600+SQL优化经验案例,为人热爱学习,喜欢钻研技术,对工作认真负责。

注册时间:2013-03-13

  • 博文量
    121
  • 访问量
    2303676