Chinaunix首页 | 论坛 | 博客
  • 博客访问: 205959
  • 博文数量: 75
  • 博客积分: 2049
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-08 12:37
文章分类

全部博文(75)

文章存档

2011年(1)

2010年(9)

2009年(65)

我的朋友

分类: LINUX

2009-05-18 09:06:44

表空间和数据文件

5.1表空间的创建

n         创建表空间

SQL> create tablespace eygle

Datafile ‘/data2/ora10g/oradata/eygle/eygle01.dbf’

Size 100M autoextend on next 10m maxsize 2048

Extent management local uniform size 128k

Segment space management auto

/

创建之后的表空间属性可以通过dba_tablespaces视图来查询得到。

n         为应用创建用户

创建用户,此时可以同时为用户指定缺省的永久表空间和临时表空间:

SQL> create user eygle  identified by eyglee

Default tablespace eygle

Temporary tablespace temp;

创建用户的相关信息可以通过dba_users视图查询得到。

n         进行相应的权限的授予

SQL> grant connect,resource to eygle;

SQL> revoke unlimited tablespace from eygle;

SQL> alter user eygle quota unlimited on eygle;

5.2表空间管理技术

Oracle主要的空间管理方式有两种,一种时8i以前的字典管理表空间(DMT)一种就是8i以后的本地管理表空间(LMT)技术。由于区间(Extent)是oracle创建对象时最新分配单元,所以表空间的管理实际上就是针对区间的管理

5.2.1字典管理表空间

5.2.2本地管理表空间

本地化管理的表空间的主要创建语法如下:

CREATE TABLESPACE tablespace_name

DATAFILE ‘datafile_path_name’

