<< Apache Roller Version 3.1 安装指南 | 首页 | 在J2EE系统URL里传递中文和特殊字符 >>

在Spring+hibernate里关闭远程Oracle dblink

Oracle有一个dblink的东西可以在数据库里远程连接另一个数据库(不仅限于Oracle数据库),通过下列方法创建oracle dblink:

两种方式:
1、已经配置本地服务
       

create public database 
linkname fwq12 connect 
to fzept
identified 
by neu using 'fjept'

CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;
2、未配置本地服务

create database link linkname
  connect 
to fzept identified by neu
  using 
'(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = fjept)
    )
  )
';

host=数据库的ip地址,service_name=数据库的ssid

通过下列语句操作dblink的数据库:

SELECT  *  FROM tableName@linkname;

            但是,每次使用dblink查询的时候,均会与远程数据库创建一个连接,dblink应该不会自动释放这个连接。这会引起很多问题,有可能dblink连接断了,继续操作远程数据库就会出错;不释放远程数据库连接,可能会导致远程数据库连接爆满;还可能会导致本地数据库连接泄露等。

在Spring+hibernate架构下,用下列代码关闭dblink数据库连接:

In every method call of the service layer which is calling a dao method which is opening a db link, after the method returns from the dao I close the db link session in the service layer.

public List getBeschaffungen()
{
List beschaffungList = beschaffungDao.getBeschaffungList(suchFilterManage r.getSuchFilter());
beschaffungDao.closeDbLinkSession("dllinkname");
return beschaffungList;
}

public void closeDbLinkSession(final String dbLinkName)
{
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
Statement statement = session.connection().createStatement();
statement.execute("Alter session close database link "+dbLinkName);
logger.info("closing "+dbLinkName+" dblink session");
statement.close();
return null;
}
});
}




发表评论 发送引用通报