Oracle表空间管理逻辑
基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

基础概念:Oracle数据库、实例、用户、表空间、表之间的关系数据库:Oracle数据库是数据的物理存储。
这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。
其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。
可以看作是Oracle就只有一个大数据库。
实例:一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。
一个数据库可以有n个实例。
用户:用户是在实例下建立的。
不同实例可以建相同名字的用户。
表空间:表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。
数据文件(dbf、ora):数据文件是数据库的物理存储单位。
数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。
而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。
一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。
由于oracle的数据库不是普通的概念,oracle是有用户和表空间对数据进行管理和存放的。
但是表不是有表空间去查询的,而是由用户去查的。
因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!关系示意图:理解1:Oracle数据库可以创建多个实例,每个实例可以创建多个表空间,每个表空间下可以创建多个用户(同时用户也属于表空间对应的实例)和数据库文件,用户可以创建多个表(每个表随机存储在一个或多个数据库文件中),如下图:理解2:理解1MS有误。
实例下有和,授权访问,是管理的,经授权在中创建,随机存储到不同的中。
表空间(TableSpace)

表空间(TableSpace)我们知道Oracle数据库真正存放数据的是数据⽂件(Data File),oracle表空间(tablespace)实际上是⼀个逻辑的概念,在物理上是并不存在的,那么把⼀组data files捻在⼀起就成为⼀个表空间。
表空间属性:⼀个数据库可以包含多个表空间,⼀个表空间只能属于⼀个数据库⼀个表空间包含多个数据⽂件,⼀个数据⽂件只能属于⼀个表空间表空间可以划分成更细的逻辑存储单元:Oracle数据库的存储空间结构:从逻辑的⾓度来看,⼀个数据库(database)下⾯可以分多个表空间(tablespace);⼀个表空间下⾯有可以分多个段(segment);⼀个数据表要占⼀个段(segment),⼀个索引也要占⼀个段(segment)。
⼀个段(segment)由多个区间(extent)组成,那么⼀个区间⼜由⼀组连续的数据块(data block)组成,这连续的数据块是在逻辑上是连续的,有可能是物理逻辑上是分散那么从物理的⾓度上看,⼀个表空间由多个数据⽂件组成,数据⽂件是实实在在存在的磁盘⽂件,这些⽂件是由oracle数据库操作系统的block组成的Segment(段):段是指占⽤数据⽂件空间的通称,或数据库对象使⽤的空间的稽核;段可以由表段、索引段、回滚段、临时段、和⾼速缓存段等。
Extent(区间):分配给对象的任何连续块就叫区间;区间也叫扩展,因为当它⽤完已经分配的区间后,再有新的记录插⼊就必须在分配新的区间(即扩展⼀些块);⼀旦区间分配某个对象(表,索引或簇),则该区间就不能再分配给其它的对象1,查看表空间的名称及⼤⼩select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name = d.tablespace_namegroup by t.tablespace_name2、查看表空间物理⽂件的名称及⼤⼩select tablespace_name,file_id,file_name,round(bytes / (1024*1024), 0) total_spacefrom dba_data_filesorder by tablespace_name;select tablespace_name,file_id,file_name,round(bytes / (1024*1024), 0) total_spacefrom dba_temp_filesorder by tablespace_name;3、查看表空间的使⽤情况select sum(bytes) / (1024 * 1024) as free_space, tablespace_namefrom dba_free_spacegroup by tablespace_name;SELECT * from DBA_TEMP_FREE_SPACE;SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间⼤⼩(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使⽤空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使⽤⽐",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最⼤块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MBFROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEORDER BY 4 DESC;4、查看/修改Database的Default Temporary TablespaceSELECT PROPERTY_NAME, PROPERTY_VALUEFROM DATABASE_PROPERTIESWHEREPROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;5,--查看表空间是否具有⾃动扩展的能⼒SELECT T.TABLESPACE_NAME,D.FILE_NAMED.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUSFROM DBA_TABLESPACES T, DBA_DATA_FILES DWHERE T.TABLESPACE_NAME = D.TABLESPACE_NAMEORDER BY TABLESPACE_NAME, FILE_NAME;当数据库刚建⽴起来,系统会建⽴⼀个叫做SYSTEM的系统的TableSpace,存放SYS,SYSTEM等User重要的系统数据(ex:数据字典与预存储程序等)建⽴oracle User时,不指定预设的TableSpace,则此User则会以System TableSpace 作为预设的TableSpace,这造成管理上的混乱与严重的效能问题,这是必须注意的TableSpace的类型:Permanent、Undo、TemporaryPermanent TableSpace:创建给AP使⽤的都是。
oracle下的数据库实例、表空间、用户及其表的区分

oracle下的数据库实例、表空间、⽤户及其表的区分完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。
1) 数据库是⼀系列物理⽂件的集合(数据⽂件,控制⽂件,联机⽇志,参数⽂件等);2) Oracle数据库实例则是⼀组Oracle后台进程/线程以及在服务器分配的共享内存区。
在启动Oracle数据库服务器时,实际上是在服务器的内存中创建⼀个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据⽂件。
Oracle有⼀个很⼤的内存快,成为全局区(SGA)。
⼀、数据库、表空间、数据⽂件1、数据库数据库是数据集合。
Oracle是⼀种数据库管理系统,是⼀种关系型的数据库管理系统。
通常情况了我们称的“数据库”,并不仅指物理的数据集合,他包含物理数据、数据库管理系统。
也即物理数据、内存、操作系统进程的组合体。
我们在安装Oracle数据库时,会让我们选择安装启动数据库(即默认的全局数据库)如下图:全局数据库名:就是⼀个数据库的标识,在安装时就要想好,以后⼀般不修改,修改起来也⿇烦,因为数据库⼀旦安装,数据库名就写进了控制⽂件,数据库表,很多地⽅都会⽤到这个数据库名。
启动数据库:也叫全局数据库,是数据库系统的⼊⼝,它会内置⼀些⾼级权限的⽤户如SYS,SYSTEM等。
我们⽤这些⾼级权限账号登陆就可以在数据库实例中创建表空间,⽤户,表了。
查询当前数据库名:select name from v$database;2、数据库实例⽤Oracle官⽅描述:实例是访问Oracle数据库所需的⼀部分计算机内存和辅助处理后台进程,是由进程和这些进程所使⽤的内存(SGA)所构成⼀个集合。
其实就是⽤来访问和使⽤数据库的⼀块进程,它只存在于内存中。
就像Java中new出来的实例对象⼀样。
我们访问Oracle都是访问⼀个实例,但这个实例如果关联了数据库⽂件,就是可以访问的,如果没有,就会得到实例不可⽤的错误。
描述oracle数据库体系结构的组成及其关系。

