티스토리 뷰
jdbc를 통해서 특정 테이블의 데이터를 삭제할 때 발생될 수 있는 에러를 해결할 수 있는 방법입니다.
첫번째. delete large amount error ~~
특정 rows 이상을 한번에 삭제하는 경우에 발생 합니다.
ex) delete from t_orders where order_dt >= '20190101';
이경우는 limit 절을 이용해 삭제할 대상을 split하면서 삭제하면 해결이 됩니다.
ex)
con.setAutoCommit(false);
Statement stmt = con.createStatement();
int nDeleteRows;
do {
// 1만건씩 삭제하는 경우
nDeleteRows = (stmt.executeUpdate("delete from t_orders where order_dt >= '20190101' limit 10000");
con.commit();
} while(nDeleteRows > 0);
stmt.close();
두번째 에러는 Batch Insert 처럼 처리하는 데이터가 많으면 발생하는
org.postgresql.util.PSQLException: ERROR: restart transaction:
TransactionRetryWithProtoRefreshError:
TransactionAbortedError(ABORT_REASON_TIMESTAMP_CACHE_REJECTED_POSSIBLE_REPLAY):
CockroachDB에 DML를 수행하는 경우는 에러가 발생시 3번정도 재시도하는 로직을 넣어 두는 것이 필 수 입니다.
첫번째 처리하는 부분이 doDelete()라는 함수로 구현이 되어 있다면 아래와 같이 재시도 하는 로직을 넣어주며 됩니다.
private static final String RETRY_SQL_STATE = "40001";
for (int i=1; i <=3; i++) {
try {
doDelete();
break;
} catch(SQLException e) {
if (RETRY_SQL_STATE.equals(e.getSQLState())) {
if ( i == 3) {
throw e;
} else {
continue;
}
}
throw e;
}
} // end for
- Total
- Today
- Yesterday
- 카카오 에드
- Sybase IQ
- node.js
- 루미큐브 종류
- 솔리드 쿨론
- 남설 팔찌
- 별잉 빛나는 밤
- 화분벌레
- 톡토기
- 파나소닉 비데 DL-EH10KWS
- yugabyteDB
- 르세라핌
- 브리다 정수기
- GKRS
- 별이 빚나는 밤
- JMW 헤어드라이기기
- weka
- 유가바이트디비
- VARIDESK
- 홈 오피스
- 배당급
- 고체 향수
- Pixel Pals
- 오미크론
- 매직 트랙패드2
- 빈센트 반 고흐
- 코라나 19
- Life Chair
- 증권정보포털
- 로니카 BCS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |