检查表是否在Informix中被锁定

时间:2010-12-17 14:06:17

标签: sql informix

我正在通过ODBC从Informix数据库的sysmaster表中读取已安装的数据库。我的问题是,当DBA正在执行数据库导入时,该表将被锁定,直到完成为止,这可能需要数小时。我希望在我的代码中处理这种情况,而不是在完成此操作时尝试连接到该数据库。

有没有办法读出表的状态,无论它是否通过SQL查询锁定?

修改 我在我的代码中捕获ODBC异常(-2146232009)以处理锁定的表,但我真的不喜欢处理此异常的想法。

1 个答案:

答案 0 :(得分:2)

sysmaster:syslocks表应包含您需要的信息。它实际上是一个视图,但如果它是一个表,则该语句可能如下所示:

CREATE TABLE "informix".syslocks
(
    dbsname     CHAR(128),
    tabname     CHAR(128),
    rowidlk     INTEGER,
    keynum      SMALLINT,
    type        VARCHAR(4),
    owner       INTEGER,
    waiter      INTEGER
);

在一个非常闲置的系统中,我在sysmaster数据库中查找,我跑了:

SELECT * FROM SysLocks;

得到了输出:

sysmaster   sysdatabases    516 0   S   31
sysmaster   sysdatabases    516 0   S   32
sysmaster   sysdatabases    516 0   S   33  
sysmaster   sysdatabases    513 0   S   37

这应该为您提供所需的信息。您可能需要进行一些实验以确保正确完成(确切地找出DB-Import在其正在处理的数据库上设置或设置了哪些锁)。

还有另一个视图,即SysLockTab视图,它包含更详细,更少用户的信息。并且可以使用任何可以访问的基础表来构建这些视图。这些应该会为您提供SysLocks视图中缺少的任何信息。