词条 | Oracle表空间 |
释义 | 概述SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。 Oracle表空间之基本概念 ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。 每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。 一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便。 Oracle表空间之作用 表空间的作用能帮助DBA用户完成以下工作: 1.决定数据库实体的空间分配; 2.设置数据库用户的空间份额; 3.控制数据库部分数据的可用性; 4.分布数据于不同的设备之间以改善性能; 5.备份和恢复数据。 用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该: 1.被授予关于一个或多个表空间中的RESOURCE特权; 2.被指定缺省表空间; 3.被分配指定表空间的存储空间使用份额; 4.被指定缺省临时段表空间。 控制Oracle用户表空间配额在一些大型的数据库应用中,我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中,需要为每个用户设置磁盘配额一样,以防止硬盘空间耗竭。所以,在数据库中,我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的,我们就可以通过表空间来实现。 我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库容量越大,则表空间的优势就会越大。 下面,我们就具体来看看Oracle数据库中表空间的处理方式,看其在性能与安全性方面是否有足够的优势与SQL Server数据库抗衡。 Oracle数据库中表空间的处理方式在数据库设计的时候,我们建议数据库管理员按如下顺序设置表空间。 第一步:建立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) 重建表空间和回滚段 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。