如何向 Docker 上托管的 Oracle DB 服务器添加目录和注册 XML 模式?
Posted
技术标签:
【中文标题】如何向 Docker 上托管的 Oracle DB 服务器添加目录和注册 XML 模式?【英文标题】:How to add directories and register XML schema to Oracle DB server hosted on Docker? 【发布时间】:2018-12-24 15:11:16 【问题描述】:我在 docker 上托管了 Oracle 12c DB,但我找不到将 xml 模式添加到 DB 的方法(使用 SQL Developer)。
我已将所需的目录和文件从本地机器转移到 Docker 容器,我已授予该文件夹的所有权限和所需的用户组:
drwxrwxrwx 2 oracle dba 4096 Dec 23 19:21 DB3
目录 DB3 内容 - LEAGUES.xsd 和 LEAGUE.xml
SQL 脚本:
`CREATE OR REPLACE DIRECTORY XMLDATA AS '/DB3'; `
`BEGIN
DBMS_XMLSCHEMA.REGISTERSCHEMA(
SCHEMAURL => 'http://localhost:8080/home/leagues.xsd',
SCHEMADOC => bfilename('XMLDATA', 'leagues.xsd'));
end;
/`
这段代码给了我一个文件不存在的错误响应。
ORA-22288: 文件或 LOB 操作 FILEOPEN 失败 没有这样的文件或目录
很确定我做错了什么,但由于这几乎是我第一次使用数据库服务器,所以我找不到解决这个问题的方法。
希望能提供一些提示或指示,以便在哪里寻找它们以完成这项工作。
【问题讨论】:
【参考方案1】:我的猜测是您将目录转移到了 docker 主机。要让 Oracle 进程访问它,必须将其“转移”到 docker 容器内。
三种方法:
在你的 docker 容器 (docker exec -it <containerid> /bin/sh
) 中获取一个 shell,然后获取目录
从那里使用 ssh 或其他文件复制工具(您可能有
首先安装在容器内)。不是很安全,我不会
如果您运行的不是您的其他设备,建议您这样做
用于开发目的的本地计算机。
重建您的 docker 映像,同时将您的 DB3 文件夹添加到其中。即使您使用的是上游图像,您也可以这样做
你还没有建立自己:echo "FROM base/oracle:12c \n COPY /DB3 /DB3" | docker build -t custom/oracle:12c -
将主机上的 /DB3 文件夹作为卷挂载到容器中:docker run -v /DB3:/DB3 <other options and arguments>
(或者如果您在 Openshift/Rancher/...上运行,则在描述符文件中等效)
还要确保文件名在您的脚本和文件系统之间具有匹配的大小写。
【讨论】:
嗯,它应该,我每天都在使用这些技术来满足类似的需求。你能给我更多关于你的背景和你正在采取的步骤的信息吗?基础镜像名称、执行环境等...以便我可以帮助您? 实际上是的,它确实有效!再次尝试旋转容器,看起来它成功了。非常感谢!以上是关于如何向 Docker 上托管的 Oracle DB 服务器添加目录和注册 XML 模式?的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Azure VM 上托管的 WCF 服务引用添加到 VS2015 项目
如何在 Heroku.com 上托管的 Redmine 上安装插件