oracle的逻辑结构

oracle的逻辑组件包括:数据库database->表空间tablespace->段segment->区extent->数据块block
(1) 表空间 是数据库中最大的逻辑单位,一个oracle数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联,表空间的大小等于构成这个表空间的所有数据文件的大小之和。
通过DBCA创建的oracle10g/oracle11g数据库默认包含如下表空间SYSTEM,SYSAUX,TEMP,UNDOTBS1,USERS,EXAMPLE。
SYSTEM 是系统表空间,存放系统的最基本的信息,如果SYSTEM表空间坏掉,oracle将无法启动。
SYSAUX 是从10g中引入的,作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷。以前其他表空间中的一些组件,现在放到SYSAUX表空间中了。
TEMP 是临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在oracle实例中的临时表空间中进行。
UNDOTBS1 是撤销表空间,是UNDO类型的表空间,保存用户进行DML操作中,修改前的数据。
USERS 是数据库默认的永久表空间。
EXAMPLE 是数据库测试用例所涉及的表的所属表空间。
(2) 是构成表空间的逻辑结构,段是由一组区组成的。
按照段所存储数据的特征,将段分为若干种类型,主要有数据段,索引段,回退段和临时段。
通过 dba_segments 查看数据库中的段:
SYS@orcl 06-SEP-14>col segment_name for a15
SYS@orcl 06-SEP-14>col tablespace_name for a15
SYS@orcl 06-SEP-14>set pause on
SYS@orcl 06-SEP-14>select segment_name,segment_type,tablespace_name
  2  from dba_segments;


SEGMENT_NAME    SEGMENT_TYPE       TABLESPACE_NAME
--------------- ------------------ ---------------
CON$            TABLE              SYSTEM
UNDO$           TABLE              SYSTEM
PROXY_ROLE_DATA TABLE              SYSTEM
$
FILE$           TABLE              SYSTEM
PROXY_DATA$     TABLE              SYSTEM
BOOTSTRAP$      TABLE              SYSTEM
OBJ$            TABLE              SYSTEM
OBJERROR$       TABLE              SYSTEM
OBJAUTH$        TABLE              SYSTEM


(3) 是oracle数据库分配数据的单位,区为段分配空间,它由连续的数据块组成。
当段中的所有空间已完全使用时,系统自动为该段分配一个新区,区不能跨越数据文件存在,只能存在一个数据文件中。
可以通过dba_extents来查看:
SYS@orcl 06-SEP-14>select segment_name,tablespace_name,blocks from dba_extents ;
SEGMENT_NAME    TABLESPACE_NAME     BLOCKS
--------------- --------------- ----------
SYSTEM          SYSTEM                   8
SYSTEM          SYSTEM                   8
SYSTEM          SYSTEM                   8
SYSTEM          SYSTEM                   8
SYSTEM          SYSTEM                   8
SYSTEM          SYSTEM                   8
SYS_LOB00000523 SYSTEM                   8
23C00005$$
SYS_LOB00000135 SYSTEM                   8
07C00003$$


(4) 数据块 是oracle服务器所能读取或写入的最小存储单位。
oracle以数据块为单位管理数据文件的存储空间,oracle的数据块由操作体统的数据块组成。
查看当前数据库中的数据块大小:
SYS@orcl 06-SEP-14>show parameter db_block_size


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192


下面我们讲讲创建表空间的命令:
当我们创建表空间的时候,需要指定datafile来指明这个表空间所对应的数据文件,如下:
create tablespace data01 datafile 
'/u01/app/datafile/data01a.dbf' size 10m,
'/u01/app/datafile/data01b.dbf' size 10m;
数据文件默认最多包含4194304个数据块(2的22次方),数据块默认为8192(8k),那么数据文件最大即为4194304*8k=32GB。
那么如果我们需要创建一个大小大于32GB的表空间该怎么办呢?
这里存在一个特殊语法,我们可以使用create bigfile tablespace命令来创建,但是需要注意的是,指定bigfile的表空间只能包含一个数据文件,否则将会出现如下错误:
SYS@orcl 06-SEP-14> create bigfile tablespace data01
  2  datafile '/u01/app/datafile/data01a.dbf' size 33g,
  3  '/u01/app/datafile/data01b.dbf' size 33g;
