启动Oracle作为Docker容器内部的服务



i使用此Dockerfile构建并运行Oracle数据库,该数据库在Dockerfile的最后一行中以命令启动Oracle实例。

CMD exec $ORACLE_BASE/$RUN_FILE

oracle实例有效,我能够与Oracle SQL开发人员连接,但我无法执行

ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;

,例如,获取以下错误:

ORA-65040: operation not allowed from within a pluggable database
65040. 00000 -  "operation not allowed from within a pluggable database"
*Cause:    An operation was attempted that can only be performed in the root
       container.
*Action:   Switch to the root container to perform the operation.

因此,据我所知,我需要在Docker容器中本地启动类似SQLPLUS,然后使用关闭和启动命令重新启动实例。

在我拥有的容器中,最简单的方法是什么?我应该让Oracle作为Docker容器内的服务开始吗?是最好的选择吗?(至少在运行容器时,服务将开始,我将能够在容器内使用bash,但这需要修改并重建DockerFile)。我不是Linux/Docker/Oracle的专家,我需要知道我是否要朝着正确的方向发展。

从SQLDEVEVER连接到数据库时,您将正确连接到PDB(可插入数据库),因此您需要将当前容器(DB)更改为主容器

alter session set container = CDB;

或类似的东西。

您还可以创建数据库作为非CDB传统数据库,以避免使用可插入的DB模糊。只需更改用于创建DB的响应文件。

替代性在sqlplus中进行:

访问容器:

docker exec -it <your container-id/name> /bin/bash
cd /opt/oracle/product/18c/dbhome_1/bin
./sqlplus sys/<your syspwd> as sysdba

由于某种原因,Oracle_sid有时会丢失,并且会给您一个Wierd

ORA-12162 TNS:net service name is incorrectly specified 

因此,当在容器中时,请验证和EVT。访问DB。

之前设置它
env
export ORACLE_SID=<your sid>

最新更新