带你深入了解IBM DB2的通信与连接过程解析

合集下载

db2 驱动 原理

db2 驱动 原理

db2 驱动原理DB2是一种关系数据库管理系统,它提供了一种连接数据库的驱动程序。

DB2驱动程序的原理是通过在应用程序和数据库之间建立一个通信桥梁,使得应用程序能够与数据库进行交互。

DB2驱动程序的主要功能是将应用程序的SQL语句转换为数据库可以理解的格式,并将结果返回给应用程序。

它实现了与数据库的通信协议,可以通过网络或本地连接与数据库进行通信。

在DB2驱动程序的实现中,最重要的组件是JDBC(Java Database Connectivity)接口。

JDBC是一种用于Java编程语言的API,可以访问各种类型的数据库。

DB2驱动程序使用JDBC接口来与DB2数据库进行通信。

DB2驱动程序通过加载JDBC驱动程序来与数据库建立连接。

JDBC驱动程序是一个Java类库,它包含了与特定数据库通信所需的代码。

当应用程序加载DB2驱动程序时,它实际上是加载了JDBC驱动程序。

一旦DB2驱动程序与数据库建立了连接,应用程序就可以通过执行SQL语句来与数据库进行交互。

DB2驱动程序将SQL语句转换为数据库可以理解的格式,并将其发送到数据库进行执行。

数据库执行完SQL语句后,将结果返回给DB2驱动程序,然后再由DB2驱动程序将结果返回给应用程序。

DB2驱动程序还提供了一些高级功能,如事务管理和连接池。

事务管理是指将一系列数据库操作作为一个原子操作来执行,要么全部成功,要么全部失败。

连接池是指在应用程序和数据库之间建立一组预先创建的数据库连接,以便在需要时可以重复使用,提高性能和效率。

总结起来,DB2驱动程序的原理是通过JDBC接口与数据库进行通信,将应用程序的SQL语句转换为数据库可以理解的格式,并将结果返回给应用程序。

它还提供了一些高级功能,如事务管理和连接池,以提高性能和效率。

db2数据库教程

db2数据库教程

db2数据库教程DB2数据库教程DB2是一种关系型数据库管理系统(RDBMS),由IBM开发和维护。

它是一种可靠稳定的数据库技术,被广泛应用于大型企业和机构中。

本教程将为您介绍DB2数据库的基本概念、安装过程、SQL语言以及一些高级主题。

1. DB2数据库的概述- DB2是IBM公司的一种关系型数据库管理系统(RDBMS)。

- 它支持在多个平台上运行,包括Windows、Linux和UNIX 等。

- DB2提供了高可用性、高可靠性和高性能的特性,以满足企业级应用的需求。

2. DB2的安装过程- 在Windows平台上安装DB2数据库的过程非常简单。

您只需要下载安装程序,然后按照安装向导的指导进行安装即可。

- 在Linux和UNIX平台上安装DB2略微复杂一些,需要一些命令行的操作。

3. DB2的SQL语言- DB2使用SQL(Structured Query Language)作为操作数据库的语言。

- SQL语言是一种标准的关系数据库查询语言,支持创建、更新和查询数据库表。

- 在DB2中,您可以使用SQL语句来创建表、插入数据、更新数据、删除数据以及查询数据。

4. DB2的高级主题- 数据库管理:您可以使用DB2的管理工具来管理数据库,包括备份和恢复、数据导入和导出等操作。

- 性能调优:DB2提供了一些性能调优的工具和功能,可以帮助您优化数据库的性能。

- 安全性:通过用户权限管理和数据加密等技术,DB2可以保护数据库的安全性。

- 高可用性:DB2支持在多个服务器之间实现数据的备份和复制,以保证数据库的高可用性。

总结:DB2是一种功能强大的关系型数据库管理系统,它具有高可用性、高可靠性和高性能的特点。

通过本教程,您了解了DB2的基本概念、安装过程、SQL语言以及一些高级主题。

希望本教程可以帮助您快速上手使用DB2数据库。

DB2的连接方法说明

