当我尝试更改表时得到以下响应:
Timeout trying to lock table ; SQL statement:
ALTER TABLE FOO ADD COLUMN NAME VARCHAR(200) [50200-169] HYT00/50200 (Help)
H2网址:jdbc:h2:file:C:\h2\test;WRITE_DELAY=300;MVCC=TRUE;LOCK_MODE=0;FILE_LOCK=SOCKET
运行以下命令:
CREATE TABLE FOO (ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, CODE INTEGER NOT NULL)
@LOOP 6000 INSERT INTO FOO (CODE) VALUES (1)
ALTER TABLE FOO ADD COLUMN NAME VARCHAR(200) <== Here the problem happens
我的H2版本是H2 1.3.169(2012-09-09)。
答案 0 :(得分:4)
LOCK_MODE 0 means no locking.使用MVCC时使用此模式没有意义。
根据我的测试,如果将LOCK_MODE设置为1,则不会发生这种情况。
答案 1 :(得分:0)
它看起来像一个错误......有趣的是,当我使用的记录少于问题中提到的记录时,所提到的错误不会显示...例如,以下序列有效:
CREATE TABLE FOO (ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, CODE INTEGER NOT NULL)
@LOOP 2000 INSERT INTO FOO (CODE) VALUES (1)
ALTER TABLE FOO ADD COLUMN NAME VARCHAR(200)
另一方面,将其更改为插入2001记录足以触发HYT00/50200
错误。
表本身不需要是复杂的。下表也复制了这样的错误:CREATE TABLE FOO (ID BIGINT NOT NULL, CODE INTEGER NOT NULL)
我会尝试详细了解...
关于它的几个细节:
INFORMATION_SCHEMA.LOCKS
上的选择不会返回任何记录。