Informix IDS 11.50에서 교착 상태를 강제하는 방법을 찾고 있습니다.Informix - 단일 테이블을 포함하는 교착 상태 시나리오
- 하나 개의 테이블 관련,
- 격리 수준 :이 솔루션은 다음과 같은 조건을 충족해야
COMMITTED READ
, ROW
수준의 잠금,- 두 스레드하지만, 하나는 (행에 액세스 할 수의) 다른 하나에 의해 수정. 잠금 모드로
CREATE TABLE t1 ( id SERIAL PRIMARY KEY, name CHAR(20) ) LOCK MODE ROW; CREATE INDEX idx_name on t1 (name); INSERT INTO t1 (name) VALUES ('A'); INSERT INTO t1 (name) VALUES ('B');
2에 별도의 dbaccess를 콘솔 (다음과 같이
t1
만들고 채워집니다테이블 :
나는 모든 조건하지만 마지막 하나를 만족하는 솔루션을 함께했다 15 초 동안 대기하도록 설정) 다음 명령을 실행합니다.
dbaccess #1: BEGIN;
dbaccess #1: UPDATE t1 SET name = name WHERE name = 'A';
dbaccess #2: BEGIN;
dbaccess #2: UPDATE t1 SET name = name WHERE name = 'B';
dbaccess #1: SELECT * FROM t1;
dbaccess #2: SELECT * FROM t1; -- 143: ISAM error: deadlock detected
이러한 스레드는 교착 상태입니다 SELECT가 다른 스레드가 커밋하기를 기다리고 있기 때문입니다. 이 해결책은 두 스레드가 네 번째 조건을 위반하는 다른 스레드에 의해 업데이트 된 행을 선택하는 것은 좋지 않습니다. 누구든지이 솔루션을 개선하거나 모든 기준을 충족시키는 다른 방법을 제공 할 수있는 방법을 생각할 수 있습니까?
위의 문제를 내 informix db로 복제 할 수 없습니다. –