Heim  >  Artikel  >  Datenbank  >  Oracle只读表空间中的表是可以DROP的

Oracle只读表空间中的表是可以DROP的

WBOY
WBOYOriginal
2016-06-07 17:25:12973Durchsuche

每个数据库都可以包含多个UNDO表空间。在自动撤销管理模式中,每个Oracle实例都指定了一个UNDO表空间(有且只有一个表空间)。撤

在Oracle数据库中,至少有以下几个表空间:
1)SYSTEM表空间,每一个数据库都包含一个SYSTEM表空间,当数据库创建的时候,SYSTEM表空间会自动的创建。当数据库打开的时候,SYSTEM表空间始终处于ONLINE状态。SYSTEM表空间的重要之处是能够保存整个数据库的数据字典,另外PLSQL中的一些存储单元,比如说是存储过程、函数、包以及相关的触发器等等都是要保存在数据库的表空间里面的。
2)SYSAUX表空间,数据库组件将SYSAUX表空间当做存储数据的默认位置,因此当数据库在创建和升级的时候,SYSAUX表空间会自动的创建。SYSAUX表空间可以减少默认创建表空间的数量,在进行普通的数据库操作的时候,ORACLE数据库服务不允许删除SYSAUX表空间,也不能对其进行改名等操作。
3)UNDO表空间
每个数据库都可以包含多个UNDO表空间。在自动撤销管理模式中,每个Oracle实例都指定了一个UNDO表空间(有且只有一个表空间)。撤销的数据在UNDO表空间使用UNDO区间来管理,UNDO区间由ORACLE自动创建并且进行维护。在Oracle中,我们可以对数据进行增加、删除、更新等事务操作,事务中的数据库操作是可以撤销的,而且往往执行速度比较慢,,但是撤销的速度是比较快的,这是为什么呢?因为当事务在数据库中进行运作的时候,Oracle是将该数据库操作绑定在UNDO表空间中的UNDO区间里面的。如果需要对事务进行撤销操作的时候,Oracle就会根据UNDO表空间中的UNDO区间进行撤销。
4)临时表空间,如果系统表空间是本地的,至少要指定一个默认的临时表空间TEMP。如果删除所有的临时表空间,那么Oracle就会指定SYSTEM表空间作为临时表空间。

临时表空间的好处:
1)在使用SELECT语句进行查询数据库的时候,可以使用多个临时表空间进行排序操作,避免出现临时表空间空间不足的问题。
2)可以在并行操作中有效的利用临时表空间。
3)一个用户在不同的会话中可以同时使用多个临时表空间。

这里:
为了保护表空间中的数据不被修改,可以将表空间的属性变为只读表空间,设置表空间的主要目的是为了表中的静态数据不被修改,从而能够进行数据库的备份和恢复等操作,还能够保护只读表空间中的数据不被修改。

设置只读表空间的语法:
ALTER TABLESPACE READ ONLY;
将表空间设置为读写的语法:
ALTER TABLESPACE READ WRITE;

在设置表空间的过程中发现,只读表空间的表是可以DROP的,这个是为什么呢?
前面说过了,每个数据库在运行的时候,都会有一个ONLINE的表空间,表空间的名字是SYSTEM,SYSTEM表空间中保存了数据字典,以及PLSQL中的存储过程、触发器、函数、包等等数据库对象。当进行DDL进行数据库的删除操作的时候,是操作的SYSTEM表空间,ORACLE会在SYSTEM存储的数据字典中,将删除的表设置为DROP状态,等该表空间的状态变成READ WRITE状态的时候,就会真正的从数据库里面删除该表。

相关的代码如下:

SQL> list
  1  create table chenzw(
  2    username varchar2(100)
  3* )
SQL> run
  1  create table chenzw(
  2    username varchar2(100)
  3* )
表已创建。
SQL> insert into chenzw values ('1');
已创建 1 行。
SQL>alter tablespace data read only;
表空间已更改。
SQL>insert into chenzw values('2');
insert into chenzw values('2')
            *
第 1 行出现错误:
ORA-00372: 此时无法修改文件 5
ORA-01110: 数据文件 5: 'E:\GXSIDB\DATA'
SQL> truncate table chenzw;
truncate table chenzw
              *
第 1 行出现错误:
ORA-00372: 此时无法修改文件 5
ORA-01110: 数据文件 5: 'E:\GXSIDB\DATA'
SQL> delete from chenzw;
delete from chenzw
            *
第 1 行出现错误:
ORA-00372: 此时无法修改文件 5
ORA-01110: 数据文件 5: 'E:\GXSIDB\DATA'
SQL> drop table chenzw;
表已删除。
SQL> commit;
提交完成。
SQL>alter tablespace data read write;
表空间已更改。
SQL> select * from chenzw;
select * from chenzw
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL>

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn