我使用this dockerfile构建并运行Oracle数据库,该数据库使用dockerfile最后一行的命令启动Oracle实例。

CMD exec $ORACLE_BASE/$RUN_FILE

Oracle实例可以工作,我可以使用Oracle SQL Developer连接到它,但是我做不到
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之类的东西,然后可能使用SHUTDOWN和STARTUP命令重新启动实例。

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

最佳答案

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

alter session set container = CDB;

或类似的东西。

您也可以将数据库创建为非CDB传统数据库,以避免可插拔数据库的混乱。只需更改用于创建数据库的响应文件即可。

或者在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有时会丢失,这会让您感到困惑
ORA-12162 TNS:net service name is incorrectly specified

因此,在容器中时,请验证并评估。在访问数据库之前进行设置。
env
export ORACLE_SID=<your sid>

10-01 05:07
查看更多