一、表空间概述
表空间是Oracle中最大的逻辑存储结构,与操作系统中的数据文件相相应;
基本表空间:一般指用户使用的永久性表空间,用于存储用户的永久性数据
暂时表空间: 主要用于存储排序或汇总过程中产生的暂时数据;
大文件表空间:用于存储大型数据(比如LOB)
非标准数据块表空间:用于在一个数据库实例中创建数据块大小不同的表空间;
撤销表空间:用于存储事务的撤销数据,在数据恢复时使用。
二、创建表空间
语法:
CREATE [ TEMPORARY | UNDO ] TABLESPACE tablespace_name
[ DATAFILE | TEMPFILE 'file_name' SIZE size K|M [ REUSE ] ]
[ AUTOEXTEND OFF|ON
[ NEXT number K|M MAXSIZE NULIMITED|number K|M ]
][,...]
[ MININUM EXTENT number K|M ]
[ BLOCKSIZE number K ]
[ ONLINE|OFFLINE ]
[ LOGGING|NOLOGGING ]
[ FORCE LOGGING ]
[ DEFAULT STORAGE storage ]
[ COMPRESS|NOCOMPRESS ]
[ PERMANENT|TEMPORARY ]
[ EXTENT MANAGEMENT DICTIONARY | LOCAL
[ AUTOALLOCATE|UNIFORM SIZE number K|M ] ]
[ SEGMENT SPACE MANAGEMENT AUTO|MANUAL ];
说明:
TEMPORARY:指定表空间为暂时表空间
UNDO:指定表空间为撤销表空间
假设不指定TEMPORARY或UNDO:表示指定的是基本表空间
tablespace_name:表空间的名称
DATAFILE:指定是基本表空间时,为表空间指定数据文件
TEMPFILE:指定是暂时表空间时。为表空间指定暂时文件
REUSE:标识文件已经存在
//对文件的设置
AUTOEXTEND :标识文件是否自己主动扩展
NEXT:标识文件下次扩展的大小
MAXSIZE:标识文件的最大容量,UNLIMITED:标识大小不受限制
MINIMUM EXTENT:标识盘区能够分配的最小容量
BLOCKSIZE:标准数据块大小(仅仅能用于标准表空间)
ONLINE: 标识创建的表空间马上可用 OFFLINE:不能马上使用
LOGGING: 生成日志记录项 NOLOGGING:不生成日志记录项
FORCE LOGGING:强制日志记录项
DEFAULT STORAGE:数据库对象默认的存储对象
COMPRESS: 压缩数据 NOCOMPRESS:不压缩
PERMANENT: 持久保存数据对象 TEMPORARY:暂时保存数据对象
EXTENT MANAGEMENT DICTIONARY:数据字典的管理方式为数据字典管理方式
LOCAL:数据字典的管理方式为本地化管理方式
AUTOALLOCATE:LOCAL管理方式时。盘区大小自己主动分配
UNIFORM SIZE :LOCAL管理方式时,盘区大小均匀分配。能够指定大小
SEGMENT SPACE MANAGEMENT :标识表空间中段的管理方式
AUTO:自己主动管理
MANUAL:人工管理
比如:
CREATE TABLESPACE myspace
DATAFILE 'E:appmyspacemyspace.dbf'
SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
三、表空间状态设置
表空间的状态属性主要有:在线(ONLINE)、离线(OFFLINE)、仅仅读(READ ONLY)和读写(READ WRITE)这4种。
通过设置表空间的状态属性,能够对表空间的使用进行管理。
//1、在线
当表空间的状态为ONLINE时。才同意訪问该表空间中的数据
比如:
//改动表空间的状态为ONLINE
ALTER TABLESPACE tablespace_name ONLINE;
//2、离线
OFFLINE状态,不同意訪问该表空间中的数据。这时能够对表空间进行脱机备份。也能够相应用程序进行升级和维护等。
比如:
//将表空间状态改动为离线状态
ALTER TABLESPACE tablespace_name OFFLINE parameter;
说明:
parameter表示将表空间切换为OFFLINE状态能够使用的參数:
NORMAL: 正常方式切换。默认方式
TEMPORARY:暂时方式,Oracle在检查时不会检查数据文件是否可用
IMMEDIATE:马上方式,Oracle不会运行检查点
FOR RECOVER:以恢复方式,经常使用于基于时间恢复数据库
//3、仅仅读
仅仅能读取数据,不能进行不论什么更新或删除操作。目的是为了保证表空间的数据安全
比如:
//将表空间设置为READ ONLY
ALTER TABLESPACE tablespace_name READ ONLY;
说明:
将表空间设置为READ ONLY之前的注意事项:
-- 表空间必须处于ONLINE状态
-- 表空间不能包括不论什么事务的回退段
-- 表空间不能正处于在线数据库备份期间
//4、读写
能够对表空间进行正常訪问
比如:
//改动表空间为READ WRITE状态
ALTER TABLESPACE tablespace_name READ WRITE。
注意:改动表空间的状态为READ WRITE,也须要保证表空间处于ONLINE状态。
//查看表空间的状态
select tablespace_name, status from dba_tablespaces;
四、改动表空间
(1)、改动 表空间的大小
添加表空间的大小。详细实现时,能够採用添加数据文件的大小,也能够添加一个新的数据文件来增大表空间。
1**、改动表空间的大小
基本表空间的大小等于全部与其关联的数据文件的大小之和。当表空间大小不足时,须要添加表空间大小,详细实现,能够採用添加数据文件的大小,也能够添加一个新的数据问价来增大表空间。
//改动表空间中数据文件的大小
语法:
ALTER DATABASE DATAFILE file_name RESIZE newsize K|M;
说明:
file_name:数据文件的名称和路径
RESIZE newsize:改动数据文件的大小为newsize。
样例:
ALTER DATABASE DATAFILE 'E:APPMYSPACMYSPACE.DBF' RESIZE 30M;
2**、添加表空间的数据文件
语法:
ALTER TABLESPACE tablespace_name
ADD DATAFILE file_name SIZE number K|M
[ AUTOEXTEND OFF|ON
[NEXT number K|M MAXSIZE UNLIMITED|number K|M ]
][,...];
样例:
ALTER TABLESPACE myspace ADD DATAFILE 'E:appmyspacemyspace02.dbf' SIZE 100M;
(2)、重命名表空间
改动表空间的名称,不会影响到表空间中的数据,但不能改动系统表空间system与sysaux的名称。
语法:
ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;
说明:
注意:假设表空间的状态为OFFLINE,则无法重命名该表空间。
(3)、删除表空间
语法:
DROP TABLESPACE tablespace_name
[INCLUDING CONTENTS [AND DATAFILES ]]
说明:
INCLUDING CONTENTS:
表示删除表空间的同一时候,删除表空间中的全部数据库对象。
假设表空间中有数据库对象。则必须使用此选项。
AND DATAFILES
表示删除表空间的同一时候,删除表空间所相应的数据文件。假设不使用此选项,则删除表空间实际上仅是从数据字典和控制文件里将该表空间的有关信息删除。而不会删除操作系统中与该表空间相应的数据文件。
比如:
DROP TABLESPACE USERSPACE
INCLUDING CONTENTS AND DATAFILES;
五、改动表空间中数据文件
(1)、改动表空间数据文件的自己主动扩展性
语法:
ALTER DATABASE DATAFILE file_name AUTOEXTEND OFF|ON
[ NEXT number K|M MAXSIZE UNLIMITED|number K|M ]
比如:
ALTER DATABASE DATAFILE 'E:APPMYSPACEMYSPACE02.DBF'
AUTOEXTEND ON
NEXT 5M MAXSIZE 50M;
(2)、改动表空间中数据文件的状态
数据文件主要有3种状态:ONLINE、OFFLINE和OFFLINE DROP。
ONLINE:表示联机状态,此时数据文件能够使用
OFFLINE:表示脱机状态。此时数据文件不可使用。用于数据库执行在归档模式下的情况
OFFLINE DROP:会删除数据文件,与OFFLINE一样用于设置数据文件不可用,但他用于数据库执行在非归档模式下的情况。
注:将数据文件设置为OFFLINE状态时。不会影响到表空间的状态;可是将表空间设置为OFFLINE状态时,属于该表空间的全部数据文件都被设置为OFFLINE状态。
语法:
ALTER DATABASE
DATAFILE file_name ONLINE|OFFLINE|OFFLINE DROP
样例:
ALTER DATABASE DATAFILE 'E:APPMYSPACEMYSPACE02.DBF' OFFLINE;
(3)、移动表空间中的数据文件
数据文件的大小受所在磁盘空间大小的限制,当数据文件所在的磁盘空间不够时,须要将数据文件移动到新的磁盘中保存。
方法:
第一步:将对应的表空间设置为离线状态
第二步:进入磁盘。移动数据文件到新的位置,也能够改动文件名称
第三步:重命名数据文件
比如:ALTER TABLESPACE myspace
RENAME DATAFILE 'E:APPMYSPACEMYSPACE02.DBF'
TO 'D:ORACLEFILEMYSPACE03.DBF'
第四步:将对应的表空间设置为在线状态
六、暂时表空间
//创建和改动暂时表空间
暂时表空间是一个磁盘空间,主要用于存储用户在运行ORDER BY等语句进行排序或汇总时产生的暂时数据。默认情况下,全部用户都使用temp作为默认暂时表空间。可是也同意使用其它暂时表空间作为默认暂时表空间。这须要在创建用户时指定。
创建暂时表空间时须要使用TEMPORARYkeyword,而且与暂时表空间相应的是暂时文件,由TEMPFILEkeyword指定,也就是说暂时表空间中不再使用数据文件,而使用暂时文件。
样例:
CREATE TEMPORARY TABLESPACE mytemp
TEMPFILE 'E:appmyspacemytemp.dbf'
SIZE 5M AUTOEXTEND ON NEXT 2M MAXSIZE 20M;
//改动暂时表空间
因为暂时文件里不存储永久性数据。仅仅存储排序等操作过程中产生的暂时数据,而且在用户操作结束后。暂时文件里存储的数据由系统删除,所以普通情况下不须要调整暂时表空间,可是当并发用户特别多。而且操作比价复杂时,可能会发生暂时表空间不足。
这时,数据库管理员能够添加暂时文件来增大暂时表空间。
假设须要添加暂时文件。能够使用ADD TEMPFILE子句。
假设须要改动暂时文件的大小。能够使用RESIZEkeyword。
还能够改动暂时文件的状态为OFFLINE或ONLINE。
//暂时表空间组
是指对多个暂时表空间组成的集合。针对集合操作
在Oracle 11g中。用户能够创建暂时表空间组。一个暂时表空间组中能够包括一个或多个暂时表空间。
暂时表空间组主要特征例如以下:
** 一个暂时表空间组必须由至少一个暂时表空间组成,而且无明白地最大数量限制。
** 假设删除一个暂时表空间组的全部成员。该组也自己主动被删除。
** 暂时表空间的名字不能与暂时表空间组的名字同样。
** 在给用户分配一个暂时表空间时能够使用暂时表空间组的名字取代实际的暂时表空间名;在给数据库分配默认暂时表空间时,也能够使用暂时表空间组的名字。
使用暂时表空间组的长处:
** 因为SQL查询能够并发使用几个暂时表空间进行排序操作。因此SQL查询非常少会出现排序空间超出,避免暂时表空间不足所引起的磁盘排序问题。
** 能够在数据库级指定多个默认暂时表空间。
** 一个并行操作的并行server将有效地利用多个暂时表空间
** 一个用户在不同会话中能够同一时候使用多个暂时表空间。
//操作暂时表空间组
1、创建暂时表空间组
仅仅须要在创建暂时表空间时,使用TABLESPACE GROUP语句为其制定一个组就可以。
样例:
CREATE TEMPORARY TABLESPACE tempgroup
TEMPFILE 'E:appmyspace empgroup01.dbf' SIZE 5M
TABLESPACE GROUP group01;
2、查看暂时表空间组信息
数据字典dba_tablespace_groups
样例:
select * from dba_tablespace_groups;
3、移动暂时表空间
使用ALTER TABLESPACE 语句
样例:
ALTER TABLESPACE tempgroup TABLESPACE GROUP group02;
4、删除暂时表空间组
七、大文件表空间
//大文件表空间
大文件表空间是Oracle 10g引入的一个新表空间类型,主要用于解决存储文件大小不够的问题。与普通表空间不同的是,大文件表空间仅仅能相应唯一一个数据文件或暂时文件,而普通表空间则能够最多相应1022个数据文件或暂时文件。
尽管大文件表空间仅仅能相应一个数据文件或暂时文件,但其相应的文件可达4G个数据块大小。
而普通表空间相应的文件最大可达4M个数据块大小。
//创建大文件表空间
使用BIGFILEkeyword,并且仅仅能为其制定一个数据文件或暂时文件
普通表空间一般使用SMALLFILEkeyword表示,默认省略。
通过数据字典database_properties能够了解当前数据库默认的表空间类型。
比如:
CREATE BIGFILE TABLESPACE mybigspace
DATAFILE 'E:appmyspaceigspace.dbf'
SIZE 10M;
//查看表空间是否是大文件表空间
select tablespace_name, bigfile from dba_tablespaces;
//查看当前数据库默认的表空间类型
select property_name, property_value, description
from database_properties
where property_name = 'DEFAULT_TBS_TYPE';
八、非标准数据块表空间
//非标准数据块表空间
非标准(数据块)表空间。是指其数据块大小不基于标准数据块大小的表空间。
在创建表空间时,能够使用BLOCKSIZE子句,该子句用来另外设置表空间中的数据块大小,假设不指定该子句,则默认的数据块大小由系统初始化參数db_block_size决定。db_block_size參数指定的数据块大小即标准数据块大小。在数据库创建之后无法再改动该參数的值。
//创建非标准数据块表空间
Oracle 11g中同意用户创建非标准数据块表空间。使用BLOCKSIZE子句指定表空间中数据块的大小,可是必须有数据缓冲区參数db_nk_cache_size的值与BLOCKSIZE參数的值相匹配。例如以下:
BLOCKSIZE db_nk_cache_size
2KB db_2k_cache_size
4KB db_4k_cache_size
8KB db_8k_cache_size
16KB db_16k_cache_size
32KB db_32k_cache_size
//查看表空间的数据块大小
select tablespace_name, block_size from dba_tablespaces;
//创建撤销表空间
样例:
//第一步,改动 db_nk_cache_size參数
ALTER SYSTEM SET DB_16K_CACHE_SIZE = 16M;
//第二步,创建非标准表空间
CREATE TABLESPACE blockspace
DATAFILE 'E:appmyspacelockspace.dbf' SIZE 10M
AUTOEXTEND ON NEXT 5M
BLOCKSIZE 16K;
注意:BLOCKSIZE的值与db_nk_cache_size的參数值要相应。
九、撤销表空间
//撤销表空间
为了实现对数据回退、恢复、事务回滚以及撤销等操作。Oracle数据库提供了一部分存储空间,专门保存撤销记录,将改动前的数据保存到该空间中,所以这部分空间被称为撤销表空间。多个撤销表空间能够存在于一个数据库中,可是在不论什么给定的时间内仅仅有一个撤销表空间是能够获得的。
//创建撤销表空间
比如:
create undo tablespace undotbs
datafile 'e:appmyspaceundo01.dbf' size 20m
autoextend on;
//改动撤销表空间的数据文件
//加入新的数据文件
alter tablespace undotbs
add datafile 'e:appmuspaceundo02.dbf' size 10m
//改动撤销表空间的数据文件大小
alter database datafile 'e:appmyspaceundo02.dbf' resize 15m;
//设置撤销表空间的数据文件的状态为ONLINE或OFFLINE
alter tablespace undotbs offline;
//操作撤销表空间
一个数据库中能够有多个撤销表空间。但数据库一次仅仅能使用一个撤销表空间。默认情况下,数据库使用的是系统自己主动创建的undotbs1撤销表空间。
假设将数据库使用的撤销表空间切换成其它表空间。使用ALTER SYSTEM语句改动參数undo_tablespace 的值就可以。
切换撤销表空间后。数据库中新事务的撤销数据将保存在新的撤销表空间中。
//切换表空间
alter system set undo_tablespace = undoetbs02;
在自己主动撤销记录管理方式中,能够指定撤销信息在提交之后须要保留的时间,以防止在长时间的查询过程中出现snapshot too old错误。
在自己主动撤销管理方式下,DBA使用UNDO_RESTENTION參数,指定撤销记录的表刘时间。
因为UNDO_RETENTION參数是一个动态參数。在Oracle实例的执行中,能够通过ALTER SYSTEM SET UNDO_RETENTION语句,来改动撤销记录保留的时间。
撤销记录保留时间的单位是秒,默认值为900,即15分钟。
比如。将撤销记录的保留时间改动为10分钟,例如以下:
alter system set undo_retention = 600;
show parameter undo;
//删除撤销表空间
删除撤销表空间之前。须要保证该撤销表空间不是系统正在使用的表空间。
比如:
drop tablespace undotbs02 including contents and datafiles;
//设置默认表空间
在Oracle中。用户的默认永久性表空间为system,默认暂时表空间为temp。假设全部用户都使用默认的表空间,无疑会添加system与temp表空间的竞争性。
Oracle同意使用自己定义的表空间作为默认永久性表空间。使用自己定义暂时表空间作为默认暂时表空间。
语法:
ALTER DATABASE DEFAULT [TEMPORARY] TABLESPACE tablespace_name;
说明:
使用TEMPORARYkeyword,则表示设置默认暂时表空间。假设不使用该keyword,则表示设置默认永久性表空间。
//查询默认表空间
select default_tablespace from user_users;
select property_name, property_value
from database_properties
where property_name IN ('DEFAULT_PERMANENT_TABLESPACE', 'DEFAULT_TEMP_TABLESPACE');
//创建日志文件
//创建日志文件组
语法:
ALTER DATAFILE database_name
ADD LOGFILE [GROUP group_number]
(file_name [,file_name[,...]])
[SIZE size] [REUSE];
说明:
*GROUP group_number:为日志文件组指定组编号
*file_name :为该组创建日志文件成员
*SIZE number:指定日志文件成员的大小
*REUSE :假设创建的日志文件成员已存在,能够使用REUSEkeyword覆盖已存在的文件。可是该文件不能已经属于其它日志文件组。否则无法替换。
//创建日志文件
通常是指向日志文件组中加入日志成员。须要使用ALTER DATABASE ... ADD LOGFILE MEMBER语句
比如:
alter database add logfile member
'f:oraclefilelogfile
edo03.log'
to group 4;
//查看日志文件信息
select group#, member from v$logfile;
//创建日志文件
alter database add logfile group 4
(
'E:appmyspace
edo01.log',
'E:appmyspace
edo02.log'
) SIZE 10M;