描述oracle数据库体系结构的组成及其关系。
Oracle数据库体系结构由以下几个部分组成:1. 实例(Instance):实例是在计算机内存中运行的一个进程,负责管理数据库的操作。
每个实例都有自己的内存空间和进程,可以同时运行多个实例。
2. 数据库(Database):数据库是一个存储数据的容器,包含了表、视图、索引等对象。
一个实例可以管理多个数据库,每个数据库由一个或多个数据文件组成。
3. 数据文件(Data File):数据文件是用来存储数据库的实际数据的文件,包含了表、索引等对象的数据。
一个数据库可以有多个数据文件,每个数据文件具有独立的文件名和路径。
4. 控制文件(Control File):控制文件是用来记录数据库的结构和状态信息的文件,包括数据库名、数据文件的路径、表空间的信息等。
一个数据库通常有一个或多个控制文件。
5. 日志文件(Redo Log File):日志文件是用来记录数据库的变化操作的文件,包括数据更改、事务回滚等。
日志文件用于实现数据库的恢复和数据的一致性。
每个数据库通常有多个日志文件。
6. 表空间(Tablespace):表空间是数据库中逻辑数据存储的单位,用来管理和组织对象。
每个表空间由一个或多个数据文件组成,不同表空间可以包含不同的数据对象。
7. 段(Segment):段是逻辑存储结构的基本单位,是指数据库中的一个连续空间。
每个表、索引等对象都占用一个或多个段。
8. 区(Extent):区是段的扩展单位,是一组连续的数据块。
一个段由多个区组成。
9. 块(Data Block):块是数据库存储的最小单位,通常是8KB大小。
每个数据文件由多个块组成。
以上组成部分之间的关系如下:- 实例与数据库:一个实例可以管理多个数据库,每个数据库都有自己的实例。
- 数据库与数据文件:一个数据库可以由一个或多个数据文件组成,每个数据文件存储数据库的实际数据。
- 实例与控制文件:一个实例通常有一个或多个控制文件,控制文件记录了数据库的结构和状态信息。
Oracle-undo-表空间管理

