TheKoguryo's 기술 블로그

 Version 2024-11-29

4.2.3 Oracle Database 23ai Free Container Image

지난 2023년 4월, 개발자를 위해 개인 데스크탑/랩탑에서 실행할 수 있는 Oracle Database 23c Free Container Image를 출시하였습니다. 로컬 PC에 docker CLI 호환 도구를 통해 실행할 수 있습니다. 이후 23c 버전은 ai 관련 기능을 추가하여 23ai로 이름이 변경되었습니다. 많은 개발자들이 Arm기반 맥북 환경을 사용하고 있고, 개발자들의 요구에 따라 2024년 11월, 작성일 기준 이번달에 ARM기반에서 구동되는 이미지를 출시하였습니다. 그래서 현재는 윈도우즈, 리눅스, 맥 환경에서 모든 사용할 수 있습니다.

Oracle Database 23ai Free Container Image

  • https://container-registry.oracle.com/ords/ocr/ba/database/free

  • Full, Lite 2가지 이미지가 있으며, 해당 페이지는 아래와 같이 설명하고 있습니다.

    • The Full image: supports all the database features provided by Oracle Database 23ai Free.
    • The Lite image: smaller image size with a stripped-down installation of the database.
  • 각 이미지를 다운로드 받아보면 확연한 크기 차이를 확인할 수 있습니다.

    • Full : AMD 9.45 GB / ARM 9.01 GB
    • Lite: AMD 1.82GB / ARM 1.71GB
    > docker images
    REPOSITORY                                    TAG                   IMAGE ID       CREATED         SIZE
    container-registry.oracle.com/database/free   23.5.0.0-lite-arm64   0b5c6efe0bdd   5 weeks ago     1.71GB
    container-registry.oracle.com/database/free   23.5.0.0-lite-amd64   742f1b37af1d   3 months ago    1.82GB
    container-registry.oracle.com/database/free   23.5.0.0-arm64        8e32bb912325   7 weeks ago     9.01GB
    container-registry.oracle.com/database/free   23.5.0.0-amd64        e1ff84cf03ed   3 months ago    9.45GB
    

Macbook ARM64에서 실행 예시

Docker Desktop 라이선스 이슈로 공식문서에서 예시는 podman을 사용하고 있습니다. 예시에서는 Rancher Desktop을 사용합니다.

