D在DB2数据库中,编目(catalog)这个单词很难理解,我自己当初在学习DB2的时候也常常被这个编目搞的很不明白,直到现在我个人也感觉到DB2中编目(catalog)这个术语用的不是很好,具体来说编目有编目节点,编目数据库等如果要理解编目我先简单讲一下DB2数据库的体系结构,在DB2数据库中最大的概念是系统(节点)也就是主机,下面是实例,实例下面是数据库,然后是表空间,然后是数据库对象。现在假设你有一个数据库服务器在p570的机器上,你有一个客户端在windows,linux或任何平台上,你现在想建立一个客户端到服务器端的连接,具体步骤是什么呢?
第一步:
你必须要在客户端的机器上能够把远程的服务器能够识别出来,这个具体如何来做呢?Oracle中可以用SQL*NET配置,SYBASE中用OPEN CLIENT;而在DB2使用的编目(catalog)方式,具体来说就是通过编目把远程的服务器写在本地客户端的一个文件中:
db2 catalog tcpip node p570 remote 172.10.10.10 server 50000
在上面的这条命令中p570是一个节点名(在一个机器上必须是唯一的),remote后面是服务器的IP地址,server是远程服务器上实例对应的端口号
DB2通过这种方式在本地的SQLNODIR文件中把远程服务器的信息记录下来
所以编目节点其实就是把远程服务器映射到本地,通过SQLNODIR中的记录能够找到远程服务器和实例,类似指向远程服务器和实例的地址指针
第二步:
当把远程的服务器IP地址,实例编目下来后,第二步应该把该实例下的数据库编目到本地
db2 catalog db REMOTEDB at node p570
在这条命令中,REMOTEDB是远程实例下的数据库,p570是我们在第一步中编目的节点名
这条命令执行后会在本地SQLDBDIR文件中记录远程数据库的信息,这这里编目数据库可以理解为把远程服务器实例下的数据库映射到本地为一个别名
=========================
上面是客户端和服务器不在同一台机器上,是通过编目节点,编目数据库来实现客户端连接到服务器上数据库的目的,如果是连接是在同一台机器上,那么这时候不要显示的编目节点,但是在服务器上当我们创建一个实例的时候,有一个隐含的把实例在本地编目的过程,假设在p570上创建一个实例名为db2inst1,其实有一个隐含的
db2 catalog local node db2inst1 instance db2inst1 system p570 ostype aix的步骤,
同样当你在db2inst1下创建一个数据库MYDB的时候,有一个隐含的编目(catalog)数据库的步骤:
db2 catalog db mydb at node db2inst1的步骤
至此你可以这样理解编目(catalog),编目就是在本地或远程建立客户端到服务器的数据库连接的目的,他类似Oracle数据库中的通过SQL*NET或netca配置客户端到服务器的连接;类似SYBASE中的OPEN CLIENT;类似informix中Iconnect;
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
你问的第二个问题,连接一个数据库的步骤:
当我们连接一个数据库的时候,假设我执行
db2 connect to db2prd 这条命令,这时候DB2首先读取SQLDBDIR文件判断db2prd数据库是否在该文件中编目(catalog),所以SQLDBDIR文件一定不要丢失,如果该文件丢失,那么虽然所有的数据库物理上并没有丢失,但是这些数据库无法找到;假设db2prd数据库在SQLDBDIR中有注册,这时候DB2要看db2prd数据库在哪个节点上,该节点是本地节点(local)还是远程节点(remote);如果是本地节点那么可以直接不需要显式用户名和口令就可访问数据库,如果db2prd数据库在远程节点上,这时候DB2要读取SQLNODIR(SQLNODIR文件不要丢失,否则你无法连接数据库和节点)文件来读取该节点的远程主机名或IP地址和实例所对应的端口(这时候远程的实例端口要处于LISTEN状态),这时候缺省要提供远程数据库的用户名和密码。
以上就是连接一个数据库的完整步骤。
注意:
1,SQLNODIR和SQLDBDIR一定不要破坏
2,SQLDBDIR和SQLNODIR是二进制文件不能显示的编辑,只能通过catalog node,uncatalog node和catalog db,uncatalog db 来添加或删除。
3,SQLDBDIR和SQLNODIR是我们访问物理数据库和物理节点的”桥梁“,大家可以搜索SQLDBDIR和SQLNODIR文件看看其中的内容,不要修改。
05-11 15:46