【存储管理】表空间概念

oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。

表空间属性:一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;一个表空间包含多个数据文件,一个数据文件只能属于一个表空间


表这空间可以划分成更细的逻辑存储单元:

 从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个 区间(extent)组成,那么一个区间又由一组连续的数据块(data block组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。

  那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由oracle数据库操作系统的block 组成的。

Segment(段) :段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

Extent (区间)分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.


表空间根据对区间(extents的管理分为两种类型

1.词典管理表空间(Dictionary-managed tablespaces):在表空间里,有的区间被占用了,有的没被占用,这些数据是放在数据字典里的。当你对这个表空间进行分配或释放的时候,数据文件里相关的表就会做修改。

2.本地管理表空间locally managed tablespace):本地管理表空间不是在数据词典里存储表空间的,由自由区管理的表空间。用位图来自由的管理区间。一个区间对一个位,如果这个位是1表示已经被占用,0表示未被占用。


Undo  tablespace

  Undo 类型的表空间,当你对一张表或一条记录进行修改的时候,它会对修改之前的信息进行保存,这样可以保证数据的回滚。Undo 只包含undo类型的对象,不能包含任何其他对象,只适合于数据文件和区间管理。


Temporary  Tablespaces

   临时表空间,相当于一个临时的垃圾场。用于排序操作,比如你要做一次大数据量的查询,但在内存无法存储这么大量的数据,然后会在磁盘上建立一个临时的表空间用记存放这些数据。Oracle就会用这个临时表空间做排序,存储中间结果。

一个全局的临时表空间,可以由多个用户共享,谁需要谁使用。但它只能存放临时的数据,不能包含任何永久性对象。 建议用本地管理方式创建这个表空间。

删除表空间:

删除表空间,使用命令drop tablespace ‘表空间名’  但是有3个选项需要注意:
INCLUDING CONTENTS:指删除表空间中的segments;
INCLUDING CONTENTS AND DATAFILES:指删除segments和datafiles;
CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。


一、创建表空间:

  1  create tablespace test1
  2  datafile '/u01/app/oracle/oradata/PROD1/test101.dbf' size 10M
  3  autoextend on next 1M maxsize 2G
  4  extent management local uniform size 1M
  5  segment space management auto

二、更改表空间状态:
SYS@PROD1>alter tablespace test1 read only;

Tablespace altered.
SYS@PROD1>alter tablespace test1 read write;

Tablespace altered.

三、表空间重命名:
SYS@PROD1>alter tablespace test1 rename to sales;

Tablespace altered.

四、查询表空间信息:
SYS@PROD1>select tablespace_name,initial_extent/1024/1024 m,EXTENT_MANAGEMENT,ALLOCATION_TYPE,SEGMENT_SPACE_MANAGEMENT,status from dba_tablespaces where tablespace_name='TEST1';

TABLESPACE_NAME          M EXTENT_MAN ALLOCATIO SEGMEN STATUS
--------------- ---------- ---------- --------- ------ ---------
TEST1                    1 LOCAL      UNIFORM   AUTO   ONLINE

五、表空间的大小更改三种方式:
1、SYS@PROD1>alter tablespace sales   add datafile '/u01/app/oracle/oradata/PROD1/sales02.dbf' size 10M;

2、SYS@PROD1>alter database datafile '/u01/app/oracle/oradata/PROD1/test101.dbf' autoextend on maxsize 2G;

3、SYS@PROD1>alter database datafile '/u01/app/oracle/oradata/PROD1/test101.dbf' resize 50M;

——查看表空间信息:
SYS@PROD1>select tablespace_name,file_name,bytes/1024/1024 m from dba_data_files where tablespace_name='SALES';

TABLESPACE_NAME FILE_NAME                                          M
--------------- ------------------------------ --------------------------------------
SALES           /u01/app/oracle/oradata/PROD1/test101.dbf         50
       
六、脱机
SYS@PROD1>alter tablespace sales offline;

Tablespace altered.

SYS@PROD1>select tablespace_name,status from dba_tablespaces where tablespace_name like 'SALES';

TABLESPACE_NAME STATUS
--------------- ---------
SALES           OFFLINE

七、删除表空间
SYS@PROD1>create table sales_1 (id number)  tablespace sales;

Table created.

SYS@PROD1>select table_name,tablespace_name from dba_tables where tablespace_name='SALES';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ---------------
SALES_1                        SALES

SYS@PROD1>drop tablespace sales;
drop tablespace sales
*
ERROR at line 1:
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option
——有对象的时候删除要用如下语句:
drop tablespace sales INCLUDING CONTENTS and datafiles;

八:OMF机制(oracle manage file)
omf机制:在数据库中删除表空间后,体系自动删除对应操作系统层的物理文件;参数db_create_file_dest 设置OMF具体位置的。
SYS@PROD1>show parameter db_create

NAME                                              TYPE    VALUE
------------------------------------ ----- ------------------------------
db_create_file_dest                         strin    g
                                    
db_create_online_log_dest_1          strin    g
                                   
db_create_online_log_dest_2          strin    g
                                    
db_create_online_log_dest_3          strin    g
                                    
db_create_online_log_dest_4          strin    g
                                    
db_create_online_log_dest_5          strin     g
                                  
SYS@PROD1>alter system set db_create_file_dest='/u01/app/oracle/oradata/omf';

System altered.

SYS@PROD1>show parameter db_create

NAME                                         TYPE                 VALUE
------------------------------------ ----- ------------------------------
db_create_file_dest                  strin /u01/app/oracle/oradata/omf   g

——验证OMF机制::                                 
SYS@PROD1>create tablespace sales2;

Tablespace created.

SYS@PROD1>select tablespace_name,file_name from dba_data_files where tablespace_name='SALES2';

TABLESPACE_NAME                FILE_NAME
------------------------------------------------------------------------------------------------------------
SALES2                         /u01/app/oracle/oradata/omf/PROD1/datafile/o1_mf_sales2_cxpsm19c_.dbf

SYS@PROD1>drop tablespace sales2;

Tablespace dropped.

删除表空间之后再查看操作系统物理路径下没有表空间对应的数据文件了。


请使用浏览器的分享功能分享到微信等