标题：Oracle表空间
概述
SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念，这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说，Oracle中很多优化都是基于表空间的设计理念而实现的。
Oracle表空间之基本概念

控制Oracle用户表空间配额
在一些大型的数据库应用中，我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中，需要为每个用户设置磁盘配额一样，以防止硬盘空间耗竭。所以，在数据库中，我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的，我们就可以通过表空间来实现。
我们可以在Oracle数据库中，建立不同的表空间，为其设置最大的存储容量，然后把用户归属于这个表空间。如此的话，这个用户的存储容量，就受到这个表空间大小的限制。当然，表空间的优势还不仅仅这些，企业对于数据库的性能要求越高，或者数据库容量越大，则表空间的优势就会越大。
下面，我们就具体来看看Oracle数据库中表空间的处理方式，看其在性能与安全性方面是否有足够的优势与SQL Server数据库抗衡。Oracle中表空间及用户的建立[1]　在数据库设计的时候，我们建议数据库管理员按如下顺序设置表空间。
第一步：建立Oracle用户表空间。
在设计数据库的时候，首先需要设计表空间。我们需要考虑，是只建立一个表空间呢，还是需要建立多个表空间，以及各个表空间的存放位置、磁盘限额等等。
到底设计多少个表空间合理，没有统一的说法，这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的，则就需要根据用户的数量来设置表空间。当企业的数据容量比较大，而其又对数据库的性能有比较高的要求时，就需要根据不同类型的数据，设置不同的表空间，以提高其输入输出性能。
第二步：建立Oracle用户，并指定用户的默认表空间。
在建立用户的时候，我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象，如数据库表的时候，其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话，则用户每次创建数据库对象的时候，都会存储在数据库默认表空间中，如果想存储在自己建的表空间中，最好自己指定自己建的表空间为默认表空间。
另外要注意，不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限，可能对于表空间B就只有查询权限，甚至连连接的权限的都没有。所以，合理为用户配置表空间的访问权限，也是提高数据库安全性的一个方法。
ORACLE表空间恢复方案
（一）、用户表空间ORACLE表空间错误现象：
在启动数据库时出现ORA-01157，ORA-01110或操作系统级错
误例如ORA-07360，在关闭数据库（使用shutdown normal或shutdown immediate） 时将导致错误ORA-01116，ORA-01110以及操作系统级错误ORA-07368
解决：
以下有两种解决方案：
方案一、用户的表空间可以被轻易地重建 
即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等。在这种情况下，最简单的方法是offline并删除该数据文件，删除表空间并重建表空间以及所有的对象。
svrmgrl> startup mount 
svrmgrl> alter database datafile filename offline drop; 
svrmgrl> alter database open; 
svrmgrl> drop tablespace tablespace_name including contents; 
重建表空间及所有对象。 
方案二、用户的表空间不能够被轻易地重建 
在大多数情况下,重建表空间是不可能及太辛苦的工作.方法是倒备份及做介质恢复.如果您的系统运行在NOARCHIVELOG模式下，则只有丢失的数据，在online redo log中方可被恢复。
步骤如下：
1)Restore the lost datafile from a backup 
2)svrmgrl> startup mount 
3)svrmgrl> select v1.group#,member,sequence#,first_change# from v$log v1,v$logfile v2 where v1.group#=v2.group#; 
4)如果数据库运行在NOARCHIVELOG模式下则：svrmgrl> select file#,change# from v$recover_file; 
如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复。 
如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复。恢复最近一次的全备份或采用方案一。 
5)svrmgrl> recover datafile filename; 
6)确认恢复成功 
7)svrmgrl> alter database open resetlogs; 
只读表空间无需做介质恢复，只要将备份恢复即可。唯一的例外是： 
表空间在最后一次备份后被改为read-write 模式 
表空间在最后一次备份后被改为read-only 模式 
在这种情况下，均需进行介质恢复。（二）、临时表空间临时表空间并不包含真正的数据，恢复的方法是删除临时表空间并重建即可。（三）、系统表空间如果备份不可用，则只能采用重建数据库的方法（四）、回滚表空间有三种种情况：
1、数据库已经完全关闭（使用shutdown immediate或shutdown命令） 
1) 确认数据库完全关闭 
2) 修改init.ora文件,注释"rollback-segment" 
3) svrmgrl> startup restrict mount 
4) svrmgrl> alter database datafile filename offline drop; 
5) svrmgrl> alter database open; 
基于出现的结果："statement PRocessed" 转(7)；"ORA-00604,ORA-00376,ORA-01110"转(6) 
6) svrmgrl> shutdown immediate 
修改init.ora文件,增加如下一行：_corrupted_rollback_segments = (<roll1>,...<rolln>) 
svrmgrl> startup restrict 
7) svrmgrl> drop tablespace tablespace_name including contents; 
8) 重建表空间及回滚段 
9) svrmgrl> alter system disable restricted session; 
10) 修改init.ora文件 
2、数据库未完全关闭（数据库崩溃或使用shutdown abort命令关闭数据库） 
1) 恢复备份 
2) svrmgrl> startup mount 
3) svrmgrl> select file#,name,status from v$datafile; 
svrmgrl> alter database datafile filename online; 
4) svrmgrl> select v1.group#,member,sequence#,first_change# from v$log v1,v$logfile v2 where v1.group#=v2.group#; 
5) svrmgrl> select file#,change# from v$recover_file; #参见方案2-4 
6) svrmgrl> recover datafile filename; 
7) svrmgrl> alter database open; 
3、数据库处于打开状态 
1) 删除回滚段和表空间 
2) 重建表空间和回滚段