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、 到此为止,如果中途没有错误发生,则数据库启动完毕,代理进程返回成功的消息给应用程序,然后应用程序向用户汇报数据库连接完毕。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论