oracle dblink造成远程数据库session过多

现场报网公司数据库连不上,先检查了下数据库processes=1500,session=2200.我认为非常大啊。这个数据库没有几个人用。

查看v$session中的session最多是哪个machine发起的。发现是省公司的数据库发起的session,找开发梳理了下业务,省公司同步dblink操作网公司表,且是通过weblogic的连接池。

哦,有点明确了,是dblink引起的。weblogic连接池是一直存在的,所以在网公司端session是不释放的。假设省公司把应用都停掉,那在网公司端的session都会释放。要验证想法。做个试验:

目标:数据库A上建dblink,改动数据库B上的表。

环境准备:

1.在数据库A上建dblink

create public database link TO_B

connect to TEST_DB identified by  TEST_DB

using ‘(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.15.150)(PORT = 1521)))(CONNECT_DATA =(SID = orcl)))‘;

2.在数据库B上建表

create table TEST(  ID NUMBER );

insert into test values(1);

   開始測试:

1.在数据库B上select count(1) from v$session;

2.在数据库A上update [email protected]TO_B set id=1;

commit;

3.在数据库B上select count(1) from v$session;能够看到涨了一个

     对照測试:

1.在数据库B上select count(1) from v$session;

2.在数据库A上update [email protected]TO_B set id=1;

commit;

     alter session close database linkTO_B;

3.在数据库B上select count(1) from v$session;能够看到没有变化

总结: 出现这样的问题。归根结底是操作dblink不规范,用了之后没有关闭。

有可能是bug:

   
 

提供反馈...

您已依据 ID 匹配定向到此 BUG。 id=18394488&_adf.ctrl-state=bzjp9h83g_258&_afrLoop=361425704860767#" style="font-size:11px; text-decoration:none; color:rgb(8,81,179)">或者,
单击此处搜索此短语。

id=18394488&_adf.ctrl-state=bzjp9h83g_258&_afrLoop=361425704860767#" style="font-size:11px; text-decoration:none; color:rgb(8,81,179)">隐藏

 
Bug 18394488 : TOO MANY CONNECTIONS
OVER SHARED DBLINK AFTER UPGRADE TO 11.2.0.4

id=18394488&_adf.ctrl-state=bzjp9h83g_258&_afrLoop=361425704860767#" style="font-size:11px; white-space:nowrap; text-decoration:none">转究竟部

 
 

Bug 属性

   
 

类型 B - Defect 已在产品版本号中修复
严重性 2 - Severe Loss of Service 产品版本号 11.2.0.4
状态 36 - Duplicate Bug. To Filer 平台 212 - IBM AIX on POWER Systems (64-bit)
创建时间 2014-3-13 平台版本号 7.1
更新时间 2015-6-5 基本 Bug

id=18759589&refresh=N&bugProductSource=Oracle" style="font-size:14px; text-decoration:none; color:rgb(0,113,194); font-family:Helvetica,sans-serif; padding-top:5px">18759589

数据库版本号 11.2.0.4 影响平台 Generic
产品源 Oracle 与此
Bug 相关的知识, 补丁程序和 Bug

 
 

相关产品

   
 

产品线 Oracle Database Products 系列 Oracle Database Suite
区域 Oracle Database 产品 5 - Oracle Database - Enterprise Edition

Hdr: 18394488 11.2.0.4 RDBMS 11.2.0.4 PRG INTERFACE PRODID-5 PORTID-212 18759589
Abstract: TOO MANY CONNECTIONS OVER SHARED DBLINK AFTER UPGRADE TO 11.2.0.4

*** 03/13/14 12:14 am ***

PROBLEM:
--------
The production database system upgraded from 11.2.0.1 to 11.2.0.4 in the
previous weekend.
There are several shared db links on this database to other production
database that its version is 11.2.0.3 .
When trying to connect sessions on 11.2.0.4 to 11.2.0.3 via shared db links
it opens too many connection on connected database.
We tested this situation between 11.2.0.3 to 11.2.0.3 databases via shared db
link , opened session count is two (one of them is PSEUDO other is DEDICATED
)
but between 11.2.0.4 to 11.2.04 opened session count is at least 10. When
1000 session trying to connect 11.2.0.4 to 11.2.0.3 via shared db links about
10000 connection opening.

