Oracle Database12c ORA 01918和连接错误

use*_*442 4 database oracle oracle12c

我已经安装了Oracle 12c,但是在创建第一个数据库并使用它时遇到了问题.我运行SQL Developer并使用"hr"用户,但它一直告诉我该帐户已被锁定.我搜索了stackoverflow的答案和官方文档,并尝试解锁它:

ALTER USER HR IDENTIFIED BY password ACCOUNT UNLOCK;
Run Code Online (Sandbox Code Playgroud)

但没有成功.我收到错误ORA01918,意味着用户不存在.

然后我尝试使用在安装时创建的用户(SYS as SYSDBA),但之后它说用户/密码不正确.我很确定我已经在我的系统上正确安装了Oracle 12c,这是Windows 8.1 x64.

我该怎么办?请帮我.

其他我不明白的是,"数据库"一词是否与MySQL的"架构"相同?"连接"是连接到特定的数据库,是吗?谢谢.

Lal*_*r B 5

你是如何配置数据库的?你检查了选项Pluggable database吗?如果是,请确保您登录PDB而不是CDB.

请阅读Oracle 12c安装后必备步骤.

默认情况下,pre-installed用户喜欢SCOTT,HR等驻留在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)
    )
  )
Run Code Online (Sandbox Code Playgroud)

打开所有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
Run Code Online (Sandbox Code Playgroud)

因此,为了让所有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;
/
Run Code Online (Sandbox Code Playgroud)

它在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"
Run Code Online (Sandbox Code Playgroud)