DB2的连接方法说明
Password=yygl;
Persist Security Info=True;
User ID=yygl;
Data Source=orcl;
SQLDBXபைடு நூலகம்接方式:
DBMS Type:IBM DB2 UDB
Database:ORCL
Schema:inf
User: yygl
PassWord:yygl
DB2数据库编目:
200server50000db2catalogdborclatnodeyygl院方给我方的数据库连接需要有
DB2的连接方法说明
预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制
数据源连接
Provider=IBMDADB2.DB2COPY1;
Data Source=10.161.243.200;
示例:
1、安装DB2客户端,默认下一步,直至完成。
2、选择
3、输入命令行,编目:
服务器上安装DB2客户端后,要进行编目,才能连接HIS数据库,编目方法:在开始菜单里找到DB2命令行软件,输入:
db2 catalog tcpip node YYGL remote
10.161.243.200 server 50000
db2 catalog db orcl at node YYGL
院方给我方的数据库连接需要有:

db2的使用

db2的使用

db2的使用DB2是IBM公司开发的关系型数据库管理系统,它可以运行在多个操作系统平台上,如Windows、Linux、Unix和IBM的主机操作系统等。

DB2的功能非常强大,可以用于各种企业级应用程序的开发和部署。

在本文中,我们将详细介绍DB2的使用,包括安装、配置、管理和编程等方面。

一、DB2的安装和配置1、先前准备(1)确定需要安装的DB2版本和操作系统平台,以及应用场景和需求;(2)确保计算机符合DB2的最低系统要求,包括硬件和软件配置等;(3)获取适用于操作系统的DB2安装介质,可以从IBM官网或授权渠道获取。

2、安装过程(1)下载安装介质并解压缩至指定位置;(2)运行安装程序,按照提示进行安装,可以根据需要选择安装路径和组件;(3)在安装向导中选择“完整安装”,可以安装DB2服务器、客户端、控制台和示例数据库等组件;(4)在安装向导中设置DB2实例的参数,如实例名称、端口、用户名和密码等,这些参数将决定DB2服务器的启动和运行方式;(5)完成安装后,可以通过命令行或控制台查看DB2实例状态,控制服务器的启停和配置。

3、基本配置(1)启动DB2服务器可以通过控制台或命令行方式启动DB2服务器,如下:Linux/Unix平台:db2startWindows平台:db2cmd,进入命令行模式,输入db2start启动服务器。

(2)连接DB2实例db2 connect to DATABASE user USERNAME using PASSWORDDATABASE为数据库名称,USERNAME为用户名,PASSWORD为密码。

(3)创建数据库db2 create database DATABASEDATABASE为数据库名称。

(4)设定权限和用户PRIVILEGE为权限名称,USER为用户名,OBJECT为对象名称。

二、DB2的管理1、数据库的备份和还原2、数据库的维护TABLENAME为表名称。

IBM DB2 Connect 简介

IBM DB2 Connect 简介

IBM DB2 Connect 简介: 内有乾坤2005 年 4 月对于那些脱离大型机的应用程序——分布式应用程序来说,IBM® DB2® Connect™ 已成为向它们开放 DB2 for z/OS 数据库以及 zSeries 硬件平台传统公认的所有优点的首选方法。

本文是一个由 5 部分组成的系列中的第一篇文章,这个系列将介绍 DB2 Connect 的一些主要特性,这些特性有助于提高交付随需应变解决方案的能力。

简介1993 年,计算机界的专家们预测大型机(mainframe)将迅速退出历史舞台。

他们宣称,未来的计算基础设施将会是一个高度分布的、松散连接的个人电脑和客户机-服务器系统的集合。

作为该行业的相关参与者,IBM 几乎无立身之处。

我们都知道后来是怎么回事。

IBM 设法在分布式市场重新占得先机,并成为大型机(mainframe)技术的“主要”支持力量。

从价格的角度来看,IBM 大大缩减了大型机的价格。

从技术的角度来看,IBM 放弃了为其大型机提供动力的双极技术(bi-polar technology),而将大量赌注放在 CMOS 芯片技术上,试图通过这种方式,以剧减的价格交付大型机级别的计算。

更重要的是,对于所谓大型机是一种过时的技术,属于大型机的时代已经一去不复返这类荒诞的说法,这是一个直接有力的反击。

如今,企业比以前更多地使用大型机作为其计算基础设施的基础。

与此同时,Linux™、UNIX®、Windows® 和其他客户机-服务器系统(在此处被称作分布式平台)并没有消失,因为大型机又重新为它们在企业中赢得了地位。

实际上,这些分布式计算基础设施经历了一个发展的过程。

