database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 166 게시물 읽기
No. 166
Re: Re: 도와주세요... identity를 이용하지 않은 순차증가 필드 만들기..
작성자
노홍찬
작성일
2001-11-09 16:02
조회수
11,586

감사합니다. 많은 도움이 될것 같네요...

 

^^

 

-- jinuki 님이 쓰신 글:

>> -- 노홍찬 님이 쓰신 글:

>> >> sybase의 identity옵션이 불안정하더군요..

>> >>

>> >> 가끔씩 큰숫자로 튀어버리는 경우가 생기기도하고

>> >>

>> >> 저희 시스템에서 identity를 배제하는 방향으로 가고 있어서

>> >>

>> >>

>> >> 순차증가를 다른 방법으로 구현해야합니다.

>> >>

>> >> 순차증가를 위해 해당 필드의 최대값을 select해온 이후에

>> >>

>> >> 하나 증가시켜 insert하는 방법으로 구현을 했었는데

>> >>

>> >> 이런경우 동일한 프로세스가 여러개 뜬 상태에서

>> >>

>> >> 동시다발적인 select가 일어나게되면 모두가 같은 최대값을 가져와

>> >>

>> >> 동일한 값으로 insert하게 되는 일이 생깁니다.

>> >>

>> >>

>> >> 이것을 해결하기 위해서 single process 모델이라던지

>> >>

>> >> select전에 전체 테이블 락을 걸고 insert가 끝난후에 락을 푸는 방식이라던지

>> >>

>> >> 여러가지를 고려해봤는데 딱 이거다 싶은 방법이 없더군요...

>> >>

>> >> 혹시 sql단에서 해결할 수 잇는 방법이 없을까요?

>> >>

>> >>

>> >> 누군가 "select ......... for update" 이렇게 써주면 db가 insert하기 위한

>> >>

>> >> select라고 인식해서 자동으로 락을 건다고 하던데...

>> >>

>> >> 그런 기능하는게 맞는건지...

>> >>

>> >>

>> >> 도움 부탁드립니다. 답글주시거나 메일 주시거나 둘중에

>> >>

>> >> 편하신 방법으로... 해주시기 바랍니다.

>>

>> 저두 옛날에 이거땜시 무지 고생 마니 했었는데~~~

>> 암튼여~~~ 여러가지 방법들이 있더라구요....

>>

>> 그중에 먼저 identity가 무지하게 커지는 현상을 막을 수 있는 방법이 있는데요...

>> 테이블 생성시

>> create table table_name

>> (column_name

>> datatype(constant_expression) identity)

>> with identity_gap = value

>> 하시던가여, 아니구 이미 생성된 테이블이라며

>> sp_chgattribute table_name, identity_gap, set_number 하시면,,,,

>> 지정해주신 숫자만큼만 점프하게 됩니다...

>> 만약에 어떤 프로세스가 4번 인서트하다 죽으면 5번으로 인스트가 되게되져~~~

>>

>> 그담엔 holdlock하는 방법이 있는데요... 이 방법은 약간의 문제가 있어서

>> 별루 도움이 되지 않을 듯 싶네여.. 동시사용시에는 퍼포먼스도 안 나오구여~~~ deadlock도 많이 걸리구요....

>>

>> 그담에 채번테이블을 이용하는 방법인데요... (가장 권장하고 싶은 ^^)

>> 채번테이블을 별도로 만드시구요....

>>

>> 예) create table 채번T (tablename varchar(20), seqno int)

>> 그리고, 그 해당하는 테이블에 미리 데이타를 넣습니다...

>> insert into 채번T values ("실제T",0)

>> 테이블에 clustered index도 꼬옥 걸어주시구요...

>> create unique clustered index on 채번T(tablename)

>>

>> application에서는여~~~

>>

>> begin tran

>> update 채번T

>> set seqno=seqno+1

>> where tablename='채번T'

>>

>> select seqno into :seqno from 채번T where tablename='채번T'

>>

>> insert into 실제T values (:seqno, "어쩌구", "저쩌구"~~~~)

>> commit tran

>>

>> 이렇게 하시면 됩니다...

>> 동시사용자를 한 1000으로 돌려서 테스트 해봤었는데 암 이상없이 잘 되더군요....

>>

>>

>> 암튼 도움이 되시길~~~~~~~~

[Top]
No.
제목
작성자
작성일
조회
167[질문]ASA에서 ODBC이용하는 방법좀.....
안법진
2001-11-12
10044
168┕>Re: [질문]ASA에서 ODBC이용하는 방법좀.....
양창권
2001-11-12 12:12:50
10688
170┕>Re: [질문]ASA에서 ODBC이용하는 방법좀.....
jinuki
2001-11-13 11:14:22
10837
156[설치] 사이베이스 11.9.2 rpm으로 설치하는 방법?
정대연
2001-11-07
9937
160┕>Re: [설치] 사이베이스 11.9.2 rpm으로 설치하는 방법?
jinuki
2001-11-08 18:06:58
11484
161 ┕>: [다시질문] 사이베이스 11.9.2 rpm으로 설치하는 방법?
정대연
2001-11-08 23:23:42
10815
163  ┕>Re: : [다시답변] 사이베이스 11.9.2 rpm으로 설치하는 방법?
jinuki
2001-11-09 10:37:51
11593
155unix sybase 에서 windows 2000 server로 migration하는 방법좀...
김기택
2001-11-07
9821
158┕>Re: unix sybase 에서 windows 2000 server로 migration하는 방법좀...
jinuki
2001-11-08 17:18:07
10730
162 ┕>Re: Re: unix sybase 에서 windows 2000 server로 migration하는 방법좀...
김기택
2001-11-09 02:14:12
10173
164  ┕>Re: Re: Re: unix sybase 에서 windows 2000 server로 migration하는 방법좀...
jinuki
2001-11-09 10:51:35
10694
154도와주세요... identity를 이용하지 않은 순차증가 필드 만들기..
노홍찬
2001-11-07
10176
157┕>Re: 도와주세요... identity를 이용하지 않은 순차증가 필드 만들기..
양창권
2001-11-07 17:10:47
10688
159┕>Re: 도와주세요... identity를 이용하지 않은 순차증가 필드 만들기..
jinuki
2001-11-08 17:45:16
12411
166 ┕>Re: Re: 도와주세요... identity를 이용하지 않은 순차증가 필드 만들기..
노홍찬
2001-11-09 16:02:39
11586
152Sybase 라이센스는 어떻게 되는지?
정대연
2001-11-06
8972
153┕>Re: Sybase 라이센스는 어떻게 되는지?
정재익
2001-11-07 03:58:30
12469
148Sybase SQL 함수
하소연
2001-11-05
9843
151┕>Re: Sybase SQL 함수
jinuki
2001-11-06 09:58:46
10586
147temp_db가 부족할 때
김지영
2001-11-05
8707
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다