DB2 数据库启动过程

  • 格式:docx
  • 大小:14.68 KB
  • 文档页数:1

DB2数据库/实例启动过程
1、当输入db2start命令,shell在sqllib/adm目录下找到该程序后,直接调用execv,启动
db2start程序;
2、Db2start的主程序代码被装载新的进程以后就开始寻找其中的main函数执行,在执行的
时候,db2start首先通过当前的DB2INSTANCE得到当前实例名,然后得到实例下sqllib 路径,紧接着打开sq1llib/db2nodes.cfg得到分区信息。

3、对于每个分区,db2start都会发起一个rsh或ssh的远程连接(如果是单分区,则直接调
用),启动一个叫做db2star2的进程;
4、在db2star2中,它先检查当前DB2NODE变量来决定自己的分区,然后创建实例共享内
存,最后调用一个叫做db2sysc的可执行程序。

5、db2sysc可执行程序被调用以后,它做的第一件事是创建一个自己的副本,然后把自己
的名字改为db2wdog.
6、这是,db2wdog就开始等待了,然后新的db2sysc进程首先创建一个FCM内存段(如果
开启了DB2_FORCE_FCM_BP),然后创建其他的进程,如db2tcpcm(只有当db2comm=TCP 被设置时,这个进程才会启动)、db2ipccm、db2gds、db2pdbc等进程。

7、这个阶段,只有没有在中途发生错误,就意味着实例已经成功启动,然后消息就会返回
给db2star2使其结束,所有分区的db2star2结束后,db2start也会返回成功的消息,这样用户就会在屏幕上看到实例被成功启动了。

8、下面就是数据库的启动了。

在没有连接或者activate命令的时候,数据库是不会自己启
动的,因此第7步和第8步之间要等待多久时间,取决于什么时候第一个连接请求到达db2tcpcm或db2ipccm进程。

9、但第一个connect命令到达通信管理器的时候,DB2会检测这个请求的数据库是否已经
存在(sqllib、sqldbdir),如果这个数据库根本不存在,则直接报数据库无法找到的错误。

10、当数据库找到后,DB2会再次判断数据库是否已经启动。

如果数据库没有启动,根
据DATABASE_MEMORY的设置创建出一个数据库共享内存段,然后从db2gds进程中创建相应数量的db2pfchr, db2loggr, db2loggw与db2pclnr等进程,并attach到数据库内存段,并创建一个代理进程服务于新的连接。

11、检查数据库的状态,如果数据库状态不一致,则需要进行崩溃恢复。

如果有索引在
不可用状态并且数据库参数标明启动时创建索引,则继续创建索引。

12、到此为止,如果中途没有错误发生,则数据库启动完毕,代理进程返回成功的消息
给应用程序,然后应用程序向用户汇报数据库连接完毕。