最终的结果是,客户希望将分布式平台的简单性和长处与大型机技术无可匹敌的强大性相结合。

如果说信息技术(IT)中有一个领域能让这种结合产生立杆见影的效果,那么这个领域一定是数据库应用领域。

DB2的JDBC连接驱动与URL总结

DB2的JDBC连接驱动与URL总结

DB2的JDBC连接驱动与URL总结DB2是IBM开发的一种关系型数据库管理系统。

为了与DB2数据库建立连接,需要使用JDBC(Java DataBase Connectivity)驱动程序。

JDBC是Java的一个标准接口,使得Java应用程序可以与不同的数据库进行交互。

在本文中,我将总结DB2的JDBC连接驱动和URL的相关信息。

JDBC连接驱动:在DB2中,有两种类型的JDBC连接驱动可供选择。

这两种驱动分别是Type 2驱动(也称为本地协议驱动)和Type 4驱动(也称为纯Java驱动)。

1. Type 2驱动:Type 2驱动是基于DB2客户端的本地协议实现的。

这种驱动依赖于DB2客户端和其本地库文件来建立与DB2数据库的连接。

Type 2驱动是用C语言编写的,通过JNI(Java Native Interface)与Java应用程序进行通信。

使用Type 2驱动需要在Java应用程序中配置DB2客户端的相关路径和库文件。

2. Type 4驱动:Type 4驱动是在JDBC API的基础之上完全由Java语言编写的纯Java驱动。

这种驱动不需要依赖于DB2客户端,可以直接通过TCP/IP协议与DB2数据库建立连接。

Type 4驱动有着更好的性能和可移植性,因此在大多数情况下被更多推荐使用。

URL格式:JDBC URL(Uniform Resource Locator)是用于建立与特定数据库之间的连接的字符串,它由多个部分组成,用于指定数据库的位置和访问方式。

DB2的JDBC URL格式如下:```jdbc:db2://[hostname][:port]/[databaseName]:[driverType]=[dr iverValue];[property1]=[value1];[property2]=[value2]...```其中,各部分的含义如下:1. `jdbc:db2://`:指定使用DB2的JDBC驱动来建立连接。

DB2的连接

DB2的连接

DB2的连接DB2的连接2009-09-29 08:16:27| 分类: DB2 | 标签: |字号大中小订阅DB2的连接分为本地访问和远程连接.本地访问有很多种方法,常用的有两种。

一种是使用命令行连接。

在cmd终端中键入DB2cmd进入到了DB2的命令行,再键入DB2命令进入数据库。

键入connect to sample (sample是数据库库名)db2 connect to <数据库名> user <用户名> using <密码> --连接到远端数据库db2 list application --查看所有连接db2start --启动数据库db2stop --停止数据库db2 list tables --查看数据库中所有表结构list tables for system --列出所有系统表db2 describe table <表名> --查看表结构还有一种是使用控制中心。