Oracle Database 23ai Free Container Image 실행하기
  1. 서울 또는 춘천에서도 동일한 이미지를 제공하고 있습니다. 원하는 이미지를 사용합니다.

    container-registry-seoul.oracle.com/database/free:23.5.0.0-lite-arm64
    또는
    container-registry.oracle.com/database/free:23.5.0.0-lite-arm64
    
  2. Oracle Database 23ai Free Container Image ARM 버전 실행

    docker run -d \
    --name dbfree-23.5.0.0-lite-arm64 \
    -p 1521:1521 \
    -e ENABLE_ARCHIVELOG=false \
    -e ENABLE_FORCE_LOGGING=false \
    -e ORACLE_PWD=OracleIsAwesome \
    -v OracleDBData:/opt/oracle/oradata/ \
    container-registry-seoul.oracle.com/database/free:23.5.0.0-lite-arm64
    
  3. 실행결과 확인

    $ docker ps -f name=dbfree-23.5.0.0-lite-arm64
    CONTAINER ID   IMAGE                                                                   COMMAND                   CREATED         STATUS                   PORTS                                       NAMES
    a8aa6e8dea1d   container-registry-seoul.oracle.com/database/free:23.5.0.0-lite-arm64   "/bin/bash -c $ORACL…"   4 minutes ago   Up 4 minutes (healthy)   0.0.0.0:1521->1521/tcp, :::1521->1521/tcp   dbfree-23.5.0.0-lite-arm64
    
  4. 데이터베이스가 준비될때까지 기다립니다.

    $ docker logs -f dbfree-23.5.0.0-lite-arm64
    Expanding oracle data
    /home/oracle
    Starting Oracle Net Listener.
    Oracle Net Listener started.
    Starting Oracle Database instance FREE.
    Oracle Database instance FREE started.
    Pluggable Database FREEPDB1 opened.
    
    
    SQL*Plus: Release 23.0.0.0.0 - Production on Fri Nov 15 07:50:06 2024
    Version 23.5.0.24.07
    
    Copyright (c) 1982, 2024, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
    Version 23.5.0.24.07
    
    SQL>
    ...
    
    SQL> Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
    Version 23.5.0.24.07
    #########################
    DATABASE IS READY TO USE!
    #########################
    ...
    
  5. database persistence를 위해 OracleDBData란 이름으로 볼륨을 지정하였습니다. 관련 내용을 확인해 봅니다.

    $ kildong@kildong-mac  ~  docker volume ls
    DRIVER    VOLUME NAME
    local     OracleDBData
    $ kildong@kildong-mac  ~  docker volume inspect OracleDBData
    [
        {
            "CreatedAt": "2024-11-15T16:49:41+09:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/OracleDBData/_data",
            "Name": "OracleDBData",
            "Options": null,
            "Scope": "local"
        }
    ]
    $ kildong@kildong-mac  ~  sudo ls -la /var/lib/docker/volumes/OracleDBData/_data
    Password:
    ls: /var/lib/docker/volumes/OracleDBData/_data: No such file or directory
    
    • 맥에서 Rancher Desktop을 사용하는 경우에 아래와 같이 확인합니다.

      # Rancher Desktop-managed VM의 Shell 실행
      rdctl shell
      
      # 마운트한 OracleDBData 볼륨 확인
      docker volume ls
      
      # 마운트한 OracleDBData 볼륨 상세 정보 확인 
      docker volume inspect OracleDBData
      
      # FREE 데이터베이스 인스턴스의 파일들 확인
      sudo ls -lahtr /var/lib/docker/volumes/OracleDBData/_data/FREE
      
      # FREE 데이터베이스 인스턴스내 PDB FREEPDB1의 파일들 확인
      sudo ls -lahtr /var/lib/docker/volumes/OracleDBData/_data/FREE/FREEPDB1
      
      $ kildong@kildong-mac  ~  rdctl shell
      lima-rancher-desktop:/Users/kildong$ docker volume ls
      DRIVER    VOLUME NAME
      local     OracleDBData
      lima-rancher-desktop:/Users/kildong$ docker volume inspect OracleDBData
      [
          {
              "CreatedAt": "2024-11-15T16:49:41+09:00",
              "Driver": "local",
              "Labels": null,
              "Mountpoint": "/var/lib/docker/volumes/OracleDBData/_data",
              "Name": "OracleDBData",
              "Options": null,
              "Scope": "local"
          }
      ]
      lima-rancher-desktop:/Users/kildong$ sudo ls -la /var/lib/docker/volumes/OracleDBData/_data
      total 20
      drwxr-xr-x    4 54321    54321         4096 Nov 15 16:49 .
      drwx-----x    3 root     root          4096 Nov 15 16:49 ..
      -rw-r--r--    1 54321    54321           26 Oct  9 15:41 .FREE.created
      drwxr-x---    4 54321    54321         4096 Nov 15 16:49 FREE
      drwxr-xr-x    3 54321    54321         4096 Oct  9 15:41 dbconfig
      lima-rancher-desktop:/Users/kildong$ sudo ls -lahtr /var/lib/docker/volumes/OracleDBData/_data/FREE
      total 2G
      -rw-r-----    1 54321    54321      17.9M Oct  9 15:41 control02.ctl
      drwxr-xr-x    4 54321    54321       4.0K Nov 15 16:49 ..
      drwxr-x---    2 54321    54321       4.0K Nov 15 16:49 pdbseed
      -rw-r-----    1 54321    54321     200.0M Nov 15 16:49 redo03.log
      -rw-r-----    1 54321    54321     200.0M Nov 15 16:49 redo01.log
      -rw-r-----    1 54321    54321      20.0M Nov 15 16:49 temp01.dbf
      drwxr-x---    4 54321    54321       4.0K Nov 15 16:49 .
      drwxr-x---    2 54321    54321       4.0K Nov 15 16:50 FREEPDB1
      -rw-r-----    1 54321    54321       7.0M Nov 15 17:05 users01.dbf
      -rw-r-----    1 54321    54321      25.0M Nov 15 17:05 undotbs01.dbf
      -rw-r-----    1 54321    54321       1.0G Nov 15 17:05 system01.dbf
      -rw-r-----    1 54321    54321     610.0M Nov 15 17:05 sysaux01.dbf
      -rw-r-----    1 54321    54321     200.0M Nov 15 17:05 redo02.log
      -rw-r-----    1 54321    54321      17.9M Nov 15 17:05 control01.ctl
      lima-rancher-desktop:/Users/kildong$ sudo ls -lahtr /var/lib/docker/volumes/OracleDBData/_data/FREE/FREEPDB1
      total 780M
      drwxr-x---    4 54321    54321       4.0K Nov 15 16:49 ..
      -rw-r-----    1 54321    54321      20.0M Nov 15 16:50 temp01.dbf
      drwxr-x---    2 54321    54321       4.0K Nov 15 16:50 .
      -rw-r-----    1 54321    54321     100.0M Nov 15 17:05 undotbs01.dbf
      -rw-r-----    1 54321    54321     280.0M Nov 15 17:05 system01.dbf
      -rw-r-----    1 54321    54321     400.0M Nov 15 17:05 sysaux01.dbf
      
  6. SYS, SYSTEM, PDBADMIN 유저를 사용합니다. 실행된 컨테이너상에 sqlplus를 통해 접속가능합니다.

    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus sys/OracleIsAwesome@FREE as sysdba
    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus system/OracleIsAwesome@FREE
    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus pdbadmin/OracleIsAwesome@FREEPDB1
    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus sys/OracleIsAwesome@FREEPDB1 as sysdba
    
    • 예시

      $ kildong@kildong-mac  ~  docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus sys/OracleIsAwesome@FREE as sysdba
      
      SQL*Plus: Release 23.0.0.0.0 - Production on Fri Nov 15 08:41:28 2024
      Version 23.5.0.24.07
      
      Copyright (c) 1982, 2024, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
      Version 23.5.0.24.07
      
      SQL> select instance_name,status from v$instance;
      
      INSTANCE_NAME	 STATUS
      ---------------- ------------
      FREE		 OPEN
      
      SQL>
      
