Oracle 11g 学习3——表空间操作

Posted demystify

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 11g 学习3——表空间操作相关的知识,希望对你有一定的参考价值。

 一、表空间概述

         表空间是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:\app\myspace\myspace.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:\APP\MYSPACMYSPACE.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:\app\myspace\myspace02.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:\APP\MYSPACE\MYSPACE02.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:\APP\MYSPACE\MYSPACE02.DBF‘ OFFLINE;

(3)、移动表空间中的数据文件
数据文件的大小受所在磁盘空间大小的限制,当数据文件所在的磁盘空间不够时,需要将数据文件移动到新的磁盘中保存。

方法:
   第一步:将相应的表空间设置为离线状态
   第二步:进入磁盘,移动数据文件到新的位置,也可以修改文件名
   第三步:重命名数据文件
例如:ALTER TABLESPACE myspace
      RENAME DATAFILE ‘E:\APP\MYSPACE\MYSPACE02.DBF‘
      TO ‘D:\ORACLEFILE\MYSPACE03.DBF‘
   第四步:将相应的表空间设置为在线状态

六、临时表空间


//创建和修改临时表空间
临时表空间是一个磁盘空间,主要用于存储用户在执行ORDER BY等语句进行排序或汇总时产生的临时数据。默认情况下,所有用户都使用temp作为默认临时表空间。但是也允许使用其他临时表空间作为默认临时表空间,这需要在创建用户时指定。
   创建临时表空间时需要使用TEMPORARY关键字,并且与临时表空间对应的是临时文件,由TEMPFILE关键字指定,也就是说临时表空间中不再使用数据文件,而使用临时文件。

例子:
CREATE TEMPORARY TABLESPACE mytemp
TEMPFILE ‘E:\app\myspace\mytemp.dbf‘
SIZE 5M AUTOEXTEND ON NEXT 2M MAXSIZE 20M;

//修改临时表空间
由于临时文件中不存储永久性数据,只存储排序等操作过程中产生的临时数据,并且在用户操作结束后,临时文件中存储的数据由系统删除,所以一般情况下不需要调整临时表空间,但是当并发用户特别多,并且操作比价复杂时,可能会发生临时表空间不足。这时,数据库管理员可以增加临时文件来增大临时表空间。
    如果需要增加临时文件,可以使用ADD TEMPFILE子句。
    如果需要修改临时文件的大小,可以使用RESIZE关键字。
    还可以修改临时文件的状态为OFFLINE或ONLINE。

//临时表空间组
是指对多个临时表空间组成的集合,针对集合操作
在Oracle 11g中,用户可以创建临时表空间组,一个临时表空间组中可以包含一个或多个临时表空间。
临时表空间组主要特征如下:
** 一个临时表空间组必须由至少一个临时表空间组成,并且无明确地最大数量限制。
** 如果删除一个临时表空间组的所有成员,该组也自动被删除。
** 临时表空间的名字不能与临时表空间组的名字相同。
** 在给用户分配一个临时表空间时可以使用临时表空间组的名字代替实际的临时表空间名;在给数据库分配默认临时表空间时,也可以使用临时表空间组的名字。

使用临时表空间组的优点:
** 由于SQL查询可以并发使用几个临时表空间进行排序操作,因此SQL查询很少会出现排序空间超出,避免临时表空间不足所引起的磁盘排序问题。
** 可以在数据库级指定多个默认临时表空间。
** 一个并行操作的并行服务器将有效地利用多个临时表空间
** 一个用户在不同会话中可以同时使用多个临时表空间。

//操作临时表空间组
1、创建临时表空间组
只需要在创建临时表空间时,使用TABLESPACE GROUP语句为其制定一个组即可。

例子:
    CREATE TEMPORARY TABLESPACE tempgroup
TEMPFILE ‘E:\app\myspace\tempgroup01.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个数据块大小。

//创建大文件表空间
使用BIGFILE关键字,而且只能为其制定一个数据文件或临时文件
   普通表空间一般使用SMALLFILE关键字表示,默认省略。
通过数据字典database_properties可以了解当前数据库默认的表空间类型。

例如:
CREATE BIGFILE TABLESPACE mybigspace
DATAFILE ‘E:\app\myspace\bigspace.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:\app\myspace\blockspace.dbf‘ SIZE 10M
AUTOEXTEND ON NEXT 5M
BLOCKSIZE 16K;

注意:BLOCKSIZE的值与db_nk_cache_size的参数值要对应。

九、撤销表空间
//撤销表空间
为了实现对数据回退、恢复、事务回滚以及撤销等操作,Oracle数据库提供了一部分存储空间,专门保存撤销记录,将修改前的数据保存到该空间中,所以这部分空间被称为撤销表空间。多个撤销表空间可以存在于一个数据库中,但是在任何给定的时间内只有一个撤销表空间是可以获得的。

//创建撤销表空间
例如:
   create undo tablespace undotbs
   datafile ‘e:\app\myspace\undo01.dbf‘ size 20m
   autoextend on;

//修改撤销表空间的数据文件
//添加新的数据文件
alter tablespace undotbs
add datafile ‘e:\app\muspace\undo02.dbf‘ size 10m

//修改撤销表空间的数据文件大小
alter database datafile ‘e:\app\myspace\undo02.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;

说明:
    使用TEMPORARY关键字,则表示设置默认临时表空间;如果不使用该关键字,则表示设置默认永久性表空间。

//查询默认表空间
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 :如果创建的日志文件成员已存在,可以使用REUSE关键字覆盖已存在的文件。但是该文件不能已经属于其他日志文件组。否则无法替换。

//创建日志文件
一般是指向日志文件组中添加日志成员,需要使用ALTER DATABASE ... ADD LOGFILE MEMBER语句

例如:
alter database add logfile member
‘f:\oraclefile\logfile\redo03.log‘
to group 4;

//查看日志文件信息
select group#, member from v$logfile;

//创建日志文件
alter database add logfile group 4
(
   ‘E:\app\myspace\redo01.log‘,
   ‘E:\app\myspace\redo02.log‘
) SIZE 10M;


以上是关于Oracle 11g 学习3——表空间操作的主要内容,如果未能解决你的问题,请参考以下文章

『ORACLE』 对永久表空间进行DDL操作(11g)

Oracle11g创建表空间

ORACLE RAC 11G 添加以及删除UNDO表空间

oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库

『ORACLE』 对永久表空间进行DML操作(11g)

Oracle11G的表空间数据文件大小限制问题处理