'ZA 시스템'에 해당되는 글 5

  1. 2012.04.23 오류 5242이(가) 발생했습니다
  2. 2009.11.06 복잡하고 여러 개의 폼 데이터를 한번에 처리하기
  3. 2009.06.03 한글 길이
  4. 2009.05.22 테이블을 수정할 수 없습니다./제한 시간이 만료되었습니다.
  5. 2009.03.03 문제 해결의 시작은 에러메세지

오류 5242이(가) 발생했습니다

- 개발기에서 갑자기 이런 오류가 발생
경고: 04 23 2012  8:26PM에 오류 5242이(가) 발생했습니다. 오류와 시간을 기록한 다음 시스템 관리자에게 문의하십시오.

- 데이터베이스 엔진 오류의 원인 및 해결 방법 MSSQLSERVER_5242

- DBCC CHECKDB 결과 이상없음.
데이터베이스 서버를 내렸다 올리니깐 제대로 동작함.

[todo] 이벤트 로그 및 디비서버 로그 확인하기

복잡하고 여러 개의 폼 데이터를 한번에 처리하기

복잡한 업무화면에서 여러 개의 폼 또는 iframe으로 구성될 수 있다.
이렇게 나뉘어진 데이터를 한번에 서버로 전송해서 트랜잭션 처리를 해야 하는 경우.
데이터의 개수가 가변적이고, 많아서 식별하기가 힘든 경우 좋은 방법

데이터를 XML로 만들어서 전송하면 좋을거 같다.

데이터 개수가 많더라도 구분하기 쉽고
한 번에 모든 데이터를 처리할 수 있으므로 트랜잭션 처리가 쉽다.
  • 예전에 특수문자를 이용한 구분자를 사용했었는데 데이터가 제한적이었다.[각주:1]
  • 설문조사 프로그램 만들때 특수문자로 구분한 문자열을 파일에 저장했는데 이 때 사용했어도 좋았을거 같네.
  • 데이터 업로드시 항목은 정해져 있지만 개수가 변경되는 데이터를 입력받아서 검증한 뒤 다시 서버로 전송할 때 사용(견적 데이터)

XML이 환경설정외에 쓸만한 곳을 찾았다.

[todo] 예전에 어디 잡지에 xml 을 잘 적용한 글을 썼던거 같은데...




  1. 첫 팀 프로젝트인 포푸리 [본문으로]

한글 길이

Z건설사 B시스템에서 담당자가 데이터를 입력했는데 변경이 되지 않는 경우가 발생
확인결과 데이터베이스 컬럼 길이를 넘어가는 데이터가 입력되었음.
응용프로그램에서 예외처리를 소리없이(?) 하고 있었음.

그런데 문제는 Javascript에서 데이터 길이를 확인하는데 이런 에러가 발생하였음.[각주:1]

이건 아니잖아

=-=> getByteLength()와 비교, escape() 고찰
  1. 물론 클라이언트단 유효성검사를 우회하는 방법이 많긴 하지만 [본문으로]

테이블을 수정할 수 없습니다./제한 시간이 만료되었습니다.

모'TB_TEMP' 테이블
- 테이블을 수정할 수 없습니다.
제한 시간이 만료되었습니다. 작업을 완료하기 전에 제한 시간이 경과되었거나 서버가 응답하지 않았습니다.

SQL Server에서 테이블을 수정하는데 시간이 오래 걸리더니 수정되지 않는다.
데이터가 그렇게 많지도 않았다.

- 확인
sp_lock
sp_who

- 작업모니터(관리)

- 51 번 프로세스를 kill 해도 죽지 않는다.
그냥 야간에 데이터베이스를 재기동시켰음.

문제 해결의 시작은 에러메세지

03-03 17:26:59 ERROR xxx.sm.model.XX1234DAO.insertDetail(XX1234DAO.java:395) - com.microsoft.sqlserver.jdbc.SQLServerException: 고유 인덱스가 'PK_XX_DETAIL'인 개체 'dbo.XX_DETAIL'에 중복 키 행을 삽입할 수 없습니다.

테이블 구조를 살펴봤다.
PK 가 중복될수가 없는데...
넘어오는 데이터를 모두 비교하고 데이터베이스에 들어간 데이터를 점검해봐도 중복될 수가 없는데...
나중에는 클래스 디컴파일까지.


Unique Index 가 걸려 있었다.
에러메세지를 천천히 잘 읽어봤으면 금방 해결했을건데.
PK_XX_DETAIL 라고 하니 당연히 테이블 디자인에서 만 확인했다.

해당 테이블에서 PK 가 변경되었는데 ERWin 에서 작업하다 보니 이전 PK 가 Unique Index 로 남아 있었다.