表空间是数据库系统中逻辑的一部分,通常一个数据库包含了一个或多个表空间,一个表空间同时又包含了一个或多个数据文件。当然一个数据文件只能同时属于一个表空间,且一个表空间只能同时属于一个数据库,结构如图:
在oracle10g中最少有两个系统表空间:
一个是system表空间:system表空间用来存储数据库系统中自身的数据字典,存储过程,函数,包,和触发器,用来记录数据库的结构和状态。我们所做的任何操作修改操作都有可能会改变system表空间的内容。比如创建表空间,添加数据文件,创建删除表等等。
另外一个是sysaux表空间: sysaux表空间是10g以后出来的一个新表空间是作为system的辅助表空间,像许多数据库的辅助工具和可选组件及其对象存储在sysaux表空间,它是oracle工具及可选组件的默认表空间,例如oem等工具。
当然还有其它的一些系统表空间,在此我们娓娓道来;
USER表空间: 用来存放用户数据信息的。
UNDO表空间: 用于存放事物回滚和撤销产生的旧undo块。
TEMP表空间:存放排序产生临时数据,数据库重启后,temp表空间将会清空。
表空间的三种状态
联机状态:要保证表空间的可读性首先必须使表空间在联机状态下,这样表空间内的数据才可是可读的。
脱机状态:使表空间进入脱机状态一般是为了使数据库的某一表空间临时失效,其它表空间正常运行,再者就是对表空间维护,一致性备份,数据库升级等 (一般很少脱机)
只读状态:只读表状态必须是表空间联机状态下的,而且更多的是用于表空间的维护,比如一致性备份,数据库升级等操作。
读写状态:读写状态表空间同样必须是在联机状态下的,这个时候的表空间是可以做任意操作的。
注意:system表空间必须是联机读写状态,因为数据库的启动和关闭都将访问和更改system表空间的内容
表空间类型
永久表空间:用来存放永久数据的,例如系统表空间,用户表空间等,其特点是:数据库被关闭后,数据仍然保留,不会照成数据丢失。
临时表空间:有点类似于操作系统的内存,其作用就是建立一个临时的数据处理区域,比如大量的查询和排序操作都将用到临时表空间。而且为了提高效率一般都会对临时表空间进行分组管理。
表空间管理方式:
字典管理:是数据库一直以来到8i的表空间默认管理方式,它是将各个区的信息都存储在数据字典里面,通过数据字典来记录每个区的使用情况。需要执行递归SQL来得到更多空间,而且对字典的更新必须是串行的,他们不可能同时进行,开销会很大,所以在9i以后要尽量避免。
本地管理:在oracle 9i中新推出来的一种表空间管理方式,也是9i以后的默认表空间管理方式。所谓本地管理,是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。其有点是减少对数据字典访问所照成的冲突,其次就是减少了递归空间的管理,采用自动管理的extents大小或统一的extents大小,同时也不会产生回退信息,不需要合并相邻的剩余表空间;减少了空间碎片,对临时表空间提供了更好的管理。
注意:
1、 system表空间如果是采用的本地管理方式,所创建的用户表空间将不能采用字典管理方式。反过来则可以。
2、 本地管理方式和字典管理方式是可以进行切换的,但建议在切换之前最好对相应的表空间进行备份后再切换
表空间是数据库系统中逻辑的一部分,通常一个数据库包含了一个或多个表空间,一个表空间同时又包含了一个或多个数据文件。当然一个数据文件只能同时属于一个表空间,且一个表空间只能同时属于一个数据库。
在oracle10g中最少有两个系统表空间:
一个是system表空间:system表空间用来存储数据库系统中自身的数据字典,存储过程,函数,包,和触发器,用来记录数据库的结构和状态。我们所做的任何操作修改操作都有可能会改变system表空间的内容。比如创建表空间,添加数据文件,创建删除表等等。
另外一个是sysaux表空间: sysaux表空间是10g以后出来的一个新表空间是作为system的辅助表空间,像许多数据库的辅助工具和可选组件及其对象存储在sysaux表空间,它是oracle工具及可选组件的默认表空间,例如oem等工具。
当然还有其它的一些系统表空间,在此我们娓娓道来;
USER表空间: 用来存放用户数据信息的。
UNDO表空间: 用于存放事物回滚和撤销产生的旧undo块。
TEMP表空间:存放排序产生临时数据,数据库重启后,temp表空间将会清空。
表空间的三种状态
联机状态:要保证表空间的可读性首先必须使表空间在联机状态下,这样表空间内的数据才可是可读的。
脱机状态:使表空间进入脱机状态一般是为了使数据库的某一表空间临时失效,其它表空间正常运行,再者就是对表空间维护,一致性备份,数据库升级等 (一般很少脱机)
只读状态:只读表状态必须是表空间联机状态下的,而且更多的是用于表空间的维护,比如一致性备份,数据库升级等操作。
读写状态:读写状态表空间同样必须是在联机状态下的,这个时候的表空间是可以做任意操作的。
注意:system表空间必须是联机读写状态,因为数据库的启动和关闭都将访问和更改system表空间的内容
表空间类型
永久表空间:用来存放永久数据的,例如系统表空间,用户表空间等,其特点是:数据库被关闭后,数据仍然保留,不会照成数据丢失。
临时表空间:有点类似于操作系统的内存,其作用就是建立一个临时的数据处理区域,比如大量的查询和排序操作都将用到临时表空间。而且为了提高效率一般都会对临时表空间进行分组管理。
表空间管理方式:
字典管理:是数据库一直以来到8i的表空间默认管理方式,它是将各个区的信息都存储在数据字典里面,通过数据字典来记录每个区的使用情况。需要执行递归SQL来得到更多空间,而且对字典的更新必须是串行的,他们不可能同时进行,开销会很大,所以在9i以后要尽量避免。
本地管理:在oracle 9i中新推出来的一种表空间管理方式,也是9i以后的默认表空间管理方式。所谓本地管理,是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。其有点是减少对数据字典访问所照成的冲突,其次就是减少了递归空间的管理,采用自动管理的extents大小或统一的extents大小,同时也不会产生回退信息,不需要合并相邻的剩余表空间;减少了空间碎片,对临时表空间提供了更好的管理。
注意:
1、 system表空间如果是采用的本地管理方式,所创建的用户表空间将不能采用字典管理方式。反过来则可以。
2、 本地管理方式和字典管理方式是可以进行切换的,但建议在切换之前最好对相应的表空间进行备份后再切换