大家好,
    我创建了一个只读表空间,测试了一下,不能增,删,改表数据,但可以drop表,但又不能create表?
请问这是什么原因,只读表空间其对应的数据文件的SCN值不是不会变化的吗?但又何又能drop表的,drop表后,其SCN值也不会变化,请问这是什么原因?
----
待复,感谢!

解决方案 »

  1.   

    drop table 是修改system 中的数据字典
      

  2.   

    drop作用于元数据,即存于system表空间的数据字典
    当然,drop同时也会删数据,而且是全删
      

  3.   

    这个跟权限有关,如果你要用sys用户,肯定是可以删掉的。
      

  4.   

    不知道为什么,但是在一本书上看过,说只读表空间不能DML,但可以做删除表的操作。
      

  5.   

    drop 操作其实只对SYSTEM里面的数据字段标记上了一个被删除的状态,但是只读表空间里面的数据尚未被删除掉,如果这个时候表空间被取消只读状态,那么这个数据就会被删掉.如3#所言,操作的并不是只读表空间中的数据,因此在命令行中显示drop已经成功。
      

  6.   

    将一个表空间的状态改为只读时,Oracle会产生检查点。可以删除只读表空间中的对象,如表和索引,因为删除对象的命令是DDL语句,它们只修改数据字典而不是数据文件,数据字典位于SYSTEM表空间中,SYSTEM表空间是读/写状态,所以修改数据字典表操作当然被允许啦
       设为只读的意义在于不允许对某些历史表的数据进行更改,删除,插入操作(即不允许DML操作)。