Windows10 Pro에서 무상으로 이용가능한 Oracle Database Express Edition 18c 설치하기

Oracle DB

Oracle Database Express Edition 이하 Oracle Database XE는 Oracle Database Enterprise Edition을 기반으로 만든 Oracle Database Edition의 한 종류입니다. 이전 버전으로는 Oracle Database Express Edition 11g가 있었습니다. 이 글에서 설치하는 버전은 멀티테넌트 아키텍처(multitenant architecture) 로만 설치 됩니다.

라이센스 해석(공짜 사용?)

Oracle Database Express Edition은 무료로 이용할 수 있지만 그 목적은 시연, 교육으로 한정됩니다. 또한 기능과 성능에 제한이 걸려 있으며 패치는 제공 되지 않고  또한 기술 지원도 받을 수 없습니다. 라이센스에 대한 자세한 내용은 Oracle Database Express Edition 라이센스 공식 사이트 를 참조 하십시오.

리소스 제한

 사용할 수 있는 리소스 최대 값은 다음과 같습니다.

  • 2 CPU threads
  • 2GB RAM
  • 12GB까지의 사용자 데이터

상세 옵션 및 사양

  • Multitenant PDB를 3개까지 만들 수 있습니다.
  • Oracle SQL Developer를 이용할 수 있습니다.
  • 파티션 기능을 사용할 수 있습니다.
  • DB 작성 전에 변경 가능한 데이터베이스 문자 세트는 AL32UTF8입니다. Oracle Client에서 UFT-8 이외의 문자 코드를 응용 프로그램에서 사용하려는 경우에 NLS_LANG의 Character set설정으로 문자변환을 할 수 있기 때문에 기본 문자 세트로 설정 XE를 설치해도 문제 없습니다.
  • Database In-memory는 기본 기능을 사용할 수 있습니다. 
  • 보안 관련 기능은 TDE (Transparent Data Encryption)를 비롯한 대부분의 기능을 사용할 수 있습니다.
  • Spatial and Graph는 사용할 수 있습니다. 
  • 지리 데이터베이스로 그래프 데이터베이스로 사용할 수 있습니다.
  • 압축 관련 기능은 대부분의 기능을 사용할 수 있습니다.
  • Advanced Analytics는 사용할 수 있습니다.
  • 기계 학습과 데이터 마이닝, R 언어에서 액세스 할 수 있습니다.

다음의 내용은 이용할 수 없습니다.

  • 병렬 처리 관련 기능을 사용할 수 없습니다.
  • Enterprise Manager 옵션 팩을 사용할 수 없습니다.
  • RAT (Real Application Testing)도 사용할 수 없습니다. 
  • EM Express는 해제 가능하면 사용할 수 있지만 처음에는 로컬에서 액세스 제한되어 있습니다 .
  • RAC (Real Application Clusters) 및 DataGuard, Sharding 같은 여러 노드를 연계시키는 기능을 사용할 수 없습니다.
  • 또한 GoldenGate도 사용할 수 없습니다.
  • APEX (Oracle Application Express)와 ORDS (Oracle REST Data Services)는 포함되어 있지 않습니다. 그러나 별도로 다운로드하여 이용할 수 있습니다.

Windows 버전 설치

작업 환경

에디션	Windows 10 Pro
버전	21H1
설치 날짜	‎2021-‎02-‎04
OS 빌드	19043.1237
경험	Windows Feature Experience Pack 120.2212.3530.0

XE 다운로드

다운로드에는 다음과 같이 오라클 계정이 필요합니다. 없는경우 다음 화면 최 하단의 [계정 만들기]부터 시작하십시오

Oracle Database 18c Express Edtion for Windows x64를 다음 사이트에서 OracleXE184_Win64.zip 파일을 다운로드합니다.

Oracle Database Express Edition (XE) 18c Downloads
Oracle Database Express Edition (XE) 18c Downloads

참고)최신버전 사이트

Oracle Database Express Edition (XE) Downloads | Oracle 日本
Oracle Database Express Edition (XE) Downloads

공식 매뉴얼은 다음을 참조하십시오.

Installation Guide

XE setup.exe명령으로 설치하기

  • OracleXE184_Win64.zip파일을 C:\temp\OracleXE184_Win64에 압축을 풉니다.
  • setup.exe파일을 실행합니다.

