【问题标题】:Oracle Database12c ORA 01918 and connection errorOracle Database12c ORA 01918 和连接错误
【发布时间】:2014-12-22 20:41:30
【问题描述】:

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

ALTER USER HR IDENTIFIED BY password ACCOUNT UNLOCK;

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

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

我该怎么办?请帮我。

我不明白的另一件事是“数据库”一词是否等同于 MySQL 的“架构”? “连接”是连接到特定的数据库,是吗? 谢谢。

【问题讨论】:

  • 你是在容器数据库还是在可插拔数据库中运行它?您作为 HR 究竟是如何连接并尝试解锁该帐户的?

标签: database oracle oracle12c


【解决方案1】:

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

请阅读Oracle 12c Post Installation Mandatory Steps

默认情况下,SCOTTHRpre-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"

【讨论】:

  • 我想我正在运行可插拔数据库。我不确定如何验证这一点。我会读你的教程。我希望在一两天内回来回答。谢谢大家的反馈
  • 当然,按照我在文章中提到的步骤操作。如果您有任何问题,请告诉我:-)
  • 我按照您文章中的步骤进行操作,终于成功了!谢谢你。我还有一个问题(对不起,跑题了):虽然在启动时没有启用,但 Oracle 服务正在消耗大量内存(我的计算机保持在 2GB RAM 左右)。是否可以仅按需启动它们?
  • 取决于操作系统。例如,如果是 Windows,您可以从 services.msc 中禁用 Oracle 服务。顺便说一句,如果您认为您的主题已被回答,请将其标记为已回答。
  • 这成功了!在其他 20 个标签的指示失败后。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 2021-04-23
  • 2015-11-03
  • 2019-05-27
相关资源
最近更新 更多