请问一下..我把表空间设置为只读..还是可以删除表空间中的表和索引吗??表是对应于物理数据文件的嘛,我们从业人员都是操作表就相当于操作物理数据了..但为什么表还是可以删除呢??

解决方案 »

  1.   

    使用只读表空间只读表空间:从字面意思理解就是一个只能执行查询等不影响表空间内存储的数据的事务的一个表空间。那现在来看看它的定义:只读表空间的主要目的是消除执行数据库大量的静态部分的备份和恢复的需要。因此只读表空间应该有如下特性:任何用户都不可以在表空间创建或修改数据
    没有回滚段
    可以随意拷贝,甚至刻录到光盘中
    那么如何使一个表空间变成只读状态呢?我们知道任何一个表空间在创建后默认都是可读写状态,我们就需要改变这种状态:ALTER TABLESPACE …… READ ONLY;这条命令需要用户拥有ALTER/MANAGE TABLE 权限。要设定一个表空间成为只读表空间需要注意几点:表空间必须是联机的
    表空间没有包括任何的活动回滚段
    表空间不能是SYSTEM(正是因为SYSTEM总是有活动的回滚段)
    该表空间没有涉及的联机备份,因为在备份的最后会要求更新表空间中所有的头文件
    新特性:在使用ALTER TABLE …… READ ONLY;之前不需要等待表空间完成所有的事务,系统会自动转入过渡的只读模式,该模式将阻止一切新的事务进行,但是允许现有事务进行提交和回滚。注意:过渡状态只在初始化参数COMPATIBLE(和数据库版本有关的参数)的值为8.1.0以上才会出现,如果是小于8.1.0的值,当READ ONLY语句会在有活动的事务的情况下失败。小窍门:在执行ALTER TABLE …… READ ONLY;语句之前可以先对每个表先执行 SELECT * FROM ……之类的查询语句,这样可以保证在表空间的数据块可以在随后被最有效的访问,同时也清除了oracle需要检查最近修改块的事务状态的必要,因为最后执行的是查询事务。两个有用的视图:V$SESSION:我们可以通过利用它的SQL_TEXT字段来查询一个语句的事务的会话地址V$TRANSACTION:它记载着当前活动事务的启动SCN,我们可以根据通过上面那张视图查询到的事务会话地址来查询该事务的状态。延迟只读表空间的打开当一个非常大的数据库的实质性部分存储在位于低速访问设备(如光盘)的只读表空间中或分级存储时,要考虑将初始化参数READ_ONLY_OPEN_DELAYED设置为TRUE,这将加速某些操作,主要是打开数据库,其原因是在需要读取存储它的数据时,使只读表空间的数据文件只在第一次被访问。但是,这么做有缺点:表空间中只读文件不会被再访问到,除非是RECOVER TABLESPACE和ALTER TALESPACE OPEN RESETLOGS因为它们忽视初始化参数可以继续访问只读文件。既然表空间可以改为只读状态,那么一定也有办法把只读状态的表空间转为可读写状态:ALTER TABLESPACE ……READ AND WRITE;需要的权限和改只读的一样,条件就是该只读表空间必须是联机的。 取消表空间(删除表空间)如果不需要一个表空间及其内容,我们就需要在数据库中取消这个表空间,语句:DROP TABLESPASE ……【INCLUDING CONTENTS】;需要DROP TABLESPACE权限。如果这个表空间本来就是空的(没有表、视图及其他结构)则不需要INCLUDING CONTENTS字句。不过这个语句并不会删除与表空间关联的数据文件,如果在取消表空间时也想把和表空间有关联的数据文件一并删除就需要如下语句:DROP TABLESPACE …… INCLUDING CONTENTS AND DATAFILES;
      

  2.   

    alter tablespace 表空间名 read only;    只读alter tablespace 表空间名 read write;   可读可写