gpt4 book ai didi

oracle - 如何在 docker 容器内的 Oracle 数据库上使用 sqlldr?

转载 作者:行者123 更新时间:2023-12-04 19:06:35 26 4
gpt4 key购买 nike

我使用以下命令在我的 docker 环境中安装了 oracle db 版本 19c:

docker  run --name oracle19c --network host -p 1521:1521 -p 5500:5500
-v /opt/oracle:/u01/oracle oracle/database:19.3.0-ee
然后我连接到它:
docker exec -ti oracle19c sqlplus system/oracle@orclpdb1
SQL>
然后我设置我的数据库。之后我想从 tbl 文件中导入虚拟数据,所以我退出 sqlplus 并使用以下命令:
sqlldr userid=system control=/home/userhere/sql_loader/control.ctl log=sf1customer.log
并获取 sqlldr: not found
我对 Docker 没有太多经验,但我的研究使我相信 SQL *Loader 不附带 docker 镜像。但是,我不知道如何扩展图像,也不知道我会在哪里调用 SQL *Loader,即使我这样做了。我在 Ubuntu 服务器上,任何帮助将不胜感激。

最佳答案

SQL*Loader 在镜像中 - 但 docker 容器与您的主机操作系统是分开的,因此 ubuntu 不知道其中存在任何文件或命令。容器内的任何命令都应作为 docker 命令运行。如果你尝试这个,它应该连接到你正在运行的容器并打印帮助页面:

docker exec -ti oracle19c sqlldr
由于您在 docker 容器上运行此命令,因此 sqlldr 无权访问您的主机操作系统的任何文件,除非您专门将它们授予容器。但好消息 - 当您使用 docker run 启动数据库时,这就是 -v /opt/oracle:/u01/oracle命令的一部分做了 - 它映射了 /opt/oracle在你的 Ubuntu 文件系统上到 /u01/oracle在 docker 容器中。因此,您放入 /opt/oracle 中的任何文件将在 /u01/oracle 下的容器中可用.
所以你需要做几件事:
  • 您的 control.ctl 文件、日志文件以及您正在使用的任何数据文件都需要可供容器访问。将它们移至 /opt/oracle或关闭您的数据库容器并使用 -v /home/userhere/sql_loader:/u01/oracle 之类的内容重新启动它在命令中。
  • 您可能还需要编辑 control.ctl 文件以确保它不引用主机操作系统上的任何文件路径。使用相对路径( ./myfile.csv )或容器文件系统的绝对路径( /u01/oracle/myfile.csv )

  • 现在您应该能够在容器上运行 sqlldr,并且它应该能够访问您的数据文件。
    docker exec -ti oracle19c sqlldr userid=system control=/u01/oracle/control.ctl log=/u01/oracle/sf1customer.log
    编辑:哦,我应该提一下 - 作为替代方案,如果您下载并安装 Oracle Instant Client在 Ubuntu 中,您可以在 Ubuntu 中本地运行 sqlldr,并通过网络连接到 docker 容器作为“远程”数据库:
    sqlldr system@localhost:1521/orclpdb1 control=/home/userhere/sql_loader/control.ctl log=sf1customer.log
    这样您就不必将文件移动到任何地方。

    关于oracle - 如何在 docker 容器内的 Oracle 数据库上使用 sqlldr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67987493/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com