다음과 같이 설치 준비 중… 메시지를 표시후 다음 화면으로 진행 됩니다.

[Oracle Database 18c Express Edition용 InstallShield 마법사 시작] 화면에서 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[라이센스 계약] 화면에서 [동의함(A)]을 선택하고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[설치할 대상 폴더 선택] 화면에서 [변경(C)...]버튼을 눌러 [Oracle Database 18c Express Edition 설치 위치:]를 c:\app\product\18.0.0\으로 변경합니다. 그리고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[데이터베이스 비밀번호 지정]화면에서 sys, system, PDBADMIN의 비밀번호를 manager로 입력합니다. 그리고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[설정 요약]화면에서 위에서 지정한 대상폴더 등을 확인한 후 문제가 없다면 [설치(I)]버튼을 눌러 다음 화면으로 진행합니다.

[Oracle Database 18c Express Edition 설치] 진행화면이 표시되고 자동으로 다음화면으로 진행합니다.

설치 진행 도중에 다음과 같이 Java(TM) Platform SE binary의 통신 허용에 대한 [Windows 보안 경고]화면이 표시되면[홈 네크워크, 회사 네트워크 둥의 개인 네트워크(R)]을 선택한 후 [액세스 허용(A)]버튼을 눌러 다음 화면으로 진행합니다.

다시 한번 설치 진행화면으로 돌아온 다음 [Oracle Database 18c Express Edition 설치]가 완료 되면 자동으로 다음화면으로 진행합니다.

설치가 완료되면 다음과 같이 [Oracle Database가 성공적으로 설치되었습니다.] 메시지가 표시된 설치 종료 화면이 표시됩니다. [완료(F)]버튼을 눌러 화면을 종료합니다.

  • localhost:1521은 다중 테넌트 컨테이너 데이터 베이스(CDB)의 Root 컨테이너 CDB$ROOT에 접속합니다.
  • localhost:1521/XEPDB1는 플러그인할 수 있는 데이터베이스(PDB)에 접속합니다.

환경 변수 확인

Oracle Database 18c Express Edition용 InstallShield 마법사 는 자동으로 관련 환경 변수를 설정합니다. 이를 regedit.exe명령을 실행해 확인 하면 다음과 같습니다.

[Windows키Windows Key] + [R] 키를 눌러 “실행”대화 상자를 열고 “regedit”를 입력 실행 해서 [레지스트리 편집기] 화면을 표시합니다.

[컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB18Home1]을 선택 하면 오른쪽 영역에 환경 변수 NLS_LANG, ORACLE_HOME, ORACLE_SID, ORACLE_BASE가 설정되어 있음을 확인 할 수 있습니다. 참고로NLS_LANG에 대해서는 ORA-12705: Cannot access NLS data files or invalid environment specified 글을 참조하십시오.

명령 프롬프트에서 환경변수 %PATH%값을 echo명령으로 확인하면 다음과 같이 c:\app\product\18.0.0\dbhomeXE\bin경로가 추가 되어음을 확인 할 수 있습니다. 참고로 환경변수 %PATH% 에 대해서는 Windows MS-DOS 특수 환경 변수 %PATH% 글을 참조하십시오.

데이터베이스 서비스 확인

[Windows 로고 키Windows Key + R] -> [실행] 창 -> [services.msc] 입력 후 엔터 키를 눌러 [서비스]화면을 표시합니다.

[서비스]화면 OracleOraDB18Home1TNSListener, OracleServiceXE가 실행 중 임을 확인합니다.

메뉴 등록 확인하기

[Windows Key윈도우 시작] – [Oracle – OraDB18Home1]를 선택하면 다음과 같이 등록된 Oracle Menu를 확인 할 수 있습니다.

sqlnet.ora의 기본값 확인하기

C:\app\product\18.0.0\dbhomeXE\NETWORK\ADMIN\sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

참고로 SQLNET.AUTHENTICATION_SERVICES 대한 자세한 내용을 sqlplus / as sysdba 명령으로 접속이 안될 때 (ORA-01017) 글을 참조 하십시오.

listener.ora 수정하기

Oracle XE18c 설치 후, 설정 값 HOST=PC-A.localdomain은 IP Address변경시 서비스 기동 또는 리스너 상태에 문제가 발생할 수 있습니다.listener.ora 파일의 HOST 초기치 PC-A.localdomainPC-A로 변경합니다.

