一、什么是表空间(Tablespace)和数据文件(Data File

wKioL1Qld_fRjUMJAAJCX4YK9B8286.jpg

 

Data File是具体的物理文件,Linux系统上通过ls命令,Windows系统上使用dir命令可以查看得到,体积相应比较大;一个或多个Data File只属于一个Tablespace;用户的物理对象都存储在Data File里。

Tbalespace则是一个逻辑概念,一组(一个或多个)datafile组成一个tablespace;而一个或多个tablespace在同一时间只属于一个数据库;Tablespace能进一步划分为其他的逻辑单元,如segementextentblock

wKioL1QleAqjwNdmAAF3-S28ea4145.jpg

逻辑关系:

Database —(一对多)—>Tablespace —(一对多)—> Segment—(一对多)—>

Extent —(一对多)—>连续的Oracle data block

物理关系:

Data file —(一对多)—>操作系统的block

逻辑<>物理关系:

Tablespace —(一对多)—>Data file

Oracle data block —(幂的整数倍,一对多)—>操作系统的block

 

注:操作系统的block是个物理概念,比如一个block4k,它在内存中也占4页;而Oracledata block是个逻辑概念,它是OSblock的幂的整数倍,可以是4k8k16k等等。

 

wKioL1QleB2Qq5oQAAKDTH7jfhk666.jpg

 

Segment包括tableindex等等,它有一个或多个extent组成,它可以跨越多个datafile;而extent是由多个连续的block组成,它不可以跨多个datafileblock是数据库进行I/O传输的最小单元。

 

wKioL1QleDPykSX6AAHK60J0phw367.jpg

 

二、表空间的类型

 

wKiom1QleB3hb8ecAAHzFM6vU0Y161.jpg

 

Tablespace可以从用途的角度,划分为两种:

 A. SYSTEM Tablespace

1.数据字典存储在SYSTEMTablespace中;

2.SYSTEM undo segment 存储在SYSTEMTablespace中。

B. NON-SYSTEM Tablespace:是用户真正用来存储数据库的表空间。

 

更为科学的划分,是将tablespace划分为三种:

A.Permanent 永久表空间——即包括了SYSTEMTablespace,也包含了用户用来存储数据         NON-SYSTEMTablespace

B.Undo 表空间

C.Temporary 临时表空间

   Undo Temporary表空间都是用来管理数据库的,存储的是临时文件。

 

三、创建表空间

wKioL1QleFWAB8REAAIihbupDWY053.jpg

CREATE TABLESPACE这个命令可以用来创建Tablespace,具体的用法可以查看联机文档SQL LanguageReference

wKioL1QleGagtW41AAEZ5JWe__c344.jpg

 

10g以后,引入了BIGFILE这一类型,用来满足一些超大数据存储的需求,一个tablespace的体积最大可以支持128TB,但它需要操作系统的支持。

不同的Tablespace可以指定不同的block size,可以和databaseblock size 不一致。Tablespace中的数据发生了改变,通常会记录在online redo logfile中,指定logging_clause (开启或关闭),能够决定是否记录,从而提高性能。

 

 

/*======创建表空间的过程演示=====*/

 

=====查询当前的表空间====

SQL> select * from v$tablespace;

-- v$tablespace记录了该数据库中有哪些表

 

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 SYSAUX                         YES NO  YES
         2UNDOTBS1                       YESNO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES
         6EXAMPLE                        YESNO  YES
 
6 rows selected.

 

=====查询每个表空间中都有哪些文件=====

SQL> desc dba_data_files;

 

 Name                                     Null?    Type
 ------------------------------------------------- ----------------------------
 FILE_NAME                                         VARCHAR2(513)
 FILE_ID                                            NUMBER
 TABLESPACE_NAME                                   VARCHAR2(30)
 BYTES                                             NUMBER
 BLOCKS                                            NUMBER
 STATUS                                             VARCHAR2(9)
 RELATIVE_FNO                                       NUMBER
 AUTOEXTENSIBLE                                    VARCHAR2(3)
 MAXBYTES                                          NUMBER
 MAXBLOCKS                                          NUMBER
 INCREMENT_BY                                       NUMBER
 USER_BYTES                                         NUMBER
 USER_BLOCKS                                        NUMBER
 ONLINE_STATUS                                     VARCHAR2(7)

 

SQL> col file_name format a40;

SQL> select file_name, tablespace_name from dba_data_files;

 

FILE_NAME                                TABLESPACE_NAME
----------------------------------------------------------------------
/oracle/oradata/orcl/users01.dbf         USERS
/oracle/oradata/orcl/undotbs01.dbf       UNDOTBS1
/oracle/oradata/orcl/sysaux01.dbf        SYSAUX
/oracle/oradata/orcl/system01.dbf        SYSTEM
/oracle/oradata/orcl/example01.dbf       EXAMPLE
-- 可以看出,一个数据文件只属于一个表空间


 

========增加一个表空间==========

 

SQL> create tablespace mickey datafile

  2 '/oracle/oradata/orcl/mickey01.dbf' size 20M;

 -- 增加了一个名为mickey的表空间
Tablespace created.

====查看磁盘变化=======

[oracle@localhost ~]$ cd /oracle/oradata/orcl

[oracle@localhost orcl]$ ll

total 1641120
-rw-r-----. 1 oracle oinstall   9748480 Sep 10 10:12 control01.ctl
-rw-r-----. 1 oracle oinstall   9748480 Sep 10 10:12 control03.ctl
-rw-r-----. 1 oracle oinstall  20979712 Sep 10 10:11 mickey01.dbf
# 可以看到多了一个文件mickey01.dbf
-rw-r-----. 1 oracle oinstall   5251072 Sep 10 05:42 users01.dbf

 

=====查看数据库表空间信息=======

SQL> select * from v$tablespace; 

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 SYSAUX                         YES NO  YES
         2UNDOTBS1                        YES NO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES
         6EXAMPLE                         YES NO  YES
         7 MICKEY                         YES NO  YES
-- 新增了一个表空间MICKEY
 
7 rows selected.

 

SQL> select file_name, tablespace_name from dba_data_files;

 

FILE_NAME                                TABLESPACE_NAME
----------------------------------------------------------------------
/oracle/oradata/orcl/users01.dbf         USERS
/oracle/oradata/orcl/undotbs01.dbf       UNDOTBS1
/oracle/oradata/orcl/sysaux01.dbf        SYSAUX
/oracle/oradata/orcl/system01.dbf        SYSTEM
/oracle/oradata/orcl/example01.dbf       EXAMPLE
/oracle/oradata/orcl/mickey01.dbf        MICKEY
-- 新表空间及其对应的数据文件
 
6 rows selected.