Antes de empezar este ejemplo, cambié la contraseña de un usuario en una base de datos remota. Este usuario es empleado por un vínculo entre una base de datos local y la base de datos remota.
SQL> alter session set nls_language = 'SPANISH'
2 /
Session altered.
SQL>
2 /
Session altered.
SQL>
Ahora el vínculo no funciona en la base de datos local:
SQL> select * from dual@link1
2 /
select * from dual@link1
*
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: line precediendo a LINK1
SQL>
2 /
select * from dual@link1
*
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: line precediendo a LINK1
SQL>
Antes de Oracle 11 versión 2, era necesario borrar el vínculo y recrearlo. Ahora con Oracle 11 versión 2, se puede hacerlo con el comando ALTER DATABASE LINK. Para emplear este comando, es necesario tener el privilegio con el mismo nombre. Pero nadie tiene este privilegio en la base de datos local, hasta el usuario Oracle:
SQL> show user
USER is "ORACLE"
SQL> alter database link link1
2 connect to andrew identified by reid
3 /
alter database link link1
*
ERROR at line 1:
ORA-01031: privilegios insuficientes
SQL>
USER is "ORACLE"
SQL> alter database link link1
2 connect to andrew identified by reid
3 /
alter database link link1
*
ERROR at line 1:
ORA-01031: privilegios insuficientes
SQL>
Pero el usuario Oracle tiene el papel DBA:
SQL> select granted_role from dba_role_privs
2 where grantee = 'ORACLE'
3 /
GRANTED_ROLE
------------------------------
DBA
SQL>
2 where grantee = 'ORACLE'
3 /
GRANTED_ROLE
------------------------------
DBA
SQL>
… y el papel DBA tiene el privilegio GRANT ANY PRIVILEGE:
SQL> select grantee from dba_sys_privs
2 where privilege = 'GRANT ANY PRIVILEGE'
3 /
GRANTEE
------------------------------
IMP_FULL_DATABASE
DATAPUMP_IMP_FULL_DATABASE
DBA
SYS
SQL>
Así , Oracle puede dar el privilegio ALTER DATABASE LINK a sí mismo:
SQL> show user
USER is "ORACLE"
SQL> grant alter database link to oracle
2 /
Grant succeeded.
SQL>
USER is "ORACLE"
SQL> grant alter database link to oracle
2 /
Grant succeeded.
SQL>
Tras hacer éste, el comando funciona:
SQL> alter database link link1
2 connect to andrew identified by reid
3 /
Database link altered.
SQL>
2 connect to andrew identified by reid
3 /
Database link altered.
SQL>
El vínculo funciona también:
SQL> select * from dual@link1
2 /
D
-
X
SQL>
El comando ALTER DATABASE LINK no funciona en Oracle 11 versión 1:
SQL> alter database link link1
2 connect to andrew
3 identified by reid
4 /
alter database link link1
*
ERROR at line 1:
ORA-02231: falta la opcion para ALTER DATABASE o no es
valida
SQL>