Archivo

Entradas Etiquetadas ‘Almacenamiento’

Crear DATABASE LINK o DBLINK

Martes, 14 de octubre de 2008 Sin comentarios

Muchas veces en las aplicaciones de negocio es necesario obtener datos que no necesariamente están en las mismas bases de datos o en los mismos servidores. Para poder suplir esta necesidad Oracle tiene un objeto llamado “DATABASE LINK” o “DBLINK”. Mediante a este objeto es posible realizar una conección entre dos bases de datos, las cuales NO necesariamente pueden ser Oracle – Oracle, sin que pueden ser desde Oracle a diferentes motores de bases de datos.-

Ahora bien, hay que tener una serie de consideraciones al momento de crear un DBLINK:

  • Tener claro si el DBLINK a generar será Publico o sólo podrá ser usado bajo un esquema determinado
  • Utilizar una cuenta con los privilegios que sólo necesita el DBLINK y NO el user y pass del esquema, ya que no tenemos control de quien estará utilizando el DBLINK en la otra base de datos

La siguiente figura es un template que en lo personal utilzo para crear DBLINK, ya que ahi uno incluye toda la información del DBLINK que se va a crear

Template creacion DBLINK

Mediante el template anterior es posible definir:

  • Nombre del DBLINK
  • Nombre del servidor (ORIGEN y DESTINO)
  • IP del Servidor (ORIGEN y DESTINO)
  • Nombre de Base de Datos (ORIGEN y DESTINO)
  • Esquema de Base de Datos (ORIGEN y DESTINO)
  • Observacion (indica si es PUBLICO o Privado [Sólo a un esquema])
  • Usuario y Password que se utiliza
  • Objetos que requieren ser accesados
  • Permisos sobre estos objetos
  • Script de creación del DBLINK
  • Script de creación del usuario

Una vez ya se tiene toda la información establecida, se procede a crear el DATABASE LINK

1.- Creación de la cuenta de usuario del DBLINK, Esto se debe realizar desde la instancia DESTINO

CREATE USER USER_DBLINK IDENTIFIED BY PASS_DBLINK
DEFAULT TABLESPACE USER_DBLINK
TEMPORARY TABLESPACE TEMPORAL
QUOTA UNLIMITED ON USER_DBLINK
PROFILE DEFAULT
ACCOUNT UNLOCK
/
GRANT "CONNECT" TO USER_DBLINK
/
ALTER USER USER_DBLINK DEFAULT ROLE "CONNECT"
/

NOTA IMPORTANTE 1: La cuenta de usuario sólo debe tener el rol de CONNECT para establecer la conección a través del DBLINK, NO es recomendable otorgar otro rol.-

2.- Una vez creado el usuario se deben otorgar los privilegios que tendrá el DBLINK. Importante el DBLINK por si sólo no tiene privilegios sobre los objetos de la base DESTINO, sino que es la cuenta de base de datos que posee estos permisos.-

GRANT SELECT ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT INSERT ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT DELETE ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT UPDATE ESQUEMA.OBJETOS TO USER_DBLINK
/

3.- Ahora es necesario crear el DBLINK. La creación del script del DBLINK debe ser realizada desde la base ORIGEN.-

CREATE PUBLIC DATABASE NOMBRE:DBLINK
CONNECT TO USER_DBLINK
IDENTIFIED BY PASS_DBLINK
USING 'NOMBRE_TNSNAMES'

NOTA IMPORTANTE 2: Al comienzo del script se define si este es PUBLICO o PRIVADO, en caso de ser privado la opcion PUBLIC no se incluye en el script y el DBLINK sólo será utilizado por el esquema con el cual el DBLINK se creó.-

NOTA IMPORTANTE 3: En la linea USING ‘NOMBRE_TNSNAMES’ se debe verificar el string de conección desde el servidor ORIGEN al servidor DESTINO, se deben validar los accesos, y realizar una prueba de conección

Este post aún NO está terminado

Determinar Tablespaces fragmentados

Martes, 9 de septiembre de 2008 Sin comentarios

Este script permite ver que Tablespaces están fragmentados y el tipo de fragmentación que tiene.

SELECT dfsc.tablespace_name tablespace_name,
DECODE (
dfsc.percent_extents_coalesced,
100,
(DECODE (
GREATEST ((SELECT COUNT (1)
FROM dba_free_space dfs
WHERE dfs.tablespace_name = dfsc.tablespace_name), 1),
1,
'No Frag',
'Bubble Frag'
)
),
'Possible Honey Comb Frag'
)
fragmentation_status
FROM dba_free_space_coalesced dfsc
ORDER BY dfsc.tablespace_name;

Tamaño libre Tablespaces

Viernes, 5 de septiembre de 2008 Sin comentarios

Aca dejo un script que te permite saber cual es el tamaño y porcentaje libre de los tablespaces de una instancia Oracle.-

SET SERVEROUTPUT ON
SET PAGESIZE 1000
SET LINESIZE 255
SET FEEDBACK OFF
PROMPT
PROMPT Tablespaces nearing 0% free
PROMPT ***************************
SELECT a.tablespace_name,
b.size_kb/1024 SIZE_MB,
a.free_kb/1024 FREE_MB,
Trunc((a.free_kb/b.size_kb) * 100) "FREE_%"
FROM (SELECT tablespace_name,
Trunc(Sum(bytes)/1024) free_kb
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name,
Trunc(Sum(bytes)/1024) size_kb
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY 4 desc
/
PROMPT
SET FEEDBACK ON
SET PAGESIZE 18