본문 바로가기

02. SQLP 스터디/05. Oracle 기타

VirtualBox Oracle 23ai 설치

1. oracle 23ai 다운로드 

oralce vm download  - Oracle_Database_23ai_Free_Developer.ova 

Oracle Database 23ai 무료 VirtualBox 어플라이언스

https://www.oracle.com/database/technologies/databaseappdev-vm.html

Oracle DB 개발자 VM

 

2. Oracle VirtualBox Base Packages - 7.1.6  다운로드

Oracle VirtualBox 다운로드

https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox-downloads.html

 

3. 문제점

좋아요! 상황을 정리해 보면:
  • Windows PC에 Oracle VirtualBox를 설치했고, 그 안에 Oracle DB가 설치된 VM이 있음
  • VM에서 netstat -ntl 결과 Oracle Listener는 127.0.0.1:1521 에서 리스닝 중
  • 하지만 Windows PC (호스트)에서 Oracle DB 접속이 안 됨

    해결 요약
    1). 방화벽 허용 1521 port
    2). 어댑터 2설정 -  eth1 연결용 (어댑터 종류 : Host-ony Adapter )
    3). listner.ora 파일 (127.0.0.1 -> 0.0.0.0 으로 수정)

방화벽 확인 (VM과 Windows 양쪽)

  • VM 내부에서 방화벽이 1521 포트를 막고 있을 수도 있습니다.
    -->   systemctl stop firewalld
  • Windows에서도 방화벽 예외 설정 필요할 수 있습니다.
lsnrctl 로 상태 및 listener.ora 파일 위치 확인

127.0.0.1  --> 0.0.0.0 으로 수정
vi listener.ora

🔍 문제 요약

127.0.0.1:1521은 루프백 주소로, VM 내부에서만 접근 가능합니다. 즉, VM 바깥(Windwos PC)에서는 이 포트에 접근할 수 없습니다.

✅ 해결 방법

1. Oracle Listener가 0.0.0.0 또는 실제 VM IP에 바인딩되도록 설정 변경

📍 Oracle Listener 설정 파일 수정

VM 내부에서 listener.ora 파일을 열어 다음 내용을 확인하거나 수정해야 합니다:
  • 기존에 HOST = 127.0.0.1로 되어 있다면, 0.0.0.0 또는 VM의 실제 IP로 바꿔야 합니다.

🎯 적용 후 Listener 재시작
lsnrctl stop
lsnrctl start

그리고 다시 netstat -ntl로 확인해서 0.0.0.0:1521 또는 <VM의 IP>:1521 으로 바뀌었는지 확인하세요.
 
 

 

3. 정보확인

vm ip 확인
[oracle@vbox ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5a:df:ec brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0
       valid_lft 85234sec preferred_lft 85234sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:4f:4b:65 brd ff:ff:ff:ff:ff:ff
    altname enp0s8
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:dd:41:a4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
[oracle@vbox ~]$ 
netstat -ntl
windows pc 확인

 

4. 네트워크 설정 

 

어댑터 1 설정 - 이미 아래와 같이 설정 되어 있음
어댑터 2 추가 설정 
 
Oracle SQL Develpor 접속  1521 port

1) hr 접속   2) system 접속


putty 접속 : 2223 port 

 

 

https://www.oracle.com/kr/database/free/get-started/ Oracle Database Free에 접속하기

Oracle Database Free에 접속하기

SQL

  • 접속 문자열 형식: [username]@[hostname]:[port]/[DB service name] [AS SYSDBA]
    최초 플러그형 데이터베이스(PDB) 에 접속하려면 다음을 사용합니다.

sqlplus sys@localhost:1521/FREEPDB1 as sysdba

  • 컨테이너 데이터베이스(CDB)에 접속하려면 다음을 사용합니다.

sqlplus sys@localhost:1521/FREE as sysdba

Java

 
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@localhost:1521/FREEPDB1"); // jdbc:oracle:thin@[hostname]:[port]/[DB service name]
ods.setUser("[Username]");
ods.setPassword("[Password]");
Connection conn = ods.getConnection();
 
PreparedStatement stmt = conn.prepareStatement("SELECT 'Hello World!' FROM dual");
ResultSet rslt = stmt.executeQuery();
while (rslt.next()) {
  System.out.println(rslt.getString(1));
}

Python

 
import oracledb

conn = oracledb.connect(user="[Username]", password="[Password]", dsn="localhost:1521/FREEPDB1")
with conn.cursor() as cur:
   cur.execute("SELECT 'Hello World!' FROM dual")
   res = cur.fetchall()
   print(res)

Node.js

 
const oracledb = require('oracledb');
     
async function run() {
    let connection = await oracledb.getConnection({
    user : "[Username]",
    password : "[Password]",
    connectString : "localhost:1521/FREEPDB1" // [hostname]:[port]/[DB service name]
    });
    let result = await connection.execute( "SELECT 'Hello World!' FROM dual");
    console.log(result.rows[0]);
}
     
run();

 

'02. SQLP 스터디 > 05. Oracle 기타' 카테고리의 다른 글

How to Reorganize a Table  (1) 2025.04.26
CONNECT BY LEVEL  (0) 2025.04.14
Oracle 실습 (livesql)  (0) 2025.04.07
SQL 전문가 가이드(개정판) 2020 Edition 주요 개정사항  (0) 2025.04.05
기출문제 Link  (0) 2025.04.05