DB2:访问数据库



DB2:访问数据库

要想在远程客户端访问DB2数据库,就必须配置DB2服务器通信和客户端通信。

控制中心:是DB2服务器的中心管理点,是DB2管理工具的核心。它是依赖于数据库管理服务器(DAS)的。DAS帮助控制中心调度作业在数据库服务器上的运行,并管理远程数据库服务器上的对象及其他任务。

客户端如何能够识别远程数据库服务器呢?DB2采取的办法是将远程数据库服务器端的节点信息、数据库信息分别写入客户端本地SQLNODIR文件和SQLDBDIR文件,这样就可以将远程的服务器映射到本地,这一过程为编目(catalog)。在编目之前,客户端必须能够与DB2服务器通信,客户机系统的数据库管理员必须建立该数据库管理系统与DB2服务器的通信,建立的方式则取决于操作系统和DB2服务器所使用的通信协议。

复制中心:复制中心用于管理DB2数据服务器和其他的关系数据库(DB2或者非DB2)之间的复制。

任务中心:可以用来安排、运行任务并通知人们已完成任务的状态。

日志:监视作业和查看结果。

许可证中心:显示DB2许可证状态和安装在系统上的DB2产品的使用情况。

DB2 CLP 处理程序

CLP从架构上来说由两个过程组成:

1.前端进程,用于处理与操作系统命令提示符的通信

2.后端进程,用于处理与数据库的通信。

在windows情况下,使用db2cmd或者db2cw命令来启动DB2 CLP

配置DB2服务器的TCP/IP通信

客户端要想访问DB2数据库服务器,必须先配置DB2服务器上的通信协议,DB2服务器才会接受来自远程DB2客户机的建立连接请求。

在配置DB2实例的TCP/IP,则DB2客户机也必须正在使用TCP/IP才能建立连接;

标识“连接服务名称”和“连接端口”,或仅标识“连接端口”。

如果在DBM配置文件的svcename字段中指定了服务名称,那么必须在services文件中添加一行,写入服务名称和端口/协议的映射关系。如果在DBM配置文件的svecname字段中指定的不是服务名称而是端口号,则不需要更新services文件,services文件的位置,windows下,system32\drivers\etc;linux下是\etc

添加那行如下:db2c_db2inst1 50000/tcp;db2c_db2inst1 是连接服务名称;50000是端口号,tcp是协议

在服务器上更新数据库管理器配置文件

设置DB2服务器的通信协议 例如:db2set DB2COMM=tcpip

查看服务器通信端口状态,netstat命令

节点目录用于存储远程数据库的所有连通性信息。只有在一个连接到服务器的客户机上时才需要编目。

节点目录是和实例对应的。节点目录是物理的,实例是逻辑的!实例映射到物理上就是节点目录。如果实例在本地,那么在创建实例的时候,默认会创建一个和实例同名的本地目录。这是隐式的,反正我们在本地访问的时候也用不到。但是如果在客户机上需要访问远程实例,那么必须为该实例建立一个和实例对应的节点目录,这个节点目录告诉我们该实例在哪个机器上(IP地址,主机名),使用什么通信协议(设置DB2COMM变量)和使用通信端口(SVCENAME)。

节点目录默认在实例目录下:有两个文件,SQLNODIR和SQLNOBAK。其中SQLNOBAK是SQLNODIR的备份,当SQLNODIR被损坏时,把SQLNOBAK改名为SQLNODIR即可。

系统数据库目录包含本地数据库目录和远程映射到本地的数据库目录。它是我们访问数据库的一个入口,我们连接数据库时首先去系统数据库目录中判断这个数据库是否存在,然后再判断这个数据库是本地数据库还是远程数据库。如果是本地数据库,就直接到本地物理目录上访问;如果是远程数据库,还要寻找这个远程数据库位于哪个节点上,然后再到节点目录中找到这个节点的通信信息。

系统数据库目录包含本地数据库目录和远程映射到本地的数据库目录,它是我们访问数据库的一个入口。

本地数据库目录包含了有关本地数据库的信息。本地数据库目录驻留在数据库结构内部,当您用create database命令创建数据库时,将隐式地堆数据库进行编码。

远程连接db2设置

实现:在客户端远程连接服务器端的db2db2之间的互连)

 

本文假定如下:

客户端为windows/linux/unix,客户端也已经安装了db2或者客户端

服务器端为windows/linux/unix

客户端ip192.168.42.147,服务器端ip192.168.42.102

 


步骤:

  1. 在客户端建立服务器端数据库的节点

在客户端命令行执行

Db2 catalog tcpip node test remote 192.168.42.102 server 50000

注:test为在客户端定义的节点,名字可以任意

192.168.42.102为客户端的ip

50000DB2使用的端口

查找服务器端DB2使用的端口,

如果服务器端为linux,可以访问/etc/services文件,如果你的实例名为db2inst1,找到如下行

db2inst1 50000/tcp

如果服务器端为windows,查看X:\WINNT\System32\drivers\etc\services

 

  1. 绑定节点和客户端的数据库

执行下面的命令db2 catalog db coshine at node test

注:coshine为服务器端中你想要连接的数据库名

Test就是步骤一种定义的节点

  1. 使绑定生效

执行db2 terminate

  1. 设定客户端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=*

可以看到服务器端的DB2CODEPAGE819,所以客户端也必须设置为这个数字

执行db2set db2codepage=819

  1. 进行连接

执行db2 connect to coshine user user_name using password

 

注释

Db2codepage:即db2数据库的编码方式

db2codepage=1386(简体中文) db2country=86(中国)

一个数据库一旦建立,他的代码页就没有办法改,    db2set  DB2CODEPAGE=1386只能改变代码页环境,不能改变数据库的代码页 如果不能连接:检查如下是否正确

  1. 确保可以ping通服务器端:ping 192.168.42.102
  2. 确保服务器端的db2已经启动:db2start
  3. 确保客户端DB2COMM设置为tcpip

先查看db2comm设置:db2set –all

如果没有设置这个注册表,执行db2set db2comm=tcpip

  1. SVCENAME设置成/etc/services中的端口号或者服务名了吗?

执行db2 get dbm cfg查看,找到SVCENAME,如果当前值不是服务器端的端口号或者服务名,进行更新设置

执行:db2 update dbm cfg SVCENAME db2inst1

注:db2inst1为服务名,这个在/etc/services文件中db2inst1 50000/tcp

一致