Oracle存储空间管理及应用方案.docx

上传人:b****6 文档编号:12993290 上传时间:2023-06-10 格式:DOCX 页数:22 大小:121.92KB
下载 相关 举报
Oracle存储空间管理及应用方案.docx_第1页
第1页 / 共22页
Oracle存储空间管理及应用方案.docx_第2页
第2页 / 共22页
Oracle存储空间管理及应用方案.docx_第3页
第3页 / 共22页
Oracle存储空间管理及应用方案.docx_第4页
第4页 / 共22页
Oracle存储空间管理及应用方案.docx_第5页
第5页 / 共22页
Oracle存储空间管理及应用方案.docx_第6页
第6页 / 共22页
Oracle存储空间管理及应用方案.docx_第7页
第7页 / 共22页
Oracle存储空间管理及应用方案.docx_第8页
第8页 / 共22页
Oracle存储空间管理及应用方案.docx_第9页
第9页 / 共22页
Oracle存储空间管理及应用方案.docx_第10页
第10页 / 共22页
Oracle存储空间管理及应用方案.docx_第11页
第11页 / 共22页
Oracle存储空间管理及应用方案.docx_第12页
第12页 / 共22页
Oracle存储空间管理及应用方案.docx_第13页
第13页 / 共22页
Oracle存储空间管理及应用方案.docx_第14页
第14页 / 共22页
Oracle存储空间管理及应用方案.docx_第15页
第15页 / 共22页
Oracle存储空间管理及应用方案.docx_第16页
第16页 / 共22页
Oracle存储空间管理及应用方案.docx_第17页
第17页 / 共22页
Oracle存储空间管理及应用方案.docx_第18页
第18页 / 共22页
Oracle存储空间管理及应用方案.docx_第19页
第19页 / 共22页
Oracle存储空间管理及应用方案.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Oracle存储空间管理及应用方案.docx

《Oracle存储空间管理及应用方案.docx》由会员分享,可在线阅读,更多相关《Oracle存储空间管理及应用方案.docx(22页珍藏版)》请在冰点文库上搜索。

Oracle存储空间管理及应用方案.docx

Oracle存储空间管理及应用方案

Oracle存储空间管理及应用

摘要:

本文详细介绍了Oracle存储架构及其存储体系的管理和应用,包括表空间、回滚段、临时表等,还对其在管理和应用时常见的错误进行了分析探讨

主题词:

Oracle技术表空间数据文件回滚段临时表错误

一、引言

数据库空间的有效使用和维护不仅是数据库管理的重要工作,也是大多数开发人员所关心的内容,它直接关系到数据库性能的发挥。

Oracle提供了不少方法用于数据空间的使用、监控和维护,同时也在各版本中陆续对这方面的功能进行了增强,目的在于简化这方面工作的复杂度,提高应用的运行效率。

本文希望通过系统地介绍这方面的有关概念,让大家能更好地规划使用数据空间,正确使用Oracle提供的有关功能特性,提高应用的执行效率。

二、Oracle数据库的存储体系及有关概念

2.1Oracle数据库的逻辑结构

从应用者的角度来考察数据库的组成。

自下向上,数据库的逻辑结构共有6层:

2.2Oracle数据库的存储结构

数据库的存储结构指逻辑结构在物理上的实现,共有3层

其中:

 数据文件:

用于存放所有的数据,以DBF为扩展名。

日志文件:

记录了对数据库进行的所有操作,以LOG为扩展名。

控制文件:

记录了数据库所有文件的控制信息,以CTL为扩展名。

综上,Oracle数据库的数据存储空间在逻辑上分为多个表空间,每个表空间由系统中的一个或多个物理数据文件构成;Oracle存储数据的基本单位是块,其大小在建库时由DB_BLOCK_SIZE参数确定,一个或多个连续的块构成一个区间(EXTENT),它作为数据对象存储的基本单位来使用。

在Oracle中,每个基本数据对象使用的空间称为段(SEGMENT),段存放在唯一的表空间上,每个段实际上是一系列区片(更为准确地是数据块)的集合。

每个简单数据对象对应一个段;对于分区对象如分区表、索引,则每个(子)分区对应一个段,由各个(子)分区共同构成一个完整的数据对象。

名词解释:

表空间(Tablespace):