호스트에서 SQL Developer로 접속해 보기
  1. 개발자 데스크탑/랩탑에 사용할 클라이언트를 가정하여, SQL Developer로 아래와 같이 접속할 수 있습니다.

  2. SQL Developer를 실행합니다.

  3. 새 데이터베이스 접속을 만듭니다.

    • 사용자 이름/비밀번호: sys / 앞서 설정한 암호
    • 롤: SYSDBA
    • 서비스 이름: FREE

    image-20241115175200786

  4. 테스트가 성공하면, 입력한 데이터 베이스 접속을 저장하고 접속합니다.

  5. 접속에 성공했습니다. 메뉴에서 보기(V) 선택후 DBA를 선택하면, 앞서 Docker 명령으로 확인한 DB 관련 파일위치를 동일하게 확인할 수 있습니다.

    image-20241115175955521

  6. PDB도 동일한 방법으로 접속 테스트합니다.

    • 새 데이터베이스 접속을 만듭니다.
    • 사용자 이름/비밀번호: pdbadmin / 앞서 설정한 암호
    • 롤: 기본값
    • 서비스 이름: FREEPDB1

    image-20241115180545147

  7. 테스트가 성공하면, 입력한 데이터 베이스 접속을 저장하고 접속합니다.

  8. 접속에 성공했습니다. 기본 생성된 테이블이 없습니다. 필요하면 생성하여 사용합니다.

    image-20241115180651768

