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>