我正在通过ODBC从Informix上的sysmaster表中读取已安装的DB。我的问题是,当DBA执行DB导入时,该表会被锁定,直到完成为止,这可能需要几个小时。我想在代码中处理这种情况,在完成时不要试图连接到那个DB。
是否有一种方法可以读取表的状态,无论它是否通过SQL查询锁定?
编辑:我在代码中捕获了异常(-2146232009)来处理锁定的表,但是我不太喜欢用异常来处理这个问题。
发布于 2010-12-17 17:30:34
sysmaster:syslock表应该包含您需要的信息。它实际上是一个视图,但如果它是一个表,则该语句可能如下所示:
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
这应该会给你提供你需要的信息。您可能需要做一些实验,以确保您做对了(找出它正在处理的数据库上到底有哪些锁do集或已经设置)。
还有另一个视图,SysLockTab视图,它包含更详细、更少面向用户的信息.这些视图构建在任何底层表上,您可以访问这些表。这些应该会为您提供SysLocks视图中缺少的任何信息。
https://stackoverflow.com/questions/4471182
复制相似问题