ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle的表空间和数据文件

Oracle的表空间和数据文件

原创 Linux操作系统 作者:qgw521 时间:2008-10-07 21:44:44 0 删除 编辑

一直不是很清楚oracle 的表空间是什么,今天抽空了解了一下,原来就是数据文件的逻辑空间。下面首先介绍一下oracle的数据存储体系

一、数据库的存储体系

 

上图就是Oracle数据的存储结构。其中Tablespace就是数据逻辑区域,Segment(段)是指定逻辑结构所占用的空间集合,Extent(分区)是分配单元,一个分区可以有多个block,而block是基本分配单元。总的来说,DB>Tablespace>Segment>Extent>block,一个段可以跨几个datafile,而分区不可以,即一个段只属于一个表空间,不过可以跨两个数据文件。

 

二、表空间的分类

(1)、系统表空间:它是在创建数据库时创建的,包括数据字典、系统回滚段等;

(2)、非系统表空间:分离的段,方便空间管理,控制用户对表空间的使用。

在OEM->存储->表空间中可以看到有SYSTEM表空间、USER表空间、UNDO、Temp等表空间,后三者属于非系统表空间。

 

三、表空间的创建

在OEM->存储->表空间中也可以创建,当然手动也可以创建。

create tablespace xxx [datafile '...'] [size xxx] [extent management local/dictionary] [default storage(xxx)]

表空间的管理主要有两种方式:一是本地管理(local),推荐使用,可以减少对数据字典的增用,当分配或回收block是没有回滚数据,同时也没有碎片压缩问题。另一种是字典管理(dictionary),不推荐。上述的几种表空间中,Undo Tablespace必须是本地管理、Temp表空间推荐使用本地管理。

Creating Tablespaces
创建表空间
 
create tablespace userdata
    datafile ‘/u01/oradata/userdata01.dbf’ size 100M
    autoextend on next 5M maxsize 200M;
创建表空间的语法
   CREATE TABLESPACEtablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
对这个语法要详细解释一下,tablespace是oracle 数据库逻辑结构和物理结构的结合点,非常重要。
DATAFILE 给出组成表空间的数据文件。
MINIMUM EXTENT
        保证每一个在表空间中使用的扩展的大小是一个整数的倍数。单位为K 或者 M。
LOGGING/NOLOGGING
        标明默认情况下所有的在表空间中的表、索引、分区将所有的更改写到重做日志,LOGGING是默认的参数。NOLOGGING 只是用在一些DML和DDL语句比如直接装载。
DEFAULT   
        标明所有对象的默认的存储参数。
PERMANENT
        标明表空间可以用于存储永久对象。
TEMPORARY
        标明表空间仅用于存放临时对象,比如用于ORDER BY子句产生的隐式排序,EXTENT_MANAGEMENT_CLAUSE 标明表空间如何管理 EXTENT。
 
datafile_clause :== filename
[SIZE integer[K|M] [REUSE] | REUSE ] [ autoextend_clause ]
where:filenameis the name of a data file in the tablespace
SIZEspecifies the size of the file. UseKorMto
specify the size in kilobytes or megabytes.
REUSEallows the Oracle server to reuse an existing file
autoextend_clauseenables or disables the automatic extension of
the data file. This clause is discussed in a
subsequent section of this lesson.
See Also:Oracle9i SQL ReferenceandOracle9i Conceptsfor additional information.
 
Space Management in Tablespaces
表空间的空间管理
 
本地管理的表空间
    空闲的扩展记录在位图中(bitmap)
    每一个bit的对应一个或者一组数据块
    bit的值标明是空闲还是使用了的数据块
   
字典管理的表空间
    默认的方式
    空闲的扩展记录在数据字典表中
 
Locally Managed Tablespaces
本地管理的表空间
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 256K;
 
可以减少数据字典表的争夺
在空间分配和释放的时候没有回退产生
不需要回收空间
语法
   extent_management_clause :==
[ EXTENT MANAGEMENT
[ DICTIONARY | LOCAL
[ AUTOALLOCATE | UNIFORM. [SIZE integer[K|M]] ] ] ]
 
