天道酬勤

RDBMS and My Life

Archive for the ‘db2’ tag

Configure Ora11gR2 T-gateway for DB2UDB

leave a comment

Oracle使用Generic Heterogeneous Services和Transparent Gateways两种方式访问non-oracle 数据库系统,前者是使用不同数据源的ODBC驱动访问,后者使用各自的native driver访问,这里主要说说Gateway。
测试环境:DB2:OEL5.3 + DB2UDB 9.7 ORACLE:OEL5.3 + Oracle 11.2
可以看到,11gR2确实有了更多人性化的东西,除了安装RDBMS时的“Fix & Check Again”功能外,在安装透明网关时也比之前的版本更方便,需要手工配置的地方越来越少,充分体现了User love simplicity。

dg4db2

在安装完gateway之后,在$ORACLE_HOME目录下会有一个dg4db2/admin的文件夹(目录命名发生了点变化,以前为:tg4drda),有三个模板文件:initdg4db2.ora、listener.ora.sample、tnsnames.ora.sample。复制一份initdg4db2.ora文件命名为initdb2inst1.ora(db2inst1为db2的实例名)。打开initdb2inst1.ora配置如下参数:

HS_FDS_CONNECT_INFO=[ochef.db2]:50000/sample,LUW

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

HS_TRANSACTION_MODEL=COMMIT_CONFIRM

HS_FDS_TRANSACTION_ISOLATION=READ_COMMITTED

HS_FDS_SUPPORT_STATISTICS=TRUE

HS_FDS_RESULTSET_SUPPORT=FALSE

HS_FDS_PACKAGE_COLLID=ORACLEGTW

HS_IDLE_TIMEOUT=0

以上参数基本上不用修改,都是在安装时在上图中填写的参数值自动生成。将listener.ora.sample、tnsnames.ora.sample文件中的内容分别添加到$ORACLE_HOME/network/admin下对应的listener.ora和tnsnames.ora文件。具体内容如下:

Listener.ora文件中添加如下内容:

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=db2inst1)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0)

(PROGRAM=dg4db2)

)

)

tnsnames.ora文件,添加如下内容:

db2inst1 =

(DESCRIPTION =

(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ochef.11g)(PORT = 1521)))

(CONNECT_DATA =  (SID = db2inst1))

(hs = ok)

)

启动监听

[oracle@ochef ~]$ lsnrctl start

创建dblink连接db2的数据库实例db2inst1

[oracle@ochef ~]$ sqlplus “/as sysdba”

SQL> create public database link ora4db2 connect to db2inst1 identified by db2inst1  using ‘db2inst1′;

检查db2link ora4db2是否连接成功:

SQL>select * from db2inst1.employee@ora4db2;

SQL> select count(*) from db2inst1.employee@ora4db2;

COUNT(*)

———-

42

Simple无处不在。

-The End-

Written by ochef

November 14th, 2009 at 9:28 pm

Posted in Database

Tagged with , ,

Install and configure DB2 V9.7 client for linux

leave a comment

DB2 V9.7 client安装在RedHat Linux平台上最低要求为5.2以上,kernel最低为2.6.16,否则在安装时会遇到如下的错误提示信息:

WARNING:

The required minimum kernel level is 2.6.16

Required minimum level of glibc is 2.4.0

检查系统包

#rpm -qa|grep  compat-libstdc++

compat-libstdc++**.rpm

配置 Linux 内核参数

#vi /etc/sysctl.conf文件,添加内核参数

kernel.msgmni =1024

kernel.sem = 250  256000  32  1024

#sysctl  -p  使其修改立即生效

下载db2 V9.7的客户机安装包下载并安装

#tar  -xzvf client_linuxia32_v97.tar.gz

#cd client

#sh db2_install

创建用户

#groupadd db2iadm1

#useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1

# /opt/ibm/db2/V9.7/instance/db2icrt -a server db2inst1

#passwd db2inst1

添加DB2端口

#su -

#vi /etc/services 加入下面一行

db2inst1   50000/tcp

修改/etc/hosts文件,添加服务器的IP和客户机的IP

#vi /etc/hosts

设置实例的环境变量

运行脚本  /home/db2inst1/sqllib/db2profile

在服务器端配置TCP/IP通信

[db2inst1@ochef ~]$ db2 update database manager configuration using svcename db2inst1

[db2inst1@ochef ~]$ db2 get dbm cfg |grep -i “svcename”

设置DB2服务器的通信协议

[db2inst1@ochef ~]$ db2set DB2COMM=tcpip

[db2inst1@ochef ~]$ db2stop

[db2inst1@ochef ~]$ db2start

从客户端编目TCP/IP节点

[db2inst1@ochef ~]$ db2 catalog tcpip node ochefdb2 remote 192.168.0.97 server 50000

[db2inst1@ochef ~]$ db2 terminate

编目TCP/IP节点是要在client端节点目录中添加一个描述远程节点的条目,client端访问server端时告诉它远程主机所选择的别名(node_name)、hostname(ip_address)和svcename(或port_number)。

在客户端编目TCP/IP节点时遇到如下错误:

SQL10007N Message “-1390″ could not be retrieved.  Reason code: “3″.

这个问题困扰了我一下午,百思不得其解,后来无意使用db2ilist查看实例信息,返回的结果是空的,是不是因为没有创建instance造成的呢?这点跟ORACLE完全不一样,客户端要创建什么实例?死马当活马医吧,回到root用户,运行db2icrt命令去创建instance,再回db2inst用户下编目TCP/IP一切ok。