C:\app\product\18.0.0\dbhomeXE\network\admin\listener.ora

수정전

...생략...
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

수정후

...생략...
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

tnsnames.ora 수정하기

Oracle XE18c 설치 후, 설정 값 HOST=PC-A.localdomain은 IP Address변경시 서비스 기동 또는 리스너 상태에 문제가 발생할 수 있습니다. tnsnames.ora 설정 파일의 HOST 초기치 PC-A.localdomainPC-A로 변경합니다.

C:\app\product\18.0.0\dbhomeXE\network\admin\tnsnames.ora

수정전

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A.localdomain)(PORT = 1521))
...생략...
LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A.localdomain)(PORT = 1521))
...생략...

수정후

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A)(PORT = 1521))
...생략...
LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = PC-A)(PORT = 1521))
...생략...

OracleOraDB18Home1TNSListener, OracleServiceXE를 재기동합니다.

Listener 상태확인

다음 명령으로 Oracle Listener 상태를 확인합니다.

C:\> lsnrctl status
LSNRCTL for 64-bit Windows: Version 18.0.0.0.0 - Production on 24-9월 -2021 19:06:19
Copyright (c) 1991, 2018, Oracle.  All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC-A)(PORT=1521)))에 연결되었습니다
리스너의 상태
------------------------
별칭                     LISTENER
버전                     TNSLSNR for 64-bit Windows: Version 18.0.0.0.0 - Production
시작 날짜                 24-9월 -2021 13:09:24
업타임                   0 일 5 시간. 56 분. 56 초
트레이스 수준            off
보안                     ON: Local OS Authentication
SNMP                     OFF기본 서비스           XE
리스너 매개변수 파일   C:\app\product\18.0.0\dbhomeXE\network\admin\listener.ora
리스너 로그 파일         C:\app\product\18.0.0\diag\tnslsnr\PC-A\listener\alert\log.xml
끝점 요약 청취 중...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC-A)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))(Security=(my_wallet_directory=C:\APP\PRODUCT\18.0.0\admin\XE\xdb_wallet))(Presentation=HTTP)(Session=RAW))
서비스 요약...
"9acb8e36c7c44a499353f094602850ca" 서비스는 1개의 인스턴스를 가집니다.
  "xe" 인스턴스(READY 상태)는 이 서비스에 대해 1 처리기를 가집니다.
"CLRExtProc" 서비스는 1개의 인스턴스를 가집니다.
  "CLRExtProc" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
"XE" 서비스는 1개의 인스턴스를 가집니다.
  "xe" 인스턴스(READY 상태)는 이 서비스에 대해 1 처리기를 가집니다.
"XEXDB" 서비스는 1개의 인스턴스를 가집니다.
  "xe" 인스턴스(READY 상태)는 이 서비스에 대해 1 처리기를 가집니다.
"xepdb1" 서비스는 1개의 인스턴스를 가집니다.
  "xe" 인스턴스(READY 상태)는 이 서비스에 대해 1 처리기를 가집니다.
명령이 성공적으로 수행되었습니다

만약 “XE” 서비스는 1개, “XEXDB” 서비스는 1개,”xepdb1″ 서비스는 1개의 메시지가 표시되지 않는다면 지금까지 설정에 문제가 있을 수 있습니다. 이 메시지가 표시되도록 설정을 다시한번 확인하십시오

sqlplus.exe명령으로 로컬 접속 확인하기

명령 프롬프트에서 sqlplus system/manager 로 접속할 수 있는지 확인합니다. 접속에 문제 없다면 다음과 같이 접속결과를 표시합니다.

C:\> sqlplus system/manager
SQL*Plus: Release 18.0.0.0.0 - Production on 일 9월 19 13:47:45 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
마지막 성공한 로그인 시간: 일 9월  19 2021 00:47:22 +09:00
다음에 접속됨:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL>

외부 컴퓨터에서 sqlplus.exe명령으로 원격 접속 확인하기

외부 컴퓨터에서 sqlplus명령으로 원격 접속하면 다음과 같이 Error가 발생합니다.

C:\> sqlplus system/manager@192.168.220.128/xe
SQL*Plus: Release 12.2.0.1.0 Production on Sun Sep 19 17:28:01 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
ERROR:
ORA-12170: TNS:Connect timeout occurred
Enter user-name:

