SQL 쿼리문을 날리기 전에 당연히 DB에 접속을 해야겠죠.ㅋ
Pro*C에서의 Oracle 접속과 해제에 대해서 간단히 알아볼게요.
접속을 위해선 오라클 계정과 계정의 비밀번호를 알고 있어야 될 거예요.
또 오라클이 설치된 서버가 아닌 다른 서버 장비에 설치된 오라클에 접속하기 위해
TNS을 이용한 원격 접속을 위해 TNSNAME도 알아야 됩니다.
TNS정보는 오라클의 설치된 ORACLE_HOME 경로의
$ORACLE_HOME/network/admin 디렉터리 안에
TNSNAMES.ORA 파일 안에 기록되어 있습니다.
오라클을 관리하는 DBA가 잘 설정해 둔 거를 가져와서 사용만 하면 됩니다.
★ TNSNAMES.ORA 샘플
REMOTE_DB1 =
( DESCRIPTION =
( ADDRESS = ( PROTOCAL = TCP ) ( HOST = 111.111.111.111 ) ( PORT = 1521 ))
( CONNECT_DATA = ( SERVICE_NAME = ora11 ))
}
REMOTE_DB2 =
( DESCRIPTION =
( ADDRESS = ( PROTOCAL = TCP ) ( HOST = 222.222.222.222 ) ( PORT = 1521 ))
( CONNECT_DATA = ( SERVICE_NAME = ora11 ))
}
● ORACLE DB 접속하기
접속 명령어는 CONNECT이며
계정과 비밀번호를 따로 입력하거나 같이 묶어서 입력할 수도 있고
TNSNAME도 물론 같이 사용할 수 있습니다.
EXEC SQL BEGIN DECLARE SECTION;
char * user = "account1";
char * pass = "passwd1";
char * tns = "remote_db1";
char * conn_str1 = "account1/passwd1";
char * conn_str2 = "account1/passwd1@remote_db1";
EXEC SQL END DECLARE SECTION;
//아래 4가지중에 편하신걸로 사용하시면 됩니다.
♠ 로컬 오라클 접속
EXEC SQL CONNECT :user IDENTIFIED BY :pass;
♠ TNS를 이용한 원격 오라클 접속
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tns;
♠ 계정,암호 묶어서 접속
EXEC SQL CONNECT :conn_str1;
♠ 계정,암호,TNS 묶어서 접속
EXEC SQL CONNECT :conn_str2;
if(SQLCODE == 0) {
printf("DB Connect 정상\n");
}
else{
printf("DB Connect 오류\n");
printf("SQLCODE [%d] , 오류 메시지 [%.*s]\n",sqlca.sqlerrm.sqlerrml-1,sqlca.sqlerrm.sqlerrmc);
}
또 Pro*C 프로그램에서 DB Connection를 여러 개 사용하기 위해
AT 명령어를 이용해 Connection을 지정할 수도 있습니다.
보통 DB 접속은 한번만 하면 되지만 멀티 스레드(multi thread)로 구성되어
thread마다 개별 Connection을 사용해 독립적인 작업을 위해 여러 개 사용할 수 있습니다.
EXEC SQL BEGIN DECLARE SECTION;
char * user = "account1";
char * pass = "passwd1";
char * tns = "remote_db1";
char * conn_str1 = "account1/passwd1";
char * conn_str2 = "account1/passwd1@remote_db1";
char conn_name[10];
EXEC SQL END DECLARE SECTION;
int i;
for(i=0;i<thread_count;i++) {
//Connection 이름을 CONN_1 , CONN_2 .. 으로 지정
sprintf(conn_name,"CONN_%d",i);
//아래 4가지중에 편하신걸로 사용하시면 됩니다.
♠ 로컬 오라클 접속
EXEC SQL CONNECT :user IDENTIFIED BY :pass AT :conn_name;
♠ TNS를 이용한 원격 오라클 접속
EXEC SQL CONNECT :user IDENTIFIED BY :pass AT :conn_name USING :tns;
♠ 계정,암호 묶어서 접속
EXEC SQL CONNECT :conn_str1 AT :conn_name;
♠ 계정,암호,TNS 묶어서 접속
EXEC SQL CONNECT :conn_str2 AT :conn_name;
}
CONNECT에서 AT을 사용할 경우에는
이후 모든 DB 명령어에 반드시 AT을 포함시켜야 됩니다.
EXEC SQL AT :con_name SELECT val_1 FROM T_Table;
EXEC SQL AT :con_name OPEN cursor;
EXEC SQL AT :con_name FETCH cursor;
EXEC SQL AT :con_name COMMIT WORK RELEASE;
● ORACLE DB 접속 해제하기
접속 해제 명령어는 COMMIT/ROLLBACK WORK RELEASE 입니다.
COMMIT은 프로그램이 정상 처리되어 변경된 내용을 DB에 최종 적용하는 것이고
ROLLBACK은 프로그램 도중에 오류로 인해
변경된 내용을 다시 변경 전 원래대로 되돌리는 것입니다.
if(프로그램 정상){
EXEC SQL COMMIT WORK RELEASE;
}
else{ //프로그램 오류
EXEC SQL ROLLBACK WORK RELEASE;
}
if(SQLCODE == 0) {
printf("DB DisConnect 정상\n");
}
else{
printf("DB DisConnect 오류\n");
printf("SQLCODE [%d] , 오류 메시지 [%.*s]\n",sqlca.sqlerrm.sqlerrml-1,sqlca.sqlerrm.sqlerrmc);
}
감사합니다.
'IT > PROGRAM' 카테고리의 다른 글
Pro*C 에러 처리 . SQLCA (0) | 2022.09.27 |
---|---|
Pro*C 에러 처리 . WHENEVER (1) | 2022.09.26 |
Pro*C . 오라클 DB 데이터를 C / C++ 프로그램으로 제어 (0) | 2022.09.25 |
게임 개발 유니티소프트웨어 다운로드 설치 시작하기 . Unity Hub (0) | 2021.10.18 |
[Git] git(깃) 사용법 . 작업 순서대로 명령어 개념잡기 (0) | 2021.07.08 |
댓글