当前位置:数据库 > Oracle >>

Oracle存储管理详解

Oracle存储管理详解

  从逻辑上讲,数据存储在段(通常是表)中;从物理上讲,数据存储在数据文件(datafile)中。表空间(tablespace)实体是二者的象,一个表空间可能包含多个段,并由多个数据文件组成。段和数据文件没有直接关系。数据文件可以作为文件系统中的文件存在,从10 g版本开始,也可以作为自动存储管理(Automatic Storage  Management,ASM)设备上的文件存在。
  www.zzzyk.com  
一、Oracle数据存储模型

  将逻辑存储与物理存储分开是关系数据库范例的必要部分。关系数据库范例表明:编程人员只处理逻辑结构,而让数据库去管理到物理结构的映射。这意味着,可以重新组织物理存储,也可以将整个数据库移动到完全不同的硬件和操作系统上,而应用程序意识不到任何更改。
  如下图展示Oracle存储模型,逻辑结构在左,物理结构在右。
  www.zzzyk.com  


1、Oracle数据库逻辑结构
 (1)DATABASE:一个数据库可划分为多个称为表空间的逻辑存储单元。

 (2)TABLESPACE:只能属一个数据库,包括一个或多个文件。

 (3)SEGMENT:存在于表空间中,包含一个或多个区。
 包括:表段、表分区段、索引段、索引分区段、临时段、撤销段、BLOB、CLOB
  高水位
    PCTFREE和PCTUSED
  行迁移和行链接
  INITRANS和MAXTRANS

 (4)EXTENT:由相邻的数据块的组成,这意味着每个区只能存在于一个数据文件中。

 (5)BLOCK:是数据库中最小的I/O单元,db_block_size
 

2、Oracle数据库物理结构 
 (1)、OS文件
  A、仅属于一个表空间
  B、是构成表空间的基础文件

 (2)、OS块
  A、tune2fs -l /dev/sda1
  B、扇区:512字节 操作系统一次IO的大小

3、表空间、表、区、块及文件号的关系由视图dba_extents展显出来
gyj@OCM> create tablespace tp1 datafile'/u01/app/oracle/oradata/ocm/tp1.dbf' size 100M,'/u01/app/oracle/oradata/ocm/tp2.dbf' size 100M EXTENT MANAGEMENT LOCAL UNIFORMSIZE  1M;
gyj@OCM> alter user gyj defaulttablespace tp1;
gyj@OCM> conn gyj/gyj
gyj@OCM> create table t10 (id int,namevarchar2(100));
gyj@OCM> begin
 2  for i in 1 .. 200000 loop
 3  insert into t10values(i,'gyj'||i);
 4  commit;
 5  end loop;
 6  end;
 7  /
gyj@OCM> col tablespace_name for a10
gyj@OCM> col segment_name for a10
gyj@OCM> selecttablespace_name,segment_name,extent_id,file_id,block_id,bytes,blocks fromdba_extents where segment_name='T10' order by extent_id;

TABLESPACE SEGMENT_NA  EXTENT_ID FILE_ID  BLOCK_ID  BYTES BLOCKS
---------- ---------- ---------- -------------------- ---------- ----------
TP1 T10  0  6  128 1048576  128
TP1 T10  1  7  128 1048576  128
TP1 T10  2  6  256 1048576  128
TP1 T10  3  7  256 1048576  128
TP1 T10  4 6 384  1048576  128

二、表空间类型
1、普通表空间:系统表空间与非系统表空间

2、临时表空间

3、回滚表空间

三、创建空间
 CREATE TABLESPACE TP25 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M,
 '/u01/app/oracle/oradata/ocp/tp2502.dbf' size50M
 AUTOEXTEND ON next 10M MAXSIZE 2G,
 '/u01/app/oracle/oradata/ocp/tp2503.dbf' size50M
--EXTENT MANAGEMENT DICTIONARY
 AUTOEXTEND ON next 10M MAXSIZE 2G
 EXTENT MANAGEMENT LOCAL UNIFORM SIZE  2M
 SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE TP21 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M
