22控制数据库服务.docx
- 文档编号:7320586
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:8
- 大小:705.42KB
22控制数据库服务.docx
《22控制数据库服务.docx》由会员分享,可在线阅读,更多相关《22控制数据库服务.docx(8页珍藏版)》请在冰点文库上搜索。
22控制数据库服务
第二十二章
控制数据库服务
本章的目标是理解一些可以控制Informix数据库服务器的函数。
sqlstart函数在数据库已经打开时不会做任何事情。
如果设置了环境变量SQLRM,则启动中继模块。
中继模块位于客户端,在客户端和服务器之间转播消息。
因为中继模块在大小上比数据库服务器要小得多,仅通过网络来访问远端的数据库服务器的客户端应用程序受益于一个占用内存很少的小进程。
同时,它还消除了INFORMIX-OnLine和INFORMIX-SE之间语法的不兼容性。
CREATEDATABASE语法允许传递给远端运行OnLine的服务器。
执行$DATABASE语句与调用sqlstart函数的效果一样,但是,它也打开一个数据库。
该函数用来终止数据库服务器进程。
sqlexit函数应在没有数据库打开的情况下调用,否则,它会回滚当前的事务,并关闭数据库。
如果没有调用sqlexit函数,则可能有多余的数据库服务器进程在运行,调用该函数可杀死这些进程来释放系统资源。
一个使用sqlstart和sqlexit的例子如上所示。
在该例子中,先打开stores5数据库。
这将启动数据库服务器进程(sqlturbo或sqlexec),并打开一个数据库。
一旦完成,执行Unix的ps命令。
它将为用户显示当前的进程,将显示运行的进程sqlturbo或sqlexec。
下一行执行sqlexit函数,它将结束sqlturbo或sqlexec进程。
当执行下一行的ps命令时,将会看到没有sqlturbo或sqlexec进程。
程序的下一行表明执行了sqlstart函数,它将启动sqlturbo或sqlexec进程,当执行下一行的ps命令时,将会再次看到sqlturbo或sqlexec进程在运行。
sqldetach进程把应用程序从数据库服务器进程分开。
它通常与fork函数一起使用,此时,存在两个分离的进程与同一个数据库服务器进程相连接。
因为这不是期望的情形,可以使用sqldetach函数把一个进程(通常是子进程)从数据库服务器脱离开来。
sqldetach关闭与数据库服务器进程通讯的文件描述符(实际是管道描述符)。
sqldetach不能同Unix的vfork函数一起使用,因为vfork并不进行真正的进程创建,直是调用了exec函数。
sqlbreak函数发送一个SIGTERM信号给数据库服务器,该信号由服务器捕捉。
当服务器接受到一个SIGTERM信号,它停止正在做的工作,并准备好处理来自前端进程的下一个命令。
该函数在进行一个长时间查询时很有用,数据库引擎可能因为用户的错误而花费太多的时间。
在这种情况下,可能启动了一个查询,并在服务器引擎执行结束该查询之前,执行sqlbreak函数来通知引擎取消该次处理,并等待下一条指令。
要注意的是,在引擎处理完该信号之后,数据库、游标和事务仍处于打开状态。
在上面的例子中,首先使用了signal函数建立了一个信号处理程序。
然后,调用了setjmp函数来保存当前的程序环境(堆栈指针、程序计数器,等等),并提供了一个返回点,使得可以从程序中的任何一个地方返回到该点。
当应用程序接受到一个中断信号时,Onintr函数被调用。
该函数重新设置信号处理程序,调用sqlbreak函数告诉数据库服务器停止处理,等待下一个指令。
然后它执行longjmp函数,返回到正好是setjmp函数调用的前面一点。
完成上面的练习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 22 控制 数据库 服务