1.概述
Oracle数据库开创性地提出了表空间的设计理念,Oracle中的许多优化都是基于表空间的设计理念而实现的。
Oracle数据库被划分成称做表空间的逻辑区域,一个Oracle数据库有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是Oracle数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引等。
表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象,否则不允许创建对象。因此,在创建对象之前先要分配存储空间,而分配存储空间就要创建表空间。
2.表空间类型:
永久性表空间(Permanent)
用户需要保留的任何段和一个会话或事务的应用数据都保留在永久性表空间,如SYSTEM和SYSAUX表空间。从Oracle 11g开始,SYSTEM表空间默认为本地化管理,表空间第一个数据文件中的位图段管理所有的空间使用。
撤消表空间(Undo)
数据库中可存在多个撤消表空间,但任一时间只有一个撤消表空间被激活,主要用于事务回滚,提供读一致性。它支持Oracle Flashback的一些特性,如Flashback Query。我们必须为撤消表空间设置合适的大小,以防止“Snapshot too old”错误。
临时表空间(Temporary)
数据库中可同时在线和激活多个临时表空间,但Oracle 11g前同一用户的多个会话共享一个临时表空间,因为仅只有一个默认的临时表空间可被赋给用户。为解决潜在的性能瓶颈,Oracle支持临时表空间组.临时表空间组由至少一个临时表空间组成。
大文件表空间(Bigfile)
Bigfile表空间仅由一个数据文件组成,单个数据文件最大可达128TB,若表空间数据块大小为32KB,数据文件可以达到 4G 个数据块大小。只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持BIGFILE表空间。
3.表空间的创建:
在建立表空间时,必须注意的是,将表空间连接到哪个数据库,由哪个数据库负责管理相关的表空间。
创建表空间的基本结构如下:
CREATE TABLESPACE tablespace_name
DATAFILE file_spec
Datafile_Options
Storage_Options ;
其中:
tablespace_name 是表空间名称
file_spec 是数据文件名称
Datafile_Options是数据文件选项
Storage_Options是存储结构选项
语法中各字段含义如下:
Tablespace:表空间的名称。
Filespec:数据文件的名称。
AUTOEXTEND:自动延伸数,ON 表示打开,OFF表示关闭。
MAXSIZE:最大数。
UNLIMITED:无限制。
MINIMUM EXTENT:最小延伸数。
Integer:整数数字。
LOGGING:在表空间中,设置表、索引和切割区的记录属性。
NOLOGGING:在表空间中,不设置记录属性,也就是不会产生Undo和Redo记录文件。
ONLINE:表示连线状态,可以使用。
OFFLINE: 表示离线状态,不可以使用。
DEFAULT:系统自动产生的默认。
PERMANENT:永久的、固定的表空间。
TEMPORARY:暂时的表空间。
EXTENT MANAGEMENT:指定扩充的管理方式,可以是本地管理 LOCAL,也可以是数据字典管理DICTIONARY,默认是本地管理
UNIFORM SIZE 128k:区自动扩展128kb
例1:创建表空间TS1, 指定区尺寸为128k,采用本地管理
CREATE TABLESPACE TS1
DATAFILE 'D:\ORACLE\ORADATA\MYDB\TEST01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 128k;
例2:
CREATE TABLESPACE TS2
DATAFILE 'D:\ORACLE\ORADATA\MYDB\TEST02.dbf' SIZE 50M
REUSE
AUTOEXTEND ON
NEXT 640K
MAXSIZE 100M
LOGGING
DEFAULT STORAGE ( INITIAL 64K NEXT 64K MINEXTENTS 1 MAXEXTENTS 0
PCTINCREASE 0) TEMPORARY;
例3:创建UNDO表空间UNDOTBS
CREATE UNDO TABLESPACE UNDOTBS
DATAFILE 'D:\ORACLE\ORADATA\MYDB\UNDOTBS.dbf' SIZE 50M
注意:UNDO表空间必须是本地管理,在OPEN状态下只能使用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间: ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS;
例4:创建临时表空间TEMPTBS
CREATE TEMPORARY TABLESPACE TEMPTBS
TEMPFILE 'D:\ORACLE\ORADATA\MYDB\TEMPTBS.dbf' SIZE 50M;
4.表空间的状态:
联机
表空间通常处于联机状态,以便数据库用户访问其中的数据。表空间处于联机状态时,用户可以从中进行读写操作,数据库管理员在数据库处于开启状态时令除SYSTEM表空间之外的任何表空间联机。SYSTEM表空间在数据库开启时总是处于联机状态。
读写
默认情况下,所有的表空间都是读写状态,任何具有表空间配额并且具有适当权限的用户都可以读写表空间中的数据。
只读
如果将表空间设置为只读状态,则任何用户都无法向该表空间中写入数据,也无法修改表空间中已有的数据。这种限制与用户权限无关。
脱机
在有多个应用表空间的数据库中,DBA可以通过将某个应用表空间设置为脱机状态,使得用户暂时不能访问该表空间,但仍然可以访问数据库的其他表空间。
5.表空间的脱机模式:
1.正常
默认模式,表示该表空间从正常状态切换到脱机状态。在进入脱机状态的过程中,必须保证该表空间的所有数据文件是联机的、可用的,Oracle会执行一次检查点,以便将SGA区中与该表空间相关的缓存数据写入到数据文件中,然后关闭表空间的所有数据文件。
2. 临时
该模式表示将表空间以临时方式切换到脱机状态。在进入脱机状态过程中,不必保证该表空间的所有数据文件都是联机的、可用的,Oracle会执行一次检查点。如果这个过程中某些数据文件处于不可用状态,Oracle会忽略这些错误,进入临时脱机模式。
3. 立即
该模式表示将表空间以立即方式切换到脱机状态。在进入脱机状态过程中,不必保证表空间的所有数据文件都是联机的、可用的,Oracle也不会执行检查点,而是将属于该表空间的所有数据文件切换到脱机状态。
4. 恢复
该模式表示表空间以恢复方式切换到脱机状态。如果要对表空间进行基于时间的恢复,可以使用这种模式将表空间切换到脱机状态,然后DBA会使用备份的数据文件覆盖原有的数据文件,利用归档重做日志,将表空间恢复到某个时间状态。
6.表空间的修改:
重命名表空间
修改表空间的名称不会影响表空间中的数据,但不能修改系统表空间SYSTEM和SYSAUX的名称。如果表空间的状态为OFFLINE,则无法重命名该表空间。
SQL> ALTER TABLESPACE old_name RENAME TO new_name;
设置默认表空间
建立表空间时,如果不指定表空间,则默认的临时表空间是TEMP,默认的永久表空间是USERS。Oracle 11g表空间允许将非临时表空间设置为临时表空间,将非SYSTEM表空间设置为默认永久表空间。
SQL> ALTER DATABASE DEFAULT [TEMPORARY] TABLESPACE tablespace_name;
改变表空间的读写状态
设置表空间为只读,需要满足以下条件:表空间为ONLINE;表空间不能包含任何回滚段;在归档模式中或者数据发行中,不能设置空间为只读。
SQL> ALTER TABLESPACE game READ ONLY;
ALTER TABLESPACE game READ WRITE.
给表空间添加数据文件
SQL> ALTER TABLESPACE TS1 ADD DATAFILE
‘D:\ORACLE\ORADATA\MYDB\TS001.dbf ’ SIZE 5M
AUTOEXTEND ON NEXT 3M MAXSIZE 50M;
删除表空间中的数据文件
SQL> ALTER TABLESPACE TS1 DROP DATAFILE
‘D:\ORACLE\ORADATA\MYDB\TS001.dbf ’ ;
修改表空间文件的数据文件大小
SQL> ALTER DATABASE DATAFILE ‘D:\ORACLE\ORADATA\MYDB\TS001.dbf ’ RESIZE 10M;
修改表空间数据文件的自动增长属性
SQL> ALTER DATABASE DATAFILE ‘D:\ORACLE\ORADATA\MYDB\TS001.dbf ’AUTOEXTEND OFF;
设置表空间脱/联机
SQL> ALTER TABLESPACE TS1 OFFLINE ;
SQL> ALTER TABLESPACE TS1 ONLINE ;
设置数据文件脱/联机
SQL> ALTER DATABASE DATAFILE 3 OFFLINE;
SQL> ALTER DATABASE DATAFILE 3 ONLINE;
修改表空间的记录属性
SQL> ALTER TABLESPACE TS2 NOLOGGING;
转移物理文件路径的操作
(1)设置表空间脱机 ALTER TABLESPACE TS1 OFFLINE ;
(2)物理转移表空间文件;即把你的表空间物理文件转移到你想移动的路径。
(3)逻辑转移: ALTER TABLESPACE TS1 RENAME DATAFILE
‘D:\ORACLE\ORADATA\MYDB\TS001.dbf’
to 'E:\TS001.dbf';
(4)设置表空间联机 ALTER TABLESPACE TS1 ONLINE ;
7.删除表空间
删除表空间,但不删除数据文件
SQL>DROP TABLESPACE TS1
删除表空间,同时删除数据文件
SQL>DROP TABLESPACE TS2 INCLUDING CONTENTS AND DATAFILES;
8.表空间信息的查看
查看表空间的名字、所属文件和空间大小
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files order by tablespace_name;
查看表空间的空闲空间
Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 / 1024
From Dba_Free_Space Group By Tablespace_Name
查看表空间大小
SELECT a.NAME,SUM(b.bytes)/1024/1024/1024
FROM v$tablespace a, v$datafile b
WHERE a.TS#=b.TS# GROUP BY a.NAME
查看表空间中分布的用户信息
select tablespace_name, owner,sum(bytes)
from dba_segments group by tablespace_name, owner
查看每个表空间占用空间的大小
Select Tablespace_Name,Sum(bytes)/1024/1024
From Dba_Segments Group By Tablespace_Name
查看有哪些表空间
SELECT * FROM DBA_TABLESPACES;
查看数据文件放置的路径
SELECT TABLESPACE_NAME,BYTES/1024/1024 MB,FILE_NAME
FROM DBA_DATA_FILES;
检查当前用户空间分配情况
SELECT tablespace_name,SUM(extents),SUM(blocks),SUM(bytes)
FROM user_segments
GROUP BY tablespace_name
检查各用户空间分配情况
SELECT owner,tablespace_name,SUM(extents),SUM(blocks),SUM(bytes) FROM dba_segments
GROUP BY owner,tablespace_name;
检查各用户空间使用情况
SELECT owner,tablespace_name,COUNT(extent_id),SUM(blocks),
SUM(bytes) FROM user_extents
GROUP BY owner,tablespace_name;
检查数据库空间使用情况
SELECT tablespace_name,COUNT(extent_id),SUM(blocks),SUM(bytes)
FROM user_extents
GROUP BY tablespace_name;
检查当前用户自由空间情况
SELECT tablespace_name,COUNT(block_id),SUM(blocks),SUM(bytes)
FROM user_free_space
GROUP BY tablespace_name;