extent management子句可以用在不同的create命令中
除SYSTEM表空间外的永久表空间,临时表空间create temporary tablespace可以用extent management local。
Advantages of Locally Managed Tablespaces
本地管理的表空间的优势
  本地管理表空间避免了下述情况,字典管理表空间中在一个扩展中分配或者释放空间导致数据字典表在回退段中分配或者释放空间,从而减少了空间管理的操作。
因为本地管理的表空间不需要在数据字典表中记录空闲空间,从而减少了这些表的争用。
本地管理的扩展自动追踪临近的空闲空间,消除了合并空闲空间的需要。
本地管理的表空间中的扩展的大小可以自动由系统决定。或者,所有的本地管理的扩展都可以使用相同的大小。
扩展中位图的改变不会产生回退信息,因为他们不更新数据字典表(除非一些特殊的情况必然表空间限额信息)。
 
Dictionary Managed Tablespaces
字典管理的表空间
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE ( initial 1M NEXT 1M );
 
扩展在数据字典中管理
每个表空间中的段可以有不同的存储参数。
需要空间回收。
 
Changing the Storage Settings
改变存储设置
ALTER TABLESPACE userdata
MINIMUM EXTENT 2M;
 
ALTER TABLESPACE userdata
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MAXEXTENTS 999 );
注意:本地管理的表空间的存储参数不能修改。
 
Undo Tablespace
重做表空间
用于存储回退段
不能包含其它的对象
扩展都是本地管理的
只能在create tablespace语句中使用datafile和extent management子句。
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo101.dbf' SIZE 40M;
 
Temporary Tablespace
临时表空间
 
用于排序操作
不能包含任何永久对象
建议使用本地管理扩展
 
CREATE TEMPORARY TABLESPACE temp
TEMPFILE '/u01/oradata/temp01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 10M;
 
通过显式地为排序段指派临时表空间,你可以更有效的管理排序时需要的空间。临时表空间中不会有永久对象。
排序,或者临时对象均使用这些被共享于操作多个排序操作的段。临时表空间用于提高多重,大到不适合放置到内存中的排序。在特定临时表空间上创建的排序段在实例的第一个排序操作时创建。排序段通过分配扩展增大直到段的大小等于或者大于所有实例中的活动排序需要存储空间的大小。
CREATE TEMPORARY TABLESPACECommand
创建临时表空间命令
 
尽管alter / create tablespace … … temporary命令可以用来创建临时表空间。但是建议使用create temporary tablespace命令来做。
本地管理的临时表空间有临时数据文件,这些临时数据文件和普通的数据文件类似只是在以下几个方面有所区别:
1、          临时数据文件总是设置为nologging状态
2、          你不能将临时数据文件设置为只读
3、          你不可以重命名临时数据文件
4、          你不可以通过alter database命令来创建临时数据文件。
5、          临时数据文件对只读的数据库同样需要。
6、          介质恢复不恢复临时文件。
7、          backup controlfile命令不产生任何临时数据文件的信息。
8、          create controlfile命令不需要给出任何临时文件的信息。
为了优化临时表空间中排序的性能,设置uniform. size是sort_area_size参数的倍数。
 
Default Temporary Tablespace
默认临时表空间
 
你可以标明一个全数据库范围内默认的临时表空间,避免使用system表空间来用于存放临时数据。可以通过create database或者alter database命令来创建。当使用create database命令创建,默认的临时表空间是本地管理的。
 
当创建数据库时没有指明默认临时表空间,任何用户创建时没有使用temporary tablespace子句,那么system表空间被用为临时表空间。同时在system表空间被用为临时表空间时在alert_sid.log文件中产生一个警告。在数据库创建的同时创建临时表空间可以阻止这样的事情发生。
在数据库创建以后,临时表空间可以通过例如:
   alter database default temporary tablespace temp;来设置,一旦设置用户没有明确的标明使用临时表空间的都使用默认的临时表空间。
默认的临时表空间可以通过使用alter database default temporary tablespace命令来改变。当临时表空间改变的时候任何指派给默认表空间的用户将指派到新的默认表空间。
 
Restrictions on Default Temporary Tablespace
默认表空间上的限制
 
它不能删除直到有新的默认表空间可用。不能被offline。你不能将默认临时表空间改变为永久表空间。
 