为数据库提供使用空间的逻辑结构,其对应物理结构是数据文件,一个表空

间可以包含多个数据文件。

表空间可分为System表空间、非System表空间和回滚段表空间,其中,System表空间是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。

除此之外,还能包含用户数据。

段(Segment):

数据库一种逻辑结构,如表段,索引段,回滚段等,段存在于表空间中,并对应一定的存储空间,共有四种类型的段:

Ø表/数据(Table/Data):

保存表数据

Ø索引(Index):

保存索引数据

Ø回滚(Rollback):

保存回滚数据,用于回滚一次事务处理,以及保持读操作一致性

Ø临时(Temporary):

用于满足排序的需要,比如查询和索引创建中的ORDERBY从句

区间(Extent):

段的存储可以分成一个或多个区间,每个区间占用一定数量的数据块(block)

块(Block):

数据库最小的存储单位,由Block参数(db_block_size)指定

三、表空间及数据文件

3.1表空间简介

通常,有以下几种类型的表空间(除数据表空间需用户自己创建外,其它6种表空间在数据库创建时均会默认建立1个):

3.1.1系统表空间(SYSTEM)

系统表空间是每个Oracle数据库都必须具备的部分,是安装数据库时自动建立的。

它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段等管理数据库自身所需的信息。

一般来说,应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。

因为这样会带来数据库维护和管理的很多问题。

一旦SYSTEM表空间损坏了,只能重新生成数据库。

3.1.2临时表空间(TEMP)

临时表空间并不包含真正的数据,临时表空间中存储数据库中动态生成的对象,如排序操作或表连接时的临时数据等;临时表空间也是Oracle用于存储其所有临时表的所在。

在一些非常繁忙的数据库中,可能会存在多个临时表空间。

3.1.3工具表空间(TOOLS)

工具表空间用于保存数据库工具软件所需的数据库对象,如像OracleReports这样的工具软件在工作时就有自己的一组专用表。

OracleReports把这些表存放在数据库中。

大多数DBA都将支持工具运行所需的表存放在这个表空间中。

3.1.4用户表空间(USERS)

用户表空间用于存放用户的私有信息,用户的专用数据库对象。

3.1.5回滚表空间(RBS)

Oracle数据库需要在一个地方保存恢复(Undo)信息。

回滚表空间中存放数据库对象的回滚段,在出现失败和临时终止事务时,可以用回滚段使数据库对象退回到旧值。

3.1.6数据和索引表空间

数据表空间用来存放用户的应用数据,索引表空间用来存放应用数据对象的索引。

索引可以帮助Oracle迅速找到表中存放的数据。

3.2表空间的管理和使用

3.2.1创建表空间

创建表空间的脚本示例如下:

createtablespacets_namedatafile--创建名为ts-name的表空间

'c:

\oracle\oradata\file1.dbf'size100m,--表空间的文件1,大小为100M

'c:

\oracle\oradata\file2.dbf'size100m--表空间的文件2,大小为100M

minimumextent550k--最小区间大小为550K

[logging/nologging]--记录日志/不记录日志

defaultstorage(initial500k--初始大小为500K

next500k--下一个区大小为500K

maxextents500--最大区间数为500个

pctinccease0)--增量为0

[online/offline]--联机/脱机

[permanent/temporary]--永久/临时

【巡检实例】

--创建数据表空间

--数据文件e:

\oracle\oradata\qin\xjgl_data01.dbf,初始尺寸1G,可自动扩展,最大为5G

--存储属性:

初始大小10M,下一个大小10M,增量为0,最大数量为500

createtablespacexjgl_datadatafile'e:

\oracle\oradata\qin\xjgl_data01.dbf'size1000M

autoextendonnext500mmaxsize5000m

defaultstorage(initial10Mnext10Mmaxextents500pctincrease0);

--创建索引表空间(最好跟数据表空间建在不同的磁盘上)

--数据文件:

e:

\oracle\oradata\qin\xjgl_idx01.dbf,初始尺寸500G,可自动扩展,最大为2G

--存储属性:

初始大小5M,下一个大小5M,增量为0,最大数量为400

createtablespacexjgl_idxdatafile'e:

\oracle\oradata\qin\xjgl_idx01.dbf'size500M

autoextendonnext250mmaxsize2000m