create bigfile tablespace data01
*
ERROR at line 1:
ORA-32774: more than one file was specified for bigfile tablespace DATA
正确写法如下:
SYS@orcl 06-SEP-14>create bigfile tablespace data01
  2  datafile '/u01/app/datafile/data01.dbf' size 33g;


Tablespace created.


查看表空间中有哪些是属于bigfile的:
SYS@orcl 06-SEP-14> select tablespace_name,bigfile from dba_tablespaces ;


TABLESPACE_NAME      BIG
-------------------- ---
SYSTEM                       NO
SYSAUX                       NO
UNDOTBS1                  NO
TEMP                           NO
USERS                         NO
EXAMPLE                     NO
TEST                           NO
HH                              NO
GOODS                       NO 
DATA01                     YES


10 rows selected.


默认的表空间为smallfile类型,bigfile的表空间只能包含一个数据文件,该数据文件可以
包含4294967296(2的32次方)个数据块。


下面说说创建表空间的详细语句:
create tablespace xxx                            表空间名称
datafile '/xxx/../xxx.dbf'                         数据文件路径和名称
size xxxm                                            数据文件初始大小
autoextend on                                      数据文件是否自动增长
next 10m                                             数据文件每次自动增长大小
maxsize 2048m                                    数据文件最大文件大小
可以指定unlimited(小文件类型数据文件8k块大小为32GB)
extent management local                       表空间区分配采用本地表空间管理
uniform size 128k                                 设置区分配的大小统一为128k
如果不指定大小,则为1M,也可以设置为autoallocate,则设置extent大小由
系统自动分配
segment space management auto            设置段中BLOCK的空间管理为auto


查看数据文件自动扩展特性和最大扩展大小:
SYS@orcl 06-SEP-14>col file_name for a40
SYS@orcl 06-SEP-14> select file_name,autoextensible,maxbytes/1024/1024/1024
  2  from dba_data_files;


FILE_NAME                                AUT MAXBYTES/1024/1024/1024
---------------------------------------- --- -----------------------
/datafile/users01.dbf                    YES              31.9999847
/datafile/undotbs01.dbf                YES              31.9999847
/datafile/sysaux01.dbf                  YES              31.9999847
/datafile/system01.dbf                  YES              31.9999847
/datafile/example01.dbf                YES              31.9999847
/u01/app/datafile/test01.dbf          YES              31.9999847
/datafile/hh01.dbf                        YES              31.9999847
/u01/app/datafile/goods01.dbf      YES              31.9999847


8 rows selected.


下面讲讲表空间的管理方式:
表空间的管理方式 有两种:
区的管理 (extent),区的管理主要用于表空间上区的分配和回收,区的管理分为两种方式:
a)数据字典空间管理dictionary managed tablespace
通过管理两个主要的数据字典表:UET$(Used EXtents)和FET$(Free EXtents)来实现区的分配和管理,在oracle9i以后已淘汰。
缺点:并发访问争用(大量访问UET$,FET$),产生大量的redo undo,空间碎片多。
b)本地表空间管理local managed tablespace 
在每个数据文件头部加入 位图 区域,通过位图的值(0或1)来实现区的分配和管理。
extent management local(9i以后默认方式)
具体空间分配方式:
1.autoallocate                      allocation_type=system
2.uniform                            allocation_type=uniform
创建表空间不指定区管理方式,默认为本地管理,空间分配选择system。
可以用以下命令查看表空间的区管理方式以及空间分配方式:
SYS@orcl 06-SEP-14>col tablespace_name for a20
SYS@orcl 06-SEP-14> select tablespace_name,extent_management,allocation_type 
  2  from dba_tablespaces;


TABLESPACE_NAME      EXTENT_MAN ALLOCATIO
-------------------- ---------- ---------
SYSTEM                        LOCAL      SYSTEM
SYSAUX                        LOCAL      SYSTEM
UNDOTBS1                   LOCAL      SYSTEM
TEMP                           LOCAL      UNIFORM
USERS                         LOCAL      SYSTEM
EXAMPLE                     LOCAL      SYSTEM
TEST                           LOCAL      SYSTEM
HH                              LOCAL      SYSTEM
GOODS                       LOCAL      SYSTEM


9 rows selected.


下面讲讲段的管理sgement,段的管理主要用于段中国数据块的分配和回收,段中块的管理方式有两种:
MSSM(Manual Segment Space Management)           不推荐使用
ASSM(Auto System Space Management)                 默认值


