9i和10gR1版本之前,所有 dblink 的密码都是以明文方式在 sys.link$ 中的password字段中存储。可以直接通过查询sys.link$基表进行SQL拼接来完成迁移dblink。
select 'create database link '||NAME || ' connect to '|| USERID ||' identified by '|| password || ' using '''|| HOST ||''';' FROM SYS.LINK$;
10g R2开始,oracle对密码进行加密后存储在sys.link$的PASSWORDX字段(RAW128格式)中
在11.2.0.3版本之前以及11.2.0.3 可以通过以下命令获取dblink的ddl语句(包含密码)
SELECT DBMS_METADATA.GET_DDL('DB_LINK',DB_LINK,OWNER) from dba_db_links;
11g和12C场景下不知道dblink密码的情况下重建dblink,先随便设置个密码
create database link DBLINK名称 connect to system identified by oracle using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.210.222)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = drmdb)))';
更新密码
select PASSWORDX from sys.link$ where name='DBLINK名称';
update link$ set PASSWORDX = '查出的密码' where name='DBLINK名称';
commit;