Проверьте, не заблокирована ли таблица в Informix - PullRequest
2 голосов
/ 17 декабря 2010

Я считываю установленные БД из таблицы sysmaster в БД Informix через ODBC. Моя проблема в том, что когда администратор БД выполняет импорт БД, эта таблица блокируется до тех пор, пока это не будет сделано, и это может занять несколько часов. Я хочу разрешить эту ситуацию в своем коде, не пытаясь подключиться к этой БД, когда это делается.

Есть ли способ считывания статуса таблицы, заблокирована она или нет с помощью SQL-запроса?

Edit: Я перехватываю исключение ODBC (-2146232009) в своем коде для обработки заблокированной таблицы, но мне не очень нравится идея обрабатывать это с исключением.

1 Ответ

2 голосов
/ 17 декабря 2010

Таблица 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.

...