This system working correctly before database upgrade.
We didn‘t change any parameter, listener configuration or unix parameter.

DIAGNOSTIC ANALYSIS:
--------------------
Checked with the customer on:
1. Why are you using shared DBLINKS and SHARED servers ?
Because main application works with shared dblinks. (from many years ) ... We
didn‘t use shared servers , after upgrade too many connection is opening and
we have to use it because of handle too many connection with less resource .

2. Can you use standard DBLINKS and not use shared servers ?
We cannot use standard db links because of application design... If Oracle
solve this problem we can use dedicated. (before upgrade we had used
dedicated )

When checking with application development team on why are they using shared
db links ;
they said that main banking application works in webspehere connection pool
using XA transaction and it must use shared db link to handle connections !
It can‘t use standart db links . If oracle created shared db link feature why
are you offer to use standard db link ? Before upgrade everything works fine.
I am also repeating my words , we had used dedicated server , we have to use
shared server because of performance issue for now . If Oracle solve opening
many connection issue we will use dedicated server again . But shared db link
feautere will remain because of websphere XA transaction handling.

3. How many sessions to server B does each of your application connections to
Server A open ?

Its count didn‘t change , anyway after upgrade it is same that the previous
value before upgrade.

ct found metalink document why they use shared db link.
ORA-24777 reported when using a database link from within an XA coordinated
transaction (Doc ID 1506756.1)
Solution from document;

Two options

1. Configure the database to allow the use of shared servers and then let the
application use these as per the following documentation

http://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc003.htm#ADMIN0050
2

or establish whether the Java application needs to start an XA transaction.

OR

2. Define the database link being utilised as a shared database link, i.e,

CREATE SHARED DATABASE LINK ..

They got this error many years ago ;
ORA-24777 reported by a JDBC/XA application when utilising a database link
between two Oracle databases. And db links was configured to shared db links.
I explained before why we are using shared server ( performance )

A complete test case epxlaining how a connection from 11.2.0.4. to 11.2.0.3
opens alot of connections: db_link.pdf

WORKAROUND:
-----------
none

RELATED BUGS:
-------------
Bug 18157790 - ORA-22 AFTER UPGRADE FROM 11.2.0.3 TO 11.2.0.4
Bug 1559258  - PSEUDO SESSION INCREASE WITH XA + SHARED DBLINK 

REPRODUCIBILITY:
----------------
issue is reproducible on ct‘s env.

TEST CASE:
----------
provided

STACK TRACE:
------------

SUPPORTING INFORMATION:
-----------------------

24 HOUR CONTACT INFORMATION FOR P1 BUGS:
----------------------------------------

DIAL-IN INFORMATION:
--------------------

IMPACT DATE:
------------

附录为官方文档:

32 Managing a Distributed Database

Closing Database Links

If you access a database link in a session, then the link remains open until you close the session. A link is open
in the sense that a process is active on each of the remote databases accessed through the link. This situation has the following consequences:

  • If 20 users open sessions and access the same public link in a local database, then 20 database link connections are open.
  • If 20 users open sessions and each user accesses a private link, then 20 database link connections are open.
  • If one user starts a session and accesses 20 different links, then 20 database link connections are open.

After you close a session, the links that were active in the session are automatically closed. You may have occasion to close the link manually. For example, close links when:

  • The network connection established by a link is used infrequently in an application.
  • The user session must be terminated.

To close a link, issue the following statement, where linkname refers to the name of the link:

ALTER SESSION CLOSE DATABASE LINK linkname;

Note that this statement only closes the links that are active in your current session.

时间: 2024-12-05 12:08:28

oracle dblink造成远程数据库session过多的相关文章

使用Oracle客户端连接远程数据库

