4.2.1 Oracle Autonomous Database Free Container Image
지난 2023년 9월, 개발자를 위해 Autonomous Database를 OCI가 아닌, 개인 데스크탑/랩탑에서 실행할 수 있는 Autonomous Database Free Container Image를 출시하였습니다. 로컬 PC에 docker CLI 호환 도구를 통해 실행할 수 있습니다.
OCI Always Free를 통해 2개의 Autonomous Database 인스턴스를 제공하지만, 개발자가 많고, 개별 데스트탑에 설치하여 테스트하고자 하는 경우, 인터넷이 차단된 에어갭 환경에서 Autonomous Database를 개발자가 테스트하고자 하는 경우 등에 사용할 수 있습니다.
- adb-free GitHub
- OCI Blog - Introducing Autonomous Database Free Container Image
- Use the Oracle Autonomous Database Free Container Image
Autonomous Transaction Processing과 Autonomous Data Warehouse 두 유형에 해당하는 MY_ATP, MY_ADW 두 인스턴스을 포함하고 있습니다. 로컬에 실행하는 것으로 Oracle Autonomous Database의 다음 기능을 지원합니다.
- Oracle Rest Data Services (ORDS)
- APEX
- Database Actions
- Mongo API enabled (by default routed to
MY_ATP
)
각 데이터데이스의 스토리지 사이즈는 최대 20GB입니다.
실행 요구 사항
- 4 CPU
- 8 GB 메모리 필요
Macbook M1 ARM64에서 실행 예시
컨테이너 실행전 요구사항 설치
Docker Desktop 라이선스 이슈로 공식문서에서 예시는 podman을 사용하고 있습니다. 예시에서는 Rancher Desktop이 설치된 상태를 기준으로 이후 필요한 과정입니다.
-
Rancher Desktop이 설치
-
현재 Native ARM은 지원하지 않아, x86_64를 에뮬레이션 하기 위해 colima가 필요합니다. 아래와 같이 설치합니다.
brew install colima brew reinstall qemu
-
docker context가 colima인지 확인합니다.
$ docker context ls NAME DESCRIPTION DOCKER ENDPOINT ERROR colima * colima unix:///Users/thekoguryo/.colima/default/docker.sock default Current DOCKER_HOST based configuration unix:///var/run/docker.sock rancher-desktop Rancher Desktop moby context unix:///Users/thekoguryo/.rd/docker.sock
-
필요시 다음 명령으로 context를 전환합니다.
docker context use colima
-
-
요구 사항에 맞게 colima를 시작
$ colima start --cpu 4 --memory 8 --arch x86_64 INFO[0000] starting colima INFO[0000] runtime: docker INFO[0000] preparing network ... context=vm INFO[0000] starting ... context=vm INFO[0232] provisioning ... context=docker INFO[0232] starting ... context=docker INFO[0239] done
Autonomous Database Free Container 실행하기
-
Autonomous Database Free Container Image는 GitHub Container Registry 및 OCR(Oracle Container Registry)에서 제공합니다.
docker pull container-registry.oracle.com/database/adb-free:latest 또는 docker pull ghcr.io/oracle/adb-free:latest
-
Autonomous Database Free Container 실행
docker run -d \ -p 1521:1522 \ -p 1522:1522 \ -p 8443:8443 \ -p 27017:27017 \ --hostname localhost \ --cap-add SYS_ADMIN \ --device /dev/fuse \ --name adb_container \ container-registry.oracle.com/database/adb-free:latest
-
실행결과 확인
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES da5d47178568 container-registry.oracle.com/database/adb-free:latest "/bin/bash -c /u01/s…" 10 seconds ago Up 6 seconds (health: starting) 0.0.0.0:1522->1522/tcp, :::1522->1522/tcp, 0.0.0.0:8443->8443/tcp, :::8443->8443/tcp, 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp, 0.0.0.0:1521->1522/tcp, :::1521->1522/tcp adb_container
-
데이터베이스가 오픈 되고 ORDS가 기동될 때까지 기다립니다.
$ docker logs -f da5d47178568 LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 19-OCT-2023 03:43:24 Copyright (c) 1991, 2023, Oracle. All rights reserved. ... SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 19 03:43:25 2023 Version 19.20.0.1.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. Connected to an idle instance. SQL> ORACLE instance started. Total System Global Area 1610612192 bytes Fixed Size 9543136 bytes Variable Size 385875968 bytes Database Buffers 1207959552 bytes Redo Buffers 7233536 bytes Database mounted. Database opened. SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production ... 2023-10-19T08:40:41.070Z INFO Oracle REST Data Services initialized Oracle REST Data Services version : 23.2.2.r2081534 Oracle REST Data Services server info: jetty/10.0.15 Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM 11.0.19+9-LTS-224
-
APEX, Database Actions에 접속되는 지 확인합니다.
- 컨테이너 기동시 –hostname을 localhost가 아닌 다른 이름인 경우 해당 주소로 변경하여 접속합니다.
Application MY_ATP MY_ADW APEX https://localhost:8443/ords/my_atp/ https://localhost:8443/ords/my_adw/ Database Actions https://localhost:8443/ords/my_atp/sql-developer https://localhost:8443/ords/my_adw/sql-developer -
APEX 접속 예시
-
Database Actions
-
설치후 Admin 암호는 만료된 상태로 최초 접속시 패스워드 변경이 필요합니다. MY_ATP, MY_ADW 별도로 각각 변경합니다.
Database Expired ADMIN password MY_ATP Welcome_MY_ATP_1234 MY_ADW Welcome_MY_ADW_1234 -
변경 방법
docker exec <container_id> /u01/scripts/change_expired_password.sh <MY_Database> <user> <old_password> <new_password>
-
예시
$ docker exec adb_container /u01/scripts/change_expired_password.sh MY_ATP admin Welcome_MY_ATP_1234 Welcome_MY_ATP_1235 SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 19 04:08:43 2023 Version 19.20.0.1.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. ERROR: ORA-28001: the password has expired Changing password for admin New password: Retype new password: Password changed Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.20.0.1.0 SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.20.0.1.0
-
-
Database Actions에 접속하여 변경한 암호로 로그인해 봅니다.
-
OCI Autonomouse Database에서 제공하는 Database Actions 상의 도구들을 확인할 수 있습니다.
호스트에서 SQL Developer로 접속해 보기
-
개발자 데스크탑/랩탑에 사용할 클라이언트를 가정하여, SQL Developer로 아래와 같이 접속할 수 있습니다.
-
접속을 위해 실행중인 adb_container 컨테이너에서 Wallet을 가져옵니다.
docker cp adb_container:/u01/app/oracle/wallets/tls_wallet . zip tls_wallet.zip ./tls_wallet/*
-
SQL Developer를 실행합니다.
-
새 데이터베이스 접속을 만듭니다.
- 접속유형: 클라우드 전자 지갑 선택
- 구성 파일: 앞서 가져온 Wallet Zip 파일 선택
- 서비스: 접속할 서비스 명을 선택, MY_ATP, MY_ADW를 구분하여 원하는 서비스 선택
- 사용자 이름/비밀번호: admin, 변경한 암호 입력
-
테스트가 성공하면, 입력한 데이터 베이스 접속을 저장하고 접속합니다.
유저 만들기
-
SQL Developer로 생성한 Connection으로 접속합니다.
-
아래 명령으로 사용할 애플리케이션 유저를 만들 수 있습니다.
CREATE USER APP_USER IDENTIFIED BY "<my_app_user_password>" QUOTA UNLIMITED ON DATA; -- ADD ROLES GRANT CONNECT TO APP_USER; GRANT CONSOLE_DEVELOPER TO APP_USER; GRANT DWROLE TO APP_USER; GRANT RESOURCE TO APP_USER; -- ENABLE REST BEGIN ORDS.ENABLE_SCHEMA( p_enabled => TRUE, p_schema => 'APP_USER', p_url_mapping_type => 'BASE_PATH', p_url_mapping_pattern => 'app_user', p_auto_rest_auth=> TRUE ); commit; END; / -- QUOTA ALTER USER APP_USER QUOTA UNLIMITED ON DATA;
- 실행 예시
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.