ora-00922错误主因是密码以数字开头或使用非法字符,因oracle将密码视为标识符须字母开头;其次为误用create table ... from select语法及sqlplus连接命令格式错误。
ora-00922 在 oracle 安装阶段报出,基本可以锁定为密码或标识符不符合 oracle 的语法约束 —— 不是 sql 语句写错了,而是安装程序自动生成的 ddl(比如 create user)因输入参数非法被数据库引擎直接拒掉。
密码以数字开头直接触发 ORA-00922
Oracle 对密码本质视为“标识符”,必须遵守标识符命名规则:必须以字母开头,且只允许 A-Z、a-z、0-9、_、$、#。如果你在安装向导里填了 123abc 或 1qaz@WSX,哪怕只是 sys/system 密码,安装程序就会在内部执行类似下面的语句:
CREATE USER sys IDENTIFIED BY 123abc;
Oracle 解析时把 123abc 当作数字字面量而非字符串,语法直接崩掉,报 ORA-00922。
- 最稳妥做法:安装时密码统一用
Abc123#这类“字母开头 + 大小写 + 数字 + 允许符号”组合 - 避免使用逗号、点、@、!、空格等任意非许可字符 —— 即使 Oracle 文档没明说,实际解析器会直接截断或报错
- 不要试图用双引号包裹密码绕过,安装脚本不支持这种写法,反而可能引发更深层的解析异常
CREATE TABLE ... FROM SELECT 类语法误用
这通常出现在手动运行建库脚本或迁移脚本时,不是安装程序本身的问题,但容易和安装错误混淆。Oracle 不支持 FROM SELECT,只认 AS SELECT:
CREATE TABLE t1 FROM SELECT * FROM t2; -- ❌ 报 ORA-00922
CREATE TABLE t1 AS SELECT * FROM t2; -- ✅ 正确
- MySQL/SQL Server 用户迁移脚本时最容易踩这个坑,
FROM是常见误写来源 - 检查所有
CREATE TABLE语句,确保没有残留的源库方言关键字(如AUTO_INCREMENT、IDENTITY) - 工具导出脚本务必指定目标平台为
Oracle,否则 Navicat、PowerDesigner 等默认按通用 SQL 输出,FROM SELECT就悄悄混进去了
连接命令中 conn 语法写错也报 ORA-00922
在安装后首次用 sqlplus 连接时,如果输错命令格式,比如:
conn sys/123 as sysdba -- ❌ 缺少分号,且密码含数字开头
Oracle 会尝试把整行当 SQL 解析,而不是识别为连接指令,结果就是 ORA-00922。
-
conn命令末尾不需要分号,但密码不能以数字开头 —— 这条限制对连接命令同样生效 - 正确写法:
conn / as sysdba(操作系统认证)或conn system/Abc123#(密码合规) - 如果已安装失败,别急着重装;先用
sqlplus /nolog进去,再手工执行CREATE USER,避开安装向导的自动校验逻辑
真正麻烦的不是报错本身,而是 Oracle 把密码合法性检查藏在 DDL 解析层 —— 错误信息不提示“密码违规”,只甩一句“选项缺失或无效”。你得从上下文反推:安装卡在创建实例?那八成是密码;脚本批量执行失败?先 grep FROM SELECT 和 AUTO_INCREMENT。