[EXTENT MANAGEMENT { LOCAL

{AUTOALLOCATE | UNIFORM [SIZE_INTETER [K|M]]}]

其中关键字EXTENT MANAGEMENT  LOCAL 指定这是一个本地化管理的表空间。

需要注意的是,在创建本地管理表空间时,还可以选择更具体的空间分配方式:是选择自动分配(AUTOALLOCATE)还是同一尺寸(UNIFORM)。若为自动分配,则表明让oracle来决定区块的使用方法,缺省地oracle会安装递增算法来分配空间;如果选择同一尺寸,则还可以详细指定每个区间的大小。

如果不指定uniform size 的大小,oracle默认为每个区分配1MB;

这里介绍一个重要视图DAB_EXTENTS:

这个视图记录了对象分配的区间,通过查询这个视图可以看到哪些对象分配了多少空间,以及区间具体位于的文件等信息。

 

5.3段空间管理技术

oracle数据库内部,对象空间是以段segment的形式存在和管理的,通过不同的段类型oracle将段区分开来,在oracle 9i中,主要的段类型有:

SQL> select distinct(segment_type) from dba_segments;

当一个段被创建时,区间extent就被分配,随着后续的不断使用,一个段的空间可以以区为单位不断扩展。

Oracle的段空间管理方式有两种,一种时手工段空间管理(MSSM),由于这种方式使用自由列表来管理段空间,所以也被称为自由列表管理方式FLM,另一种是9i带来的全新的自动段空间管理ASSM

5.3.1手工段空间管理

这个段空间管理在9i之前是通过手工段空间管理技术实现的,这种技术的具体实现方式是通过在段头分配自由列表来管理block的使用,简单一点,可以把自由列表想象成一个数据表,oracle依赖一系列的算法通过向自由列表中加入或移出block来实现段空间管理。

5.3.2自动段空间管理

9i中,oracle引入了自动端空间管理ASSM技术,在ASSM中,原有的freelist被位图取代,通过位图能够迅速有效地管理存储扩展和剩余区块,由此能够改善段存储管理的本质。

有了ASSM之后,oracle宣称显著提高了DML并非操作的性能,因为位图数组的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据oracle的测试结果,使用位图数组会显著地消除所有段头的竞争,还能获得超快的并发插入性能。

删除前面创建的测试表空间:

SQL>drop tablespace eygle including contents and datafiles;

重建创建一个ASSM管理的表空间:

SQL> CREATE TABLESPACE eygle

DATAFILE ‘/opt/oracle/oradata/eygle/eygle01.dbf’ SIZE 10M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K

SEGMENT SPACE MANAGEMENT AUTO

/

5.4ORACLE的存储结构

5.4.1表空间信息记录DBA_TABLESPACES

DBA_TABLESPACES视图记录了数据库的表空间信息,表空间时数据库的一个逻辑概念,一个表空间可以由多个物理的数据文件组成。这个视图记录了表空间的数据块的大小,segmentExtent管理方式等重要信息。

5.4.2数据文件信息记录(DBA_DATA_FILES

我们说DBA_TABLESPACES记录的时表空间的逻辑信息,而DBA_DATA_FILES视图则记录的时物理数据文件的信息,这些信息包括文件的名称,大小,所属表空间等信息。

5.4.3数据段信息(DBA_SEGMENTS

段时oracle中数据对象的存在形式,可以通过DBA_SEGMENTS查询数据库中段的信息,这些信息包括对象名称,类型,所属表空间,空间使用等信息。

高水位标记HWM。简单的说,HWM就是指在一个segment中已使用和未使用过的block的分界线,HWM之上的空间在格式化之前不能被使用;

如果经过评估HWM的问题已经影响到性能很存储,那么可以采用很多种措施来解决HWM的问题

n         MOVE对象

通过move操作移动对象,可以降低HWM,但是move之后,索引需要重建,而且move的过程会影响在线应用,所以这种方法使用有限。

n         导出导入与truncate结合

如果删除的是表中的所有记录,那么使用truncate可以降低HWM

n         RENAME+INSERT结合

n         在线重定义

n         Shrink

5.4.4区间信息(DBA_EXTENTS

DBA_EXTENTS视图记录了segment中区的分配情况,可以通过查询这个视图获得数据库中每个区的分配情况:

作为DBA经常会面对的一个问题是,调整数据文件的大小,通常调整文件大小的命令如下:

Alter database datafile ‘’ resize [size];

5.4.5度量信息(DBA_THRESHOLDS

oracle 10g中如何设置自动空间告警,对于不同度量的阀值,可以通过DBA_THRESHOLDS视图来查看

5.4.6突出告警信息(DBA_OUTSTANDING_ALERTS

Oracle 10g通过DBA_OUTSTANDING_ALERTS 视图记录了数据库活动警报信息,这些信息直到警告清除或复位才从这个视图消失。

5.4.7告警历史信息(DBA_ALERT_HISTORY

历史告警信息记录在DBA_OUTSTANDING_ALERTS中,可以通过这个视图查询数据库中曾经发生的告警情况。

5.5使用DB CONTROL进行空间管理

5.6SYSTEM表空间

5.6.1SYSTEM表空间及root dba

在系统表空间文件头存在一个重要的数据结果root dba。它仅在SYSTEM表空间的文件头存在,用于定位数据库引导的bootstrap$信息。

5.6.2oracle中独一无二的cache对象

Cache对象的名称来自于文件号和数据块号。这个对象在oracle数据库中的含义非同一般,在数据库启动的bootstrap过程中,这个对象之前的所有对象都需要用来bootstrap

5.6.3oracle数据库的引导

Oracle首先通过direct path read 方式从每个数据文件头读取了第一个block的信息,然后通过db file sequential read 的单块读方式分别读取了数据文件1的第417block和第377block

417上存放的正是1.417号对象,通过1.417对象进而找到bootstrap$对象,也就是block377,找到了block377Oracle进而读取其内容,在内存中创建了这个对象,再接下来,oracle通过递归查询,从bootstrap$中获取其他对象的创建语句进而创建这个对象。在读取了1.417号对象之前的所有对象后,oracle将可以正常打开数据库。

oracle10g中,oracleroot dba 直接指向了bootstrap$对象,从而消除了oracle数据库中这个唯一的cache对象。

5.7SYSAUX表空间

SYSAUX表空间是在10g开始被引入,用来做SYSTEM表空间的辅助表空间。

5.7.1SYSAUX表空间及其组件

V$SYSAUX_OCCUPANTS视图可以用来查看这些组件信息:

SYSAUX表空间作为SYSTEM的辅助表空间,具有如下限制:

n         不能删除

SQL> Drop tablespace SYSAUX including contents and datafile;

n         不能重命名

SQL> Alter tablespace SYSAUX rename to OPT_TBS;

n         不能置为read only

SQL> Alter tablespace SYSAUX read only

5.7.2SYSAUX空间组件的转移

如转换LOGMNER空间到USERS表空间

SQL> exec SYS.DBMS_LOGMNR_D.SET_TABLESPACE(‘USERS’)

5.7.3SYSAUX的作用和意义

5.8Bigfile Smallfile 表空间技术

10g开始,oracle 推出了大文件空间支持,相对地,也就有了小文件表空间。大文件表空间只能包含一个文件,但是文件最大可以达到4G个数据块大小。

5.9ROWIDRDBA的转换

对于大文件表空间其相对文件号,那么文件号和相对文件号有什么区别呢?

5.9.1OracleROWID及数据库限制

众所周知,数据存放在数据文件中,因为其存储,数据的一系列属性就随之确定,这些属性包括记录存储所在的数据文件(file#)、所属的数据库对象(obj#)、所在的数据块号(block_no#)以及表中的行号等,将这些属性合并起来就构成了ORACLEROWID

OraceROWID又可以分为两种:物理ROWID和逻辑ROWID。索引组织表使用逻辑ROWID,其他类型的表使用物理ROWID

5.9.2bigfile表空间的ROWID

Oracle 8i以来的ROWID格式为:

000000.FF.BBBBBB.RRR

Oracle 10g引入了bigfile表空间,大文件表空间可以容纳更多的数据块,这是因为ROWID算法发生了改变,由于大文件表空间只能包含一个文件,所以ROWID不再需要rfile#,大文件表空间的ROWID格式限制为:

00000.LLLLLL.RRR

其中L代表新的BLOCK号,现在有32位用于代表block号,所以对大文件表空间,现在最大能够容纳4Gblock。如果block_size32k,大文件表空间最大容易可以达到4G*32KB=128TB.

5.9.3使用dbms_rowid包获得ROWID的详细信息

5.10使用OMF管理数据文件

OMF特性可以将DBA从直接的操作系统交互中脱离出来,以前当DBA从数据库中删除一个表空间后,数据文件可能仍然在操作系统上存在,这样DBA可以就需要去操作系统上删除文件来删除文件来释放空间,这个手工操作非常危险,于是在9i中有了OMF

以下各类文件都可以使用OMF管理:

Permanent tablespaces , temporary tablespaces ,controlfile redo log file .archive log files ,flashback logs, block change tracking file ,RMAN backups.

使用OMF需要配置两个初始化参数:DB_CREATE_ONLINE_LOG_DEST_nDB_CREATE_FILE_DEST

n         DB_CREATE_ONLINE_LOG_DEST_n

这个参数定义默认联机重做日志和控制文件的文件系统目录位置,该目录必须是已经存在的目录,并且oracle必须对该目录有读写权限。在创建OMF形式的联机重做日志和控制文件时,如果没有给出具体文件路径,oracle将在此目录位置创建联机重做日志和控制文件。对于多路复用的联机重做日志和控制文件,n可以是从1-5的值

n         DB_CREATE_FILE_DEST

这个参数定义默认的文件系统目录位置,该目录必须是已经存在的目录,并且oracle必须对该目录具有读写权限。当定义了这个参数之后,oracle会将数据文件创建在这个目录当中,如果未定义DB_CREATE_ONLINE_LOG_DEST_n参数,联机重做日志和控制文件也用它作为默认的文件系统目录。

这两个参数都是动态参数,可以通过ALTER SESSION或者ALTER SYSTEM命令动态修改。数据库可以同时使用oracle管理的文件和非oracle管理的文件,两者可以并存。

SQL>alter system set db_create_file_dest=’/opt/oracle/oradata/’

可是在9i中,这个特性的使用并不广泛,因为一旦指定了db_create_file_dest,那么所有的数据文件将这个目录下创建,这就意味着基于I/O存储的优化被大大局限,如果规划不当则可能会导致I/O上的竞争。

直到10gASM引入之后,OMF的作用进一步体现,在ASM下,oracle结果了以前有操作系统负责的存储管理,现在可以将存储分为不同的磁盘组分配给ASM使用,ASM负责在底层进行I/O的均衡、负责的分担、存储的优化,至此OMF可以将放心的使用。

5.11ASM自动存储管理

5.11.1ASM实例

ASM实例是10g新增的实例类型,INSTANCE_TYPE是随之新增的一个初始化参数,这个参数有2个可选项:RDBMSASM,其中RDBMS代表的是数据库实例,而ASM则代表ASM实例,以下是10g ASM实例的输出:

SQL> show parameter instance_type

ASM实例的启动需要一个参数文件,这个参数文件的默认位置和数据库实例的参数文件位置相同,在$ORACLE_HOME/dbs目录下可以找到这个文件spfile+ASM.ora.

这个参数文件定义了实例类型、磁盘组名称等信息,通过这些信息,ASM实例可以加载磁盘组,完成磁盘管理的工作。

5.11.2ASM磁盘组

ASM可以被看成是建立在裸设备或块设备之上,为oracle数据文件创建的特别系统。ASM其实是oracle的磁盘管理器,在同一个主机上,ASM实例可以为多个数据库实例提供磁盘组。在linux上,oracle提供相应的工具进行磁盘划分和管理:

在创建磁盘组时冗余选项有以下3个可选项:

n         High:高度冗余,oracle可以通过ASM实现3路镜像,需要3failure groups

n         Normal:正常冗余,通过ASM实现2路镜像,需要两个failure groups

n         External:外部冗余,也就是通过ASM之外的技术实现冗余,oracle不做镜像处理。

通常都是通过外部手段实现磁盘冗余(通过存储划分Raid5Raid10等)。

回顾一下之前ASM的参数文件,其中有这样两个重要参数:

*.asm_diskgroups=’ORADG’

*.asm_diskstring=’ORCL:VOL*’

其中asm_diskstring参数用于定义实例启动时搜索可用的ASM磁盘的路径。

5.11.3手工创建ASM实例及磁盘组

5.11.4ASM磁盘组的动态扩展能力

5.11.5oracle 10gR2关于ASM的几个增强

5.11.6ASM的元数据

5.11.7通过EM管理ASM

阅读(1800) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~