Offline Status
离线状态
 
离线表空间不能再进行数据操作。一些表空间必须在线:
system
有活动的回退段的表空间
默认临时表空间
使表空间离线:
   alter tablespace userdata offline;
使表空间上线:
   alter tablespace userdata online;
使数据库离线的作用
使一个数据库的分区不可用,然而使数据库的其他部分可以正常的访问
作一个离线表空间备份(虽然一个表空间可以在上线使用的时候备份)
在数据库打开的情况下作一个表空间的恢复
在数据库打开的情况下移动数据文件。
在一个表空间离线的状态下,Oracle不在容许任何SQL语句的子句引用这个表空间中的对象。用户试图访问这个表空间的对象将会收到错误。
一个表空间离线、上线这些活动会被记录在数据字典和控制文件中。如果一个表空间离线的时候关闭数据库,这个表空间在数据库mount和open的时候仍然离线。
 
ALTER TABLESPACE tablespace
{ONLINE
|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER]}
where: NORMAL flushes all blocks in all data files in the tablespace out of the SGA. This is the default. You need not perform. media recovery on this tablespace before bringing it back online.Use the NORMAL clause whenever possible.
TEMPORARY performs a checkpoint for all online data files in the tablespace only. Any offline files may require media recovery.
IMMEDIATE does not ensure that tablespace files are available and does not perform. a checkpoint. You must perform. media recovery on the tablespace before bringing it back online.
FOR RECOVER takes tablespaces offline for tablespace point-in-time recovery.
 
Read-Only Tablespaces
只读表空间
ALTER TABLESPACE userdata READ ONLY;
表空间只能读操作,对象可以从表空间中删除,在可移动的介质上的表空间创建只读表空间
使表空间只读阻止相应表空间中数据文件的写操作。同样,数据文件可以放置在只读的介质上,如CD-ROM或者一次可写的设备(WORM)。只读表空间消除了须要备份大的,静态的数据库分区的需要。
在一个只写一次的设备上创建只读表空间。
1、ALTER TABLESPACE...READ ONLY.
2、 使用操作系统的命令把这个表空间的数据文件移到只读的设备上
3、 alter tablespace . . . rename datafile
 
alter tablespace   read only命令把表空间置为过渡只读阶段。在这个过渡阶段,没有写操作可以在这个表空间发生,除了现存的进程在以前修改了数据库的回退。在现存的进程提交或者回退以后,alter tablespace   read only命令完成,表空间置于只读状态。你可以在只读表空间中drop对象,比如表,索引,因为这些命令只影响数据字典。这是可能的是因为DROP命令之时更新数据字典,并不更新表空间中的物理文件。对于本地管理的表空间,删除的段变为临时段,阻止位图的更改。
把只读的表空间改为可写,所有在这个表空间中的数据文件必须是在线的。把表空间置为只读,导致这个表空间中的数据文件产生checkpoint。
 
Dropping Tablespaces
删除表空间
 
表空间从数据字典中删除
可选的,表空间内容从数据字典中删除
操作系统文件可以通过选项
and datafiles子句来删除:
   drop tablespace userdata
      including contents and datafiles;
 
 
DROP TABLESPACE tablespace
[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]
 
CASCADE CONSTRAINTS
从表空间外的表中删除指向被删除的表空间中表的主键和唯一键,参照完整性的约束。
 
注意点:
  不能够删除包含数据的表空间,在没有使用including contents选项的情况下。这个选项在表空间包含大量的对象的时候将产生大量的回退。
  在表空间删除后,它的数据不再在数据库中存在。
  表空间删除后,只是在相应数据库中的控制文件上数据文件的指针被删除掉。操作系统文件仍然存在并且要删除掉必须显式地使用相应的操作系统命令,除非and datafiles子句被使用。
  甚至表空间切换到只读,它仍然能被删除,包括其中的段。
  建议在删除表空间前使表空间离线,以保证没有进程进入这个表空间中的任何段。
  
Resizing a Tablespace
调整表空间大小
  
  增加数据文件
  改变数据文件的大小
     自动
     手动
 
Enabling Automatic Extension of Data Files
设置数据文件自动增长
  
  ALTER DATABASE DATAFILE
