This example is based on an error which a colleague showed me recently. I logged into an Oracle 11.1 database, reset its SYSTEM password and checked the encrypted value:
Oracle11 > sqlplus / as sysdba
SQL*Plus: Release 11.1.0.6.0 - Production on Wed Feb 4 18:10:38 2015
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$database
2 /
NAME
---------
PQEDPT1
SQL> alter user system
2 identified by manager
3 /
User altered.
SQL> select password from sys.user$
2 where name = 'SYSTEM'
3 /
PASSWORD
------------------------------
D4DF7931AB130E37
SQL>
I then logged into an Oracle 11.2 database, created a link to the database above, tried to use it and saw an error:
Oracle11 > sqlplus system/manager
SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 4 18:13:39 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$database
2 /
NAME
---------
BUSDPT1
SQL> create database link andrew
2 connect to system
3 identified by values 'D4DF7931AB130E37'
4 using 'PQEDPT1'
5 /
Database link created.
SQL> select * from dual@andrew
2 /
select * from dual@andrew
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kzdlk_zt2 err],
[18446744073709551603], [], [], [], [], [], [], [], [], [], []
SQL>
I did some research and it seems that the identified by values syntax above is an undocumented feature. I altered the database link, supplying the unencrypted value, and it worked:
SQL> alter database link andrew
2 connect to system
3 identified by manager
4 /
alter database link andrew
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> grant alter database link to system
2 /
Grant succeeded.
SQL> alter database link andrew
2 connect to system
3 identified by manager
4 /
Database link altered.
SQL> select * from dual@andrew
2 /
D
-
X
SQL>
So, if you are creating a new database link, you need to do it like this:
SQL> drop database link andrew
2 /
Database link dropped.
SQL> create database link andrew
2 connect to system
3 identified by manager
4 using 'PQEDPT1'
5 /
Database link created.
SQL> select * from dual@andrew
2 /
D
-
X