我今天安装了这个 Docker 镜像:https ://hub.docker.com/_/oracle-database-enterprise-edition
我按照此处的说明进行操作:https ://www.youtube.com/watch?v=ciYsDbBx80s 。基本上我运行了以下命令:
docker pull store/oracle/database-enterprise:12.2.0.1
docker run -d -p 1521:1521 --name oracle store/oracle/database-enterprise:12.2.0.1
docker exec -it 0500ab7ee75c bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
然后在sqlpus中:
connect sys as sysdba
Enter password: anyrandompassword
alter session set "_ORACLE_SCRIPT"=true;
create user dummy identified by dummy;
SQL> GRANT ALL PRIVILEGES TO dummy;
SQL>ALTER USER sysdba IDENTIFIED BY Password1 ACCOUNT UNLOCK;
我有两个问题:
为什么虚拟用户的 SQLDeveloper 密码是:dummy。我没有具体说明这一点。
看来我现在可以使用以下凭据登录 SQL Developer(如此处所述:https ://stackoverflow.com/questions/9129664/unable-to-log-in-to-database-as-sys-with-oracle -sql-开发者):
用户名:SYS AS SYSDBA 密码:Password1
但是,当我在 sqlplus 中运行以下命令时
connect sys as sysdba
然后提示我输入密码,但是任何密码似乎都可以使用。
create user dummy identified by dummy;
dba
组的成员或任何指定为该OSDBA
组的组的用户都可以在本地以 sysdba 身份登录,而无需提供密码(或提供任何密码)。我建议你忘记这部分:
具有此解决方法的教程(
alter session set "_ORACLE_SCRIPT"=true;)
是由于懒惰或对 Oracle 12c 中引入的 CDB 架构缺乏了解的结果。这就是不正确的“解决方案”传播的方式。作者忘记告诉您,通过执行上述操作,您违反了基本原则CDB架构(因为您创建了一个被视为内置Oracle管理用户的新用户+您将来的数据应该存储在可插拔数据库中,而不是根容器中)。这不是容器数据库的使用方式。而不是执行上述操作,在使用 this 获得 SQL 提示后
docker exec -it 0500ab7ee75c bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
,您应该按照以下方式进行操作。连接到数据库实例,下面连接到数据库的根容器。此时不要打扰密码:
列出可插拔数据库,您应该会看到一个名为
ORCLDB1
.连接到该可插拔数据库:
并在那里创建用户:
现在您可以连接虚拟用户,该用户位于 ORCLPDB1 可插拔数据库中,而不是在根容器中。为此,请
orclpdb1.localdomain
用作服务名称而不是ORCLCDB.localdomain
.