Liberar conexiones DBLINK en maquina remota

1 reply [Último envío]
Offline
Joined: 09/08/2012
Puntos: 6

 Hola, soy nuevo por aqui. Lo primero felicitar este foro ya que estoy empezando como administrador de bbdd oracle y este me ha servido de gran ayuda. Os explico mi problema:

 

Tengo dos servidores A y B, con solaris y linux respectivamente. Resulta que en A he creado una serie de vistas que apuntan con un dblink a una tabla que esta en el servidor B. Hasta aqui todo normal, el problema que tengo es que cuando se realiza la consulta en A, el db_link crea la conexion en el servidor B y esta conexión NO la libera una vez haya terminado la consulta. ¿Que puedo hacer?

 

Para hacer el proposisto anterior, leí en alguna documentacion de oracle que habia que crear un db_link "shared public" y poner el el servidor A en modo compartido, para ello definí los parametros DISTPACHER y SHARED_SERVER.

 

Mi db_link:

CREATE SHARED PUBLIC DATABASE LINK SID_SERVIDOR_B

 CONNECT TO "USER_DBLINK" IDENTIFIED BY "XXX"

AUTHENTICATED BY "USER_DBLINK" IDENTIFIED BY "XXX"

 USING 'DIRECCION_IP:1521/SID_SERVIDOR_B'

 

Configuracion del servidor en modo compartido:

 

ALTER SYSTEM SET SHARED_SERVERS = 100;

ALTER SYSTEM SET DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=4)";

 

 

La select con la que compruebo la conexiones abierta en el SID_SERVIDOR_B es:

select machine, count(*) as conexiones from v$session  group by machine;

 

¿Me falta algun paso? ¿Porque no me libera las conexiones en el servidor B?

 

Saludos y muchas gracias,

Jorge

 

 

 

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1055

Y la sesión del servidor A la cierras o te interesa dejarla abierta? Al cerrarla se tiene que liberar la conexión.

Otra opción, si no te interesa cerrar la sesión, es probar a cerrar directamente el DBLink utilizando el comando SQL:

SQL> ALTER SESION CLOSE DATABASE LINK nombre_dblink;

 

n/d

Contenido relacionado

  • Hola, les comento, he creado unos dblinks y va todo bien si lo hago desde la pagina pricipal de oracle es decir hago un select * from tabla@dblink y me muestra bien los datos, mi problema es que al hacerlo desde php y con oci no me muestra la pagina, dice que la conexion ha sido reinciada, el codigo que utlizo es el siguiente:

     

    <?php
        include ("conexion.php");//$conexion = oci_connect('bogar', 'bogar', 'localhost/XE');
          $query3 = "select * from  empleados@toy  ";
              $res3= oci_parse ($conexion, $query3);
             $r=oci_execute ($res3);
                
     
     
      while ($row = oci_fetch_array ($res3))
       {
        echo $row[0];
       }
         oci_close($conexion);
         
            ?>

  • "Sin saber del tema lo facil puede parecer difícil"

    La creación de un database link de oracle para apuntar de una base de datos a otra en principio es fácil, más si lees el post de dataprix Acceso remoto mediante dblink de Oracle. La lastima es que en ese post no se diga nada de los global_names de cada base de datos y como se renombra el dblink si los global_names estan activos.

    Ejemplo.

    1. Creamos el dblink a una base de datos ficticia rrhh (previa configuración tnsnames...):
      create database link dblinkrrhh connect to rrhh identified by recursoshumanos USING 'rrhh';
    2. Consultamos su nombre y sorpresa, no se llama dblinkrrhh si no DBLINKRRHH.REGRESS.RDBMS.DEV.US.ORACLE.COM. Lo podemos ver con la siguiente consulta:
      select * from dba_db_links;

      Ahora que?

     

  • Vamos a ver en tres sencillos pasos cómo crear un esquema de Oracle. Para poder crear un nuevo esquema de Oracle siguiendo estos pasos es necesario iniciar la sesión en la base de datos con un usuario con permisos de administración. Lo más sencillo es utilizar directamente el usuario SYSTEM:

    • Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear.

    Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible

    CREATE TABLESPACE "APPDAT" LOGGING
    DATAFILE '/export/home/oracle/oradata/datafiles/APPDAT.dbf' SIZE 1024M
    EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

    Tablespace para índices, con tamaño inicial de 512 Mb, y auto extensible

    CREATE TABLESPACE "APPIDX" LOGGING
    DATAFILE '/export/home/oracle/oradata/datafiles/APPIDX.dbf' SIZE 512M
    EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

  • Hola a todos,

     

    Acabo de realizar un export de los datos de una tabla llamada prueba con el siguiente comando:

    exp oracle/oracle@orcl tables=prueba file=oracle.dmp log=oracle.log

     

    Y ahora querría cargar estos datos en una tabla que acabo de crear (la nueva tabla esta particionada) en el mismo esquema:

    imp oracle/oracle@orcl file=oracle.dmp fromuser=oracle touser=oracle tables=prueba_particiones

     

    Y me dice que no se puede hacer porque la tabla "prueba_particiones" no está en el export, por lo que elimine la tabla original "prueba" y renombré la tabla "prueba_particiones" a "prueba". y volví a lanzar el import:

    imp oracle/oracle@orcl file=oracle.dmp fromuser=oracle touser=oracle tables=prueba

    Y ahora el error que me da es:

    IMP-00015: following statement failed because the object already exists:

    No se como hacer para cargar los datos de prueba.dmp a la tabla particionada, ¿alguna ayuda?

     

    Para mas datos la tabla prueba la hice de la siguiente forma:

    create table prueba(

    numero number);

  • En este video se realizarán las siguientes acciones:

     

    - Configurar Schema Workbench y la conexión a la base de datos

    - Ejecutar Schema Workbench

    - Crear un nuevo esquema y guardarlo

 

 

 

Gestion del Conocimiento    |    Business Intelligence y Analítica    |     Bases de Datos    |      ERP     |      CRM      |     Tendencias tecnológicas