Oracle 12c/19c 安装后 HR 和 SCOTT 用户默认是锁住的
装完 oracle 数据库(比如用 oracle database 12c 或 19c 的桌面版/企业版),hr 和 scott 这两个示例用户通常处于 locked 状态,连不上,也查不到表。这不是安装失败,而是 oracle 默认安全策略:示例用户不自动启用。
解锁前得先确认实例是否跑起来、监听是否就绪,否则会误判为“解锁没用”。常见错误现象包括:ORA-01017: invalid username/password(密码错)、ORA-28000: the account is locked(明确提示锁了)。
- 必须用具有
DBA权限的用户登录,比如sys或system -
HR用户密码默认就是hr,SCOTT默认是tiger;但首次解锁时建议显式改密,避免后续被审计工具报弱口令 - 12c 及以后版本中,
HR模式默认不带数据,需手动运行脚本导入;SCOTT更老,有些精简版安装甚至不附带其 SQL 脚本
用 sqlplus 解锁 HR 和 SCOTT 并重置密码
别打开 OEM 或 SQL Developer 点来点去——最稳的方式是命令行直连 sqlplus,绕过图形层干扰。注意:必须连到 AS SYSDBA,否则权限不够执行解锁。
操作步骤:
- 终端里执行:
sqlplus / as sysdba - 依次执行:
ALTER USER hr ACCOUNT UNLOCK IDENTIFIED BY hr; - 再执行:
ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger; - 如果提示
user does not exist,说明该用户根本没创建,跳到下个副标题处理
为什么不能只用 UNLOCK?因为 Oracle 12c+ 对已锁定账户,仅 ACCOUNT UNLOCK 不重置认证状态,仍可能报 ORA-01045。必须搭配 IDENTIFIED BY 显式设密,哪怕设成原密码。
HR 用户不存在?运行 catqm.sql 和 hr_main.sql 补全示例方案
某些安装(尤其是自定义组件选择时取消了“Sample Schemas”),HR 用户压根不会出现在 dba_users 里。这时不是解锁问题,是根本没建模。需要手动运行 Oracle 自带的建模脚本。
关键路径和依赖:
- 脚本位置通常在:
$ORACLE_HOME/demo/schema/human_resources/(Linux/macOS)或%ORACLE_HOME%\demo\schema\human_resources\(Windows) - 必须先确保
hr_main.sql能访问到catqm.sql(它在$ORACLE_HOME/rdbms/admin/),否则报SP2-0310: unable to open file - 运行前确认当前连接用户是
system,且密码正确;用sys会因角色权限问题卡在CREATE ROLE - 执行命令:
@?/demo/schema/human_resources/hr_main.sql hr hr TEMP users(四个参数分别是:密码、默认表空间、临时表空间、用户表空间)
这个过程可能耗时 30–90 秒,期间没输出是正常的。结束后检查:SELECT username, account_status FROM dba_users WHERE username IN ('HR', 'SCOTT'); —— 应显示 OPEN。
SCOTT 用户脚本缺失?用 ubd.sql 或手建 emp/dept 表
SCOTT 在 19c 后的安装介质里经常被移除,$ORACLE_HOME/demo/schema/scott/ 目录可能为空。官方不再维护它,但很多教学场景仍依赖 emp/dept 表结构。
两个务实选择:
- 从 Oracle GitHub 公共仓库找存档版
scott.sql(搜 “oracle sample schemas github”),下载后用sqlplus scott/tiger @scott.sql运行(前提是你已解锁并设好密码) - 更轻量:直接粘贴经典建表语句(不用完整 schema)。例如:
CREATE TABLE emp (empno NUMBER PRIMARY KEY, ename VARCHAR2(10));,再INSERT几条测试数据。够本地调试用,不占资源 - 千万别用网上流传的“一键导入所有示例”的 shell 脚本——它们常硬编码旧路径,且可能静默跳过错误,导致部分表没建成功却以为万事大吉
容易被忽略的一点:SCOTT 的 emp 表里 mgr 字段是自关联外键,如果建表时没加 CONSTRAINT 定义,后续 JOIN 查询会慢,且 SQL*Plus 的 DESC emp 看不出缺失约束。










