Oracle global_names

Hola!

Puede alguien explicarme brevemente la utilidad de los global_names? Por lo que he visto existe un parámetro para activar o desactivar su uso. También existe una variable donde se guarda el nombre global de la base de datos actual.

¿Que se puede ver afectado si los desactivas?

¿Que puede verse afectado si cambias el nombre actual?

 

Buenas,

El nombre global de la base de datos se encuentra en la vista GLOBAL_NAME y está compuesto por el nombre de la base de datos (DB_NAME) más el nombre del dominio (DB_DOMAIN). La utilidad que tiene componerlo con un nombre de dominio es que permite distinguir o referenciar dos bases de datos que se llamen igual, pero que se encuentren en diferentes dominios.

Se me ocurre que yo podría tener, por ejemplo, una base de datos en el servidor de Dataprix, y un réplica de desarrollo en un PC de mi casa, y las distinguiría así:


SQL> select * from global_name;
GLOBAL_NAME
------------------------------------------------------------
MIBD.DATAPRIX.COM

SQL> select * from global_name;
GLOBAL_NAME
------------------------------------------------------------
MIBD.MICASA.COM

 

Si yo definiera un DBLINK a cada una desde una tercera BD, el dominio me permitiría distinguirlas.

Comentar también que a nivel de parámetros, el global database name se almacena en el parámetro SERVICE_NAMES del fichero de parámetros de inicialización.

 

Si cambias el nombre actual, si no estás en el caso que en tu sistema se acceda a dos bases de datos con el mismo nombre y diferentes dominios lo que deberías revisar sobretodo son los DBLINKS que haya definidos contra la BD, y teniendo en cuenta si el parámetro global_names (que no es lo mismo que la vista o sinónimo GLOBAL_NAME que acabamos de ver) está a TRUE o FALSE.

Si está a TRUE, este parámetro obliga a que los database links que se definan contra la base de datos utilicen como nombre el GLOBAL_NAME de la misma, por lo que en este caso, si cambias el GLOBAL_NAME, las sentencias que utilicen los DBLINKS devolverían un error ORA-02085 hasta que redefinieras el DBLINK, o modificaras el valor del parámetro global_names a FALSE.

Si global_names está a FALSE, la BD ya no obliga a que el DBLINK utilice el mismo nombre global que la BD que enlaza, pero el nombre global sigue siendo el mismo.

Si la BD arranca con spfile, para desactivar este chequeo a nivel de sistema basta con ejecutar: 


SQL> ALTER SYSTEM SET global_names=FALSE;

Para evitar problemas, a menos que sea necesario hacerlo de otra manera por las razones que ya hemos comentado, yo suelo poner el parámetro global_names a FALSE, y el valor de GLOBAL_NAME con el mismo dominio que el de mi sistema (cuando creas la BD se suele quedar con el impresionante DB_DOMAIN de Oracle REGRESS.RDBMS.DEV.US.ORACLE.COM, que es fácil que nos de algún problema por su longitud). Modificarlo es tan fácil como:


SQL> alter database rename GLOBAL_NAME to MIBD.DATAPRIX.COM;
Database altered.