MSSM 通过在段的段头部分分配自由列表freelist来管理block
通过两个参数pctfree pctused来管理block如何进出freelist
pctfree 值表示预留多少block空间用于更新(百分比)
pctused 值表示低于这个值(百分比),block会重新加入到freelist上,可以允许插入数据插入操作。


ASSM 通过在每个段的段头部分分配 位图bitmap 来管理block,通过位图中的值来判断数据块是否可用,
不需要freelist,不需要pctused。
ASSM能有效提高段的管理效率。


可用如下命令查看段空间的管理方式:
SYS@orcl 06-SEP-14> select tablespace_name,segment_space_management
  2  from dba_tablespaces;


TABLESPACE_NAME      SEGMEN
-------------------- ------
SYSTEM                      MANUAL
SYSAUX                      AUTO
UNDOTBS1                  MANUAL
TEMP                          MANUAL
USERS                        AUTO
EXAMPLE                    AUTO
TEST                          AUTO
HH                             AUTO
GOODS                      AUTO


9 rows selected.


当我们删除表空间的时候可以使用 including contents and datafiles 来同时删除表空间上的表和数据文件。
drop tablespace data01 including contents and datafiles;


可以为表空间增加数据文件:
SYS@orcl 06-SEP-14>alter tablespace data01
  2  add  datafile '/u01/app/datafile/data01b.dbf' size 10m;


Tablespace altered.


查看数据文件的编号和文件名称:
SYS@orcl 06-SEP-14>select file#,name from v$datafile;




         FILE# NAME
---------- ----------------------------------------
         1 /datafile/system01.dbf
         2 /datafile/sysaux01.dbf
         3 /datafile/undotbs01.dbf
         4 /datafile/users01.dbf
         5 /datafile/example01.dbf
         6 /u01/app/datafile/test01.dbf
         7 /datafile/hh01.dbf
         8 /u01/app/datafile/goods01.dbf
         9 /u01/app/datafile/data01a.dbf
        10 /u01/app/datafile/data01b.dbf


10 rows selected.


修改数据文件的大小,可以指定数据文件的名称,也可以指定数据文件的编号
可以扩大文件,也可以缩小文件
扩大文件不能超过单一文件大小限制,缩小文件不能小于当前使用空间。




SYS@orcl 06-SEP-14>alter database 
  2  datafile '/u01/app/datafile/data01b.dbf' resize 20m;


Database altered.


SYS@orcl 06-SEP-14>alter database datafile 10 resize 20m;


Database altered.
SYS@orcl 06-SEP-14>select file_id,file_name,bytes/1024/1024||'MB'
  2  from dba_data_files;




   FILE_ID FILE_NAME                                BYTES/1024/1024||'MB'
---------- ---------------------------------------- ------------------------------------------
         4 /datafile/users01.dbf                    5MB
         3 /datafile/undotbs01.dbf                  60MB
         2 /datafile/sysaux01.dbf                   540MB
         1 /datafile/system01.dbf                   690MB
         5 /datafile/example01.dbf                  100MB
         6 /u01/app/datafile/test01.dbf             100MB
         7 /datafile/hh01.dbf                       10MB
         8 /u01/app/datafile/goods01.dbf            50MB
         9 /u01/app/datafile/data01a.dbf            10MB
        10 /u01/app/datafile/data01b.dbf            20MB


10 rows selected.


现在我们创建了一个用户data01,其表空间是data01,以data01登录,创建一张表tab1:
DATA01@orcl 06-SEP-14>create table tab1(id int) tablespace data01;


Table created.


然后我们为这张表分配区:
DATA01@orcl 06-SEP-14> alter table tab1 allocate extent
  2  (size 1m datafile '/u01/app/datafile/data01a.dbf');


Table altered.


DATA01@orcl 06-SEP-14>alter table tab1 allocate extent
  2  (size 1m datafile '/u01/app/datafile/data01b.dbf');


Table altered.


可以用如下命令查看表tab1的区具体分配在哪些数据文件上:
SYS@orcl 06-SEP-14> select distinct file_id,name from dba_extents e,v$datafile d
  2  where e.owner='DATA01' and e.segment_name='TAB1'
  3  and e.file_id=d.file#;




   FILE_ID NAME
---------- ----------------------------------------
         9 /u01/app/datafile/data01a.dbf
        10 /u01/app/datafile/data01b.dbf
















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

转载于:http://blog.itpub.net/29800581/viewspace-1266241/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值