表空间的管理



表空间的结构


区管理方式:字典管理和本地管理

 创建字典管理的表空间时,需要制定若干存储参数:

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;


表空间的扩展

在创建表空间或者扩展表空间应该根据以下原则

  1. 尽量使用少量的大文件,而不要使用大量的小文件
  2. 同一个表空间的不同数据文件应该存放在不同的磁盘上
  3. 应该讲数据文件和重做日志文件分别放在不同的磁盘上(磁盘的读写操作分散在各个磁盘上,减少磁盘的I/O)

数据文件的数目收到两个因素的制约:一个是创建数据库时指定的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建议将数据文件分布在不同的磁盘上,并与重做日志文件分别存放。


数据文件的移动和重命名分四步:

  1. 将数据文件处于脱机状态 (ALTER TABLESPACE   TBS   OFFLINE/  CONN / AS SYSDBA -->SHUTDOWN --->STARTUP MOUNT)
  2. 在操作系统中将磁盘上的数据文件移动到另一个位置(ALTER TABLESPACE TS RENAME DATAFILE 'D:/DATA1.DBF' TO 'D:/DATA2.DBF';/ALTER DATABASE RENAME FILE ' ' TO '';)
  3. 数据库中对文件进行重命名
  4. 将数据文件处于联机状态(ALTER TABLESPACE TBS ONLINE/ALTER DATABASE OPEN;)

对系统表空间,或者其中包含活动回滚段的表空间,因为无法使他们处于脱机状态,所以现将数据库切换到MOUNT状态,然后对数据进行移动或重命名,在这种情况下需要ALTER DATABASE命令,而普通表空间需要执行ALTER TABLESPACE命令。


表空间的重命名很简单:

      ALTER TABLESPACE TS2 RENAME TO TS1;










你可能感兴趣的:(表空间的管理)