In versions of Oracle older than 11.2.0.4, I have always migrated DB links with dbms_metadata.get_ddl to get the ddl for a db link as I do not have the passwords for the user at the remote site. This provides the ddl as shown below with an obfuscated password:
CREATE DATABASE LINK "db_link_name" CONNECT TO "remote_user" IDENTIFIED BY VALUES '06AD92A1C4E671B083FE5A long sting here' USING '(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=remote.server.com)(PORT=remote port)) (CONNECT_DATA= (SERVER=dedicated) (SERVICE_NAME=remote service name) ) )' ;
Oracle 11.2.0.4 has a security enhancements to prevent the use of obfuscated passwords (See Doc ID 1905221.1). So you have 2 options:
a. Know the password and provide it explicitly
b. Use expdp/impdp to copy it over
Very often, option a. is not available as we do not know that password of the user at the remote site.
So I tried option b which works and creates the ddl as:
CREATE DATABASE LINK "db_link_name" CONNECT TO "remote_user" IDENTIFIED BY VALUES ':1' USING '(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=remote.server.com)(PORT=remote port)) (CONNECT_DATA= (SERVER=dedicated) (SERVICE_NAME=remote service name) ) )' ;
This can be directly imported via impdp.