Oracle 23c Free 无预置“开发者角色”,所谓开发者体验是默认配置+预置账户(sys/oracle)+简化许可;/ as sysdba 被禁用,必须用 sqlplus sys/oracle@localhost:1521/freepdb1 as sysdba 连接,默认密码 oracle,连 PDB 才能访问示例 Schema 并授开发权限。Oracle 23c(注意:截至2026年6月,官方并无“Oracle 23ai”正式版本;你看到的可能是误传、内部代号或混淆了Oracle AI Vector Search等新特性集成后的23c,实际仍为 Oracle Database 23c Free / Developer Release)安装后并不存在一个叫“开发者角色”的预置数据库角色,也没有需要“激活”的开关式操作。所谓“开发者体验”,本质是默认配置 + 预置账户 + 简化许可约束,而非启用某个角色。 真正要做的,是确认并正确使用已存在的开发友好型账户和权限模型。
sqlplus 登录失败:/ as sysdba 不生效,为什么?
这是最常卡住的第一步。oracle 23c free 明确禁用了操作系统认证登录(即 sqlplus / as sysdba),哪怕你是 root 或 oracle 用户。这不是 bug,是设计限制。
- 必须显式提供凭证:
sqlplus sys/oracle as sysdba(默认密码就是oracle) - 如果改过密码但忘了,只能通过 OS 身份切换到
oracle用户,再用orapwd重置(但注意:23c Free 的orapwd默认不启用远程登录,仅支持本地) - 确保监听器已启动:
lsnrctl status应显示FREE实例和freepdb1服务
freepdb1 是默认 PDB,但连接时总报 ORA-12154
错误表明客户端无法解析连接标识符,不是权限问题,而是网络或别名配置缺失。
- 检查
$ORACLE_HOME/network/admin/tnsnames.ora是否包含FREEPDB1条目(Docker 或 OVA 镜像通常自带,但 RPM 安装后需手动确认) - 临时绕过 tnsnames.ora:直接用 Easy Connect 语法:
sqlplus sys/oracle@localhost:1521/freepdb1 as sysdba - 若端口不是 1521(如 Docker 映射为 1522),务必同步修改连接串,
localhost:1522/freepdb1 - Windows 上用 SQL Developer 连接时,Service name 填
freepdb1,SID 留空 —— 填FREE会连 CDB,非预期行为
如何让普通用户具备开发所需权限?
23c Free 默认只给 SYS 和 SYSTEM 全权限,HR 等示例用户未创建。开发者需自己建用户并授必要权限,但不能直接 GRANT DBA(违反 Free 版许可)。
- 创建用户:
CREATE USER dev IDENTIFIED BY dev123; - 最小必要权限组合:
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, UNLIMITED TABLESPACE TO dev; - 避免
GRANT CONNECT, RESOURCE—— 这两个角色在 23c Free 中已被弃用,且隐含不被允许的权限 - 若需 PL/SQL 编译调试,额外加:
GRANT CREATE PROCEDURE, DEBUG ANY PROCEDURE TO dev;
ORA-00442 出现时,说明你正在重复部署
这个错误不是角色没激活,而是 Oracle 23c Free 的硬性限制:每个逻辑环境(物理机 / VM / 容器)只允许一个实例运行。第二次启动会直接拒绝。
- Docker 场景:删掉旧容器再
docker run,不要docker start已停用的容器(状态残留触发冲突) - VM 场景:关机后不要克隆再开机,OVA 导入一次即固定逻辑环境 ID
- RPM 安装场景:卸载前必须先执行
/etc/init.d/oracle-free-23c stop+rpm -e oracle-database-free-23c,否则/opt/oracle目录残留会导致重装失败
sys/oracle)、连对 PDB(freepdb1)、授对权限(避开 DBA 和废弃角色)。其余所谓“AI 增强”能力(如向量搜索、JSON 模式推理)需手动启用对应组件(如 DBMS_VECTOR 包),它们不依赖角色激活,而依赖实例是否启用了对应选项 —— 这在 23c Free 中默认关闭,需 DBA 手动调用 DBMS_VECTOR_ADMIN.ENABLE(且仅限本地调用)。











