안녕하세요..
Table에 Lock이 걸려서 Insert 오류가 발생하고 있습니다.
해당 Table의 SELECT시의 Lock TYpe이 Table Lock인지 Row Lock이
확인하는 방법과 혹시 Table Lock이 걸려 있으면 Row Lock으로 변경하는
방법을 알고 싶습니다.
부탁드릴께요.
1. 테이블의 락스킴을 확인
sp_help table_name
하시면 이게 All Page Lock 인지, Data Only Lock인지 확인 가능
2. lock의 종류
sp_lock 해서 보시면
table-lock라고 나오면 table 락이고 row로 나오면 row입니다
table lock이 걸려 있으면 row로 변경하는 방법은 없읍니다
lock scheme를 변경하는 방법은 있습니다.
그리고...참고
row level lock에서 lock이 200개가 되면 자동적으로 table lock로 변경됩니다.
그러므로 그숫자를 늘려주시면 table lock로 늦게 변하겠죠~~
sp_configure 'promotion'에서 나오는 항목들을 메뉴얼에서 찾아보세요
락 땜시 고생하시는거 같은데 Dirty Read를 실행해 보심이 좋을듯합니다. Select시 락을 잡지 않는 "모드" 이므로 Insert시 고생 않할테니까요. 오라클 개발자들은 Select시 대부분 "락"을 잡지 않는 모드를 사용합니다. Dirty read 방법은 select .... from tab_name at isolation level 0 where ................
lisolation 0을 쓰면 게시판이런건 상관없지만~~ 데이타가 틀려서 원치 않는 결과를 초래 할수도 있어여~~ sybase를 접하는 분들의 문제는 그냥 sybase로 인식을 해야 하는데 오라클은 이런데, 사이베이스는 왜 안되냐? 오라클은 어쩌고 저쩌고~~ 오라클은 오라클입니다 사이베이스는 사이베이스이고요 개발자분들이 힘들어 하신건 압니다.... 허나 sybase개발하시는 분도 oracle로 개발 하심 욕합니다.. "이렇게 편한걸 sybase는 뭐냐고"...ㅋㅋ 그냥 있는 그대로의 sybase로 처리 해주세요~~
오라클이나 사이베이스나 비슷합니다. 사이베이스가 소프트웨어 공학적으론 훨 낫지만 쓰는사람 입장에선 거기가 거깁니다. 문제는 알고 써야된다는것... 좋은 DB구축을 위해 기술적으로 고려해야 할 점은 똑 같다고 봅니다. 락이 필요하지 않은 곳에 락을 걸 필요가 없으며 락을 걸지 않는 기능이 있다면 적극적으로 활용함이 마땅하다고 사료됩니다.