>> ----------------------------------------------------------------
>> Server Message : -Msg 2601m Level 14, State 3:
>> Attempt to insert duplicate key row in object '테이블이름' with unique index '인덱스이름'
>> ----------------------------------------------------------------
duplicate가 나는 row를 찾는 방법은 두가지 정도가 있는데여~~~
먼저, unix라면
$ cat [filename] | sort | uniq -d
하시면 중복되는 row가 display될 겁니다....
데이타베이스에서 확인하시려면
먼저 텍스트데이타를 데이타베이스의 테이블로 bcp in합니다.
(primary key하고 unique index는 먼저 drop하고 bcp in함)
그리고 query를 실행합니다...
만약, a,b,c가 unique index라면
select a,b,c,count(*)
from testtable
group by a,b,c
having count(*) > 1
하시면 중복되는 row만 찾을 수 있습니다....
>> bcp 작업시 index나 trigger가 없어야 빠른bcp작업이 된다고 하였는데요..
>> 이 말이 bcp in이나 bcp out이나 다 포함되는 것인지요..
>> 지금 문제를 일으키는 테이블이 인덱스가 10개 가량 되는 테이블이거든요.
>> bcp in은 컴퓨터가 좋아서 빠르게 입력되는데
>> bcp out은 유독 문제의 테이블만 초당 200~300 정도로 형편없이 느립니다.
반대일 것 같은데여~~~
인덱스가 많으면 bcp in이 느리고, bcp out은 상관없슴다~(정상적인 경우에)
bcp in하실때 trigger는 적용이 안되구여~~~
빠른 bcp를 하실려면 인덱스나 키, 트리거를 없애구여...
작업하시는게 좋습니다..(그래야만 ase가 logging없이 작업하거든여~~)
그리고, 빠른 bcp를 위한 방법 몇가지를 소개드릴께요....
fast bcp
> create table without index
> sp_configure "runnable search count",0
> sp_poolconfig "default data cache", 300M, 16K
> sp_configure "global cache partition", number of engines
> sp_configure "tcp no delay", 1
> sp_poolconfig "default data cache",16K, wash = 200M <- 80% of total memory cache
> sp_configure "housekeeper free write percent",100
> sp_confiugre "number of pre-allocated extents", 31
> sp_configure "disk I/O structures", n <- about 500
> sp_configure "default network packet size", 512
> sp_configure "max network packet size", 8192
> sp_configure "additional network memory", 4096*user*3
ASE Restart................
- batch size -b
글구 bcp in option중에 -A8192를 포함해주세여 <- packet size
|