defaultstorage(initial5Mnext5Mmaxextents400pctincrease0);

--创建LOB段表空间

--数据文件:

e:

\oracle\oradata\qin\xjgl_idx01.dbf,初始尺寸500G,可自动扩展,最大为1G

--存储属性:

初始大小5M,下一个大小5M,增量为0,最大数量为100

createtablespacexjgl_data_lobsdatafile'e:

\oracle\oradata\qin\xjgl_data_lobs01.dbf'size500M

autoextendonnext250mmaxsize1000m

defaultstorage(initial10Mnext10Mmaxextents100pctincrease0);

3.2.2改变表空间尺寸

为表空间增加新的数据文件其脚本如下所示:

altertablespacexjgl_dataadddatafile'e:

\oracle\oradata\qin\xjgl_data02.dbf'size200m

调整数据文件尺寸其脚本如下所示:

alterdatabasedatafile'e:

\oracle\oradata\qin\xjgl_data01.dbf'resize400m

允许(或禁止)数据文件的自动扩展其脚本如下所示

alterdatabasedatafile'e:

\oracle\oradata\qin\xjgl_data02.dbf'

autoextendonnext10mmaxsize500m;

改变数据文件的可用性其脚本如下所示

alterdatabasedatafile'e:

\oracle\oradata\qin\xjgl_data02.dbf'online[offline]

Ø以上调整通过OracleDBAStudio进行也可

Ø调整数据文件尺寸时,如果是减小,不能减小到小于已用到空间数量

3.2.3改变表空间状态和存储设置

表空间联机其脚本如下所示:

ALTERTABLESPACE"xjgl_data"ONLINE

表空间脱机其脚本如下所示:

ALTERTABLESPACE"xjgl_data"OFFLINENORMAL[TEMPORARY/IMMEDIATE/FORRECOVER]

设置表空间为只读

ALTERTABLESPACE"xjgl_data"READONLY

修改表空间的存储设置

ALTERTABLESPACE"xjgl_data"DEFAULTSTORAGE(…)

整理空间碎片

可通过先将某表空间用export导出,再用import将其导入实现

删除表空间

DROPTABLESPACE“xjgl_data”[includingcontents];

注:

1)表空间非空时,加上includingcontents关键字才可将其删除

2)删除表空间并不是删除正在使用的数据文件,必须使用操作系统删除数据数据文件

3.2.4表空间迁移

可通过下列步骤实现(只适用于非系统表空间。

不能用于回滚段、临时段的表空间)

1)置表空间状态为脱机

altertablespacexjgl_dataoffline;

2)使用操作系统命令来移动文件

$movee:

\oracle\oradata\qin\xjgl_data01.dbfe:

\

3)使用altertablespace来更改数据库中的文件名

alterdatabaserenamefile'e:

\oracle\oradata\qin\xjgl_data01.dbf'to'e:

\xjgl_data01.dbf';

4)重新置表空间状态为联机

altertablespacexjgl_dataonline;

3.3管理数据文件

数据文件是构成表空间和数据库的物理文件,存放在操作系统中。

数据文件管理使用时应注意以下几点:

1)初始化参数DB_FILES(默认为1024)设置一个实例可以建立的最大数据文件数。

当数据文件的个数达到初始化参数DB_FILES的值时,必须修改DB_FILES的值并重新启动数据库使修改生效。

2)归档模式下数据文件可以单独OFFLINE,而非归档模式数据文件不能正常OFFLINE。

3)数据文件的重命名和移植操作有两种方法实现。

对于单个非SYSTEM表空间的数据文件的转移或重命名可以在数据库打开的情况下完成,对于多个表空间或SYSTEM表空间的数据文件的转移或重命名,只能在数据库的MOUNT模式下进行。

4)Oracle没有办法删除已经加载到数据库的数据文件。

只能通过删除表空间的方式将表空间和它包含的全部数据文件删除,不能只删除一个单独的数据文件。

ALTERDATABASEDATAFILE……OFFLINEDROP语句只能使数据文件不再使用,并没有从数据库上真正删除掉数据文件。

5)初始化参数DB_BLOCK_CHECKSUM设置Oracle是否对BLOCK进行校验。

不管是否设置这个值,SYSTEM表空间都会进行校验。

