发布
社区首页 >问答首页 >检查表是否锁定在Informix中

检查表是否锁定在Informix中
EN

Stack Overflow用户
提问于 2010-12-17 14:06:17
回答 1查看 14.2K关注 0票数 2

我正在通过ODBC从Informix上的sysmaster表中读取已安装的DB。我的问题是,当DBA执行DB导入时,该表会被锁定,直到完成为止,这可能需要几个小时。我想在代码中处理这种情况,在完成时不要试图连接到那个DB。

是否有一种方法可以读取表的状态,无论它是否通过SQL查询锁定?

编辑:我在代码中捕获了异常(-2146232009)来处理锁定的表,但是我不太喜欢用异常来处理这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-17 17:30:34

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

代码语言:javascript
代码运行次数:0
复制
CREATE TABLE "informix".syslocks
(
    dbsname     CHAR(128),
    tabname     CHAR(128),
    rowidlk     INTEGER,
    keynum      SMALLINT,
    type        VARCHAR(4),
    owner       INTEGER,
    waiter      INTEGER
);

在一个非常空闲的系统上,我在sysmaster数据库中搜索,我运行:

代码语言:javascript
代码运行次数:0
复制
SELECT * FROM SysLocks;

得到了输出:

代码语言:javascript
代码运行次数:0
复制
sysmaster   sysdatabases    516 0   S   31
sysmaster   sysdatabases    516 0   S   32
sysmaster   sysdatabases    516 0   S   33  
sysmaster   sysdatabases    513 0   S   37

这应该会给你提供你需要的信息。您可能需要做一些实验,以确保您做对了(找出它正在处理的数据库上到底有哪些锁do集或已经设置)。

还有另一个视图,SysLockTab视图,它包含更详细、更少面向用户的信息.这些视图构建在任何底层表上,您可以访问这些表。这些应该会为您提供SysLocks视图中缺少的任何信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4471182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档