#/opt/ibm/db2/V9.5/instance/db2icrt -a AuthType -u FencedID InstName

-a AuthType (Linux 或 UNIX)

表示实例的认证类型。AuthType 可为 SERVER、CLIENT 或 SERVER_ENCRYPT 其中之一。 SERVER 是缺省值。此参数是可选的。

-u FencedID

指定创建的受防护用户的名称。表示将用来运行受防护用户定义的函数(UDF)和受防护存储过程的用户的名称。如果在客户机上创建实例,那么此选项不是必需的。但是在server上创建时必须要指定这个FencedID的。

InstName

表示实例的名称。实例的名称必须与拥有实例的用户的名称相同。指定创建的拥有实例的用户的名称,将在拥有实例的用户的主目录中创建该实例。

解决该问题后,catalog编目:

[db2inst1@ochef ~]$ db2 catalog database sample at node ochefdb2

[db2inst1@ochef ~]$ db2 terminate

必须先在客户端上编目数据库,客户端应用程序才能访问远程数据库。在编目远程数据库时需要数据库名称、数据库别名、节点名、认证类型、注释等信息。只有在client端要连接到server端时才需要编目,因为节点目录用于存储远程数据库的所有连通性信息,这一过程类似ORACLE中sqlnet.ora和tnsnames.ora二个文件的作用。

使用CLP测试客户端到服务器的连接:

[db2inst1@ochef bin]$db2  connect to sample user db2inst1 using db2inst1

如果连接成功,会收到一条显示已经连接到的数据库名称,如下所示:

Database Connection Information

Database server      = DB2/LINUX 9.7.0

SQL authorization ID  = DB2INST1

Local database alias   = SAMPLE

通过客户端查询系统目录表中列示的所有表名的列表:

[db2inst1@ochef ~]$db2 select tabname from syscat.tables

……

HMON_ATM_INFO

HMON_COLLECTION

POLICY

433 record(s) selected.

要中断连接时,使用db2 connect reset 命令将中断该连接。

附:Configure db2 client to server connection checklist:

1 DB2SYSTEM注册变量是否为主机的hostname,db2安装时已经默认设置,如中间更改过hostname,需要重设:

$db2set DB2SYSTEM=HOSTNAME

2 在serverh 验证实例使用的通讯协议,查看DB2COMM变量

$db2set -all  若不是需修改

$db2set DB2COMM=tcpip

3 查看/etc/services中,有无与上面对应SVCENAME的端口,例如:

db2inst1 50000/tcp

要确认服务器是否在监听,可以用netstat -an 来查看端口是否处于LISTEN状态

tcp   0   0 0.0.0.0:50000     0.0.0.0:*      LISTEN

4 更新实例配置文件

$db2 update dbm cfg using svcename db2inst1

5 是否在client端catalog节点

$ db2 catalog tcpip node ochefdb2 remote 192.168.0.97 server 50000

验证远程服务器实例配置

$db2 list node directory

Node Directory

Number of entries in the directory = 1

Node 1 entry:

Node name                      = OCHEFDB2

Comment                        =

Directory entry type           = LOCAL

Protocol                       = TCPIP

Hostname                       = 192.168.0.97

Service name                   = 50000

查看更详细的信息使用:

$db2 list node directory show detail

6 ping hostname来验证通讯

使用telnet hostname port来验证是否能连到实例。

-The End-

Written by ochef

November 1st, 2009 at 9:49 am

Posted in Database

Tagged with , ,

DB2对比Oracle学习系列之:instance & database concepts

leave a comment

DB2的实例概念

从体系结构看,就是DB2的执行代码和数据库对象的中间逻辑层,可以看成是关于所有的数据库及其对象的逻辑集合,也可以认为是所有的数据库及其对象和DB2的代码之间的联系和结合。通俗一点说就是:由一组后台进程和共享内存组成。

这一点与Oracle的实例概念是一致的。

db2_shared_mem

DB2 Shared Memory

DB2的数据库概念

在DB2中,一个DB2实例可以同时管理多个DB2数据库,而一个DB2数据库只能由一个DB2实例管理,DB2数据库与DB2实例是一种松散耦合的关系。

Oracle数据库的概念正好相反:

  1. 一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库。
  2. 一个数据库可被多个实例同时装载和打开(Oracle的集群RAC)。

DB2_Server_ Architecture

DB2 Server Architecture

-The End-

Written by ochef

September 29th, 2009 at 11:03 pm

Posted in Database

Tagged with ,

Install DB2 9.1 for Linux

leave a comment

DB2的安装其实蛮简单的,与 Sybase的安装界面大同小异,详细步骤请参阅下文。

一、安装DB2

在主机上mount DB2_ESE_9_1_0_0_LNX_x86.iso的光盘。

[root@db2 V9.1]# mount /dev/cdrom /mnt
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@db2 V9.1]# cd /mnt
[root@db2 mnt]# ls
db2  db2_install  db2setup  doc  installFixPack
[root@db2 mnt]#./db2setup

从这里开始一路狂点吧…

db2_install01

db2_install02

db2_install03

db2_install04

Read the rest of this entry »

Written by ochef

September 7th, 2009 at 1:33 pm

Posted in Database

Tagged with ,