⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rowlockiso.sql

📁 derby database source code.good for you.
💻 SQL
字号:
-- Very basic single user testing of row locking, verify that the right locks-- are obtained for simple operations.  This test only looks at table and-- row logical locks, it does not verify physical latches or lock ordering.-- The basic methodology is:--    start transaction--    simple operation--    print lock table which should match the master--    end transation-- run resource 'createTestProcedures.subsql';run  resource 'LockTableQuery.subsql';autocommit off;CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', '4096');create table a (a int, b int, c varchar(1900)) ;commit;set isolation read committed;commit;---------------------------------------------------------------------------------- Test select from empty heap table--------------------------------------------------------------------------------select a, b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from one row heap table--------------------------------------------------------------------------------insert into a values (1, -1, PADSTRING('one',1900));select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select a, b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from two row heap table - this will release one row lock as it-- moves to the next one.--------------------------------------------------------------------------------insert into a values (2, -2, PADSTRING('two',1900));commit;select a,b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from three row heap table (multiple pages) - this will release -- one row lock as it moves to the next one.--------------------------------------------------------------------------------insert into a values (3, -3, PADSTRING('two',1900));insert into a values (4, -4, PADSTRING('two',1900));insert into a values (5, -5, PADSTRING('two',1900));select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;delete from a where a.a = 3;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select a,b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full read cursor scan over all the rows in the heap, no group fetch.--------------------------------------------------------------------------------CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','1');-- RESOLVE: missing row locks-- WORKAROUND: creating an index and dropping it -- to force the query 'select a, b from a' to be recompiledcreate index ix1 on a(a);drop index ix1;commit;get cursor scan_cursor as    'select a, b from a';call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault', '16');select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');---------------------------------------------------------------------------------- Test full cursor scan over all the rows in the heap, with 2 row group fetch.--------------------------------------------------------------------------------CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','2');-- RESOLVE: missing row locks-- WORKAROUND: creating an index and dropping it -- to force the query 'select a, b from a' to be recompiledcreate index ix1 on a(a);drop index ix1;commit;get cursor scan_cursor as    'select a, b from a';CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full cursor scan over all the rows in the heap, with default group fetch--------------------------------------------------------------------------------get cursor scan_cursor as    'select a, b from a';select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full cursor for update scan over all the rows in the heap, -- with default group fetch.  Group fetch should be disabled.--------------------------------------------------------------------------------get cursor scan_cursor as    'select a, b from a for update';select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full read cursor scan on a join over all the rows in the btree, -- 2 row group fetch.--------------------------------------------------------------------------------drop table a;create table a (a int, b int, c varchar(1900), d int, e varchar(2000)) ;create index a_idx on a (a, b, c) ;commit;create table b (a int, b int, c varchar(1900)) ;insert into b values (1, -1, PADSTRING('one',1900));insert into b values (2, -2, PADSTRING('two',1900));insert into b values (3, -3, PADSTRING('three',1900));insert into b values (4, -4, PADSTRING('four',1900));insert into b values (5, -5, PADSTRING('five',1900));commit;---------------------------------------------------------------------------------- Test select from empty index--------------------------------------------------------------------------------select a, b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from one row index'd table--------------------------------------------------------------------------------insert into a values (5, -5, PADSTRING('five',1900), 5, PADSTRING('negative five',2000));select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select a, b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from two row indexed heap table - this will release one row-- lock as it moves to the next one.--------------------------------------------------------------------------------insert into a values (4, -4, PADSTRING('four',1900), 4, PADSTRING('negative four',2000));commit;select a,b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test select from three row indexed heap table (multiple pages) - this will-- release one row lock as it moves to the next one.--------------------------------------------------------------------------------insert into a values (3, -3, PADSTRING('three',1900), 3, PADSTRING('negative three',2000));insert into a values (2, -2, PADSTRING('two',1900),   2, PADSTRING('negative two',2000));insert into a values (1, -1, PADSTRING('one',1900),   1, PADSTRING('negtive one',2000));select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;delete from a where a.a = 3;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select a,b from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full read cursor scan over all the rows in the indexed heap, -- no group fetch.  This should be a covered index scan (make sure rows come-- back in order sorted by index).--------------------------------------------------------------------------------CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','1');-- RESOLVE: missing row locks-- WORKAROUND: creating an index and dropping it -- to force the query 'select a, b from a' to be recompiledcreate index ix1 on a(a);drop index ix1;commit;get cursor scan_cursor as    'select a, b from a';CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;---------------------------------------------------------------------------------- Test full cursor scan over all the rows in the index , 2 row group fetch.--------------------------------------------------------------------------------CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','2');-- RESOLVE: missing row locks-- WORKAROUND: creating an index and dropping it -- to force the query 'select a, b from a' to be recompiledcreate index ix1 on a(a);drop index ix1;commit;get cursor scan_cursor as    'select a, b from a';CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test full cursor scan over all the rows in the index, with default group-- fetch---------------------------------------------------------------------------------- RESOLVE: missing row locks-- WORKAROUND: creating an index and dropping it -- to force the query 'select a, b from a' to be recompiledcreate index ix1 on a(a);drop index ix1;commit;get cursor scan_cursor as    'select a, b from a';select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;next scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;close scan_cursor;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- Test getting index lock on a drop index - track 1634--------------------------------------------------------------------------------drop table a;commit;create table a (a int);create index a2 on a (a);insert into a values (1);commit;drop index a2;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;drop table a;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -