OML4Py 란?
머신러닝에서 가장 인기 있는 언어는 Python입니다.
파이썬은 풍부한 라이브러리(TensorFlow, Keras, Scikit-learn)와 단순한 문법 덕분에 머신러닝 연구와 개발에 매우 적합한 언어로 인식되고 있습니다.
오라클 DB에서 파이썬을 사용하기 위한 API 인 OML4Py에 대해 간단하게 설명하겠습니다.
OML4Py(Oracle Machine Learning for Python)는
Oracle Database나 Oracle Autonomous Database를 사용하여 데이터 탐색 및 준비, 머신 러닝 모델링, 솔루션 배포 등의 머신 러닝 프로세스를 지원하는 Python API입니다.
이번 ORACLE 23ai 에서 추가된 기능으로 사전 학습된 모델(Pretrainded Model)을 ONNX 형식으로 변환하여 사용할 수 있습니다.
OML4Py는 Hugging Face의 텍스트 변환기를 ONNX 형식 모델로 변환하여 사용할 수 있도록 합니다.
OML4Py는 또한 필요한 토큰화 및 후처리를 추가합니다.
그런 다음 결과 ONNX 파이프라인을 데이터베이스로 가져와 AI 벡터 검색을 위한 임베딩을 생성하는 데 사용할 수 있습니다.
OML4Py 버전
설치에 앞서 OMP4Py는 아래와 같이 두 가지 버전이 존재합니다.
1. OML4Py Server : Python을 사용하여 데이터 분석 및 머신러닝 작업을 수행할 수 있게 해주는 서버 측 컴포넌트입니다. 주요기능은 다음과 같습니다.
- 고성능 컴퓨팅: 대규모 데이터 처리와 복잡한 계산을 위해 데이터베이스의 컴퓨팅 자원을 활용합니다.
- 데이터 이동 최소화: 데이터를 데이터베이스 내에 유지하여 네트워크를 통한 데이터 이동을 줄이고 성능을 최적화합니다.
- 분산 처리: 여러 사용자와 작업이 동시에 실행될 수 있도록 지원합니다.
2. OML4Py Client : OML4Py 클라이언트는 사용자들이 로컬 환경에서 Python을 사용해 Oracle Database의 머신러닝 및 데이터 분석 기능에 접근할 수 있도록 도와주는 컴포넌트입니다.
주요 기능은 다음과 같습니다.
- 로컬 작업 환경: 사용자가 친숙한 Python 인터페이스를 사용해 데이터 분석 및 머신러닝 작업을 수행할 수 있습니다.
- 서버와의 통신 : OML4Py 서버와 연결하여 데이터베이스 내에서 고성능 연산을 실행하고 결과를 받아올 수 있습니다.
- 통합 환경 : SQL 및 Python을 통합하여 작업을 수행할 수 있습니다.
오라클이 서버와 클라이언트로 나눈 이유에 대해서는 아래와 같을 것이라고 생각이 됩니다
- 자원 최적화: 서버는 고성능 하드웨어와 데이터베이스에 직접 접근하여 대규모 데이터를 효율적으로 처리하고, 클라이언트는 로컬 환경에서 사용자 친화적인 인터페이스를 제공합니다.
- 분산 작업: 서버는 연산 집약적인 작업을 처리하고, 클라이언트는 이를 요청하고 결과를 받아보는 방식으로 작업을 분산하여 처리 효율을 높입니다.
- 보안 및 관리: 서버 측에서 데이터를 중앙에서 관리하고, 클라이언트는 필요한 부분만 접근하도록 하여 보안과 관리 측면에서 유리합니다.
참고 :
23ai의 경우 Python을 빌드하는 것은 클라이언트에만 필요합니다. 데이터베이스에는 Python 3.12.1이 있습니다 $ORACLE_HOME/python.
Hugging Face의 텍스트 변환기를 ONNX 형식 모델로 변환하여 지원하는 기능은 OML4Py 클라이언트에서만 작동합니다. OML4Py 서버에서는 지원되지 않습니다.
OML4Py 설치
인터넷을 사용할 수 있는 환경에서는 ORACLE DOCUMENT를 따라하면 잘 설치가 되었기에 설치과정을 생략하고 폐쇄망 설치 내용만 정리했습니다.
폐쇄망 환경에서 PIP 를 자유롭게 사용할 수 없어 OML4Py 서버 설치 시 ORACLE 유저의 Python 패키지의 버전 차이로 오라클 엔진에서 필요한 패키지를 설치 할 수 없었기에, 클라이언트 설치를 먼저 진행하였습니다.
로컬에서 Oracle Python API인 OML4Py를 사용하기 위해 OML4Py 클라이언트 버전을 설치하겠습니다.
현재 저희 환경은 리눅스 서버이고,
클라이언트 환경 역시 설치된 리눅스 서버로진행하기 때문에 리눅스에 OML4Py Client를 설치하였습니다.
유저를 ORACLE이 아닌 새로운 유저로 생성 후 Python을 설치를 할 수도 있지만, Python 패키지 설치를 생략하려고 ORACLE_HOME에 설치된 Python을 사용하기 위해 ORACLE 유저에서 클라이언트 설치를 진행하였습니다.
(위에서 OML4Py 서버 설치시에 환경변수를 추가했습니다.)
OML4Py 클라이언트 설치 목차
- 환경변수 추가
- 라이브러리 설치
- 패키지 설치
- OML4Py 클라이언트 설치
OML4Py 클라이언트 설치
1) 환경변수추가
oracle 유저 환경변수에 python path를 추가합니다.
su – oracle
vi .bash_profiel
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/23ai/dbhomeFree
export ORACLE_SID=FREE
export NLS_LANG=KOREAN_KOREA.UTF8
export PYTHONHOME=$ORACLE_HOME/python
export PATH=$ORACLE_HOME/bin:$PYTHONHOME/bin:$PATH
export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH
2) 라이브러리 설치
root 계정으로 클라이언트 머신 설치에 필요한 라이브러리를 설치합니다.
#명령어 #user:root
sudo yum install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel
#실행로그
[root@devaidbv1 ~]# sudo yum install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel
마지막 메타자료 만료확인(2:40:09 이전): 2024년 08월 01일 (목) 오후 12시 13분 20초.
꾸러미 openssl-1:1.1.1k-9.el8_7.x86_64가 이미 설치되어 있습니다.
꾸러미 openssl-devel-1:1.1.1k-9.el8_7.x86_64가 이미 설치되어 있습니다.
꾸러미 xz-devel-5.2.4-4.el8_6.x86_64가 이미 설치되어 있습니다.
꾸러미 zlib-devel-1.2.11-25.el8.x86_64가 이미 설치되어 있습니다.
종속성이 해결되었습니다.
==============================================================================================================================================
꾸러미 구조 버전 저장소 크기
==============================================================================================================================================
설치 중:
bzip2-devel x86_64 1.0.6-26.el8 BaseRepo 224 k
libffi-devel x86_64 3.1-24.el8 BaseRepo 29 k
libuuid-devel x86_64 2.32.1-43.0.1.el8 BaseRepo 99 k
ncurses-devel x86_64 6.1-10.20180224.el8 BaseRepo 528 k
perl-Env noarch 1.04-395.el8 AppstreamRepo 21 k
readline-devel x86_64 7.0-10.el8 BaseRepo 204 k
tk-devel x86_64 1:8.6.8-1.el8 AppstreamRepo 498 k
종속 꾸러미 설치 중:
expat-devel x86_64 2.2.5-11.0.1.el8 BaseRepo 57 k
fontconfig-devel x86_64 2.13.1-4.el8 BaseRepo 151 k
freetype-devel x86_64 2.9.1-9.el8 BaseRepo 464 k
libX11-devel x86_64 1.6.8-6.el8 AppstreamRepo 976 k
libXau-devel x86_64 1.0.9-3.el8 AppstreamRepo 21 k
libXft-devel x86_64 2.3.3-1.el8 AppstreamRepo 25 k
libXrender-devel x86_64 0.9.10-7.el8 AppstreamRepo 22 k
libpng-devel x86_64 2:1.6.34-5.el8 BaseRepo 327 k
libxcb-devel x86_64 1.13.1-1.el8 AppstreamRepo 1.1 M
ncurses-c++-libs x86_64 6.1-10.20180224.el8 BaseRepo 58 k
tcl-devel x86_64 1:8.6.8-2.el8 BaseRepo 190 k
tk x86_64 1:8.6.8-1.el8 AppstreamRepo 1.6 M
xorg-x11-proto-devel noarch 2020.1-3.el8 AppstreamRepo 280 k
연결 요약
==============================================================================================================================================
설치 20 꾸러미
전체 크기: 6.7 M
설치된 크기 : 17 M
진행할까요? [y/N]: y
꾸러미 내려받기 중:
연결 확인 실행 중
연결 확인에 성공했습니다.
연결 시험 실행 중
연결 시험에 성공했습니다.
연결 실행 중
준비 중 : 1/1
설치 중 : xorg-x11-proto-devel-2020.1-3.el8.noarch 1/20
설치 중 : libXau-devel-1.0.9-3.el8.x86_64 2/20
설치 중 : libxcb-devel-1.13.1-1.el8.x86_64 3/20
설치 중 : libX11-devel-1.6.8-6.el8.x86_64 4/20
설치 중 : libXrender-devel-0.9.10-7.el8.x86_64 5/20
구현 중 : tk-1:8.6.8-1.el8.x86_64 6/20
설치 중 : tk-1:8.6.8-1.el8.x86_64 6/20
구현 중 : tk-1:8.6.8-1.el8.x86_64 6/20
설치 중 : tcl-devel-1:8.6.8-2.el8.x86_64 7/20
설치 중 : ncurses-c++-libs-6.1-10.20180224.el8.x86_64 8/20
설치 중 : ncurses-devel-6.1-10.20180224.el8.x86_64 9/20
설치 중 : libuuid-devel-2.32.1-43.0.1.el8.x86_64 10/20
설치 중 : libpng-devel-2:1.6.34-5.el8.x86_64 11/20
설치 중 : expat-devel-2.2.5-11.0.1.el8.x86_64 12/20
설치 중 : bzip2-devel-1.0.6-26.el8.x86_64 13/20
설치 중 : freetype-devel-2.9.1-9.el8.x86_64 14/20
설치 중 : fontconfig-devel-2.13.1-4.el8.x86_64 15/20
설치 중 : libXft-devel-2.3.3-1.el8.x86_64 16/20
설치 중 : tk-devel-1:8.6.8-1.el8.x86_64 17/20
설치 중 : readline-devel-7.0-10.el8.x86_64 18/20
구현 중 : readline-devel-7.0-10.el8.x86_64 18/20
설치 중 : perl-Env-1.04-395.el8.noarch 19/20
설치 중 : libffi-devel-3.1-24.el8.x86_64 20/20
구현 중 : libffi-devel-3.1-24.el8.x86_64 20/20
확인 중 : bzip2-devel-1.0.6-26.el8.x86_64 1/20
확인 중 : expat-devel-2.2.5-11.0.1.el8.x86_64 2/20
확인 중 : fontconfig-devel-2.13.1-4.el8.x86_64 3/20
확인 중 : freetype-devel-2.9.1-9.el8.x86_64 4/20
확인 중 : libffi-devel-3.1-24.el8.x86_64 5/20
확인 중 : libpng-devel-2:1.6.34-5.el8.x86_64 6/20
확인 중 : libuuid-devel-2.32.1-43.0.1.el8.x86_64 7/20
확인 중 : ncurses-c++-libs-6.1-10.20180224.el8.x86_64 8/20
확인 중 : ncurses-devel-6.1-10.20180224.el8.x86_64 9/20
확인 중 : readline-devel-7.0-10.el8.x86_64 10/20
확인 중 : tcl-devel-1:8.6.8-2.el8.x86_64 11/20
확인 중 : libX11-devel-1.6.8-6.el8.x86_64 12/20
확인 중 : libXau-devel-1.0.9-3.el8.x86_64 13/20
확인 중 : libXft-devel-2.3.3-1.el8.x86_64 14/20
확인 중 : libXrender-devel-0.9.10-7.el8.x86_64 15/20
확인 중 : libxcb-devel-1.13.1-1.el8.x86_64 16/20
확인 중 : perl-Env-1.04-395.el8.noarch 17/20
확인 중 : tk-1:8.6.8-1.el8.x86_64 18/20
확인 중 : tk-devel-1:8.6.8-1.el8.x86_64 19/20
확인 중 : xorg-x11-proto-devel-2020.1-3.el8.noarch 20/20
설치되었습니다:
bzip2-devel-1.0.6-26.el8.x86_64 expat-devel-2.2.5-11.0.1.el8.x86_64 fontconfig-devel-2.13.1-4.el8.x86_64
freetype-devel-2.9.1-9.el8.x86_64 libX11-devel-1.6.8-6.el8.x86_64 libXau-devel-1.0.9-3.el8.x86_64
libXft-devel-2.3.3-1.el8.x86_64 libXrender-devel-0.9.10-7.el8.x86_64 libffi-devel-3.1-24.el8.x86_64
libpng-devel-2:1.6.34-5.el8.x86_64 libuuid-devel-2.32.1-43.0.1.el8.x86_64 libxcb-devel-1.13.1-1.el8.x86_64
ncurses-c++-libs-6.1-10.20180224.el8.x86_64 ncurses-devel-6.1-10.20180224.el8.x86_64 perl-Env-1.04-395.el8.noarch
readline-devel-7.0-10.el8.x86_64 tcl-devel-1:8.6.8-2.el8.x86_64 tk-1:8.6.8-1.el8.x86_64
tk-devel-1:8.6.8-1.el8.x86_64 xorg-x11-proto-devel-2020.1-3.el8.noarch
완료되었습니다!
3) 파이썬 실행 경로 확인
파이썬에 접속해서 실행 위치를 확인합니다.
linux 서버 설치시 기본적으로 python이 설치되어 있어서 root에서도 python접속이 됩니다.
root에 설치된 파이썬은 변경 할 수 없기 때문에 반드시 oracle 계정으로 접속해서 진행하세요. root에 python 버전은 3.6.8이고, oracle 유저의 python 버전은 3.12.3 입니다.
#명령어
su - oracle
python3
import sys
print(sys.executable)
#실행로그
[root@devaidbv1 ~]# su - oracle
[oracle@devaidbv1 ~]$ python3
Python 3.12.3 (main, Jul 3 2024, 08:35:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.executable)
/opt/oracle/product/23ai/dbhomeFree/python/bin/python3
4) 클라이언트 머신에 필요한 패키지 설치
제가 설치한 환경은 폐쇄망 환경으로, 설치시 종속성에 따른 설치 순서가 중요했습니다.
따라서 패키지에 자세한 설치방법은 OML4Py server Requirements 글을 참고하세요.
트러블슈팅 : Requirement already satisfied: numpy==1.26.4 in /opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages (1.26.4) --upgrade to force 옵션으로 설치 필요. 무시하고 넘어가면 oml import test 시에 error발생 트러블슈팅 - pip3.12 install -U transformers 진행 하지 않을시에 ONNX 파일 생성시에 에러발생 FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. => transformers 업데이트 진행 >>> em.export2file("multi-qa-MiniLM-L6-cos-v1",output_dir="./") /opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages/huggingface_hub/file_download.py:1150: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`. warnings.warn( pip install -U transformers transformers가 4.38.1일때 임베딩 모델 가져오는 부분에서 에러로 transformers-4.42.4으로 업그레이드해서 진행함. |
5) 클라이언트 머신에 필요한 패키지 설치
oracle 계정으로 접속하여 설치된 패키지를 확인합니다.
#명령어 #user:oracle
python3
import numpy
import pandas
import scipy
import matplotlib
import oracledb
import sklearn
#실행로그
[oracle@localhost ~]$ python3
Python 3.12.1 (main, Feb 6 2024, 12:09:55) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import pandas
>>> import scipy
>>> import matplotlib
>>> import oracledb
>>> import sklearn
6) Oracle Machine Learning for Python 클라이언트 설치
i) oml4py-client 엔진 다운로드
https://www.oracle.com/database/technologies/oml4py-downloads.html#license-lightbox 에 들어가서 다운로드 후
서버로 파일을 옮깁니다.
[oracle@localhost ~]$ ls -ltr oml4py-client-linux-x86_64-2.0.zip
-rw-r--r--. 1 oracle oinstall 8643185 7월 18 13:42 oml4py-client-linux-x86_64-2.0.zip
ii) Oracle Machine Learning for Python unzip
oml4py client 엔진에 압축을 해제합니다.
#명령어
unzip oml4py-client-linux-x86_64-2.0.zip
#실행로그
[oracle@localhost ~]$ unzip oml4py-client-linux-x86_64-2.0.zip
Archive: oml4py-client-linux-x86_64-2.0.zip
inflating: client/client.pl
inflating: client/OML4PInstallShared.pm
inflating: client/oml-2.0-cp312-cp312-linux_x86_64.whl
extracting: client/oml4py.ver
iii) OML4Py Client 설치
클라이언트 설치 스크립트 실행합니다.(경로:oml4py 압축 해제한 디렉토리)
#명령어
perl -Iclient client/client.pl
* 트러블슈팅 - Upgrade scikit_learn from version 2.0.1 to version 1.2.1 or higher at client/client.pl line 141 => pip list | grep numpy 버전이 1.26.4인지 확인 아닐시 1.26.4 설치 [oracle@devaidbv1 OMLP4y]$ perl -Iclient client/client.pl Oracle Machine Learning for Python 2.0 Client. Copyright (c) 2018, 2024 Oracle and/or its affiliates. All rights reserved. Checking platform .................. Pass Checking Python .................... Pass Checking dependencies .............. /u01/download/OMLP4y/check_deps.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html from pkg_resources import WorkingSet, VersionConflict, DistributionNotFound Fail ERROR: Upgrade scikit_learn from version 2.0.1 to version 1.2.1 or higher at client/client.pl line 141. |
iv) OML모듈(OML4Py 클라이언트) 설치 확인
#명령어
python3
import oml
#실행로그
$ python3
Python 3.12.3 (main, Jul 3 2024, 08:35:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import oml
>>>
v) OML 경로 확인
['/opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages/oml'] 결과 값이 나오면 정상입니다.
#명령어
python3
import oml
oml.__path__
#실행로그
[oracle@devaidbv1 OMLP4y]$ python3
Python 3.12.3 (main, Jul 3 2024, 08:35:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import oml
>>> oml.__path__
['/opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages/oml']
OML4Py 서버 설치 목차
- 패키지 설치
- 필요 RPM 확인
- OML4Py 설치
- 구성확인
OML4Py 서버 설치
1) OML4Py 서버 머신에 필요한 패키지 설치
oracle 계정으로 접속하여 진행합니다.
참고로, oracle document의 pip3.12 install pandas 설치 쿼리에서 pandas==2.1.1 --target 부분에 띄워쓰기가 잘못되어 syntax error가 나므로 --target이 띄워져 있는지 확인하세요.
OML4Py server Requirements 문서에서 서버용 패키지 설치 방법을 참고하여 진행합니다.
2) 필요 RPM 확인
#명령어
rpm -qa perl-Env
#실행로그
[root@devaidbv1 download]# rpm -qa perl-Env
perl-Env-1.04-395.el8.noarch
3) OML4Py 서버 설치
i. 디렉토리 이동
#명령어
su - oracle
cd $ORACLE_HOME/oml4py/server
ii. CDB$ROOT 로 접속
#명령어
sqlplus / as sysdba
show con_name
[oracle@devaidbv1 server]$ sqlplus / as sysdba
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
iii. log 캡처를 위한 spool
SQL> spool oml4py_install_root.txt
iv. OML4Py 서버 설치를 위한 스크립트 실행
SQL> @pyqcfg.sql SYSAUX TEMP
SQL> spool off;
v. spool 한 파일을 열어 설치중에 발생한 오류가 있는지 확인
vi oml4py_install_root.txt
vi.PDB에서 OML4Py 설치 스크립트 실행
#명령어
sqlplus / as sysdba
show pdbs
spool oml4py_install_pdb.txt
alter session set container=FREEPDB1;
show con_name
@pyqcfg.sql SYSAUX TEMP
#실행로그
[oracle@localhost server]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on 금 7월 26 10:04:43 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 FREEPDB1 READ WRITE NO
SQL> spool oml4py_install_pdb.txt
SQL> alter session set container=FREEPDB1;
세션이 변경되었습니다.
SQL> show con_name
CON_NAME
------------------------------
FREEPDB1
SQL> @pyqcfg.sql SYSAUX TEMP
spool off;
vii. 설치 로그를 열어 오류가 있는지 확인
vi oml4py_install_pdb.txt
4) 서버의 OML4Py 구성 확인
i. PDB 접속
#명령어
sqlplus / as sysdba
alter session set container=freepdb1;
ii.OML4Py 구성 확인
#명령어
select * from sys.pyq_config;
#실행로그
[oracle@devaidbv1 server]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on 목 8월 1 18:49:53 2024
Version 23.5.0.24.07
Copyright (c) 1982, 2024, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.5.0.24.07
SQL> alter session set container=freepdb1;
세션이 변경되었습니다.
SQL> select * from sys.pyq_config;
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
PYTHONHOME
/opt/oracle/product/23ai/dbhomeFree/python
PYTHONPATH
/opt/oracle/product/23ai/dbhomeFree/oml4py/modules
VERSION
2.0
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
PLATFORM
ODB
DSWLIST
oml.*;pandas.*;numpy.*;matplotlib.*;sklearn.*
OML4Py 유저 생성
유저를 생성하는 방법에는 2가지가 있습니다.
일반 user 생성 쿼리로 생성 후 권한을 추가하는 법과, 오라클에서 제공하는 pyquser.sql 스크립트를 사용하는 방법이 있습니다.
저는 오라클에서 제공하는 쿼리로 유저를 생성했습니다.
user 생성 전 tablespace 생성은 스크립트 사용 유무와 상관없이 생성 후 진행해야 합니다.
1. Tablespace 생성
FREE 버전에서는 ORACLE_HOME이 /opt/ 밑으로 강제 되기에 저의 서버 환경에서는 root쪽 공간이 부족하여 /opt/oracle을 심볼릭 링크로 /u01/opt/oracle로 걸었습니다.
(root에는 공간이 부족하여 2T가 마운트 된 u01로 심볼릭 링크)
따라서 테이블 스페이스 생성시에는 생성 위치를 /u01/oracle/FREE/FREEPDB1/ 으로 했습니다.
#명령어
CREATE TABLESPACE TS_ONN DATAFILE '/u01/oracle/FREE/FREEPDB1/ts_onn_1.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 30G EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
* 참고 : tablespace 삭제 쿼리 : drop tablespace TS_ONN including contents and datafiles;
2. 스크립트를 사용한 OML4Py 유저 생성
오라클에서 제공하는 쿼리를 사용하여 OML4Py가 사용할 유저를 생성합니다.
#명령어
@pyquser.sql onn TS_ONN TEMP unlimited pyqadmin
#실행로그
SQL> @pyquser.sql ONN TS_ONN TEMP unlimited pyqadmin
세션이 변경되었습니다.
password의 값을 입력하십시오: oracle
구 1: create user &&1 identified by &password
신 1: create user ONN identified by oracle
구 2: default tablespace &&2
신 2: default tablespace TS_ONN
구 3: temporary tablespace &&3
신 3: temporary tablespace TEMP
구 4: quota &&4 on &&2
신 4: quota unlimited on TS_ONN
사용자가 생성되었습니다.
구 4: 'create procedure, create mining model to &&1';
신 4: 'create procedure, create mining model to ONN';
구 6: IF lower('&&5') = 'pyqadmin' THEN
신 6: IF lower('pyqadmin') = 'pyqadmin' THEN
구 7: execute immediate 'grant PYQADMIN to &&1';
신 7: execute immediate 'grant PYQADMIN to ONN';
PL/SQL 처리가 정상적으로 완료되었습니다.
세션이 변경되었습니다.
OML4Py 연결 테스트
마지막으로 OML4Py가 잘 설치되었는지 확인하기 위해서 테스트를 하고 설치를 종료합니다.
host에 변수값을 환경에 맞게 변경하고 테스트 진행하세요.
실행로그에서 보이듯 res의 결과값이 2가 나오면 됩니다.
#명령어
python3
import oml
oml.connect(user='onn', password='oracle', host='xxx.xx.xxx.xx', port=1521, service_name='freepdb1')
oml.script.create("TEST", func='def func():return 1 + 1', overwrite=True)
res = oml.do_eval(func='TEST')
res
#실행로그
$ python3
Python 3.12.3 (main, Jul 3 2024, 08:35:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import oml
>>> oml.connect(user='onn', password='oracle', host='xxx.xx.xxx.xx', port=1521, service_name='freepdb1')
>>> oml.script.create("TEST", func='def func():return 1 + 1', overwrite=True)
>>> res = oml.do_eval(func='TEST')
>>> res
2
트러블슈팅 - oracledb.exceptions.DatabaseError: ORA-12541: 접속할 수 없습니다. host xx.xxx.xx.x port 1521에 리스너가 없습니다. · => 리스너설정 참고하여 해결 >>> oml.connect(user='onn', password='oracle', host='xx.xxx.xx.x', port=1521, service_name='freepdb1') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "oml/core/methods.py", line 183, in oml.core.methods.connect File "/opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages/oracledb/connection.py", line 1158, in connect return conn_class(dsn=dsn, pool=pool, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/oracle/product/23ai/dbhomeFree/python/lib/python3.12/site-packages/oracledb/connection.py", line 544, in __init__ impl.connect(params_impl, pool_impl) File "src/oracledb/impl/thick/connection.pyx", line 494, in oracledb.thick_impl.ThickConnImpl.connect File "src/oracledb/impl/thick/utils.pyx", line 446, in oracledb.thick_impl._raise_from_info oracledb.exceptions.DatabaseError: ORA-12541: 접속할 수 없습니다. host xx.xxx.xx.x port 1521에 리스너가 없습니다. 도움말: https://docs.oracle.com/error-help/db/ora-12541/ |
'ORACLE 23ai Install' 카테고리의 다른 글
OML4Py Requirements Package (0) | 2024.08.27 |
---|---|
ORALCE 23ai 설치 (0) | 2024.08.27 |