前言
在 oracle 数据库 21C(20C)版本中,ORACLE数据库加入了机器学习功能,叫OML,全称(Oracle machine learning),并且加入了对python语言的支持,组件名叫 oml4py。这个组件是部署在数据库服务器端,然后有客户端,可使用python连接数据库进行机器学习操作,并且支持在oracle数据库存储中创建管理python脚本并运行它。这样,我们可以通过这个功能,给ORACLE数据库添加python函数。以下内容根据oracle官网多篇文档翻译整合加本人实测遇坑优化而来,目前各种搜索引擎都搜不到完整的安装使用用例。
一、安装数据库并启动
安装这个就不细说了,可以自行下载安装,也可以直接使用docker(我之后会考虑做个已安装相关特性的docker镜像出来)
二、安装python
https://docs.oracle.com/en/database/oracle/machine-learning/oml4py/1/mlpug/build-and-install-python-linux-premises-databases.html
- 去python官网下载 3.9.5 版本的tgz文件 wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
- 解压
- 进入 Python-3.9.5 目录
- 安装依赖包
yum install libffi-devel yum install openssl-devel yum install tk-devel yum install xz-devel yum install zlib-devel
讯享网
- 编译安装python,“PREFIX”替换为你要安装的目标路径
讯享网./configure --enable-shared --prefix=PREFIX make clean; make make altinstall
这里如果编译报错 gcc: internal compiler error: Killed (program cc1),是操作系统内存不足引起的,尝试增加内存或者使用swap交换分区
- 设置环境变量
export PYTHONHOME=PREFIX export PATH=$PYTHONHOME/bin:$PATH export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH
讯享网cd PREFIX/bin ln -s python3.9 python3
既然设置了这个,不把pip3也设置上去?
ln -s pip3.9 pip3
三、安装python依赖包
https://docs.oracle.com/en/database/oracle/machine-learning/oml4py/1/mlpug/install-required-supporting-packages-linux-premises-databases.html
讯享网pip3 install numpy pip3 install pandas pip3 install scipy pip3 install matplotlib pip3 install cx_Oracle pip3 install scikit-learn
这几个包是官方说的,我总觉得可能少了
四、安装OML4Py服务端到数据库
https://docs.oracle.com/en/database/oracle/machine-learning/oml4py/1/mlpug/install-oml4py-server-linux-premises-oracle-database-21c.html
输入sas回车进入sqlplus
SQL> spool install.txt SQL> alter session set container=PDB1; SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; SQL> @$ORACLE_HOME/oml4py/server/pyqcfg.sql define permtbl_value = SYSAUX --> Specify a permanent tablespace for the PYQSYS schema define temptbl_value = TEMP --> Specify a temporary tablespace define orahome_value = /u01/app/oracle/product/21.3.0.0/dbhome_1 --> Specify the ORACLE_HOME directory define pythonhome = /opt/Python-3.9.5 --> Specify the PYTHON_HOME directory
五、在数据库中测试
https://docs.oracle.com/en/database/oracle/machine-learning/oml4py/1/mlpug/pyqeval-function.html
讯享网--创建一个简单的python函数 BEGIN sys.pyqScriptCreate('pyqFun1', 'func = lambda: "Hello World from a lambda!"', FALSE, TRUE); -- V_GLOBAL, V_OVERWRITE END; / --查询用户创建的python函数列表,这里注意使用oci7的客户端会报错,要使用oci8 SELECT name, script, description, cdate from USER_PYQ_SCRIPTS; --执行python函数 SELECT name, value FROM table(pyqEval(NULL, 'XML', 'pyqFun1')); --返回 NAME VALUE ---- -------------------------------------------------- <root><str>Hello World from a lambda!</str></root> --删除python函数 BEGIN sys.pyqScriptDrop('pyqFun1'); END; /

如果提示 ORA-06598: INHERIT PRIVILEGES 权限不足,试着先执行一次
GRANT INHERIT PRIVILEGES ON USER SYS TO PUBLIC;
支持传入参数,支持以值、行、表的形式返回结果,
更多例子详见
https://docs.oracle.com/en/database/oracle/machine-learning/oml4py/1/mlpug/sql-embedded-python-execution1.html
六、最后
最后的最后,不要在生产环境使用21c!按大佬的说法,目前19c才是长期版本,下一个长期版本会是23c。
- 本文链接: https://www.darkathena.top/archives/oml4py-server-setup
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60345.html