如何向 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 上安装插件

如何解决 Heroku 上托管的 django 项目中的迁移问题?

如何在 nginx 上托管的单个域下托管多个烧瓶应用程序?

如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?