“ORA-12170: TNS:Connect timeout occurred” Error를 해결하기 위해서는 다음과 같이 Windows Defender 방화벽에 Oracle Listener Port 1521을 허가합니다.

[제어판\모든 제어판 항목] 화면에서 “Windows Defender 방화벽” 아이콘을 클릭해서[제어판\모든 제어판 항목\ Windows Defender 방화벽]설정 화면을 표시합니다.

그리고 [제어판\모든 제어판 항목\ Windows Defender 방화벽]설정 화면의 왼쪽 메뉴에서 [고급 설정] 링크를 눌러 [고급 보안이 포함된 Windows Defender 방화벽] 화면을 표시합니다.

제어판\모든 제어 항목\Windows Defender 방화벽

마지막으로 [고급 보안이 포함된 Windows Defender 방화벽] 화면에서 [새 규칙…]을 눌러 [새 인바운드 규칙 마법사]화면을 표시합니다.

[새 인바운드 규칙 마법사]화면의 [단계:규칙 종류]에서 [포트(O)]를 선택해 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사]화면의 [단계:프로토콜 및 포트]에서 [TCP(T)]를 선택, [특정 로컬 포트(S)]에서 1521 값을 입력하고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사]화면의 [단계:작업]에서 [연결 허용(A)]를 선택하고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사]화면의 [단계:프로필]에서 [도메인(D)], [개인(P)], [공용(U)] 모두 체크를 하고 [다음(N)]버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사]화면의 [단계:이름]에서 [이름(N)]과 [설명(옵션)(D)]을 입력하고 [마침(N)]버튼을 눌러 [고급 보안이 포함된 Windows Defender 방화벽] 화면으로 돌아갑니다.

[새 인바운드 규칙 마법사]화면의 인바우드 규칙에서 오른쪽 마우스 클릭하면 [새로 고침]콘텍스트 메뉴가 표시됩니다. 여기서 [새로 고침]을 눌러 OracleXE 인바운드 규칙이 추가 되었음을 확인합니다.

Windows Defender 방화벽에 Oracle Listener Port 1521을 허가함으로서 다음과 같이 외부 컴퓨터에서 sqlplus명령으로 원격 접속됨을 확인 할 수 있습니다.

C:\> set nls_lang=KOREAN_KOREA.KO16MSWIN949
C:\> sqlplus system/manager@192.168.220.128/xe
SQL*Plus: Release 12.2.0.1.0 Production on 일 9월 19 18:24:28 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
마지막 성공한 로그인 시간: 일 9월  19 2021 18:24:17 +09:00
다음에 접속됨:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

XE CDB$ROOT컨테이너 데이터베이스(CDB)에 연결하기

다음과 같이 컨테이너 데이터 베이스(CDB)의 Root 컨테이너 CDB$ROOT에 접속 합니다. 그리고 데이터베이스에서 사용 가능한 서비스를 v$services에서 표시합니다.

C:\> sqlplus / as sysdba
    COLUMN name FORMAT A15
    COLUMN pdb FORMAT A10
    SELECT name, pdb FROM v$services;
NAME            PDB
--------------- ----------
xeXDB           CDB$ROOT
SYS$BACKGROUND  CDB$ROOT
SYS$USERS       CDB$ROOT
xe              CDB$ROOT
xepdb1          XEPDB1
SQL>

show con_name및 show con_id 명령으로 현재 컨테이너 이름과 ID를 표시합니다.

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> show con_id
CON_ID
------------------------------
1

현재 컨테이너가 CDB인경우 show pdbs 명령으로 모든 플러그인할 수 있는 데이터베이스(PDB)를 표시합니다. PDB$SEED는 신규 PDB를 만들기위한 템플릿 PDB 입니다. 현재 사용할 수 있는 플러그인 컨테이너는 XEPDB1 입니다. 18c Express Edition 버전은 앞으로 2개 더 만들 수 있습니다.

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         READ WRITE NO

XE CDB$ROOT컨테이너 데이터 베이스(CDB) 기본 정보

XE CDB$ROOT Oracle Default 사용자 확인하기

다음 명령으로 기본적으로 작성된 Oracle 사용자 명, 계정 상태 , 적용 Profile 를 확인할 수 있습니다.

C:\>sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on 금 9월 24 00:19:13 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
다음에 접속됨:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL> COLUMN username format A23
     COLUMN account_status format A17
     COLUMN profile FORMAT A16
     SET PAGESIZE 100
     SELECT username,account_status,profile FROM dba_users;