如果设置为TRUE,那么DBWn进程会对每个写回磁盘的BLOCK进行校验计算,结果存放到BLOCK的头部。

Oracle下次读取该块时,会根据这个校验结果验证是否存在磁盘错误

3.4应用开发时的若干注意事项

1)在多磁盘系统,为提高数据库的性能,数据表空间和索引表空间应分别存储,回滚段(RBS)表空间和数据表空间分别存储,系统表(SYSTEM)空间与数据库中其它表空间分别存储。

2)创建表及其它对象时,要为其分配一个表空间,如果未指定表空间,则使用当前系统用户确省的表空间。

一般可以按如下步骤进行

A.用createuser命令建立用户并给其分配默认表空间和临时表空间,如

createuserXJGL_SAidentifiedbyxjgldefaulttablespacexjgl_datatemporarytablespacetemp;

B.给用户授权

grantconnect,resourcetoXJGL_SA;

C.更改以新建的用户(XJGL_SA)登陆

connectxjgl_sa/xjgl;

D.创建表及其它对象

这样建表时若不指定表空间,对象将会默认创建到xjgl_data表空间上

3)若表中存在大型对象LOB数据字段段,为提高数据库检索性能,一般都需要为LOB数据指定专用的表空间,并指定nocache参数(表示不这些LOB数据将不会存贮在内存中,以便在查询时获得最快的访问速度)

4)在建立索引时,如果不指定相应的索引表空间名,那么,该索引就会建立在数据表空间中。

这是程序员经常忽略的一个问题。

应该在建索引时,明确的指明相应的索引表空间(使用usingindextablespace子句)。

CREATETABLETEST

(NAMEVARCHAR2(30)PRIMARYKEY

USINGINDEX

TABLESPACExjgl_idx

PCTFREE0STORAGE(…)

AGENUMBER);

5)创建触发器、存储过程、函数和包时都不能为其指定存储空间,它们都会被存储到系统(SYSTEM)表空间中

四、回滚段及临时表的使用

4.1回滚段

4.1.1回滚段概述

回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。

回滚段头部包含正在使用的该回滚段事务的信息。

一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。

4.1.2回滚段的作用

事务回滚:

当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:

当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:

当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。

当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

4.1.3回滚段的种类

系统回滚段:

当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放系统表空间中对象的前影像。

非系统回滚段:

拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放非系统表空间中对象的数据前影像。

非系统回滚段又分为私有回滚段和公有回滚段,私有回滚段应在参数文件的ROLLBACKSEGMENTS参数中列出,以便例程启动时自动使其在线(ONLINE)。

公有回滚段在例程启动时自动在线。

DEFERED(延迟)回滚段:

该回滚段在表空间离线(OFFLINE)时由系统自动创建,当表空间再次在线(ONLINE)时由系统自动删除,用于存放表空间离线时产生的回滚信息。

4.1.4回滚段的使用

分配回滚段:

当事务开始时,ORACLE将为该事务分配回滚段,并将拥有最少事务的回滚段分配给该事务。

事务可以用以下语句申请指定的回滚段:

SETTRANSTRACTIONUSEROLLBACKSEGMENTrollback_segment

事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当当前区用满后移到下一个区。

几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。

回滚段的扩展(EXTEND):

当当前回滚段区的所有块用完而事务还需要更多的回滚空间时,回滚段的指针将移到下一个区。

当最后一个区用完,指针将移到第一个区的前面。

回滚段指针移到下一个区的前提是下一个区没有活动的事务,同时指针不能跨区。

当下一个区正在使用时,事务将为回滚段分配一个新的区,这种分配称为回滚段的扩展。

回滚段将一直扩展到该回滚段区的个数到达回滚段的参数MAXEXTENTS的值时为止

回滚段的回收:

OPTIMAL(最佳大小)参数指明回滚段空闲时收缩到的位置,指明回滚段的OPTIMAL参数可以减少回滚段空间的浪费。

4.1.5回滚段常用操作

创建回滚段

CREATE[PUBLIC]ROLLBACKSEGMENTrollback_segment

[TABLESPACEtablespace]

[STORAGE([INITIALinteger[K|M]][NEXTinteger[K|M]]

[MINEXTENTSinteger]

[MAXTENTS{integer|UNLIMITED}]

[OPTIMAL{integer[K|M]|NULL}])]