DB2的远程连接命令行连接本文假定如下:客户端为windows/linux/unix,客户端也已经安装了db2或者客户端服务器端为windows/linux/unix客户端ip:192.168.42.147,服务器端ip为192.168.42.102步骤:在客户端建立服务器端数据库的节点在客户端命令行执行catalog tcpip node test remote 192.168.42.102 server 50000 注:test为在客户端定义的节点,名字可以任意192.168.42.102为客户端的ip50000为DB2使用的端口查找服务器端DB2使用的端口,如果服务器端为linux,可以访问/etc/services文件,如果你的实例名为db2inst1,找到如下行db2inst1 50000/tcp如果服务器端为windows,查看X:\WINNT\System32\drivers\etc\services绑定节点和客户端的数据库执行下面的命令catalog db coshine at node test注:coshine为服务器端中你想要连接的数据库名Test就是步骤一种定义的节点使绑定生效执行 terminate设定客户端db2codepage(代码页设置)即字符编码先在服务器端查询db2codepage,执行db2set –all[i] DB2_EXTENDED_OPTIMIZATION=ON[i] DB2_DISABLE_FLUSH_LOG=ON[i] AUTOSTART=YES[i] DB2_STRIPED_CONTAINERS=ON[i] DB2_HASH_JOIN=Y[i] DB2COMM=tcpip[i] DB2CODEPAGE=819[i] DB2_PARALLEL_IO=*可以看到服务器端的DB2CODEPAGE为819,所以客户端也必须设置为这个数字执行db2set db2codepage=819进行连接执行connect to coshine user user_name using password注释Db2codepage:即db2数据库的编码方式db2codepage=1386(简体中文)db2country=86(中国)一个数据库一旦建立,他的代码页就没有办法改,db2set DB2CODEPAGE=1386只能改变代码页环境,不能改变数据库的代码页如果不能连接:检查如下是否正确确保可以ping通服务器端:ping 192.168.42.102确保服务器端的db2已经启动:db2start确保客户端DB2COMM设置为tcpip先查看db2comm设置:db2set –all如果没有设置这个注册表,执行db2set db2comm=tcpip将SVCENAME设置成/etc/services中的端口号或者服务名了吗?执行db2 get dbm cfg查看,找到SVCENAME,如果当前值不是服务器端的端口号或者服务名,进行更新设置执行:db2 update dbm cfg SVCENAME db2inst1注:db2inst1为服务名,这个在/etc/services文件中db2inst1 50000/tcp一致JAVA连接DB2数据库例子import ng.reflect.*;import java.sql.*;class db2JDBCVersion{static Driver driver = null;static final String JDBC12 = "IBM DB2 JDBC 1.2";static final String JDBC20 = "IBM DB2 JDBC 2.0";//static final String url = "jdbc:db2:demo";static final String url = "jdbc:db2://10.55.64.74:50000/";static Method mCreateStatement = null;static{try{driver = (Driver)Class.forName("com.ibm.db2.jcc.DB2Driver").newInstanc e();}catch (Exception e){e.printStackTrace();printBadEnvironmentMessage();}}public static void main(String argv[]){if (null == driver)System.exit(-1);Connection con = null;try{if (argv.length == 0){// Connect with default database-alias (SAMPLE), username and// password// con = DriverManager.getConnection(url + "SAMPLE");con = DriverManager.getConnection(url );}else if (argv.length == 1){// Connect with user-provided database-alias; default username and// passwordcon = DriverManager.getConnection(url + argv[0]);}else if (argv.length == 2){// Connect with default database-alias (SAMPLE); user-provided// username and passwordcon = DriverManager.getConnection(url + "SAMPLE", argv[0], argv[1]);}else if (argv.length == 3){// Connect with user-provided database-alias, username and passwordcon = DriverManager.getConnection(url + argv[0], argv[1], argv[2]);System.out.println("con="+con.toString());}else{System.out.println("\nUsage: java db2JDBCVersion [database-alias | " +"[database-alias] username password]\n");System.exit(-1);}// getDriverName indicates JDBC version as of:// DB2 v6.1 FixPak 8// DB2 v7.1 FixPak 2aDatabaseMetaData dbmd = con.getMetaData();String JDBCVersion = dbmd.getDriverName();if (JDBCVersion.indexOf("1.2") >= 0){JDBCVersion = JDBC12;}else if (JDBCVersion.indexOf("2.0") >= 0){JDBCVersion = JDBC20;}// Old version of DB2, use alternate method of determining JDBC version// i.e. check if method Connection.createStatement(int, int) existselse if (getJDBC20CreateStatementMethod() == null){JDBCVersion = JDBC12;}else{JDBCVersion = JDBC20;}// If class files are JDBC 2.0 version, check that the// native libraries are tooif (JDBCVersion == JDBC20 && !verifyJDBC20(con)){JDBCVersion = null;}con.close();if (null == JDBCVersion){printBadEnvironmentMessage();System.exit(-1);}else{System.out.println(JDBCVersion);}}catch (Exception e){e.printStackTrace();System.exit(-1);}}synchronized static private Method getJDBC20CreateStatementMethod(){if (null == mCreateStatement){try{Class c = Class.forName("COM.ibm.db2.jdbc.app.DB2Connection");Class params[] = new Class[]{ Integer.TYPE, Integer.TYPE };mCreateStatement = c.getDeclaredMethod("createStatement", params);}catch (Exception e){}}return mCreateStatement;}static private void printBadEnvironmentMessage(){System.out.println("Bad DB2 JDBC environment; please run usejdbc1 orusejdbc2 again " +"and check for errors.");}static private boolean verifyJDBC20(Connection con){Method m = getJDBC20CreateStatementMethod();if (null == m){return false;}Object params[] = null;Statement stmt = null;try{params = new Object[]{new Integer(1004), // ResultSet.TYPE_SCROLL_INSENSITIVE new Integer(1007) }; // ResultSet.CONCUR_READ_ONLYstmt = (Statement)m.invoke(con, params);}catch (Exception e){return false;}// Attempt to execute a batch statement, if the native library is// really the JDBC 1.2 version, then the following exception will// be thrown:// InvocationTargetException->UnsatisfiedLinkErrortry{Class c[] = new Class[]{ Class.forName("ng.String") };m = stmt.getClass().getDeclaredMethod("addBatch", c);params = new Object[]{ "insert into dummy values (1)" };m.invoke(stmt, params);m = stmt.getClass().getDeclaredMethod("executeBatch", null);m.invoke(stmt, null);}catch (InvocationT argetException e){// Should get here if JDBC 2.0 is working properlyThrowable t = e.getTargetException();if (t instanceof UnsatisfiedLinkError){return false; // Indicates wrong DB2 JDBC library}}catch (Exception e){return false;}finally{try{stmt.close();}catch (Exception e){}try{con.rollback();}catch (Exception e) {}}return true;}}。

agents详解

agents详解

带你深入了解IBM DB2的通信与连接过程发布时间:2008.08.04 08:44来源:赛迪网作者:Alizze【赛迪网-IT技术报道】本文详细描述了DB2® Universal Database™(DB2 UDB)代理的工作原理以及连接集中器的特性,并对 DB2 连接上常见的问题及代理的优化作了详细的分析。

希望通过本文让用户能够了解 DB2 的连接机制和客户端与服务器端的交互作用,可以解决在实际的商业环境中遇到的性能问题。

简介DB2 的代理 (agent) 是位于 DB2 服务器中的服务于应用程序请求的一些进程或线程。

当有外部应用程序连接至 DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求。

一般 DB2 的代理被称为工作代理,工作代理大概有三种类型:空闲代理、活动的协调代理、子代理。

◆空闲代理:指的是没有任何任务的代理。

这种代理不服务于任何远程连接也不服务于本地连接,处于一种备用或待命状态。

◆活动的协调代理:指的是处于工作状态的代理,每一个外部应用程序产生的数据库活动连接的都有一个活动协调代理来为它服务。

◆子代理:指的是接受协调代理分发出来的工作的下一级代理。

在 DB2 V95 以前,只有在多分区环境 (MPP) 或节点内并行环境 (SMP) 下才存在子代理,在 DB2 V95 中所有环境中都可能存在子代理。

在 DB2 服务器中有一个代理池,当实例刚启动后这里便有一些代理(其数量取决于实例参数 NUM_INITAGENTS)。

在没有任何数据库连接时,它们处于待命状态,就是空闲代理。

而当有外部程序连接至数据库时,这些代理开始得到命令去服务于这些新建的连接,这时它们就变成了活动的协调代理。

这些协调代理再将请求逐步细分,分配给下一级代理即子代理去处理。

如果当前的代理都已经在工作了,同时又来了新的请求,数据库管理器会产生一个新的代理去应答。

当事务处理完毕而且数据库连接断开后,协调代理要么返回代理池变回空闲代理,要么就自动消失了(取决于实例参数 NUM_POOLAGENTS)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

带你深入了解IBM DB2的通信与连接过程Alizze 时间:2008年08月04日字体: 大中小关键词:<"cblue" "/search/?q=集中器" target='_blank'>集中器<"cblue" "/search/?q=连接数" target='_blank'>连接数<"cblue""/search/?q=应用程序" target='_blank'>应用程序<"cblue" "/search/?q=管理器" target='_blank'>管理器<"cblue" "/search/?q=最大"target='_blank'>最大??? 本文详细描述了 DB2? Universal Database?(DB2 UDB)代理的工作原理以及连接<"cblue" "/search/?q=集中器" title="集中器">集中器的特性,并对 DB2 连接上常见的问题及代理的优化作了详细的分析。

希望通过本文让用户能够了解 DB2 的连接机制和客户端与服务器端的交互作用,可以解决在实际的商业环境中遇到的性能问题。

简介??? DB2 的代理 (agent) 是位于 DB2 服务器中的服务于<"cblue""/search/?q=应用程序" title="应用程序">应用程序请求的一些进程或线程。

当有外部应用程序连接至 DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求。

一般 DB2 的代理被称为工作代理,工作代理大概有三种类型:空闲代理、活动的协调代理、子代理。

??? ◆空闲代理:指的是没有任何任务的代理。

这种代理不服务于任何远程连接也不服务于本地连接,处于一种备用或待命状态。

??? ◆活动的协调代理:指的是处于工作状态的代理,每一个外部应用程序产生的数据库活动连接的都有一个活动协调代理来为它服务。

??? ◆子代理:指的是接受协调代理分发出来的工作的下一级代理。

在 DB2 V95 以前,只有在多分区环境 (MPP) 或节点内并行环境 (SMP) 下才存在子代理,在 DB2 V95 中所有环境中都可能存在子代理。

??? 在 DB2 服务器中有一个代理池,当实例刚启动后这里便有一些代理(其数量取决于实例参数 NUM_INITAGENTS)。

在没有任何数据库连接时,它们处于待命状态,就是空闲代理。

而当有外部程序连接至数据库时,这些代理开始得到命令去服务于这些新建的连接,这时它们就变成了活动的协调代理。

这些协调代理再将请求逐步细分,分配给下一级代理即子代理去处理。

如果当前的代理都已经在工作了,同时又来了新的请求,数据库<"cblue""/search/?q=管理器" title="管理器">管理器会产生一个新的代理去应答。

当事务处理完毕而且数据库? 连接断开后,协调代理要么返回代理池变回空闲代理,要么就自动消失了(取决于实例参数NUM_POOLAGENTS)。

这就是一个代理的生命周期。

相关的配置参数??? 通过执行 DB2 get dbm cfg 可以看到以下几个和代理相关的实例参数:MAXAGENTS,NUM_POOLAGENTS,NUM_INITAGENTS,MAX_COORDAGENTS,MAX_CONNECTIONS,MAXCAGENTS。

下面对它们做一下简要介绍:??? ◆MAXAGENTS:这个参数为当前实例中全部代理的数量,包括协调代理,空闲代理和子代理之和。

不过这个参数在 DB2 V95 中已经不再使用了。

??? ◆NUM_POOLAGENTS:这个参数用来控制代理池中的空闲代理的数量。

当活动的代理完成工作返回代理池变成空闲代理时,如果数量超过了这个参数,那么这个代理就会自动消失了。

注意:在连接集中器激活的情况下,代理池中的空闲代理数目在某一时刻可能会超过 NUM_POOLAGENTS 的大小,以应对突发的高密度连接。

??? ◆NUM_INITAGENTS:这个参数就是前面提到的在实例刚刚启动时便生成的一些空闲代理的数目。

这是为了提高性能,因为这些代理可以随时变成协调代理去应答外部应用请求,而不用临时再生成新的代理。

??? ◆MAX_COORDAGENTS:这个参数决定了在实例中在同一时刻<"cblue" "/search/?q=最大" title="最大">最大的协调代理的数目 ( 在多分区环境指的是一个节点上的最大协调代理数 )。

??? ◆MAX_CONNECTIONS:这个参数决定了允许连接至一个实例的最大的<"cblue" "/search/?q=连接数" title="连接数">连接数 ( 在多分区环境指的是一个节点上的最大连接数 )。

??? ◆MAXCAGENT:这个参数决定了实例中的令牌的数量,一个协调代理只有得到了令牌才能去服务于应用程序。

当没有得到令牌时,协调代理只能等候。

不过这个参数在 DB2 V95 中也已经取消了。

??? 还有一个连接参数 MAXAPPLS 可以通过 db2 get db cfg fordatabase_name 得到,它是一个数据库级别的参数,这个参数决定了同时连接至一个数据库的最大连接数。

在一个实例下的所有数据库的 MAXAPPLS 值之和不能超过实例参数MAX_CONNECTIONS。

连接集中器1. 基本原理??? 从 DB2 V8 开始,DB2 实例中有一个叫做连接集中器的特性,可以用来优化数据库的连接。

缺省情况下,在实例创建的时候,MAX_CONNECTIONS 与MAX_COORDAGENTS 的值是一致的。

这个时候每一个协调代理唯一地服务于一个连接。

比如说有 1000 个连接就要有 1000 个协调代理为之服务。

这对服务器是一个很大的负担,因为每一个代理都要消耗一定的资源。

而当我们将MAX_CONNECTIONS 的值设定的比 MAX_COORDAGENTS 大,这时 DB2 的连接集中器就被激活了。

它允许多个连接对应于一个代理。

??? 连接集中器的功能与 DB2 CONNECT 中的连接池相似。

不过连接集中器比连接池的优点在于它能够重用外部连接,即多个排队的应用程序可以重复使用一个存在的连接,而连接池则需要先删除再重建一个连接去服务于一个新的应用程序。

在连接集中器中每个协调代理并不唯一地服务于一个连接,当某个外部连接断开后,协调代理被分配给其他连接。

这样。

同时允许更多的连接连到数据库,并且减少了每个连接的内存消耗,避免了频繁的删除和创建代理所带来的系统开销。

下面是连接集中器的具体工作原理:??? 首先将 MAX_CONNECTIONS 的值设定的大于 MAX_COORDAGENTS 去激活连接集中器。

在连接集中器中代理被分成逻辑代理和工作代理。

逻辑代理与外部应用程序对应,它并不对应与某个特定的引擎分配单元 (EDU)。

工作代理和前面定义的一样,是具体的引擎分配单元。

当逻辑代理多于工作代理时连接集中器就被激活了。

当有多个连接同时连接到服务器时,连接被一一分配给各个逻辑代理。

逻辑代理再去请求工作代理的服务。

??? 比方说,代理池是一个饭店,在饭店里通常都是顾客多于服务员。

刚开始,还没有顾客 ( 相当于外部应用 ) 的时候。

有一些值班的服务员在饭店里待命(相当于实例启动时在代理池中创建的空闲代理 NUM_INITAGENTS)。

一旦来了应用请求(顾客),调度程序(相当于领班)就去安排服务员开始工作,服务员就开始忙起来去招呼顾客。

这时服务员的角色相当于协调代理。

她们接待完顾客后便将菜单传达给厨师和小工 ( 相当于子代理 )。

而当顾客越来越多,超过了最初的值班服务员数量。

服务器就生成新的代理来服务于这些应用,就好像是从员工宿舍叫来更多的服务员来工作。

当在场服务员数达到了一个数目 (MAX_COORDAGENTS),饭店的所有服务员都在工作了,没有其他的在编服务员了。

这时新来的顾客 ( 外部应用 ) 只能坐在座位上等候了。

MAX_CONNECTIONS 在这里相当于饭店里的总的就餐座位数,当顾客数目 ( 外部应用 ) 达到了这个数值,后来的顾客只能离去了(相当于连不上数据库)。

??? 这里需要注意的是 MAX_CONNECTIONS 并不是指同时连在实例上的活动的连接,因为有些连接即使连在实例上了,也要等候协调代理服务,当前活动的连接数与活动的协调代理数相等。

当一个协调代理处理完一个应用程序后,它会被分配给其它等候的应用,相当于服务员去服务于其他等待着的顾客。

在饭店中还有一些座位是专门为服务员休息准备的 ( 这个座位数相当于NUM_POOLAGENTS)。

当顾客渐渐散去,越来越少的时候,部分服务员 ( 协调代理 ) 已经无事可做,就返回这些座位(变成空闲代理)。

当这些座位也被占满了,那么再有服务员 ( 协调代理 ) 返回休息时,就没有可供休息的座位了( 假设服务员不能坐就餐座位 )。

这些服务员就只有返回员工宿舍了 ( 相当于代理的删除 )。

图 1 反映了这一流程。

图中实线箭头表明当前状态,虚线箭头表明将要发生的事件。

????????????????????????????????????? 图 1. 代理的工作流程图2. DB2 V9.5 新特性??? 在 DB2 V9.5 中有一个新特性,就是 MAX_CONNECTIONS 和MAX_COORDAGENTS 都可以被设置成 AUTOMATIC。

如果你认为系统可以承受所有的连接,同时又想限制被协调代理消耗的资源,你可以只将 MAX_CONNECTIONS 设定为 AUTOMATIC, MAX_COORDAGENTS 设定为一个数值。

这时系统认为可以连到实例的连接数时无限的。

如果你对最大连接数和协调代理数都不想做限制的话,你可以将它们都设为 AUTOMATIC。

如果这时 MAX_CONNECTIONS 设定为AUTOMATIC 的数值大于 MAX_COORDAGENTS 设定为 AUTOMATIC 的数值,连接集中器也就被激活了。

相关文档
最新文档