Oracle SQL中ALTER TABLE删列报ORA-12988错误的技术咨询
解决Oracle删除列时的ORA-12988错误
错误原因
你碰到的ORA-12988错误,本质是当前操作的表属于SYS用户。Oracle出于系统稳定性考虑,禁止对SYS拥有的任何表(包括你在SYS下创建的自定义表)执行删除列这类结构修改操作。
正确实现删除列的方案
1. 使用普通用户操作(推荐)
Oracle要求业务相关的表操作都在普通用户下进行,按以下步骤操作:
- 先创建并授权普通用户:
CREATE USER business_user IDENTIFIED BY your_strong_password; GRANT CREATE SESSION, CREATE TABLE, ALTER TABLE TO business_user;
- 切换到该普通用户,重新执行你的表操作:
-- 切换至普通用户后执行 create table p_key(sr_no int,name varchar2(50),primary key(sr_no)); insert into p_key values(1,'A'); insert into p_key values(2,'B'); alter table p_key add city varchar(22); -- 此时执行删除列语句会成功 alter table p_key drop column city;
2. 特殊场景下操作SYS表(不推荐)
如果因特殊需求必须修改SYS下的表,需先修改系统参数(此操作会带来系统风险,仅测试环境可用):
ALTER SYSTEM SET "_SYSTEM_TRIGGER_ENABLED" = FALSE;
完成列删除操作后,立即恢复参数:
ALTER SYSTEM SET "_SYSTEM_TRIGGER_ENABLED" = TRUE;
注意:关闭系统触发器可能导致Oracle系统异常,非必要绝对不要使用这种方式。
和MySQL的差异
MySQL对超级用户(root)的表操作限制较松,所以你在MySQL中可以正常执行该操作,但Oracle为了保护系统核心数据,对SYS用户的表修改做了严格管控。
内容的提问来源于stack exchange,提问作者Harshad Mehta
相关产品推荐
相关产品推荐