Oracle-undo-表空间管理Oracle的Undo表空间管理是Oracle数据库中非常重要而又基础的管理工作之一。
因为数据库中的Undo表空间与事务有着紧密的联系,影响着数据库的性能和稳定性。
本文将对Oracle的Undo表空间管理进行详细介绍,包括Undo表空间的概念、作用、管理方法、优化等方面。
一、Undo表空间的概念Undo表空间是用来存储Oracle数据库中操作的回滚信息,主要的作用是进行事务的回滚和恢复。
在Oracle数据库中,事务的ACID属性可以保证数据的完整性和一致性,而Undo表空间就是为了保证事务的ACID属性而存在的。
在Oracle数据库中,Undo表空间分为两种类型:System Undo表空间和User Undo表空间。
系统Undo表空间是由系统自动创建的一个表空间,用于存储系统级的回滚信息,用户不能自己创建或删除该表空间。
而用户Undo表空间则是由用户自己创建的,用来存储用户级别的回滚信息,一个数据库中可以有多个用户Undo表空间。
二、Undo表空间的作用Undo表空间的作用非常重要,它主要用来完成以下几个方面的功能:1. 事务的回滚当某个事务需要回滚时,Oracle会将该事务所做的修改操作写入到Undo表空间中,然后撤销这些操作来回滚事务。
因此Undo表空间的存储能力和速度直接影响着Oracle数据库回滚事务的性能和效率。
2. 数据库恢复当数据库需要恢复时,Oracle会利用Undo表空间中的回滚信息将数据库恢复到特定的时间点。
因此Undo表空间存储的时间范围和存储能力对数据库恢复能力有着直接的影响。
3. MVCC机制在Oracle数据库中,MVCC(多版本并发控制)机制是一种用来实现并发控制的技术,它需要利用Undo表空间中的回滚信息来实现数据的版本控制。
当多个事务同时对一个数据进行操作时,Undo表空间就派上用场了。
三、Undo表空间的管理方法为了更好地管理Undo表空间,我们需要掌握以下几种管理方法:1. 创建Undo表空间在Oracle数据库中,可以通过语句CREATE UNDO TABLESPACE来创建Undo表空间。
表空间(TABLESPACE)

表空间(TABLESPACE)表空间(TABLESPACE)是ORACLE数据库中最大的逻辑结构。
ORACLE数据库是由一个或多个表空间组成的。
它在物理上与磁盘上的数据文件相对应(一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间)。
从物理上说数据库的数据被存放在数据文件中,而从逻辑上说是被存放在表空间中的。
数据库的逻辑配置实际上就是指表空间的配置。
一、表空间概述表空间是ORACLE数据库中最大的逻辑结构。
数据库的所有对象和方案都被逻辑的保存在表空间中。
(一)表空间的特性与作用数据库管理系统(DBMS)是建立在操作系统(OS)基础上的,它的数据也必须存储在各个文件中,如数据文件、重做日志文件、归档日志文件等。
表不是文件,表不是空间。
表空间是组织结构和分配空间的逻辑结构。
除了数据文件之外,控制文件、重做日志文件、归档日志文件等其他文件都不属于任何表空间。
表空间的特性如下:1.一个数据库可以有多个表空间。
可以在数据库中创建、删除表空间;2.一个表空间只属于一个数据库;3.一个表空间必须要有一个数据文件;4.一个表空间的大小等于其中所有数据文件的大小之和。
数据库的大小等于其中所有表空间的大小之和;5.表空间可以被联机和脱机。
SYSTEM表空间不能被脱机;6.表空间可以在读写、只读状态之间切换;7.每个表空间由一个或多个物理存在的操作系统的数据文件组成。
这种数据文件可以具有固定的大小,或允许其自动变大。
可以在表空间中添加、删除数据文件;8.方案对象、表、索引的数据都被存储在表空间的数据文件中。
一个数据文件存储不下,就存储在另一个数据文件中,只要该数据文件是本表空间中的就可以;9.一个用户默认使用一个表空间,但他的不同方案对象的数据可以被存储在不同表空间中;10.一个用户使用的表空间的数量是有一定配额的,不能超出这个配额;11.可以根据使用目的,创建不同类型的表空间,如永久表空间、临时表空间、撤销表空间、大表空间等。
oracle表空间自增长机制