有三个Oracle客户端可使用: SQL Developer.PL/SQL Developer.Navicat Premium 一. SQL Developer(Oracle 自家的) 下载并安装 SQL Developer,连接简单就不说了. 下载地址:http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html 二.PL/SQL Developer11 配置 Client 下载 PL/

Oracle客户端访问远程数据库相关

同一局域网内一开始客户端访问不到远程服务器,经过网上查阅资料个人总结需要以下几方面设置 (1)需在oracle服务端的服务器里设置例外:控制面板->Windows 防火墙->高级设置->入站规则->新建规则:在规则类型里面选择端口,下一步规则应用选TCP协议,规则应用端口选择特定本地端口并填写oracle的默认端口1521(也可以用默认的所有端口),一直默认选择即可,最后填写名称和描述.完成后双击新建的规则,在作用域选项卡的远程IP地址中,选择下列IP地址,并添加要访问服务器的客户

PL/SQL配置oracle客户端,登录远程数据库配置

本地未安装Oracle数据库,但又想使用PL/SQL连接服务器端的数据库. 1.新建NETWORK文件夹, 在该文件夹下新建ADMIN文件夹, 在该文件夹下新建tnsnames.ora文件(拷贝下面的文件内容根据自己的数据库ip port 实例名进行修改) 修改NETWORK\ADMIN文件夹下的文件:tnsnames.ora中的数据库ip和数据库实例名(红色部分, 必要时修改端口,同事需要注意数据库实例名) # tnsnames.ora Network Configuration File:

Oracle 使用DBLike进行数据库的控数据库读取

当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据.下面讲介绍如何在本地数据库中创建dblink. 创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限.想知道有关dblink的权限,以sys用户登录到本地数据库: select * from user_sys_privs t where t.privilege like upper(

Oracle数据库使用DBLINK导入远程Oracle数据库信息

--1. 查询DBLINK权限 select * from sys.user_sys_privs t where t.privilege like upper('%link%'); --2. 赋予DBLINK权限 grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to demobase; --3. 查询创建的DBLINK连接 select * from DBA_DB_LINKS; --4. 创建DBLINK连接 create

使用Oracle DBLink进行数据库之间对象的访问操作

Oracle中自带了DBLink功能,它的作用是将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象,例如我们新建了一个数据database1,我们需要操作数据库database2中的表,或者我们需要操作远程机器上数据库database3中的表,我们就可以使用dblink这个强大的功能!1.我们如果要创建全局的DBLink,就是说无论什么角色都可以使用,那么我们需要先确定用户是否有DBLink权限,如果没有则需要使用sysdba角色给用户授权:查看用户

使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决

在数据库同步中我们经常会用到DBLink方式.DBLink可以将物理上存放于网络的多个数据库在逻辑上当成一个单一的大数据库.开发人员无需关心数据库的网络分布,就能很方便的实现从不同数据库之间读取数据.如何在Oracle数据库间建立DBLink我在之前的文章已有涉及,这里就不花篇幅讲解了.具体请查看Oracle建立DBLink. 本篇文章主要阐述如何解决DBLink方式无法实现Blob.Clob字段数据同步的问题.在网上已经有很多牛人给出了解决方案,在参照他们的方案解决问题的过程中,发现有些小问题

使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库

本文转自CSDN博客,http://blog.csdn.net/helifengwell/archive/2010/08/18/5820434.aspx 1,先到Oracle站点下载Instant Client : http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html 依据你的操作系统选择不同的Instant Client版本号 下载回是一个压缩文件,解压之后的文件夹叫:D:/i

Oracle数据泵远程导入文件到本地数据库

--以dba身份登录 C:\Users\Administrator>sqlplus / as sysdba --创建用户 SQL> create user bfzg0828 identified by bfzg0828 default tablespace users quota unlimited on users; --授予连接角色,资源角色给用户 SQL> grant connect,resource to bfzg0828; 授权成功. --授权创建数据链接 SQL> gr