23ai - AI Vector Search 테스트
  1. sys 유저로 FREEPDB1 데이터베이스에 접속합니다.

    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus sys/OracleIsAwesome@FREEPDB1 as sysdba
    
  2. 테이블스페이스와 사용할 유저를 생성합니다.

    CREATE TABLESPACE USERS DATAFILE 'USERS' SIZE 64M AUTOEXTEND ON;
    
    CREATE USER myuser IDENTIFIED BY password123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;
    
    GRANT CONNECT, RESOURCE TO myuser;
    
  3. 생성한 유저로 다시 접속합니다.

    docker exec -it dbfree-23.5.0.0-lite-arm64 sqlplus myuser/password123@FREEPDB1
    
  4. Vector Search에 사용할 샘플 데이터를 추가합니다.

    DROP TABLE galaxies PURGE;
    CREATE TABLE galaxies (id NUMBER, name VARCHAR2(50), doc VARCHAR2(500), embedding VECTOR);
    
    INSERT INTO galaxies VALUES (1, 'M31', 'Messier 31 is a barred spiral galaxy in the Andromeda constellation which has a lot of barred spiral galaxies.', '[0,2,2,0,0]');
    INSERT INTO galaxies VALUES (2, 'M33', 'Messier 33 is a spiral galaxy in the Triangulum constellation.', '[0,0,1,0,0]');
    INSERT INTO galaxies VALUES (3, 'M58', 'Messier 58 is an intermediate barred spiral galaxy in the Virgo constellation.', '[1,1,1,0,0]');
    INSERT INTO galaxies VALUES (4, 'M63', 'Messier 63 is a spiral galaxy in the Canes Venatici constellation.', '[0,0,1,0,0]');
    INSERT INTO galaxies VALUES (5, 'M77', 'Messier 77 is a barred spiral galaxy in the Cetus constellation.', '[0,1,1,0,0]');
    INSERT INTO galaxies VALUES (6, 'M91', 'Messier 91 is a barred spiral galaxy in the Coma Berenices constellation.', '[0,1,1,0,0]');
    INSERT INTO galaxies VALUES (7, 'M49', 'Messier 49 is a giant elliptical galaxy in the Virgo constellation.', '[0,0,0,1,1]');
    INSERT INTO galaxies VALUES (8, 'M60', 'Messier 60 is an elliptical galaxy in the Virgo constellation.', '[0,0,0,0,1]');
    INSERT INTO galaxies VALUES (9, 'NGC1073', 'NGC 1073 is a barred spiral galaxy in Cetus constellation.', '[0,1,1,0,0]');
    COMMIT;
    
  5. 조회 결과값 길이가 큰 관계로 편의상 sqlplus에서 길이 및 포맷지정

    col galaxy_1 for a10
    col galaxy_2 for a10
    col distance for 0.00000000000000000
    
  6. 벡터 거리를 조회합니다.

    SELECT
     g1.name AS galaxy_1,
     g2.name AS galaxy_2,
     VECTOR_DISTANCE(g2.embedding, g1.embedding, COSINE) AS distance
    FROM galaxies g1, galaxies g2
    WHERE g1.id = 1
    ORDER BY distance ASC;
    
  7. 아래와 같이 두 벡터간의 거리를 조회할 수 있습니다.

    GALAXY_1   GALAXY_2		  DISTANCE
    ---------- ---------- --------------------
    M31	   M31	      -0.00000011920928955
    M31	   M77	      -0.00000011920928955
    M31	   M91	      -0.00000011920928955
    M31	   NGC1073    -0.00000011920928955
    M31	   M58	       0.18350338935852051
    M31	   M63	       0.29289323091506958
    M31	   M33	       0.29289323091506958
    M31	   M49	       1.00000000000000000
    M31	   M60	       1.00000000000000000
    
    9 rows selected.
    
  8. Oracle Database 23ai Free Container Image를 로컬에서 실행하여 Vector Search와 같은 23ai의 기능을 테스트할 수 있음을 확인하였습니다. 특히 이제는 맥 ARM 기반 개발환경에서 사용할 수 있습니다.

참고


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 15 Nov 2024