注:

Ø回滚段可以在创建时指明PRIVATE或PUBLIC,一旦创建将不能修改。

ØMINEXTENTS必须大于等于2

ØPCTINCREASE必须是0

ØOPTIMAL如果要指定,必须大于等于回滚段的初始大小(由MINEXTENTS指定)

建议:

Ø一般情况下,INITIAL=NEXT

Ø设置OPTIMAL参数来节约空间的使用

Ø不要设置MAXEXTENTS为UNLIMITED

Ø回滚段应创建在一个特定的回滚段表空间内

使回滚段在线

当回滚段创建后,回滚段是离线的,不能被数据库使用,为了使回滚段被事务利用,必须将回滚段在线。

可以用以下命令使回滚段在线:

ALTERROLLBACKSEGMENTrollback_segmentONLINE;

为了使回滚段在数据库启动时自动在线,可以在数据库的参数文件中列出回滚段的名字。

例如在参数文件中加入以下一行

ROLLBACK_SEGMENT=(rbs01,rbs02)

修改回滚段的存储参数

可以使用ALTERROLLBACKSEGMENT命令修改回滚段的存储参数(包括OPTIMAL,MAXEXTENTS)。

ALTERROLLBACKSEGMENTrollback_segment

[STORAGE([NEXTinteger[K|M]]

[MINEXTENTSinteger]

[MAXEXTENTS{integer|UNLIMITED}]

[OPTIMAL{integer[K|M]|NULL}])]

回收回滚段的空间

如果指定了回滚段的OPTIMAL参数,ORACLE将自动回收回滚段到OPTIMAL指定的位置。

用户也可以手动回收回滚段的空间。

语法:

ALTERROLLBACKSEGMENTrollback_segmentSHRINK[TOinteger[K|M]];

如果不指明TOinteger的数值,ORACLE将试图回收到OPTIMAL的位置。

使回滚段离线

为了达到以下两个目的需要回滚段离线:

Ø阻止新的事务使用该回滚段;

Ø该回滚段必须删除。

ALTERROLLBACKSEGMENTrollback_segmentOFFLINE;

如果有事务正在使用该回滚段,运行该命令后,回滚段的状态将是PENDINGOFFLINE。

事务结束后,状态将改为OFFLINE,可以通过V$ROLLSTAT查询回滚段的状态。

删除回滚段

当回滚段不再需要或要重建以改变INITIAL,NEXT或MINEXTENTS参数时,可以将其删除。

DROPROLLBACKSEGMENTrollback_segment;

查询回滚段的信息

所用数据字典:

DBA_ROLLBACK_SEGS

可以查询的信息:

回滚段的标识(SEGMENT_ID)、名称(SEGMENT_NAME)、所在表空间(TABLESPACE_NAME)、类型(OWNER)、状态(STATUS)。

如:

SQL>SELECTsegment_name,tablespace_name,owner,statusFROMdba_rollback_segs;

回滚段的统计信息

所用数据字典:

V$ROLLNAME,V$ROLLSTAT如:

SQL>SELECTn.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.statusFROMv$rollnamen,

v$rollstatsWHEREn.usn=s.usn;

查看回滚段的当前活动事务

所用数据字典:

V$SESSION,V$TRANSACTION。

SQL>SELECTs.username,t.xidusn,t.ubafil,t.ubablk,t.used_ublk

FROMv$sessions,v$transactiont

WHEREs.saddr=t.ses_addr;

回滚段的数量规划

对于OLTP系统,存在大量的小事务处理,一般建议:

数量多的小回滚段;每四个事务一个回滚段;每个回滚段不要超过十个事务。

对于批处理,一般建议:

数量少的大回滚段;每个事务一个回滚段。

4.2临时表的使用

4.2.1临时表的基本概念

Oracle临时表用来保存事务或会话期间的中间结果。

在临时表中保存的数据只有对当前会话是可见的,任何会话都不能看到其他会话的数据,即使在当前会话提交数据以后也是不可见的。

一个会话从来不阻塞另一个会话使用临时表。

即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。

临时表将从用户临时表空间中分配空间,或者如果从有定义权的程序中访问,将使用程序所有者的临时表空间。

全局临时表实际上只是表本身的模板,不包含数据。

创建临时表的行为不包括

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2