Oracle 改变表空间读写状态
表空间可以是读写方式,也可以是只读方式。默认情况下,所有的表空间都是读写方式,任何具有配额并且具有适当权限的用户都可以写入表空间。但是如果将表空间设置为只读方式,则任何用户都无法向表空间写入数据,也无法修改表空间中已有的数据,这种限制与权限无关。
将表空间设置为只读方式的主要目的,是为了避免对数据库中的静态数据进行更改。用户只能查询只读表空间中的数据,而不能进行修改。
1.设置表空间为只读状态
所有的表空间在创建后都是处于读写状态。通过在ALTER TABLESPACE语句中使用READ ONL Y子句,可以将表空间设置为只读状态。在成功地将表空间设置为只读状态时,表空间必须处于联机状态,另外,SYSEM表空间也不能设置为只读表空间。
例如,下面的语句将把表空间USER01设置为只读状态:
SQL> alter tablespace user01 read only;
表空间已更改。
SQL> insert into employees
2 values(100,'SWITH',1200);
insert into employees
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件10
ORA-01110: 数据文件10: 'D:\ORACLEDATA\USER01'
上述语句执行后,不必等待表空间中活动事务结束即可立即生效,USER01表空间将进入“事务只读状态”。以后任何用户都不能再创建针对该表空间的读写事务,而当前正在活动的事务则可以继续向表空间中写入数据,直到它们结束为止。当针对该表空间的所有事务都结束之后,表空间才进入只读状态。
2.设置表空间为读写状态
将表空间恢复为读写状态时,只需要在ALTER TABLESPACE语句中使用READ WRITE 子句。将表空间恢复为读写状态时,必须保证表空间的所有数据文件都处于联机状态,同时表空间本身也必须处于联机状态。
例如,下面的语句可以将表空间USER01恢复为读写状态:
SQL> alter tablespace user01 read write;
表空间已更改。