表空间的结构
区管理方式:字典管理和本地管理
创建字典管理的表空间时,需要制定若干存储参数:
INITIAL:指定第一个区的大小
NEXT:指定下一个区的大小
MINEXTENTS:为数据库对象分配最少区的个数。
MAXEXTENTS:最多为数据库对象分配的区个数
PCTINCREASE:从第三个区开始,每一个区在前一个区的基础上增长的百分数。
在字典管理表空间时,区的分配和回收都是基于数据字典进行的。
在本地管理表空间,区的大小都是相同的。
于字典管理方式相比,本地管理表空间的优点:
(1)区的分配和回收,不再基于数据字典,从而避免了对数据字典的递归访问,也不会产生重做日志和回滚数据。
(2)所有的区的大小都是相同的,这就减少了存储空间的存储碎片。
(3)不需要合并表空间的存储碎片,数据库服务器会自动件事存储表空间的使用情况,并合并空闲存储空间。
段管理方式
一种是手工管理(MANUAL),一种是自动管理(AUTO);
自动管理是oracle 11g数据库默认采用的段管理方式。
自动管理方式实现过程:在每个段的头部有一个位图,在位图中记录当前段中每个数据块的状态,用二进制0和1 表示数据块的状态,每个数据块在位图中只占一位。
使用位图的好处,首先是节省空间,其次,当前用户想表中写入数据时,服务器进程只要扫描位图就可以查找空闲的数据块,而不需要对位图加锁。
数据文件
创建表空间时,至少指定一个数据文件。
当表空间的存储空间被消耗完时,扩展表空间,分配新的存储空间:
(1)向表空间中增加新的数据文件
(2)手工扩展现有的数据文件
(3)激活数据文件的自动扩展功能
本地管理表空间的管理
在创建表空间时,需要指定表空间的区管理方式、段管理方式以及表空间所包含的数据文件。
例如:
CREATE TABLESPACE TS1
DATAFILE 'D:/TS1.DBF' SIZE 100M
EXTENT MANAGEMENT LOCAL AOTUALLOCATE
SEGMENT MANAGEMENT AUTO;
区管理方式语可以省略,因为表空间的默认区管理方式就是本地管理。但是如果在CREATE语句中指定AOTUALLOCATE(自动分配)或者UNIFORM SIZE(指定统一大小),那么EXTENT MANAGEMENT LOCAL不能省略。
表空间信息的查询
与表空间相关联的数据字典视图是DBA_TABLESPACES和 DBA_DATA_FILES
表空间的删除
DROP TABLESPACE TS INCLUDING CONTENTS AND DATAFILES;
临时表空间
1、创建临时表空间需要制定关键字 temporary ,
例如:
create temporary tablespace tts tempfile 'd:/tts.dbf' size 100M extent management local uniform size 128K;
注意:
(1)temporary 指定表空间为临时性的。
(2)tempfile 指定表空间的数据文件,而不是datafile 子句。
(3)只能通过uniform 子句为临时表空间制定区的大小,而不能使用 AUTOALLOCATE子句。
(4)oracle 建议创建临时表空间的大小设置为排序去的整数倍,以减少存储空间的碎片,是数据库获得最佳性能。排序区的大小通过初始化参数SORT_AREA_SIZE确定。
2、临时表空间的作用
(1)用户执行排序、索引等操作时,将产生大量中间结果,临时数据首先存储在PGA的排序区,当排序区不足容乃,就用到临时表空间。
(2)临时表空间的作用是仅局限于存储临时数据,与其他普通表空间的不同在于,临时空间中的数据所做的任何修改都不会产生重做日志。
(3)临时表空间中的数据文件的信息是从数据字典视图DBA_TEMP_FILE中获得的。
3、更改临时表空间
使用语句---ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TTS;
临时表空间组
为每个用户指定不同的临时表空间,每个用户都使用自己的临时表空间,可以减少磁盘I/O 分布在不同的磁盘上,减少i/O冲突。
ALTER USER SCOTT TEMPORARY TABLESPACE TS1;
临时表空间组是一组临时表空间的逻辑集合,当为用户指定临时表空间组时,可以平均的使用其中的所有临时表空间。临时表空间组不需要创建,只要在创建或修改表空间时为临时表空间组指定一个名称即可。
ALTER TABLESPACE TTS TABLESPACE GROUP g1;
从临时表控组中删除临时表空间的操作:只要为临时表空间制定一个空的临时表空间组即可。
ALTER TABLESPACE TTS TABLESPACE ACE GROUP ' ';
临时表空间组可以从数据字典视图DBA_TABLESPACE_GROUPS中获得。
UNDO 表空间的管理
回滚事务是将修改的数据还原为原状,也就是将回滚数据重新写回原来的地方。
回滚数据也成为UNDO数据,是事务执行前的数据,这些数据存储在回滚段中。当用户回滚事务时,数据库服务器将回滚数据从回滚段重新写入数据段,数据恢复为原状。
两种管理回滚数据的方法,一种是自动方式,这种方式利用专门的UNDO表空间管理UNDO数据;第二种方式为手工方式,利用回滚段滚利UNDO数据。在一个数据库中我们选择其中一种。
手工方式即回滚段方式,是以前ORACLE版本使用的传统方式,这种方式相当复杂,需要DBA做大量的工作,
自动方式利用专门的UNDO表空间来管理回滚数据,整个过程不需要人工干预。
如果将UNDO表空间设置为可自动扩展,那么当用户的事务太多时,数据库服务器可以根据需要对UNDO表空间进行扩展,oracle 建议采用自动管理方式。
UNDO表空间的创建
两种创建UNDO表空间的方式,一是在创建数据库的同时创建UNDO表空间,另一种是在数据库运行过程中,通过CREATE UNDO TABLESPACE命令来创建。
UNDO 表空间的切换
初始化参数UNDO_MANAGEMENT(AUTO/MANUAL)两种方式管理回滚数据。
UNDO_RETENTION 指定已经无效的UNDO数据在UNDO表空间中可以保留的时间,默认900秒。
UNDO_TABLESPACE 指定一个可用的UNDO表空间。
ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO SCOPE=SPFILE;
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS1;
表空间的扩展
在创建表空间或者扩展表空间应该根据以下原则
数据文件的数目收到两个因素的制约:一个是创建数据库时指定的MAXDATAFILES永久参数,二是初始化参数DB_FILES(可修改。参数文件中指定新值。重启数据库服务器)
扩展表空间的方法有两种,一种是向表空间添加新的数据文件,另一种是扩展现有的数据文件。扩展数据文件又可分为,允许数据文件自动扩展和手工扩展数据文件。
添加新的数据文件:
向表空间添加数据文件时,通过ADD子句指定数据文件的路径和大小。
ALTER TABLESPACE TS1 ADD DATAFILE 'D:/DATA.DBF' SIZE 100M REUSE;
如果指定的位置已经存在一个同名的数据文件,可通过REUSE关键字将其覆盖.如果向表空间中添加多个数据文件,由DATAFILE关键字引导多个文件,每个文件分别指定路径和大小。
ALTER TABLESPACE TS1
ADD DATAFILE ' D:/DATA1.DBF' SIZE 100M REUSE,
'D:/DATA2.DBF' SIZE 100M REUSE;
在本地管理的临时表空间,添加数据文件时需要通过 ADD TEMPFILE 子句指定临时文件。
扩展数据文件
如果通过关键字AUTOEXTEND指定数据文件的自动扩展属性为ON,则数据文件可以自动扩展。
如果数据文件以前没有自动扩展功能,可以为其指定自动扩展的功能。如
ALTER DATABASE DATAFILE 'D:/DATA1.DBF' AUTOEXTEND ON NEXT 128K MAXSIZE 100M;
NEXT用于指定每次对数据文件扩展的空间大小,MAXSIZE用于指定数据问价最大允许的大小。可以修改NEXT和MAXSIZE的值。
取消数据文件自动扩展功能:
ALTER DATABASE DATAFILE 'D:/DATA1.DBF' AUTOEXTEND OFF;
在创建表空间或者添加数据文件时,可以指定数据文件的自动扩展功能
数据文件的自动扩展信息可以从数据字典视图DBA_DATA_FILES中获得。
文件的目前大小和最大大小均以字节为单位,每次扩展的大小则是数据块为单位。
手工扩展数据文件时,需要通过RESIZE 为数据文件制定新的大小
ALTER DATABASE DATAFILE 'D:/DATA1.DBF' RESIZE 102M;
表空间的维护
表空间的联机与脱机
创建表空间后默认是联机状态,可读可写,脱机,用户无法访问表空间的数据。
除了SYSTEM 表空间、默认的临时表空间和正在使用的UNDO表空间以外,其他表空间都可以置于脱机状态。
ALTER TABLESPACE TS ONLINE/OFFLINE (NORMAL/TEMPORARY/IMMEDIATE/ FOR RECOVER);
数据文件的联机与脱机
改变数据文件状态的命令是ALTER DATABASE
ALTER DATABASE DATAFILE 'D:/DATA1.DBF' OFFLINE;
如果数据文件损坏,数据库服务器自动将其脱机。如果数据库处于非归档模式下,要使损坏的数据文件脱机时,可以使用DROP,这个数据文件就再也不能联机了。
ALTER DATABASE DATAFILE 'D:/DATA2.DBF' OFFLINE FOR DROP;
是数据文件重新联机,使用ALTER TABLESPACE ONLINE;
ALTER DATBLESPACE TBS DATAFILE OFFLINE;
表空间的读写权限
修改表空间的读写权限
ALTER TABLESPACE TBS READ ONLY;
ALTER TABLESPACE TBS READ WRITE;
只读表空间,只能SELECT,也可以DROP 删除数据库对象。
数据文件的移动和重命名
移动数据文件的目的是为了更换磁盘,或者平衡磁盘的I/O操作。oracle建议将数据文件分布在不同的磁盘上,并与重做日志文件分别存放。
数据文件的移动和重命名分四步:
对系统表空间,或者其中包含活动回滚段的表空间,因为无法使他们处于脱机状态,所以现将数据库切换到MOUNT状态,然后对数据进行移动或重命名,在这种情况下需要ALTER DATABASE命令,而普通表空间需要执行ALTER TABLESPACE命令。
表空间的重命名很简单:
ALTER TABLESPACE TS2 RENAME TO TS1;