Oracle表空间自增长机制1. 概述在Oracle数据库中,表空间(tablespace)是用于存储数据和索引的逻辑结构。
它可以包含一个或多个数据文件(datafile),而数据文件则是物理上存储数据的文件。
为了有效地管理存储空间,Oracle提供了自增长机制,使得表空间可以根据需要自动增加或减少存储容量。
本文将详细介绍Oracle表空间自增长机制的原理、配置和管理方法。
2. 自增长类型Oracle表空间的自增长机制主要有两种类型:自动扩展和手动扩展。
2.1 自动扩展当表空间中的数据文件达到其最大大小时,Oracle会自动扩展该数据文件。
自动扩展可以通过设置表空间的最大大小(MAXSIZE)来限制。
当数据文件达到最大大小时,Oracle会创建一个新的数据文件,并将新写入的数据分配给新的数据文件。
自动扩展还可以通过设置增量大小(INCREMENT BY)来控制每次扩展的大小。
例如,如果设置增量大小为100M,则每次扩展时会新增100M的存储容量。
2.2 手动扩展除了自动扩展外,用户还可以手动地对表空间进行扩展。
手动扩展可以通过执行ALTER TABLESPACE语句来实现。
手动扩展时,可以指定增加的数据文件的大小和位置。
Oracle会在指定位置创建一个新的数据文件,并将新写入的数据分配给新的数据文件。
3. 配置表空间自增长要配置表空间的自增长机制,需要使用ALTER TABLESPACE语句。
下面是一些常用的配置选项:3.1 设置最大大小可以使用以下语法设置表空间的最大大小:ALTER TABLESPACE tablespace_name MAXSIZE size;其中,tablespace_name是要配置的表空间名称,size是最大大小(例如1G、100M等)。
3.2 设置增量大小可以使用以下语法设置表空间的增量大小:ALTER TABLESPACE tablespace_name AUTOEXTEND ON NEXT size;其中,tablespace_name是要配置的表空间名称,size是增量大小(例如100M、1G等)。
oracledb的逻辑结构

