首页 > 解决方案 > ORACLE 数据库 - 为什么 SYS 用户可以删除表但不能删除列?

问题描述

我正在使用 Oracle 19c 学习 PLsql。我想知道 - 为什么可以在表格sys user中删除tables但不具体?columns我找到了这种解决方法,您可以在其中为特定的 SCHEMA 创建表的副本,删除这个新创建的表中的列,删除原始表,最后创建另一个没有 SCHEMA/USER ROLE 的(复制的)表副本。

是否有另一种,比方说更顺畅的方式来实现这一点?或者甲骨文以这种方式实施它有什么具体原因吗?

谢谢。

SQL> SHOW USER;
USER is "SYS"
________________________________________

SQL> ALTER TABLE employees DROP (gender);
ALTER TABLE employees DROP (gender)
*
ERROR at line 1:
ORA-12988: cannot drop column from table owned by SYS

_______________________________________

SQL> DROP TABLE employees;
Table dropped.

标签: oracleplsqlprivileges

解决方案


“为了保持数据字典的完整性,SYS 模式中的表只能由数据库操作。任何用户或数据库管理员都不应修改它们。您不得在 SYS 模式中创建任何表。”

https://docs.oracle.com/database/121/ADMQS/GUID-CF1CD853-AF15-41EC-BC80-61918C73FDB5.htm#ADMQS12003


推荐阅读