흐르는 시간의 블로그...

나중에 보려고... 링크 저장... ^^


[다시보는 명연설]1969년 효창운동장 김대중 연설 동영상

DTG 헤더 정보 추출 저장 테이블을 정리하다가 부분다중바이트문자 에러가 발생하였다.


이에 대한 해결책은 다음의 링크에서 찾았다


ORA-29275 : 부분 다중 바이트 문자


최근의 특정단말에서 저러한 에러 문자를 올리는 것으로 확인하였다.

내가 DB 장애로 골머리를 앓고 있으니...

웹개발자인 직원이 아래의 쿼리를 보내 왔다.


아무 생각없이 돌려 봤다.

full outer join을 써 놨다.

우리회사에서 초당 업데이트가 70번 이상 발생하는 최강의 복잡도와 Lock이 최상인 테이블 두개를 붙여놨다.


결국 과거에 작업을 하고 뒤처리를 안한것이다. ㅠ.ㅠ

나도 그 직원도 서로 잊어버린 결과라고나 할까.

...


SELECT Disk_Reads DiskReads, Executions, SQL_Text SQLText

FROM

(

SELECT Disk_Reads, Executions, LTRIM(SQL_Text) SQL_Text,

Operation, Options,

Row_Number() OVER

(Partition By sql_text ORDER BY Disk_Reads * Executions DESC)

KeepHighSQL

FROM

(

SELECT Avg(Disk_Reads) OVER (Partition By sql_text) Disk_Reads,

Max(Executions) OVER (Partition By sql_text) Executions,

sql_text, p.operation,p.options

FROM v$sql t, v$sql_plan p

WHERE t.hash_value=p.hash_value AND p.operation='TABLE ACCESS'

AND p.options='FULL' AND p.object_owner NOT IN ('SYS','SYSTEM')

AND t.Executions > 1

)

ORDER BY DISK_READS * EXECUTIONS DESC

)

WHERE KeepHighSQL = 1

AND rownum <=30;


Producer Consumer 큐를 만들었다.

이와 함께 Job을 가상화 하여 일정한 규칙(동일 DB Insert)을 가지는 다양한 Job을 처리하게 하였다.

그리고 그것도 템플릿으로 또 다시 묶었다. (너무 과잉인가.. ㅠ.ㅠ)


문제는 테스트 코드에서는 문제가 없는데...

상용 코드에서는 자꾸 에러가 나는 것이다.


pthread_mutex_lock()을 콜하면 "130"을 반환하고 errno로 "0"을 줬다.

프로그램은 lock이 걸려서 더 진행되지 않았다.


스택오버플로우도 뒤져보고 해서...

뭐 테스트 쓰레드도 만들고 다 해봤는데 또 잘 된다.


결론은!!!!

상용코드에서 init()을 콜하지 않았다. ㅠ.ㅠ

해당 init 코드에서 pthread_mutex_init()을 통해 mutex를 초기화 해야 하는데

초기화 하지 않은 mutex를 사용하려니 문제를 발생 시킨 것이다.


그런데 그게 다른 에러가 아니라... 130번이 반환되서 고생한 것이었다. ㅠ.ㅠ

"EOWNERDEAD"