分类: 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视图记录了数据库的表空间信息,表空间时数据库的一个逻辑概念,一个表空间可以由多个物理的数据文件组成。这个视图记录了表空间的数据块的大小,segment,Extent管理方式等重要信息。
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 ‘
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的第417个block和第377个block。
417上存放的正是1.417号对象,通过1.417对象进而找到bootstrap$对象,也就是block377,找到了block377。Oracle进而读取其内容,在内存中创建了这个对象,再接下来,oracle通过递归查询,从bootstrap$中获取其他对象的创建语句进而创建这个对象。在读取了1.417号对象之前的所有对象后,oracle将可以正常打开数据库。
在oracle10g中,oracle将root 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.9ROWID与RDBA的转换
对于大文件表空间其相对文件号,那么文件号和相对文件号有什么区别呢?
5.9.1Oracle的ROWID及数据库限制
众所周知,数据存放在数据文件中,因为其存储,数据的一系列属性就随之确定,这些属性包括记录存储所在的数据文件(file#)、所属的数据库对象(obj#)、所在的数据块号(block_no#)以及表中的行号等,将这些属性合并起来就构成了ORACLE的ROWID。
Orace的ROWID又可以分为两种:物理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号,所以对大文件表空间,现在最大能够容纳4G个block。如果block_size为32k,大文件表空间最大容易可以达到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_n和DB_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上的竞争。
直到10g的ASM引入之后,OMF的作用进一步体现,在ASM下,oracle结果了以前有操作系统负责的存储管理,现在可以将存储分为不同的磁盘组分配给ASM使用,ASM负责在底层进行I/O的均衡、负责的分担、存储的优化,至此OMF可以将放心的使用。
5.11ASM自动存储管理
5.11.1ASM实例
ASM实例是10g新增的实例类型,INSTANCE_TYPE是随之新增的一个初始化参数,这个参数有2个可选项:RDBMS和ASM,其中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路镜像,需要3个failure groups。
n
Normal:正常冗余,通过ASM实现2路镜像,需要两个failure groups。
n
External:外部冗余,也就是通过ASM之外的技术实现冗余,oracle不做镜像处理。
通常都是通过外部手段实现磁盘冗余(通过存储划分Raid5、Raid10等)。
回顾一下之前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