본문 바로가기
Infra & Security Eng/Database Engineering

[PHP] Oracle 19c 데이터베이스 연동: oci_connect 상세 주소와 별칭으로 접속하기

by 엔지니어 E 2026. 3. 20.
반응형

오라클 접속을 위해 알아야 할 정보

1. 오라클 서버의 IP와 사용 포트 번호(리스너 포트번호)
2. 오라클 SID명(인스턴스 이름)
3. 오라클 서버의 접속 식별자(tns명)
4. 오라클 접속 계정과 암호

 

PHP - 오라클 데이터베이스 연동 프로세스

1. 터미널(Putty)에서 접속 정보 확인하기 (dal (공통서버))
먼저 Rocky Linux 터미널에서 tnsping dal을 입력하면, 오라클 클라이언트가 해당 서버(dal)를 어떻게 찾아가야 하는지 설정된 **주소록(tnsnames.ora)**의 내용을 보여준다

=============================================================================================== 

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp) (HOST = 192.168.10.11) (port = 1521)) (CONNECT_DATA = (SID = DB19)))

2. PHP 접속 코드 작성하기

방법A: 상세 주소를 직접 입력하는 방식(oconnection1.php)
이 방식은 IP, 포트, SID 정보를 코드에 직접 기록하여 접속 하는 방법이다 

=============================================================================================== 
<?php
$user_name = "st15"; - 접속할 데이터베이스의 사용자 계정 아이디
$password = "st15";  - 해당 계정의 비밀번호
$charset = "AL32UTF8"; - 한글 데이터가 깨지지 않도록 설정하는 문자 인코딩 규격(유닉스에서 사용하는 기본 문자셋)
$server = "(DESCRIPTION =
               (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.11)(port = 1521))
               (CONNECT_DATA = (SID = DB19))
             )"; - 서버의 IP 주소, 통신 규약(TCP), 포트 번호(1521), 데이터베이스 식별자(SID)를 명시한 접속 문자열

$conn = oci_connect($user_name, $password, $server, $charset); - 설정한 정보들을 사용하여 오라클 데이터베이스 서버에 연결을 시도하고 그 결과를 변수에 저장함

if (!$conn) { - 연결 결과가 거짓(실패)인 경우 실행됨
    $e = oci_error(); -  발생한 에러의 구체적인 정보를 가져옴
    echo "Connection failed: " . $e['message']; - 에러 메시지를 화면에 출력함
* 배열 $e 안에는 여러 정보가 들어있는데, 그중에서 **['message']**라는 키값에 접근하면 사용자가 읽을 수 있는 문장 형태의 에러 메시지만 쏙 뽑아낼 수 있다
} else { - 연결 결과가 참(성공)인 경우 실행됨
echo "Oracle Server Connected (Direct Mode)!<br>"; - 접속 성공을 알리는 문구와 줄바꿈 태그를 출력함
    echo oci_server_version($conn); - 현재 연결된 오라클 데이터베이스 서버의 소프트웨어 버전 정보를 화면에 출력함
}

echo "<hr>"; - 화면에 시각적인 구분선을 출력
show_source(__FILE__); - 현재 작성되어 실행 중인 이 파일의 전체 소스 코드를 웹 화면에 그대로 표시
?>

방법 B: TNS 별칭을 사용하는 방식 (oconnection2.php)
이 방식은 리눅스 서버 설정 파일에 미리 등록된 dal이라는 별칭을 사용하여 접속하는 방법이다

<?php
$server = "dal"; - 리눅스 서버의 tnsnames.ora 파일에 정의된 서버의 별칭
$user_name = "st15"; - 접속할 사용자 계정 아이디
$password = "st15"; - 해당 계정의 비밀번호

$conn = @oci_connect($user_name, $password, $server) or die('Could not connect:'); - 연결을 시도하되 실패하면 에러를 숨기고(@) 메시지를 출력하며 프로그램을 즉시 종료(die)한다
* @: 에러 메시지 출력 억제 하는 기능
* oci_connect: 이 함수는 실행 결과로 두 가지 중 하나(true 혹은 false)를 반환
* die('메시지'): die 라는 함수는 괄호 안의 문자열을 화면에 출력하고, 그 즉시 PHP 프로그램의 모든 실행을 중단하고 종료함
echo "Oracle 19c \$conn : $conn<br>"; - 생성된 연결 통로의 식별자 정보를 화면에 출력함
$st = oci_server_version($conn); -  접속된 서버의 상세 버전 정보를 변수에 할당함
echo "$st<br>"; - 할당된 버전 정보 문자열을 화면에 표시함
?>

3. 웹서버(달서버)에서 php 출력물 확인하기 

 

웹 접속 메커니즘(작동 순서)

사용자가 브라우저 접속창에 PHP 파일 웹 주소를 입력하면 다음 과정이 일어난다 

1. 요청: 사용자의 PC 브라우저가 네트워크를 타고 192.168.10.11 서버에 있는 아차피(Apache) 웹 서버에게 "이 파일 좀 실행해줘" 라고 요청을 보낸다
2. 해석(Parsing): 아파치는 파일 확장자가 .php인 것을 보고 PHP 엔진에게 파일을 넘긴다
3. DB접속: PHP 엔진은 코드 내의 oci_connect를 실행한다. 이때 같은 서버(또는 네트워크로 연결된) 오라클(Oracle) 데이터베이스에 st15 계정으로 문을 두드려 접속 허가를 받는다
4. 결과 생성: 접속이 성공하면 PHP는 "Oracle Server Connected..."라는 문구와 서버 버전 정보를 HTML 형태로 만든다.
5. 응답: 아파치가 최종 완성된 HTML 화면을 사용자의 브라우저로 다시 보내주면, 우리가 보는 화면이 띄어지게 된다 
참고사항

"or 연산자"는 "= 연산자"보다 우선순위가 후순위 이므로 항상 "= 연산자" 부터 명령이 실행된다 
* 여기서 or은 앞의 결과가 **거짓(False)**일 때만 뒤의 명령을 실행하라는 조건부 실행의 역할


or 연산자는 예시로 a와 b를 연산했을 때 둘 중 하나가 true 이면 true가 된다. 그래서 or 앞에 문장(여기서는 $conn=~) 이 실행이 안되면 or 뒤 문장을 실행해야하는데(여기서는 die('Could not ~) or 여기서 문장은 앞에 문장이 에러가 나면뒷부분(에러 처리 또는 종료)을 실행하라라는 뜻이 된다(뒷 문장으로 실행이 됨)