Oracle 19c默认不安装示例Schema,需手动在CDB$ROOT中以SYSTEM用户执行$ORACLE_HOME/demo/schema/mksample.sql;要求数据库OPEN、UNDO表空间ONLINE、字符集为AL32UTF8,密码不含特殊字符,执行后需手动解锁用户。
oracle 19c 默认不安装示例 schema(如 hr、oe、pm 等),必须手动运行 mksample.sql 才能加载;它不是 dbca 图形向导的可选项,也不能用 create database 语句直接启用。
确认数据库已就绪且具备执行权限
脚本依赖 SYSTEM 用户(或具有 DBA 角色的用户)连接,并要求数据库处于 OPEN 状态、归档模式非强制(但建议开启)、UNDO 表空间正常。常见失败原因包括:ORA-01031: insufficient privileges(未用 SYSTEM 登录)、ORA-01109: database not open(数据库未启动到 OPEN 状态)、或 ORA-01552: cannot use system rollback segment(UNDO 表空间异常)。
实操建议:
- 用
sqlplus / as sysdba连入,执行SELECT status FROM v$instance;确认为OPEN - 检查 UNDO 表空间:运行
SELECT tablespace_name, status FROM dba_tablespaces WHERE contents = 'UNDO';,确保状态为ONLINE - 切换到 SYSTEM 用户:运行
CONNECT system/,不要用 SYS(会报ORA-65096: invalid common user or role name)
定位并执行 mksample.sql 脚本
该脚本位于 Oracle 安装目录下的 $ORACLE_HOME/demo/schema/ 子路径中,不是 $ORACLE_HOME/rdbms/admin/ 下的通用脚本,也不存在于 CDB$ROOT 的 PDB 中——必须在根容器(CDB$ROOT)中以本地连接方式运行。
实操建议:
- 确认路径存在:运行
ls $ORACLE_HOME/demo/schema/mksample.sql(Linux/macOS)或dir %ORACLE_HOME%\demo\schema\mksample.sql(Windows) - 进入 SQL*Plus 后,用
@?/demo/schema/mksample.sql调用(?自动映射到 $ORACLE_HOME);不要用绝对路径加空格或中文路径 - 脚本会提示输入 7 个参数:SYSTEM 密码、SYS 密码、表空间名(如
users)、临时表空间名(如temp)、日志文件路径(如/u01/app/oracle/oradata/)、是否创建大写用户名(一般输/ Y)、是否启用数据泵导出(可输N)
常见卡顿与失败点:密码含特殊字符、PDB 上下文、字符集
脚本内部调用大量 CREATE USER 和 IMPDP 操作,对环境敏感。最常导致中断的是:SYSTEM 或 SYS 密码含 @、/、空格等 shell 元字符(SQL*Plus 会提前解析);在非 CDB$ROOT 容器中执行(报 ORA-65096 或跳过部分 Schema);数据库字符集不是 AL32UTF8(HR 的 countries 表含 Unicode 国家名,可能插入乱码或报 ORA-12899)。
实操建议:
- 若密码含
@,改用双引号包裹:例如CONNECT system/"P@ssw0rd",再运行脚本 - 确认当前容器:
SHOW CON_NAME必须返回CDB$ROOT;若在 PDB 中,先ALTER SESSION SET CONTAINER = CDB$ROOT; - 检查字符集:
SELECT parameter, value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';,非AL32UTF8时建议重装库或接受部分字段截断
脚本全程约需 3–8 分钟,成功后会输出 “Finished running mksample.sql” 并列出各 Schema 的默认密码(如 HR 是 hr)。注意:所有示例用户的密码默认与用户名相同,且不会自动解锁——需手动执行 ALTER USER hr ACCOUNT UNLOCK; 才能登录。