EXTENT MANAGEMENT DICTIONARY;

create tablespace tp22 datafile'/u01/app/oracle/oradata/ocp/tp22_1.dbf' size10M,'/u01/app/oracle/oradata/ocp/tp22_2.dbf' size 10M EXTENT MANAGEMENT LOCAL;

四、删除表空间
1.删除没有对象的表空间
 drop tablespace tp1;

2、删除有对象的表空间,但不删除物理文件
 drop tablespace tp1 including contents;

3、删除有对象的表空间和删除物理文件
 drop tablespace tp20 including contents and datafiles cascadeconstraints;

五、管理表空间中的空间
1、区管理方式(8i的默认空间管理是DMT,9I的默认空间管理是LMT)
  (1)数据字典管理
   SYS.UET$    ――具有描述已用的区的行
    SYS.FET$    ――具有描述可用区的行

  (2)本地管理
   a.统一
   b.自动
    alter system dump datafile 5 block 2;
    alter system dump datafile 5 block 3;

   (3)本地管理表空间的优势
    a.不需要执行递归空间管理操作
    b.不记录数据字典表中的的空闲空间,可以减少争用
    c.可自动跟踪相邻的空闲空间无需合并空闲空间
    d.系统自动确定本地管理区的大小
    e.对区位图进行更改不会生成还原信息,国为这些更改并不更新数据字典中的表(表空间限额信息等特殊情况除外)

  (4)可以使用下面的PL/SQL程序,将任何字典管理的表空间转换成为本地管理:
     Executedbms_space_admin.tablespace_migrage_to_local(‘tablespacename’);

2、段管理方式
  (1)SSM:自动管理方式(BMB段:BitmapManagedSegments),使用位图管理段中的数据块空闲空间,大并发量。

  (2)MSSM:手工管理方式(FreeList),使用空闲列表来管理段中的数据块空闲空间,串行操作容易引起段头的争用。
 --dump段头信息

 (3)OMF(OracleManaged Files)管理
  ①设置参数
   DB_CREATE_FILE_DEST
   DB_CREATE_ONLINE_LOG_DEST_n
   DB_RECOVERY_FILE_DEST
  ②创建表空间
   ALTERSYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
   CREATETABLESPACE tbs_1;

六、临时表空间
1、数据库默认的临时表空间
sys@OCM> select * fromdatabase_properties where property_name='DEFAULT_TEMP_TABLESPACE';
sys@OCM> alter databasedefault temporary tablespace temp1;

2、创建临时表空间或临时表空间组
(1)创建临时表空间
 CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10m;

(2)创建临时表空间组
 CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10M TABLESPACE GROUP group1;
 CREATE TEMPORARY TABLESPACE temp2 TEMPFILE'/u01/app/oracle/oradata/ocp/temp2.dbf' SIZE 10M TABLESPACE GROUP group1;

3、收缩临时表空间和临时文件
(1)方法一收缩临时表空间
  gyj@OCM>  alter tablespace TEMP shrink space keep 10M;

 Tablespace altered.

(2)方法三收缩临时表空间的某个文件
 sys@OCM>alter tablespace temp shrink tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' keep 10M;

Tablespace altered.

(3)方法三重新定义临时文件的大小
 gyj@OCM> alter database tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' resize 100M;

Database altered. 

3、删除临时表空间
(1)查临时表空间
sys@OCM> selecttablespace_name,file_name,bytes/1024/1024 file_size,autoextensible fromdba_temp_files;

TABLESPACE_NAME  FILE_NAME FILE_SIZE AUT
-------------------------------------------------------------------------------- ---------- ---
TEMP  /u01/app/oracle/oradata/ocm/temp01.dbf  10.9921875 YES

(2)彻底删除临时表空间 
sys@OCM> drop tablespace temp includingcontents and datafiles cascade constraints;

(3)删除临时表空间某个文件
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,