锁定
IBM® i 数据库具有内置记录完整性。 系统根据 ILE C/C++ 程序打开文件的方式来确定锁定条件。 此表显示有效的打开方式以及与其关联的锁定状态:
| open mode(打开方式) | 锁状态 |
|---|---|
r 或者 rb |
共享以进行读取 (*SHRRD) |
a, w, ab, wb, a+, r+, w+, ab+, rb+, wb+ |
共享以进行更新 (*SHRUPD) |
在打开文件之前,可以使用 "覆盖数据库文件" (OVRDBF) 命令或 "分配对象" (ALCOBJ) 命令来更改文件的锁定状态。 例如, ILE C 程序可以使用
system() 函数来调用 ALCOBJ 命令:
system("ALCOBJ OBJ((FILEA *FILE *EXCLRD))");如果打开文件以进行更新,那么如果未指定 __NO_LOCK 选项,那么数据库将锁定读取或定位的任何记录。 这意味着不能将锁定的记录锁定到任何其他打开的数据路径,无论该打开的数据路径是由另一个程序打开的,甚至是由同一程序通过另一个文件指针打开的。
成功读取并锁定另一条记录将释放对先前锁定的记录的锁定。 如果在任何读操作上指定了 __NO_LOCK 选项,那么不会释放先前锁定的记录上的锁定。 您还可以使用 _Rrlslck() 函数来释放对记录的锁定。