您是如何配置数据库的?您是否检查了Pluggable database 的选项?如果是,请确保您登录到PDB 而不是CDB。
请阅读Oracle 12c Post Installation Mandatory Steps。
默认情况下,SCOTT、HR 等pre-installed 用户驻留在container database 而不是pluggable database。
tnsnames.ora
编辑您的 tnsnames.ora 文件以添加 PDB 详细信息。例如,
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl)
)
)
打开所有 PDB
要在登录后立即打开所有/特定 PDB,请在 CDB 中创建 AFTER STARTUP 系统级触发器。
因此,PDB 不会通过 CDB 启动打开。让我们看看:
SHUTDOWN IMMEDIATE;
STARTUP;
SQL> SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDBP6 MOUNTED
所以,为了让所有 PDB 自动打开,请执行以下操作:
执行“SQLPLUS / AS SYSDBA”,然后执行:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
它在 CDB 中创建一个启动后系统级触发器。
SQLPLUS / AS SYSDBA
最常见的误解是关于“SQLPLUS / AS SYSDBA”的用法。
由于我们选中了创建单个CDB 的选项,“SQLPLUS / AS SYSDBA”命令将始终登录到 CDB。通常开发者使用 SYSDBA 登录后直接解锁“SCOTT”帐户。但这是诀窍:
“SCOTT”和其他示例模式在 PDB 中,而不是在 CDB 中。因此,您需要以 sysdba 身份登录到 PDB。
sqlplus SYS/password@PDBORCL AS SYSDBA
SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;
sqlplus scott/tiger@pdborcl
SQL> show user;
USER is "SCOTT"