ORACLE的数据存储.docx
- 文档编号:9362628
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:31.37KB
ORACLE的数据存储.docx
《ORACLE的数据存储.docx》由会员分享,可在线阅读,更多相关《ORACLE的数据存储.docx(25页珍藏版)》请在冰豆网上搜索。
ORACLE的数据存储
ORACLE的数据存储管理
一.序言
对于ORACLE系统而言,它的存储可以分为物理存储和逻辑存储。
物理存储的最小单位为DATABLOCK(数据块)。
ORACLE每一个模式对象都有一个逻辑存储,它就叫做段(SEGMENT),而它实际上也是由多个数据块构成,这是指段的物理构成,段在逻辑上是由多个范围(EXTENT)构成。
在上述三个概念之上,对于数据库的物理和逻辑构成还有两个更大的概念,它们就是表空间(TABLESPACE)和数据文件(DATAFILE)。
对于一个数据库实例(INSTANCE),它在物理上是由多个数据文件构成,在逻辑上是由多个表空间构成。
一个表空间至少拥有一个数据文件,而一个数据文件只能属于一个表空间。
二.基本概念
1.数据块
数据块(DB_BLOCK)是数据库中最小的、最基本的存储单元。
它们是数据库能分配给对象的最小的存储单元。
ORACLE数据块是ORACLE能从磁盘读或写的最小单元。
不要把ORACLE数据块和操作系统块混淆在一起。
操作系统块是操作系统能从磁盘读或写的最小单元。
数据块容量总是操作系统容量的整数倍。
否则会浪费I/O和空间。
当ORACLE决定对一张表进行全表扫描时,读取数据的量总是数据块容量的整数倍(为初始化参数:
db_的值与DB_BLOCK_SIZE的大小的乘积)。
2.范围
范围(EXTENT)是表空间中分配的相邻的数据块。
当ORACLE需要为对象分配空间时,总是把一些相邻的块当作一个范围来分配,避免每次都要为快速增长的表或索引分配块。
ORACLE为对象分配的范围的大小是可控的,因此应该将范围的大小设置的足够大,以便对象不需要经常进行扩展。
同时,范围是不可以跨数据文件的。
3.段
段(SEGMENT)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。
在ORACLE数据库中主要有四种类型的段:
数据段、索引段、回滚段和临时段。
•数据段;对于每一个非聚集的表有一数据段,表的所有数据存放在该段。
•索引段:
每一个索引有一索引段,存储索引数据。
•回滚段:
用于临时存储要撤消的信息。
•临时段:
当SQL语句产生的结果需要排序并且已经超出SORT_AREA_SIZE的大小时,ORACLE在表空间中建立临时段存储排序的数据。
ORACLE对所有段的空间分配,以范围为单位。
4.表空间
一个数据库划分成一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE),表空间可以将相关的逻辑结构组合在一起。
每一个ORACLE数据库包含一个名为SYSTEM的表空间,在数据库建立时自动建立。
在该表空间中包含有整个数据库的数据字典表。
表空间利用增加数据文件或修改现在数据文件的大小可扩大表空间,表空间的大小为组成该表空间的数据文件的大小的和。
5.数据文件
对于任何一个数据库实例而言,它都是由多个数据文件(DATAFILE)构成,它是存储数据的基础,是ORACLE系统的物理概念。
对于ORACLE系统而言,它的数据文件大体上可以由两种设备构成。
一是实实在在的操作系统上的一个文件,一是创建于在存储阵列上的RAWDEVICE。
无论是文件还是RAWDEVICE,它们同样都有如下限制和特性以及在它们之上的操作。
对于一个数据库实例而言,它所能拥有的最大数据文件的数目是由多方面的因素构成。
它们包括:
操作系统能够打开的最大文件数目,db_files的数目,建立数据库时的参数maxdatafiles数目。
在上述参数中,以操作系统的限制为主,其次为maxdataflies,最后为db_files。
也就是说如果操作系统允许打开的文件数为32,而maxdatafiles设置为48的话,系统认为打开的文件数目最大为32,如果操作系统允许最大的打开文件数目为64,maxdatafiles数目为32,db_files数目为48,那么系统的最大数目为32,而不是48。
如果数据文件是操作系统的一个文件的话,那么ORACLE还承担操作系统要完成的任务,也就是完成创建文件的工作。
但是对于RAWDEVICE而言,则必须先建好设备卷(VOLUMN),然后才能由ORACLE使用。
三.管理存储空间
1.对控制文件的管理
1.1.控制文件的作用
控制文件是个二进制的文件,它包含以下信息:
数据库名称、建立时间、日志文件和数据文件位置、表空间名、日志的历史记录、备份信息(用在8I中,可以被RMAN使用)、日志序号、检查点信息。
由于控制文件记录着数据库的一些非常重要的信息,因此,数据库每次做完物理修改后都应该做一个控制文件的备份。
在数据库NOOPEN,MOUNT状态时,已经读入控制文件,但没有检查控制文件中的文件是否存在。
利用ORACLE的这个特点,我们能够在MOUNT状态下对数据文件进行处理。
比如让一个数据文件ONLINE/OFFLINE或建立一个新的数据文件(具体操作见“七、故障分析及处理”)。
1.2.备份控制文件
ALTERDATABASEBACKUPCONTROLTRACE;
该语句的功能是在初始化参数user_dump_dest所指定的路径下生成一个跟踪文件,记录创建控制文件的SQL语句。
ALTERDATABASEBACKUPCONTROL‘’;
该语句的功能是在初始化参数user_dump_dest所指定的路径下生成一个二进制的控制文件。
2.对数据文件的管理
2.1.改变数据文件大小
一个数据文件在建立之后并不是说不可以改变该大小,同样可以通过命令使该数据文件改变大小。
首先,通过命令可以使数据文件在需要的时候自动扩展,也就是说它能够自动扩大该文件。
命令如下:
alterdatabasedatafile‘’autoexendon。
其次是对于一个数据文件在使用过程中如果还有大量的空间没有使用,那么可以从该数据文件回收空间。
但是如果该数据文件是由RAWDEVICE构成,则即使是回收了空间,但是该空间也不能被其余使用,因为它是基于卷(VOLUMN)的管理。
涉及到的命令如下:
alterdatabasedatafile‘’resize“newsize”。
该命令非常实用,因为在日常的工作中,在创建一个表空间或往表空间中添加一个数据文件时,常常由于不小心使小数点出错。
此时就可以不必删除该数据文件,而只需使用该命令修改数据文件的大小,同时对于达到对于文件数目最大限制的时候,如果不想修改数据文件,那么就可以使用上述命令对已经存在的文件添加空间。
2.2.数据文件改名
对于数据文件的改名。
具体的操作步骤如下:
首先要使数据库处于NOOPEN的状态下,STARTUPMOUNT;其次,在操作系统下拷贝要重命名的文件到另一文件名;最后使用alterdatabaserenamefile‘’to‘’;
2.3.使数据文件在线或离线
命令如下:
alterdatabasedatafile'data'offline[drop]/online。
当数据库没有运行在归档模式下,使数据文件离线要加DROP选项。
要使离线的数据文件重新在线,要先进行介质恢复(recoverdatafile‘data’)。
3.对于表空间的管理
3.1.创建表空间
在数据库中建立表空间,使用CREATETABLESPACE命令。
命令格式如下:
createtablespace表空间名
datafile文件说明
[autoextendoff/onnextsize[maxsizeunlimited/size]]
[minimumextentsize]
defaultstorage存储参数
permanent/temporary
online/offline
;
其中:
DATAFILE子句说明组成表空间的数据文件名及大小;
AUTOEXTEND子句决定数据文件是否可以自动扩展以及扩展的限制;
MINIMUM EXTENT子句用于控制表空间中的空闲空间的碎片,限制表空间中的空闲范围和使用范围的最小大小。
也就是说表空间上每次分配的范围最小要为MINIMUM EXTENT子句设置的大小,或者是它的整倍数。
这个参数对表空间上的存储的对象起作用。
如:
在建表空间的时候指定MINIMUM EXTENT 2M,如果在这个表空间上建表时指定存储参数为STORAGE(INITIAL1MNEXT1MPCTINCREASE0),那么通过查询USER_EXTENTS可以看出,这张表的实际分配的每个范围均为2M,而不是STORAGE参数中指定的1M。
注:
MINIMUMEXTNET在字典管理的临时表空间(dictionary-managedtemporarytablespace)上不起作用。
PERMANENT/TEMPORARY子句指定表空间是永久性的还是临时性的。
对于永久性的表空间,可以在上面建表、索引等,而在临时性的表空间上不能建表、索引等,只充许存储排序时产生的临时段。
如果临时表空间采用临时性的,它的性能会高于采用永久性的表空间。
因为在永久性的临时表空间上分配的临时段,在不再使用时会被SMON进程清理掉,需要的时候由系统重新分配。
而临时性的临时表空间上只分配一个临时段,即使不用了也不清理,这样避免了系统分配临时段的开销。
DEFAULTSTORAGE决定了今后建表或建索引时默认的存储策略(也就是说如果没有修改建表或索引的参数时,系统就用该默认参数)。
其关键字和参数说明:
INITIAL:
指定对象的第一个范围的大小。
NEXT:
指定分配给对象的下一个范围的大小。
PCTINCREASE:
指定第二个范围之后的每个范围比前一个范围的增长的百分数,缺省值为50。
就是说,从第三个范围开始,每次扩展均为NEXT*(1+PCTINCREASE/100)。
为了能让ORACLE更好的整理数据碎片,因此建议该参数的值不能设得太大,但也不能设为0,而应该设置为一个较小的值。
MINEXTENTS:
指定分配给一个新建对象的最小范围数。
其缺省值为1,对于回滚段的缺省值和最小值为2。
MAXEXTENTS:
指定ORACLE允许对象拥有的最大范围,可以指定一个具体的数字,也可以用UNLIMITED。
3.2.修改表空间
如果想修改一个已经存在的表空间,可以使用修改表空间的命令(ALTERTABLESPACE)。
通过该命令,可以做到:
•修改缺省的表空间的存储参数
命令如下:
ALTERTABLESPACEtablespace_nameDEFAULTSTORAGE存储子句;
修改后的存储参数只对以后在该表空间中新建的对象起作用。
•使表空间在线或离线
使表空间离线(OFFLINE)有以下三个选项:
NORMAL:
对表空间的所有数据文件执行一个检查点,表空间的所有数据文件都必须在线。
缺省的选项是NORMAL。
TEMPORARY:
对表空间的所有在线数据文件执行一个检查点,不必保证所有的文件可写。
将表空间返回到在线前,所有的离线文件要求进行介质恢复。
IMMEDIATE:
不要确保表空间的文件可用,不执行检查点。
将表空间返回到在线前,必须执行介质恢复。
3.3.增加表空间大小
当一个表空间的大小不够时,除了通过前面的命令(ALTERDATABASE)修改数据文件的大小外,还可以往表空间中增加数据文件。
命令如下:
ALTERTABLESPACEtablespace_name
ADDDATAFILE‘data’SIZEdata;
3.4.重新命名数据文件
在重命名时要使表空间离线。
同时,该命令同样并不修改操作系统下的文件名,只是修改控制文件中的数据文件名。
操作步骤如下:
使表空间离线,接着用操作系统的命令拷贝要重命名的数据文件到新的文件,然后修改数据文件名:
ALTERTABLESPACEtablespace_name
RENAMEDATAFILE‘datafile_1’TO‘datafile_2’;
最后使表空间在线。
3.5.开始或停止备份
让表空间开始或停止备份主要是用于联机热备份,数据库要处于ARCHIVELOG模式。
一次热备份的操作步骤如下:
•使表空间处于备份状态(在该状态下,不能使表空间正常离线,不能关闭数据库,不能开始该表空间的另一个后备):
ALTERTABLESPACEtablespace_nameBEGINBACKUP;
在表空间开始备份的时候,不能执行TABLESPACE OFFLINE NORMALLY、SHUTDOWN数据库(除了SHUTDOWN ABORT),或开始这个表空间的另一个备份。
•然后拷贝与表空间相关联的数据库文件;
•接着退出表空间的备份状态:
ALTERTABLESPACEtablespace_nameENDBACKUP;
•执行ALTERSYSTEMSWITCHLOGFILE强制日志切换,使ORACLE创建一个归档日志文件;
•备份归档日志文件,不备份联机重做日志文件;
•备份控制文件。
热备份的内部机制:
在发出ALTER TABLESPACE BEGIN BACKUP命令时,属于该表空间的数据文件得到HOT-BACKUP-IN-PROGRESS标志。
该命令将对热备份模式下的所有数据文件做断点检查。
这意味着在热备份模式下属于这些数据文件的任何脏缓冲区都写入磁盘。
BEGIN BACKUP并不是让表空间处于READ ONLY的状态,用户还是可以修改处于备份状态的表空间上的数据,但在热备份期间修改数据将产生大量的重做记录。
ALTERTABLESPACEENDBACKUP命令创建一个包含开使备份检查点SCN的重做记录。
SCN同时也是热备份数据文件的头。
这就是ORACLE知道备份期间产生的重做记录何时运用到文件的原因。
换句话说,使用热备份时,在恢复期间,DBA至少要运用BEGINBACKUP和ENDBACKUP命令之间产生的重做记录,以使备份数据文件保持连续。
3.6.使表空间成为PERMANENT表空间或TEMPORARY表空间
当新建表空间时,默认为PERMANENT表空间,可以在表空间上存储数据,而TEMPORARY表空间是不允计存储数据的。
不允计把一个已经存储数据的表空间改为TEMPORARY表空间。
命令如下:
ALTERTABLESPACEtablespace_namePERMANENT/TEMPORARY。
3.7.让表空间可读写或只读
让表空间只读/可读写命令如下:
ALTERTABLESPACEtablespace_nameREADONLY/WRITE。
4.为对象设置存储参数
4.1.表的存储参数
createtabletable_name(……)
pctfree整数
pctused整数
initrans整数
maxtrans整数
tablespace表空间名
storage(存储子句)
参数说明:
•pctused和pctfree参数
在建表时用到关于存储空间的管理参数是PCTFREE和PCTUSED,此两个参数控制了数据块中自由空间在插入和更新操作中的使用,这两个参数构成了每一数据块的总体构成。
PCTFREE参数为块中保留的未用空间的百分数,用于修改已存在块中的行。
该参数指定块中保留出的空间用于数据的修改使用。
PCTUSED当一数据块为填满后(由PCTFREE决定),该块从FREE LIST中移走,不能考虑插入新行,但是当它使用低于PCTUSED参数时,又把它放到FREE LIST中,可以用来插入新行。
上述两个参数的值的总和不能超过100,并且在这两个参数中又以PCTFEE最为重要。
现把该参数重要的原因解释如下:
一个数据库表中的每一行以一行片(ROWPIECE)或多个行片形式存储。
如果一个整行可插入到单个数据块中,那该行初始存储为一个行片。
如果不能插入到单个数据块或者由于对已存在行修改引起超出该块时,可能会发生两件事情(行链接、行迁移),如果发生行链接,那么,一行就必须使用多个行片进行存储单行数据。
一个数据块通常对每一行仅包含一个行片。
如果一行的所有部分可存放在一块中,则以一行片存储。
如果数据在一个数据块中无法存放的话,而在其余块中无法找到有足够的空间存放改行数据的话,那么就会发生行链接的问题(ROWCHAIN)。
如果在其余块中能找到足够的空间存放该行的数据,那么,这一整行的数据就全部转移到另一能够容纳下该行数据的块中。
这一现象叫做行迁移。
(ROWMIGRATION)。
发生行迁移时,数据要从一个数据块移到另一数据块,在此情况下将加大系统I/O的负担。
在ORACLE数据库中对数据的查找是以ROWID进行查找的,如果发生行链接的话,那么对于数据的查找将进行跨块查询,这将大大的增加系统的I/O负担。
对于上述提到的行链接问题,绝大部分是由于PCTFREE太小造成的。
在发生行链接问题之后,就应该进行相应的处理。
首先进行行链接问题的确认,用如下语句可以查找哪些表发生了行链接问题:
ANALYZETABLETABLE_NAMELISTCHAINEDROWSINTOCHAINED_ROWS。
在做上述操作之前需建立表CHAINED_ROWS该表可通过脚本UTLCHAIN.SQL来创建。
该脚本存放在$oracle_home/rdbms/admin下或在本地ORAWIN95目录下的\orawin95\rdbms73\admin下。
在找到链接的行之后,就要对这些数据进行处理,由于在CHAINED_ROWS存放数据的ROWID,那么就可以把这些数据先存放在临时表中,然后把这些数据删除,修改表的PCTFREE值,再把临时表的数据插入到表中。
上述操作在表无主外键关系时,相对容易处理,如果存在主外键关系的话,那么在删除数据之时还应该把相应外键的数据删除。
如果知道两条关于存储在表中的数据的信息,就可以用公式计算PCTFREE的适当值。
需要的信息是第一次插入行时它们的平均长度和它们达到最大长度时行的一平均长度。
PCTFREE=100*((最大长度-插入时的长度)/最大长度)
例如:
如果一张表有一行在插入时平均长度为153字节,最大长度为180字节,那么PCTFREE应该为100*(180-153)/180=15。
在上述两个参数中要综合进行考虑,不能片面的强求某一个参数的值要多大,而忽略另一个参数。
因此在日常设计中要把这两个参数综合考虑、配合使用。
通过合理配置这两个参数,希望达到下列目的:
A、高写入数据和回收数据的性能
B、少数据块中未用的空间的数量
C、减少数据块之间行链接的数量
•INITRANS和MAXTRANS参数
INITRANS参数决定了同时能够允许多少个事务对表或索引进行处理,也就是指定表的每一数据块中分配的事物项的初值。
由于ORACLE在对表或索引进行操作之前,对每一数据块的修改,都要在块中申请一个事物项,该事物项的值的大小大约为24个字节。
该参数保证可同时并发修改块的最小事物数,它避免动态事物项的开销。
如果该参数的值开的太小的话,在ORACLE中并发操作的操作一多,那么系统将在此数据块上加一个BLOCK(数据块)级的锁。
MAXTRANS参数决定了最多能够同时允许多少个事务对表或索引进行处理。
ORACLE允许在每一数据块上创建最多255个事务槽,一般来说,并不需要修改MAXTRANS参数的值。
•PCTINCREASE参数
对于表及索引的PCTINCREASE均设为0,让表或索引的扩展能够线性增加。
4.2.索引的存储参数
索引没有PCTUSED参数,由于索引存储的特殊性,它的PCTFREE可以设得很小。
大多数索引分为两类——新索引项随机插入现有值中,或新索引项总有一个比所有现在值大的值。
前者经常在字符数据列上找到,后者通常是数值主关键字列上的索引,用于一个序列发生器。
在以随机次序插入值的索引中,极少的项存储在非常靠后的叶块中,而放在叶块的有序序列的某个叶块上。
当这些块中的一个填满并且必须分裂时,ORACLE不会对将来可能在同一值域中添加的项作任何假设。
因此,它在中间分裂块,当前块留一半项而把另一半项移到新的叶块中。
这样一半对一半的分裂使新项的可用空间最大,落入第一部分值域的可能性与落入第二部分的可能性一样大。
当一个新索引项有一个比其他当前项更大的值时,它将添加到索引的最后叶块中。
当这个块填满并要分裂时,ORACLE可能无法完成一半对一半的块分裂。
如果新项有一个最大值,ORACLE增加一个新叶块并把新记录存储在它上面,在所有新项都有更大的值的索引中,这个模块将在新叶块上提供最大的可能空间,这正是存储所有新项的地方。
它还节省从当前叶块移到一半项的开销,从而释放不会以任何方式再使用的空间。
四.数据存储的其它管理
1.管理数据文件竞争
在一个特殊时间段内,以比大多数其他文件高得多的频率访问的数据文件称为热点。
从调整角度看,热点应尽可能减少。
大多数数据库服务器都使用数据文件分布在许多磁盘驱动器上以极大地发挥并行I/O的潜力。
热点导致少数几个磁盘驱动器满负额地运行,而大多数其它磁盘在那里闲着。
如果一个磁盘满负荷运行,任何进一步的请求不得不在一个队列里等候服务。
因此,我们应该找出热点,把经常访问的数据文件分散在不同的磁盘驱动器中。
在ORACLE中,对每个数据文件的物理读取和物理写都记录在V$,查看每个数据文件的物理读写个数,就可以识别哪些数据文件是热点。
报告的物理读写值是从上次启动数据加时开始计数的。
为了确定一段特定时期的热点,必须比较这段时期开始和结束时的V$视图的内容。
下面的SQL语句显示每个数据文件的物理读写值,并将物理存取的总数排序:
selectname,phyrds,phywrts,(phyrds+phywrts)total
fromv$a,v$datafileb
wherea.
orderbytotaldesc;
查看这个SQL语句的结果顶部的数据文件,可以确定最常访问的物理设备。
如果顶部的数据文件都在同一物理磁盘驱动器或控制器上,应考虑把它们移到不同的驱动器或控制器上。
解决热点问题可以用几个方法:
•重建表空间,让表空间有更多的数据文件,文件规模更小,并位于不同磁盘驱动器和控制器上。
•使用RAID技术,如RAID5。
2.表空间数据碎片整理
表空间数据碎片的整理有三种方法:
•ORACLE自动进行整理:
方法是将表空间的存储参数PCTINCREASE值改为非0,一般将其设为1。
命令如下:
ALTERTABLESPACEtablespace_nameDEFAULTSTORAGE(PCTINCREASE1);
这样ORACLE的SMON进程便会将碎片自动合并。
•手工合并数据碎片:
命令如下:
ALTERTABLESPACEtablespace_nameCOALESCE;
•通过EXPORT/IMPORT工具进行
EXPORT命令有一个参数是COMPRESS,这个标志在读表时会引发EXPORT确定该表所分配的物理空间量,它会向输出的DMP文件写入一个新的初始化存储参数等于全部所分配的空间。
EXPORT完后,跟据具体情况删除数据库中的表或用户,再IMPORT表或用户到数据库中。
3.表的高位标志
在每张表中,都有一个高位标志,来记录表的记录所到达的位置。
如果对一张进行全表扫描,那么ORACLE会扫描到该表的高位标志为止,而不管该表的实际记录是多少。
高位标志总是以5个数据块的大小来扩展,而且只前进不后退(除非TR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE 数据 存储