USERNAME                ACCOUNT_STATUS    PROFILE
----------------------- ----------------- ----------------
SYS                     OPEN              DEFAULT
SYSTEM                  OPEN              DEFAULT
... 중간생략 ...
ORACLE_OCM              EXPIRED & LOCKED  DEFAULT
SYSDG                   EXPIRED & LOCKED  DEFAULT
35 행이 선택되었습니다.
SQL>

XE CDB$ROOT Oracle 사용자의 default profile설정값을 확인하기

다음 SQL문으로 Oracle 사용자의 default profile설정값을 확인할 수 있습니다. 다음은 로그인 실패 허용 횟수(FAILED_LOGIN_ATTEMPTS)에 대한 각각의 profile설정값을 확인하고 있습니다.

C:\> sqlplus / as sysdba
     COLUMN profile FORMAT A16
     COLUMN resource_type FORMAT A13
     COLUMN limit FORMAT A6
     SELECT profile,resource_type,limit 
       FROM dba_profiles 
      WHERE resource_name='FAILED_LOGIN_ATTEMPTS';
 PROFILE          RESOURCE_TYPE LIMIT
 ---------------- ------------- ------
 DEFAULT          PASSWORD      10
 ORA_STIG_PROFILE PASSWORD      3

XE CDB$ROOT Oracle초기 파라미터 정보

다음 SQL문으로 Oracle XE 인스턴스 작성 직후의 초기 파라미터 정보를 확인할 수 있습니다. oracle18c_xe_v$parameter.txt 파일의 자세한 내용은 여기를 참조하십시오.

C:\> sqlplus / as sysdba
     spool oracle18c_xe_v$parameter.txt
     set linesize 146
     SET PAGESIZE 500
     COLUMN value FORMAT A95
     COLUMN name FORMAT A45
     select name , value FROM v$parameter;

NAME                                VALUE
----------------------------------- ------------
lock_name_space
processes                           300
sessions                            472
timed_statistics                    TRUE
timed_os_statistics                 0
... 중간 생략 ...
pdb_template
shrd_dupl_table_refresh_rate        60
multishard_query_data_consistency   strong
multishard_query_partial_results    not allowed
432 행이 선택되었습니다.
SQL> spool off

XEPDB1 플러그인 데이터베이스(PDB)에 연결하기

localhost:1521/XEPDB1로 플러그인 데이터베이스(PDB)에 접속합니다. port번호 1521은 생략할 수 있습니다.

C:\> sqlplus /@localhost:1521/XEPDB1 as sysdba
     COLUMN name FORMAT A15
     COLUMN pdb FORMAT A10
     SELECT name, pdb FROM v$services;
NAME            PDB
--------------- ----------
xepdb1          XEPDB1
SQL>

show con_nameshow con_id 명령으로 현재 컨테이너 이름과 ID를 표시합니다.

SQL> show con_name
CON_NAME
------------------------------
XEPDB1

SQL> show con_id
CON_ID
------------------------------
3

현재 컨테이너 가 PDB인경우 show pdbs 명령으로는 현재 컨테이너 XEPDB1 만 표시됩니다.

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 XEPDB1                         READ WRITE NO

XEPDB1 플러그인 데이터베이스(PDB) 기본 정보

sqlplus /@localhost:1521/XEPDB1 as sysdba 접속으로 위 XE 컨테이너 데이터 베이스(CDB) 기본 정보와 같은 SQL문을 사용했을 때의 차이점은 다음과 같습니다.

XEPDB1 Default 사용자 확인하기

실행 결과 다음 사용자가 추가로 출력됩니다.

PDBADMIN                OPEN              DEFAULT
SYS$UMF                 EXPIRED & LOCKED  DEFAULT

XEPDB1 사용자의 default profile설정값을 확인하기

실행 결과는 XE CDB$ROOT컨테이너 데이터 베이스(CDB) 의 결과 값과 같습니다.

XEPDB1 초기 파라미터 정보

다음 파라미터 값만 차이가 있습니다.

XE CDB$ROOT컨테이너 데이터 베이스(CDB) 의 경우

sga_target                                    1291845632
common_user_prefix                            C##

XEPDB1 플러그인 데이터베이스(PDB) 의 경우

sga_target                                    0 
common_user_prefix                            
제목과 URL을 복사했습니다