由于SYS用户的权限比较大,为此常喜欢在SYS用户下做实验。但是,后来发现,SYS用户也有诸多限制。
限制一:DROP之后的表不会保存在recyclebin里面。查了一下技术文档,“The recycle bin functionality is only available for non-system, locally managed tablespaces.”
SQL> DROP TABLE TEST01;
表已删除。
SQL> SHOW RECYCLEBIN;
SQL> SELECT * FROM USER_RECYCLEBIN;
未选定行
SQL> SHOW USER;
USER 为 "SYS"
SQL> SHOW RECYCLEBIN;
SQL> select * from dba_recyclebin;
未选定行
限制二:不能对在该用户模式下建立的表进行压缩。
SQL> create table t (id int);
表已创建。
SQL> begin
2 for i in 1..10 loop
3 insert into t
4 select i from dual;
5 end loop;
6 end;
7 /
PL/SQL 过程已成功完成。
SQL> alter table t enable row movement;
表已更改。
SQL> alter table t shrink space;
alter table t shrink space
*
第 1 行出现错误:
ORA-10635: Invalid segment or tablespace type
至于原因,后来查了一下,表收缩有两个前提条件,一是启动行移动,二是表所在的表空间的段空间管理模式为AUTO。而SYS用户所在SYSTEM表空间的段空间管理模式为MANUAL。也因为这样,SYS模式下不能调用dbms_space.space_usage();
SQL> select tablespace_name ,segment_space_management from dba_tablespaces where tablespace_name ='SYSTEM';
TABLESPACE_NAME SEGMEN
------------------------------ ------
SYSTEM MANUAL
限制三:不能对SYS用户下的表创建触发器;
SQL> create table t as
2 select * from dba_objects;
表已创建。
SQL> create or replace trigger tr after update on t
2 for each row
3 begin
4 null;
5 end;
6 /
create or replace trigger tr after update on t
*
第 1 行出现错误:
ORA-04089: 无法对 SYS 拥有的对象创建触发器
SQL> show user;
USER 为 "SYS"