2010-03-18 6 views
5

Me gustaría averiguar si alguno y qué enlaces de base de datos se están utilizando, para un esquema y en qué tablas. ¿Es posible a través del diccionario de datos de alguna manera?¿Cómo averigua qué enlaces de base de datos se utilizan en consultas para el RDBMS de Oracle?

¿Esto es posible con Oracle RDBMS?

+1

¿Estará accediendo al diccionario de datos como usuario de DBA? Los usuarios normales generalmente no tienen acceso a todos los objetos del diccionario, por lo que este será un factor importante. –

+1

Será posible realizar accses a través de un usuario de DBA. Sin embargo, prefiero hacerlo como un usuario normal si es posible. – JavaRocky

Respuesta

3

Esto le mostrará los enlaces de bases de datos creadas en la base de datos:

select * from dba_db_links; 

A continuación, tendría que buscar cualquier consulta u objetos utilizando el enlace db haciendo una búsqueda de texto de ellos para la sintaxis de enlace <tablename>@<dblink name>

+2

Se debe mencionar que DBA_DB_LINKS no estará disponible para usuarios normales a menos que O7_DICTIONARY_ACCESSIBILITY = TRUE, y el usuario tenga SELECT_ANY_TABLE. De lo contrario, generalmente solo estará disponible para los usuarios de DBA. Sin embargo, todos los usuarios pueden acceder a USER_DB_LINKS, pero eso solo sería suficiente si la consulta en cuestión solo utiliza dblinks desde el propio esquema del usuario. –

+1

@Charles M: Buen punto acerca de los privilegios del usuario. –

+1

Prefiero no realizar búsquedas de texto. ¿Hay paquetes disponibles para decirme las referencias de la tabla? He creado una nueva pregunta: http://stackoverflow.com/questions/2467735/do-any-parsers-exist-for-the-oracle-dml-table-reference – JavaRocky

1

puede editar el primer código SQL de un esquema: ejemplo:

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) 
    FROM all_OBJECTS 
    WHERE (OWNER = 'your schema name'); 

y luego buscar en el resultado del golpeteo n del db_link, que se ve como @dblink_name.

3

Sé que la respuesta de Dougman es correcta. Pero aquí hay algo más de información.

Si el usuario no es un usuario de DBA, no tendrá acceso a DBA_DB_LINKS. Además, USER_DB_LINKS mostrará los enlaces db creados por el usuario actual, de modo que no mostrará todos los enlaces DB a los que el usuario tiene acceso.

Puede usar ALL_DB_LINKS para obtener los enlaces a los que tiene acceso el usuario.

select * from all_db_links; 
Cuestiones relacionadas