oracledb的逻辑结构1. 实例(instance)实例是Oracle数据库的最高层次,它包含了数据库的内存结构和后台进程。
每个Oracle数据库都有一个对应的实例。
实例负责管理数据库的内存和进程,以及处理用户的请求。
2. 数据库(database)数据库是由多个表空间组成的,每个表空间又包含多个数据文件。
数据库是存储数据的物理结构,用于持久化存储数据。
一个Oracle 数据库可以包含多个数据库。
3. 表空间(tablespace)表空间是逻辑上的存储区域,用于组织和管理数据库中的数据。
每个表空间包含多个数据文件,用于存储表和索引等数据库对象。
不同的表空间可以有不同的存储特性和管理策略。
4. 数据文件(data file)数据文件是表空间的组成部分,用于存储表和索引等数据库对象的数据。
一个数据库可以包含多个数据文件,每个数据文件都有固定的大小和位置。
5. 段(segment)段是逻辑上的存储单位,每个段对应一个表、索引或者其他数据库对象。
段由一组连续的数据块组成,用于存储实际的数据。
6. 数据块(data block)数据块是数据库的最小存储单位,每个数据块包含一定数量的字节。
数据库中的数据被分割成多个数据块进行存储和管理。
7. 扩展(extent)扩展是一组连续的数据块,用于分配给段进行存储。
扩展是数据库的分配单位,当段需要更多的存储空间时,会向其分配新的扩展。
8. 逻辑块(logical block)逻辑块是Oracle数据库中数据的逻辑单位,每个逻辑块包含一定数量的字节。
逻辑块是对数据块的逻辑封装,用于提供更高层次的数据管理。
9. 段空间管理(segment space management)段空间管理是指如何分配和管理段的存储空间。
Oracle数据库支持两种段空间管理方式:自动段空间管理(Automatic Segment Space Management, ASSM)和手动段空间管理(Manual Segment Space Management)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表空间(Tablespace)——为数据库提供使用空间的逻辑结构,其对应物理结构是数据文件,一个表空间可以包含多个数据文件。
本地管理表空间(Locally Managed Tablespace简称LMT)——8i以后出现的一种新的表空间的管理模式,通过本地位图来管理表空间的空间使用。
字典管理表空间(Dictionary-Managed Tablespace简称DMT)——8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间。
本地化管理:就是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。
每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。
本地化管理的表空间的创建过程:语法:CREATE TABLESPACE 表空间名字DATAFILE ’数据文件详细信息’[EXTENT MANAGEMENT { LOCAL{AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。
对于系统表空间,只能在创建数据库的时候指定EXTENT MANGEMENT LOCAL,因为它是数据库创建时建立的第一个表空间。
在8i中,字典管理还是默认的管理方式,当选择了LOCAL关键字,即表明这是一个本地管理的表空间。
当然还可以继续选择更细的管理方式:是AUTOALLOCATE 还是UNIFORM.。
若为AUTOALLOCATE,则表明让Oracle来决定区块的使用办法;若选择了UNIFORM,则还可以详细指定每个区块的大小,若不加指定,则为每个区使用1M大小。
本地管理表空间的优点:1)减少了递归空间管理本地管理表空间是自己管理分配,而不是象字典管理表空间需要系统来管理空间分配,本地表空间是通过在表空间的每个数据文件中维持一个位图来跟踪在此文件中块的剩余空间及使用情况。
并及时做更新。
这种更新只对表空间的额度情况做修改而不对其他数据字典表做任何update操作,所以不会产生任何回退信息,从而大大减少了空间管理,提高了管理效率。
同时由于本地管理表空间可以采用统一大小分配方式(UNIFORM),因此也大大减小了空间管理,提高了数据库性能。
2)系统自动管理extents大小或采用统一extents大小本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。
这两种分配方式都提高了空间管理效率。
3)减少了数据字典之间的竞争因为本地管理表空间通过维持每个数据文件的一个位图来跟踪在此文件中块的空间情况并做更新,这种更新只修改表空间的额度情况,而不涉及到其他数据字典表,从而大大减少了数据字典表之间的竞争,提高了数据库性能。
4)不产生回退信息因为本地管理表空间的空间管理除对表空间的额度情况做更新之外不修改其它任何数据字典表,因此不产生回退信息,从而大大提高了数据库的运行速度。
5)不需合并相邻的剩余空间因为本地管理表空间的extents空间管理会自动跟踪相邻的剩余空间并由系统自动管理,因而不需要去合并相邻的剩余空间。
同时,本地管理表空间的所有extents还可以具有相同的大小,从而也减少了空间碎片。
6)减少了空间碎片7)对临时表空间提供了更好的管理表空间管理方式转换:字典管理表空间每当表或其他对象需要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,然后给对象分配一个新区段并更新其可用空间信息。
本地管理表空间保存数据文件本身的空间管理信息,而且表空间自动跟踪每个数据文件块的可用或已用状态。
在事务比较多的数据库中显然字典管理每次插入数据时都会检查数据字典,这就使得数据库性能有所损耗。
1)命令方式转移。
首先你要新建一个oracle表空间,在oracle 10g以后默认都是采用本地管理表空间的。
对于表空间的转移使用命令:ALTER TABLE temp MOVE TABLESPACE new_temp;对于索引你需要重建:ALTER TABLE index REBUILD TABLESPACE new_index;显然上面的方法并不适用于对system表进行转换,因为你不能建立2个同名的system 表。
2)采用oracle提供的PL/SQL数据包中的DBMS_SPACE_ADMIN.在转换system表前,你必须把所有的其他表空间转换为本地管理。
EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace");——转行表空间然后同样的方法将system表空间也进行转换。
EXECUTE dbms_space_admin.tablespace_migrate_to_local("system");使用这种方法很好,但是它建立的表空间没有automatic segment space managerment 选项,所有字典管理表空间都是用默认手动段空间管理,而且在转换为本地管理的表空间是不能进行修改。
还有一个缺点,就是表空间如果存在空间碎片的话,此方法也不能解决碎片问题。
管理表空间的几个基本准则1.使用多个表空间使用多个表空间是有好处的,从硬件上说:我们可以将不同应用的数据存放在不同的表空间内,并且放在不同的分区上,这样可以防止多个应用抢占磁盘的I/O资源,另外当磁盘有损坏时不会同时影响到多个应用。
从数据库上说:使用多个表空间可以将不同的用户数据从数据字典中分离,以减少一个数据文件的数据字典对象和模式对象之间的竞争。
同样的临时表空间也是需要创建多个,用来匹配表空间,保证在执行操作过程中,得到更优化的响应。
2.指定表空间的存储参数这个主要是针对不同的特殊应用来做(比如只做查询的表空间),暂时没研究。
一般的应用就让oracle自己管理吧。
3.为表空间指定限额合理的限额对表空间的利用率是有很大帮助的,如果一个只会用到20M的空间,而你却给它分配几百M,是不是就成为一个很严重的资源浪费。
另外要提的是当表空间不够用的时候,需要做的是增加表空间所在文件的数据文件的大小,或者新建几个比较大的数据文件,而不是创建很多个比较小的数据文件,这么做理由应该是很好理解的。
值得注意的表空间存储参数:MINIMUM:CREATE TABLESPACE的一个参数,它能影响表空间段的分配,换句话说是能影响到表空间中空闲空间碎片的一个参数,当为它指定大小后,它能确保所有空闲的或者已分配的盘区的大小一定是它的倍数,以K或者M计算,系统的默认值似乎是64K。
ALTER TABLESPACE语句的限制:ALTER TABLESPACE语句可以用来修改一个表空间的存储参数,但是它不能用来修改INITIAL和MINEXTENTS,一个表空间的默认参数的新值只能影响到将来该表空间为段分配的盘区,而已有分配的还是照创建时的设定值。
因此一旦设定了默认参数,最好不要随意修改。
合并表空间中的空闲空间:先来看看空闲空间是如何存储的:一个表空间的空闲空间是一些相邻的空闲块构成的,这些空闲块的大小不用说当然是由MINIMUM设定的,当需要创建一个新的表空间存储段的时候,系统会在这些连续的空闲块中寻找大小大于新存储段大小的区间进行创建,而当一个表空间存储段被取消时它的空间将直接被标记成空闲块,这样就会造成表空间中,连续的空闲块大小越来越小,越来越不连续,那么在之后需要创建新的表空间段时,就无法保证新的表空间段的空间是连续的块,当然oracle会自动去做合并这个事,那我们可以通过管理来减轻系统的负担。
手动合并空闲的空间:ALTER TABLESPACE ... COALESCE 这个语句用来合所有的空闲空间,起到的作用类似于WINDOWS的磁盘整理,对操作者的权限要求是有 ALTER TABLESPACE 权限(似乎是句废话,但是如果发现无法执行的时候,不妨GRANT ... ALTER TABLESPACE),不过这条语句不能用来合并一个表空间中不同盘区的所有空闲空间,如果要做到所有盘区的空闲空间的整理,除非导出空间数据再重新创建表空间再导入数据,而且最好只有一个盘区。
那么如何才能了解表空间中空闲空间的分布呢(就是如何监控空闲空间)?有几个视图帮我们记录了这些数据:DBA_FREE_SPACE 、 DBA_FREE_SPACE_COALESCE。
我们要做的就是在上面做查询,得到某个表空间中空闲空间的分布:SELECT BLOCK_ID, BYTES, BLOCKS, FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = '**' ORDER BY BLOCK_ID; 结果显而易见。
另外表空间的管理还有设置表空间是否联机。
表空间可以有两种状态:脱机和联机,什么意思?脱机就是证明这表空间虽然存在但是它不能被使用,联机则相反。
修改语句就是:ALTER TABLESPACE ……[ONLINE/OFFLINE]。
使用只读表空间只读表空间:从字面意思理解就是一个只能执行查询等不影响表空间内存储的数据的事务的一个表空间。
那现在来看看它的定义:只读表空间的主要目的是消除执行数据库大量的静态部分的备份和恢复的需要。
因此只读表空间应该有如下特性:•任何用户都不可以在表空间创建或修改数据•没有回滚段•可以随意拷贝,甚至刻录到光盘中那么如何使一个表空间变成只读状态呢?我们知道任何一个表空间在创建后默认都是可读写状态,我们就需要改变这种状态:ALTER TABLESPACE ……READ ONLY;这条命令需要用户拥有ALTER/MANAGE TABLE 权限。
要设定一个表空间成为只读表空间需要注意几点:•表空间必须是联机的•表空间没有包括任何的活动回滚段•表空间不能是SYSTEM(正是因为SYSTEM总是有活动的回滚段)•该表空间没有涉及的联机备份,因为在备份的最后会要求更新表空间中所有的头文件新特性:在使用ALTER TABLE ……READ ONLY;之前不需要等待表空间完成所有的事务,系统会自动转入过渡的只读模式,该模式将阻止一切新的事务进行,但是允许现有事务进行提交和回滚。
注意:过渡状态只在初始化参数PATIBLE(和数据库版本有关的参数)的值为8.1.0以上才会出现,如果是小于8.1.0的值,当READ ONLY语句会在有活动的事务的情况下失败。