제목 | db연결이 사용도중 자꾸 끊였다가 연결되었다 반복하는 이유가 무엇일까요? | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | 정수리 | 작성시각 | 2018/12/10 17:49:06 |
|
|||
포럼에서 여러 많은 분들께서 도움을 주셔서
다행히 오라클db에 연동에 성공하였습니다.
db에서 데이터를 읽어오는 작업을 하면
한번씩
Unable to connect to your database server using the provided settings.
연결관련 에러가 뜨더라구요;;
저게 계속 뜨는게 아니구요 한번씩 발생합니다;
class Test_model extends CI_Model{ public $continfo; function __construct() { parent::__construct(); $this->continfo = $this->load->database($this->continfoSet(), TRUE); } function getSub($params='') { $sql = 'SELECT LOW_SUB_CTRT_FLD_NM as subType, CTRT_YMD as subDate, LOW_SUB_CTRT_CTRT_AMT as subMoney, LOW_SUB_CTRT_RATE as subPercent, ENTP_NM as subCompany, REPREVE_NM AS subCEO FROM V_TCM_SUBCTRT_LINK where CTRT_ACCT_BOOK_MNG_NO = ?'; $query = $this->continfo->query($sql, $params); $this->continfo->close(); return $query->result_array(); } function continfoSet() { $config['hostname'] = CONTINFO_IP; $config['username'] = '아이디'; $config['password'] = '패스워드'; $config['database'] = 'db명'; $config['dbdriver'] = 'oci8'; $config['dbprefix'] = ''; $config['pconnect'] = TRUE; $config['db_debug'] = TRUE; $config['cache_on'] = FALSE; $config['cachedir'] = ''; $config['char_set'] = 'utf8'; $config['dbcollat'] = 'utf8_general_ci'; $config['swap_pre'] = ''; $config['autoinit'] = TRUE; $config['stricton'] = FALSE; $config['port'] = CONTINFO_PORT; return $config; } } 연결후에 셀렉트해온후 강제로 db연결을 끊는 과정인데
왜 저런 에러가 중간에 발생하는것일까요??
어디부터 살펴봐야 힌트를 얻을수있을까요??;; |
|||
다음글 | ci3 파일세션 질문 드립니다. (1) | ||
이전글 | HTTP2 를 ubuntu에 적용했습니다 (1) | ||
변종원(웅파)
/
2018/12/10 18:02:50 /
추천
0
close는 왜 하시는지 궁금하네요?
|
kaido
/
2018/12/10 18:38:48 /
추천
0
예상되는 패턴은 connect pool 로 호출 하고나서 중간에 colse 해놓고는 다시 connect pool obj 로 접속 call 을 불렀을것 같네요. close 한게 문제 될것 같으며, oracle 은 접속 유지를 해야만 하는 db 입니다.
var_dump($this); 해당 명령어로 CI에서 담고 있는 모든 obj 를 확인 가능합니다. SQL 호출 부분과 close 부분 으로 나눠서 DB 관련 obj 체크해보시면 무언가 다른것을 보실것 입니다.
pconnect 로 호출 하면 DB obj 형태로 떠놓고는 query 실행 할때마다 새로 접속 하지 않고 기존 obj로 접속 합니다. 레퍼런스로 호출해도 그렇습니다. 중간에 이유없이 강제로 close 하셨다면 다시 connect 하는 부분이 필요할 것입니다. |
정수리
/
2018/12/11 08:59:16 /
추천
0
@변종원 이전에 다른 프로그램을 만들 때 프로그램이 늦어 지는 부분이 있어 서버팀에서 확인해보니 db에서 리소스가 남아있어서 느려진다고하여 close를 해주니 속도가 느려지는 현상이 사라져 close를 사용하게 되었습니다. 오라클의 경우 주 db가 아니며 특정에 대해 한번씩 조회하기에 사용이후 close 강제로 연결을 끊었습니다. |
정수리
/
2018/12/11 09:19:03 /
추천
0
@kaido 답변감사합니다. 말씀하신대로 호출 이후에 var_dump($this) close() var_dump($this)비교해보니 //호출 이후 [pconnect] => 1 [conn_id] => Resource id #44 [result_id] => 1 [db_debug] => 1 [benchmark] => 0.023853063583374 [query_count] => 1 [bind_marker] => ? [save_queries] => 1 [queries] => Array ( [0] => select A.CTRT_ACCT_BOOK_MNG_NO as col005, A.CTRT_NM as col006, B.SUPERV_USER_NM as col020, B.SUPERV_DEPT_CD, C.DEPT_NM as col002 from V_TCM_SUMMARYLIST A JOIN V_TCM_CTRTSUPERV_LINK B ON A.CTRT_ACCT_BOOK_MNG_NO = B.CTRT_ACCT_BOOK_MNG_NO JOIN V_TCM_DEPT_LINK C ON B.SUPERV_DEPT_CD = C.DEPT_CD where A.CTRT_NM like '%tt%' ) //close이후 [pconnect] => 1 [conn_id] => [result_id] => 1 [db_debug] => 1 [benchmark] => 0.023853063583374 [query_count] => 1 [bind_marker] => ? [save_queries] => 1 [queries] => Array ( [0] => select A.CTRT_ACCT_BOOK_MNG_NO as col005, A.CTRT_NM as col006, B.SUPERV_USER_NM as col020, B.SUPERV_DEPT_CD, C.DEPT_NM as col002 from V_TCM_SUMMARYLIST A JOIN V_TCM_CTRTSUPERV_LINK B ON A.CTRT_ACCT_BOOK_MNG_NO = B.CTRT_ACCT_BOOK_MNG_NO JOIN V_TCM_DEPT_LINK C ON B.SUPERV_DEPT_CD = C.DEPT_CD where A.CTRT_NM like '%tt%' ) conn_id 부분에서 다르더라구요. 두개 모두 쿼리문에 있는데 close이후의 경우 conn_id부분에 아무것도 없다보니 연결이 안되었다는 에러가 출력되는 것일까요? close부분을 주석처리 한 후 테스트를 해보아도 원인은 똑같이 발생합니다. |
kaido
/
2018/12/11 09:24:31 /
추천
0
네 그렇습니다 실행한 쿼리에 대해서 재차 다시 실행을 하기 위해서 이전에 실행한 쿼리 오브젝트는 남겨두고 close 때 커넥션을 날려버립니다. [정확히는 DATA OBJ 전체 입니다.] CI 내에서 캐시 쿼리 처리 하기 위해 남겨두는것 입니다. [DB의 캐싱 하고는 다른것 입니다.] 가령 $sql = $this->db->query( select * from TEST ); $sql2 = $this->db->query( select * from TEST ); 2번 DB에 접속 해서 데이터를 가져올까요? 아닙니다. [queries] 1번 쿼리와 동일한게 있다고 판단하면 1번 쿼리를 그대로 다시 사용합니다. |
정수리
/
2018/12/11 10:10:21 /
추천
0
@kaido 답변감사합니다. 아직 제가 부족한 부분이 많아서 그런지 올려주신 답변에 대해 정확히 이해 하기가 어렵네요 ㅜㅜ 현재 서버를 재시작 후 테스트 해보니 에러 메세지는 출력되지 않네요...
|