'/u01/oradata/userdata02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
 
数据文件创建后,下述的SQL语句可以用来设置自动增长数据文件:
   create database
   create tablespace    datafile
   alter database    add datafile
使用alter database命令更改数据文件来实现自动增长
   alter database datafile        [autoextend_clause]
 
autoextend_clause:== [ AUTOEXTEND { OFF|ON[NEXT integer[K|M]]
[MAXSIZE UNLIMITED | integer[K|M]] } ]
 
 
next 
    当更多的扩展分配给数据文件时标明磁盘空间大小
 
给已有的数据文件设置自动增长:
    alter database [database]
        datafile ‘filename’[,’filename’] … … autoextend_clause
 
Changing the Size of Data Files Manually
手动设置数据文件大小
 
   ALTER DATABASE
DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;
 
如果数据库对象的存储空间大于标明的大小,那么数据文件大小仅仅收缩至最后一个对象的最后一个数据块。
 
Adding Data Files to a Tablespace
给表空间增加数据文件
  
   ALTER TABLESPACE app_data
ADD DATAFILE '/u01/oradata/userdata03.dbf'
SIZE 200M;
 
Moving Data Files:ALTER TABLESPACE
移动数据文件:alter tablespace
表空间必须离线
目标数据文件必须存在
 
  ALTER TABLESPACE userdata
RENAME
DATAFILE '/u01/oradata/userdata01.dbf'
TO '/u01/oradata/userdata02.dbf';
 
Alter tablespace命令只能用于非system表空间并且不含有活动的回退或者临时段的表空间。
  重命名数据文件的步骤是
1、          将表空间离线
2、          用OS命令移动或者复制数据文件
3、          运行alter tablespace rename datafile命令
4、          把tablespace上线
5、          如果必要用操作系统命令将旧的文件删除
源文件的名字必须与存放在控制文件中的名字一致。
 
 
Moving Data Files:ALTER DATABASE
通过alter database移动数据文件
数据库必须已经挂载
目标文件必须存在
ALTER DATABASE RENAME
FILE '/u01/oradata/system01.dbf'
TO '/u03/oradata/system01.dbf';
 
Alter database 命令适用于移动所有类型的数据文件
 
ALTER DATABASE [database]
RENAME FILE 'filename'[, 'filename']...
TO 'filename'[, 'filename']...
移动步骤
1、关闭数据库
2、用操作系统命令移动数据文件
3、挂载数据库
4、运行alter database rename file命令
5、打开数据库
 
Configuring Oracle Managed Files for Tablespace Creation
为数据库创建配置Oracle管理文件
 
用OMF创建表空间需要配置一个初始化参数
DB_CREATE_FILE_DEST:设置给出默认的数据文件位置
这个初始化参数可以用初始化文件或者动态的用alter system 命令设置:
ALTER SYSTEM SET
db_create_file_dest = '/u01/oradata/db01';
 
 
 
Creating Tablespaces with OMF
用OMF创建表空间
OMF配置后,create tablespace 语句中 datafile子句可以不需要
   CREATE TABLESPACE apps2_data DATAFILE SIZE 20M;
数据文件创建到db_create_file_dest参数指定的文件系统的位置。
默认情况下文件大小为100M并且设置为自动扩展,没有大小限制。
当表空间删除的时候,所有的文件在OS级别删除。
OMF可以增加到现存的表空间。
 
    DB_CREATE_ONLINE_LOG_DEST_n 需要设置以防止日志文件和控制文件和数据文件放置在一起。
 
Obtaining Tablespace Information
获取表空间信息
表空间的信息
        dba_talbespaces
        v$tablespace
数据文件信息
        dba_data_files
        v$datafile
临时文件信息
        dba_temp_files
        v$tempfile
 
本章中你应该掌握如何:
    使用表空间来分隔数据
    调整表空间的大小通过:
       增加数据文件
       扩张数据文件
    使用本地管理的表空间
    使用临时表空间
    使用ORALCE 管理文件
来自:http://www.**.com/5187-6763066.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13387766/viewspace-468259/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle碎片整理
请登录后发表评论 登录
全部评论

注册时间:2008-06-06

  • 博文量
    128
  • 访问量
    304330