* 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类型
【源于微信群技术分享,特此整理】 若有书写错误,表达错误,请指正...