| 제목 | Oracle DB에 로우 인서트 후 해당 로우가 사라지는 현상 | ||
|---|---|---|---|
| 카테고리 | CI 2, 3 | ||
| 글쓴이 | 버닝 | 작성시각 | 2016/11/09 15:13:18 |
|
|
|||
|
안녕하세요. 버그를 잡고있는데 어려움을 겪고있어 이렇게 질문드립니다.
문제 현상과 관련 환경은 이렇습니다. - Oracle DB에 로우 인서트 후 웹앱에서 리스트 출력 시 해당 로우가 사라진다. - 인서트 후 디비 툴(데이터그립)에서 인서트된 로우가 확인되고 웹앱에서 리스트 출력 시 디비 툴에서 인서트 된 로우가 사라진다. - 소스코드 상에서 last_query() 함수를 통해 실행된 쿼리를 얻어 디비 툴에서 실행하면 웹앱에서 리스트 출력 시 로우가 사라지는 현상은 발생하지 않는다 - 소스코드상의 디비 계정과 디비툴에서의 계정은 동일하다.
현재 제가 의심하고 있는 부분은 커밋 부분입니다.
그래서 제가 시도한 주된 액션들은 아래와 같습니다. 1. $this->db->trans_start(); 쿼리 $this->db->trans_complete();
2. $this->db->trans_begin(); 쿼리 $this->db->trans_commit()
3. $this->db->query("Main Query"); $this->db->query("COMMIT");
혹시 커밋 이슈 외에 다른 부분을 의심할 수 있는 원인이 있을지 또는 제가 취한 액션들 외에 다른 액션들이 있을지 CI 선배님들의 조언을 구하고 싶습니다. 감사합니다.
|
|||
| 다음글 | update_batch 이용시 문의 드립니다. (1) | ||
| 이전글 | 페이지네이션 attribute 관련 질문입니다. (4) | ||
|
변종원(웅파)
/
2016/11/09 16:41:40 /
추천
0
|
|
버닝
/
2016/11/09 18:05:15 /
추천
0
답변 감사합니다. 트랜잭션 사이의 쿼리는 하나의 쿼리이고 로직의 결과도 정상적이지만 같은 결과가 발생하네요.
$this->db->trans_start();
$this->db->insert($this->table, $data);
$this->db->trans_complete();
if ($this->db->trans_status() === false) {
return '실패';// generate an error... or use the log_message() function to log your error
} else {
$this->db->trans_commit();
return '성공';
}
위 코드에서 insert 부분도 query() 함수를 사용해봤지만 같은 결과이네요. 무언가 다른 원인이 있을까요? |
|
변종원(웅파)
/
2016/11/09 18:17:00 /
추천
0
시스템 파일중 DB_active_rec.php에서 트랜잭션 부분에서 결과값들을 찍어보셔야 할 것 같습니다. 참고하세요. http://blog.robotekindo.net/2010/05/codeigniter-oracle-transaction-bug.html |
트랜잭션 사이의 쿼리중 하나라도 실패하면 모두 롤백됩니다.
위 소스를 적용해보세요.