Oracle数据库系统维护培训(初级).ppt
Oracle数据库系统维护培训(初级),管理数据库的可用性规划和建立数据库管理数据库的物理结构基于数据库设计管理存储空间安全管理网络管理备份恢复性能调整,数据库管理员的任务,体系结构图示,实例(INSTANCE),是存取和控制数据库的软件机制,它由系统全局区(System Global Area,简称SGA)和后台进程组成。,工作方式,PMON,SMON,DBWR,LGWR,内 存,数据文件,日志文件,实例和SID的关系是什么?,SID 就是Oracle 实例的标识,不同的SID 对应不同的内存缓冲(SGA)和不同的后台进程。,Oracle数据库和实例的关系是什么?,单节点数据库多节点数据库,ORACLE 内存管理,ORACLE的内存结构(SGA),Redo logbuffer,Data buffercache,SGA,SGA是ORACLE系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。,Large pool,Java pool,共享池(share pool),大小由 SHARED_POOL_SIZE 定义库缓冲包含语句文本,编译后的代码以及执行计划等 字典缓冲包括表和列的定义和权限等,库缓冲(Library cache),库缓冲 保存最近用过的SQL语句和PLSQL使用过程中的下列信息:语句文本分析树,即编译后的语句执行计划,即优化器定义的语句执行步骤库缓冲 又称为共享SQL区。由于 库缓冲 保存了这些信息,所以当一查询在执行计划被换出之前重新执行时,服务进程不必重新分析语句,因此 库缓冲 能改善应用的性能。.,数据字典缓冲(Data Dictionary Cache),数据字典缓冲 又叫做字典缓冲或行缓冲,是共享池的一部分。它保存最近使用过的数据字典信息如表和列的定义,用户名口令和权限。在分析阶段,服务进程 查找缓冲中的信息以解释语句中指定的对象名并验证访问权限。如有必要服务进程可请求从数据文件中装入这些信息,数据库数据缓冲区(Database Buffer Cache),在oracle 8i 中,使用参数DB_BLOCK_SIZE 确定数据块的大小;使用参数DB_BLOCK_BUFFERS 确定数据块的数目;Data buffer 的大小由DB_BLOCK_SIZE*DB_BLOCK_BUFFERS 来决定;在oracle 9i 中,使用DB_CACHE_SIZE来决定,并且可以通过下面的命令动态的改变其大小:ALTER SYSTEM SET DB_CACHE_SIZE=120M;处理查询时,服务进程在数据库缓冲区 中寻找所需的数据块。如果在缓冲区中找不到所需数据块,服务进程从数据文件中将数据块读入缓冲区。以后对同样数据块的请求在内存中进行,不需物理读写。缓冲区用LRU(Least Recently Used)置换算法,在检查点发生时由DBWR写入数据文件,写 数 据 文 件,Oracle 根据最近最少被使用(L R U)列表将数据从缓冲区的数据写入数据文件中。Oracle服务器使用延迟、多个块写以减缓磁盘I/O的冲突:灰数据缓冲区的数量达到阈值;当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块;出现超时每三秒;出现检查点(检查点是使数据库缓冲区高速缓存与数据文件同步的一种方法),日志缓冲区(Log Buffer),重做日志缓冲区用于在内存中存储未被刷新写入联机重做日志文件的重做信息。它是循环使用的缓冲区,这意味着从顶端到底端填充信息,然后又返回到缓冲区的起始点。当重做日志缓冲区填满时,将它的内容写入联机重做日志文件。重做日志缓冲区的大小是由L O G _ B U F F E R初始化参数决定,以字节为单位,决定在内存中保留多少空间缓存重做日志项。所有服务进程(SERVER PROCESS)将重作记录写入重作日志 缓冲在事务提交时由 LGWR写入日志文件一次磁盘写可能包含不同事物的重作记 录,写 日 志 文 件,L G W R执行写入操作的条件是:发生提交(commit)到达其使用极限 重做日志缓冲区满度达到三分之一或3秒在DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前 写满1M因此,太大的redo log buffer是没有意义的,因为真正用于生产的时候,很少有3秒内没有提交事物的应用,而且,每到1M就会写redo log file,所以,大多数情况下,超过3M的redo log buffer几乎就浪费了。,Java池,Oracle8i引入的一项新特性(从8.1.5版本后开始出现的),用于支持数据库中java的运行,负责容纳与会话有关的Java代码,以及要由Java虚拟机(JVM)用到的一些数据。她的大小由初始化参数文件中的java_pool_size指定,大缓冲池(Large pool),这个内存结构最早是在Oracle 8.0引入的,它在以下情况使用:使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存在执行并行处理语句(如并行查询)的时候,要分配进程间消息缓冲区的内存,就是用这个内存结构来协调并行处理。使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器。,程序全局区(PGA),PGA,服务进程,程序全局区(PGA)是一块内存区域,它包含一个服务进程或后台进程的数据和控制信息,PGA 又称为进程全局区(process global area)即一个进程独占的区域,不能共享也不可写。它包含排序区:用于在结果返回用户之前所需的排序会话信息:如此会话的用户特权等信息光标状态:指出当前会话所用的各个光标所处的状态堆栈空间:包含会话的变量进程私有空间,其他进程不能访问PGA在进程创建时分配,进程终止时释放在MTS模式下,部分结构存储在SGA区中,ORACLE 9i 内存管理的新特性,允许动态改变SGA的大小9i还引入了自动优化(self tuning)这个特性,这可以使Oracle根据SQL语句的执行情况动态改变私有内存的大小。增加了一些新的参数,如:SGA_MAX_SIZE DB_CACHE_SIZEDB_KEEP_CACHE_SIZEDB_RECYCLE_POOL_SIZEPGA被逻辑的划分成两个部分:可调整部分:如cursors,bind variables等等地sql 工作区内存结构;不可调整部分:如sort areas,merge areas等等;有一些新的方法可以用来监视PGA的使用,如:SELECT SUM(PGA_USED_MEM),SUM(PGA_ALLOC_MEM),SUM(PGA_MAX_MEM)FROM V$PROCESS;,续 SGA NF,如果SGA小于128M,granule大小为4M;如果SGA大于128M,granule大小为16M。Buffer Cache的不同组件以granule为最小单位增长或收缩。最小的SGA配置是3个granule,一个用于固定SGA(包括redo buffers),一个用于buffer cache,一个用于shared pool.可以通过alter system命令动态修改buffer cache内存:alter system set db_cache_size=96M;如:SQL alter system set shared_pool_size=25M;System altered,设置SGA_MAX_SIZE时的注意事项,在Windows平台上,Oracle只获得需要的内存(实际的SGA大小),随着物理SGA的变化(管理员发出alter system set shared_pool_size=new_size等),Oracle动态获得/释放内存。在Unix平台上,由于采用了共享内存的结构,Oracle是在启动时就获得那些共享内存段。如果你的SGA开的比SGA_MAX_SIZE小的话,OS的虚拟内存管理会自动把不用的内存放在SWAP空间里面的。SGA_MAX_SIZE设置的太大或者太小都不合适,设置太大在某些平台(如sun)有可能造成操作系统的页交换,设置太小对性能等使用造成不便。,关于SGA的总结,设置之前首先要明确oracle是64bit or 32 bit。windows上存在32bit的限制,32bit 通常 SGA有 1.7G 的限制(某些OS的处理或者WINDOWS上有特定设定可以突破这种限制)。shared_pool_size 过大就可能增加管理负担和latch 等资源的开销,不利于提高系统的性能,如果设置太小,也会降低系统的性能。一般的要根据实际情况的命中率(如statpack等工具分析)具体分析(一般系统有几十兆或者百兆左右就够了,类似ERP这种大应用系统可以设置到超过百兆),log_buffer 一般不超过3M(这个LGWR地工作方式,以及ORACLE对log bugger的使用方式有关)。large_pool_size:如果不设置MTS,通常在 RMAN、OPQ 会使用到,但是在10M50M 应该差不多了。java_pool_size:若不使用java,默认得就可以了(20m33m)。data buffer:在8i中,data buffer=(db_block_size*db_block_buffers);在9i 中可以是 db_cache_size。并不是越大越好,需要根据命中率调整。sort_area_size 这个参数在非MTS下都是属于PGA,不属于SGA,是为每个session单独分配的。,ORACLE 进程管理,Oracle 服务器,服务器,应用/网络服务器,用户,连接数据库,用户,客户,服务器,Serverprocess,Userprocess,服务进程,在ORACLE SERVER所在的机器上运行 在专用服务配置中只对一个用户进程服务使用不同的 PGA处理由客户产生 的请求,并将结果返回客户查询的处理过程:分析SQL命令并生成执行方案。从数据缓冲存储区中读取数据。将执行结果返回给用户。,28,后台进程,29,进程监视进程(PMON),清除异常终止的连接,并撤消异常中断的用户进程,并释放该进程已获得的系统资源或锁。回滚未提交的事务释放分配给终止进程的 SGA 资源重新启动失败的共享服务进程,分配进程和任务队列进程它有规律的被唤醒(metalink note 53711.996说是3秒),也可由其他进程调用(如OS进程)。,SMON:System Monitor,在CLUSTER中的接点失败时自动恢复实例回收不再使用的临时段空间合并连续的空闲空间其他任务.注意:S M O N仅在当创建表空间或表时的缺省存储参数p c t i n c r e a s e不是0 时,合并表空间中的自由空间。如果想让S M O N自动地处理这个操作,至少将p c t i n c r e a s e设置为1。,LGWR:Log Writer,LGWR将重做日志缓冲区的重做日志条目写入到联机重做日志文件的进程。注意:直到Oracle在LGWR完成将重做信息从重做缓冲区刷新到联机重做日志文件之后,Oracle才认为一个事务已完成。在LGWR成功地将重做日志项写入联机重做文件时(并不是改变数据文件中的数据时),将一个成功码返回给服务器进程。,写日志文件,当提交事务处理时(Commit)当重做日志缓冲区的三分之一已满时当重做日志缓冲区中记录了超过1 MB 的更改时在DBWR将数据库缓冲区高速缓存中修改的块写入数据文件以前发生LGWR超时(3秒),检查点进程(CKPT),辅助完成检查点。检查点是一个数据库事件,它更新控制文件和数据文件头。将恢复信息写入文件头。主要是检查点结构信息被记入控制文件与数据文件头。完成实例注册(7.3 only),检 查 点发生的时间,当数据库管理员手动请求时。即使用SQL 命令:ALTER SYSTEM CHECKPOINT,当达到初始化参数LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT 和FAST_START_IO_TARGET 设置时。每次日志切换时(Log Switch)。当已通过正常事务处理或者立即选项关闭例程时(normal,transactional,or immediate)。,数据库写入进程(DBWR),将数据缓冲区中所有修改过的缓冲块数据写到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数,。该进程在启动实例时自动启动。1、用户进程检查DIRTY BUFFER的数量是否超过上 限,超过,该用户进程调用DBWR,写数据。2、用户进程搜寻空闲缓冲区,如没有找到,该用户进 程调用DBWR,写数据。3、DBWR周期性唤醒,一般3秒/次;4、日志写入进程或检查点进程需要有一些记录(主要是系统内部信息)写入到 数据文件,也会调用DBWR。,写数据文件,灰数据缓冲区的数量达到阈值当进行扫描而无法找到任何空闲缓冲区时DBWR 后台进程发生超时(大约每3秒)。发生检查点,ARCH(自动归档进程),数据库可以工作在归档模式或者非归档模式下,一般来说,生产一定要工作在归档模式下,以便在发生故障是可以进行数据的完全恢复。将完成的日志文件写入归档目录维护对数据库的修改历史,确保不会由于磁盘的故障丢失数据归档的方式有两种,一种是DBA手工归档,一种是启动自动归档进程,在日志文件组出现切换时,系统自动完成将旧日志文件的内容拷贝到磁盘或者脱机存储介质上(如磁带机)。,ARCH的参数说明,LOG_ARCHIVE_START:确定了该进程的启动/不启动状态。LOG_ARCHIVE_DEST_n:当数据库在归档模式下操作时,该参数确定了日志文件的归档目标。LOG_ARCHIVE_FORMAT:当数据库在归档模式下操作时,该参数确定了归档日志文件的缺省文件名格式。,ORA-00271 错误的解决,40,RECO,分布式数据库恢复恢复两阶段提交时由于连路问题处于准 备提交阶段的事务,41,LCKn,LMON,LMD0,GMS,LMON,LMD0-在MPP 或 CLUSTER环境下管理分布式锁(DLM)LCKn-在CLUSTER环境下保证实例之间的数据缓冲库缓冲区,字典缓冲的一致性。GMS-Group Membership Service 检测接点的活动性。,专用服务器方式,为每个用户单独开设一个服务器进程。不设置参数:MTS_SERVICEMTS_DISPATCHERSMTS_SERVERSMTS_LISTERNET_ADDRESS,多线程服务器方式,通过调度器为每个用户进程分配服务器进程。设置参数:MTS_SERVICEMTS_DISPATCHERSMTS_SERVERSMTS_LISTERNET_ADDRESS,MTS相关的参数涵义,MTS_SERVICE:服务器名,缺省值为DB_NAME MTS_DISPATCHERS:调度器个数 MTS_SERVERS:可以启动的服务器进程的个数 MTS_LISTERNET_ADDRESS:SQL*NET监听器地址 MTS_MAX_SERVERS:服务器进程的最大数,其他进程,调度进程(Dnnn)快照进程(SNPn)锁进程(LCKn),46,常见问题的处理,NT上如何找到运行的后台进程?SQL select*from v$bgprocess where paddr 00;PADDR NAME DESCRIPTION ERROR-7A1D06BC PMON process cleanup 07A1D0A7C DBW0 db writer process 0 07A1D24BC ARC0 Archival Process 0 07A1D287C ARC1 Archival Process 1 07A1D0E3C LGWR Redo etc.07A1D11FC CKPT checkpoint 07A1D15BC SMON System Monitor Process 07A1D197C RECO distributed recovery 08 rows selectedSQL,47,常见问题的处理,由ARCH引起的数据库挂起?数据库缺省安装时,一般处于非归档模式,用户可根 据需要改为归档模式。在许多情况下用户只修改了数 据库的模式,没有启动ARCH进程,这种情况下,经过一段运行后,整个数据库挂起,查询v$session_wait视图,会发现 archive required 的事件。手工归档或自动启动ARCH 即可解决。还有一种情况是数据库运行在归档状态,但是归档日志所需空间不足,这时数据库挂起,解决方法是解决归档空间不足问题,然后重新启动归档进程。,ORACLE 磁盘管理,ORACLE数据库中的数据逻辑存储在表空间中,物理存储在数据文件中。,Oracle 数据库的磁盘结构,50,所有相关文件类型,参数文件控制文件数据文件重作日志文件归档日志文件跟踪文件告警日志其他文件,51,参数文件,确定实例结构定位控制文件跟踪调试系统,控 制 文 件,控制文件是一个较小的二进制文件,用于描述数据库结构。1、所有数据文件、联机日志文件的名称、位置、状态 和状况都记录在控制文件中。2、在数据库装载(mount)过程中,ORACLE 读取控制文件以定位数据文件和联机日志文件。3、一般建议至少三个控制文件备份,分别放在不同的磁盘控制器上。4、备份时应对控制文件进行拷贝。,控制文件的描述信息如下,数据库名数据文件位置重作日志位置表空间名当前日志文件顺序号检查点信息日志历史备分信息,影响控制文件大小的参数,控制文件的大小受下列参数影响:MAXLOGFILES MAXLOGMEMBERS MAXLOGHISTORY MAXDATAFILES MAXINSTANCESCONTROL_FILE_RECORD_KEEP_TIME(缺省是7天),获取控制文件的信息,V$CONTROLFILE-NAME V$PARAMETER-NAME(control_file)-VALUE V$CONTROLFILE_RECORD_SECTION-TYPE-RECORDS_SIZE-RECORDS_TOTAL-RECORDS_USED,控制文件使用的原则,复用控制文件在 CONTROL_FILES 中包含完全路径在数据库结构发生变化时备份控制文件,复用控制文件,control_files=(/DISK1/control01.con,/DISK2/control02.con),Disk 1,control01.con,Disk 2,control02.con,改变控制文件的位置,1.正常关闭数据库2.将控制文件从当前位置依到新的位置3.修改 spfile或pfile中control_file参数.4.启动数据库,ora-205 不能找到控制文件,验证CONTROL_FILES指定的参数是否正确控制文件的属性是否正确OPS 或者 RAC下,cluster是否正常,60,数据文件,可以是文件或裸设备包含用户数据ORACLE的第一个数据块是与OS有关 的文件头信息第二块包含所有数据块的恢复信息每一个数据文件只与一个数据库相联系。一个表空间可包含一个或多个数据文件。,重做日志文件(Redo Log File),记录所有对数据库数据的修改,以备恢复数据时使用。其特点如下:每一个数据库至少包含两个日志文件组。日志文件组以循环方式进行写操作。每一个日志文件成员对应一个物理文件。,62,复用 重作日志文件,用命令强制切换日志用初始化参数控制检查点LOG_CHECKPOINT_INTERVALLOG_CHECKPOINT_TIMEOUT切换时间应在15-30分钟,日志切换和检查点,ALTER SYSTEM SWITCH LOGFILE;,log3a.rdo,增加在线日志文件组,Group 1,Group 2,Group 3,ALTER DATABASE ADD LOGFILE(/DISK3/log3a.rdo/DISK4/log3b.rdo)size 1M;,log1b.rdo,log2b.rdo,增加在线日志文件组成员,Group 2,Group 1,ALTER DATABASE ADD LOGFILE MEMBER/DISK4/log1b.rdo TO GROUP 1,/DISK4/log2b.rdo TO GROUP 2;,log2b.rdo,log2a.rdo,log1b.rdo,log1a.rdo,改变在线日志文件物理位置,.关闭数据库.将在线日志文件复制到新的位置.Mount 数据库.执行 ALTER DATABASE RENAME FILE 命令.Open 数据库.,删除在线日志组,Group 1,Group 2,Group 3,ALTER DATABASE DROP LOGFILE GROUP 3;,log1a.rdo,log2a.rdo,log3b.rdo,log3a.rdo,log1b.rdo,log2b.rdo,删除在线日志组成员,Group 2,Group 1,ALTER DATABASE DROP LOGFILE MEMBER/DISK4/log2b.dbf,log2b.rdo,log1b.rdo,log2a.rdo,清除在线日志内容,ALTER DATABASE CLEAR LOGFILE/DISK3/log2a.rdo,在线日志文件配置,Group 1,Group 2,Group 3,Member,Member,Disk 3,Disk 2,Disk 1,Member,Member,Member,获取组有关的信息,V$THREAD:GROUPSCURRENT_GROUP#SEQUENCE#,获取组和成员有关的信息,V$LOG:GROUP#MEMBERSSTATUSSEQUENCE#BYTES,获取组和成员有关的信息,V$LOGFILE:GROUP#STATUSMEMBER,日志分析工具LogMiner,定义 UTL_FILE_DIR建立字典文件,75,归档日志(Archive Logs),归档日志 是在线日志的拷贝运行在归档模式下的数据库,联机重做日志在重复使用之前必须归档归档日志用于介质恢复和基于时间的恢 复 归档日志 是通常的OS文件,SQLPLUS命令:V$DATABASE:NAMELOG_MODEV$INSTANCEARCHIVER,获取归档信息,ARCHIVE LOG LIST;,ORA-255 导致归档进程终止,ORA-255 导致归档进程终止,整个数据库结束主要原因是归档文件系统满备份归档文件,释放空间重新定义归档目录到另一个文件系统,跟踪文件(Trace Files),服务进程或后台进程可能写跟踪文件Oracle 将错误信息转储到跟踪文件对服务进程SQL语句的跟踪可由下述方法激活或 禁止:ALTER SESSION 命令参数 SQL_TRACE,跟踪文件的位置,用户进程,服务进程,USER_DUMP_DEST,BACKGROUND_DUMP_DEST,ALERT 文件,实例,SGA,共享池,80,告警文件(alert.log或alrt.ora),ALERT 文件由按时间顺序记录的日志消息和错误组成所有的内部错误(ORA-600),坏块错误(ORA-1578)管理动作如 Alter System,Alter Tablespace,Startup,Shutdown,Archive Log,Recover,等.所有非缺省值的初始化参数查找问题的主要文件之一,口令文件,用于Oracle 的具有sysdba权限用户的认证。主要用于远程管理数据库的权限认证。,口令文件验证,1.检查是否已创建口令文件件;如果没有有,则使用ORAPWD创建2.检查初始化参数REMOTE_LOGIN_PASSWORD_FILE 已设置为EXCLUSIVE3.向用户授予SYSOPER 和SYSDBA 权限4.查询V$PWFILE_USERS 以验证口令文件成员,83,其它文件,审计文件:用于OS 事件建立数据字典的:/rdbms/admin/sql.bsq(基表)/rdbms/admin/catalog.sql(字典试图)建立数据字典视图:/rdbms/admin/cat*各种可选的数据字典:/rdbms/admin/dbms*,Oracle 数据库的启动和关闭,启动和关闭Oracle数据库过程图,Oracle数据库的启动方式,startup nomount startup mount dbnamestartup open dbname startup startup restrict startup force startup pfile=参数文件名,startup nomount,也称为非安装启动。这种方式启动下可执行:重建控制文件、重建数据库 启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。,nomount状态示意图,只有拥有DBA权限(即,DBA,SYSDBA)的用户才可以连接到数据库,普通的数据库用户是无法访问的,startup mount dbname,也称为安装启动。这种方式启动下可执行:这种方式启动下可执行:数据库日志归档、数据库恢复、重新命名一些数据库文件 如:系统表空间或日志文件。相当于先执行“nomount”,然后打开控制文件,nomount mount,startup或者startup mount dbname,也称为缺省启动方式。先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。即startup等于以下三个命令:startup nomount alter database mount alter database open,mount open,startup restrict,也称为约束方式启动。这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示:ERROR:ORA-01035:ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用。,startup force,也称为强制启动方式。当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令(这一强制过程由系统自动完成)。,startup pfile=参数文件名,也称为带初始化参数文件的启动方式。先读取参数文件,再按参数文件中的设置启动数据库 例:startup pfile=E:init.ora 这种方式通常用于一些特殊任务,如在一台机器上配置standby,或者更改了init.ora参数文件的位置,或者测试init.ora文件的配置等等。,Oracle数据库的关闭方式,shutdown normal或者shutdown(正常方式关闭数据库)shutdown transactional(事务处理方式关闭数据库)shutdown immediate(立即方式关闭数据库)shutdown abort(异常中止例程,即不完全关闭数据库),正常关闭(NORMAL),正常关闭是缺省方式。关闭数据库时,有如下情况发生:不允许新的连接 Oracle 服务器等待所有用户断开后才完成关闭Oracle 在关闭例程前将关闭并卸装数据库 下一次启动时将不要求例程恢复,事务处理关闭(TRANSACTIONAL),事务处理关闭防止客户丢失工作事务处理。关闭数据库时,有如下情况发生:没有客户可以在此特定例程上启动新事务当客户结束正在进行的事务时断开客户当所有事务都已完成时会立即关闭下一次启动将不要求例程恢复,立即关闭(IMMEDIATE),关闭数据库时,有如下情况发生:由Oracle 处理的当前SQL 语句未完成Oracle 服务器不等待当前连接数据库的用户断开Oracle 回退活动的事务并断开所有连接的用户Oracle 在关闭例程前将关闭并卸装数据库下一次启动将不要求例程恢复,异常中止例程(ABORT),如果正常、事务处理关闭和立即关闭选项都不起作用,就只能用这种方式中止当前数据库例程,异常中止例程关闭数据库时,有如下情况发生:Oracle 服务器所处理的当前SQL 语句被立即终止Oracle 不等待当前连接数据库的用户断开未提交的事务不回退在不关闭文件的情况下例程被终止下一次启动将要求例程恢复,Oracle 逻辑空间管理,数据文件结构,Made up of,Part of,Temporary,Index,Cache,Cluster,Rollback,Data,Segment,Location of,Free,Extent,Made up of,I n,Location of,Part of,Made up of,Controlling,Control-led by,Part of,Made up of,Part of,Made up of,Made up of,Part of,Made up of,Part of,Part of,Part of,LOB,Lob Index,数据库逻辑结构图,ORACLE逻辑结构由一系列有相互关系的逻辑对象组成。,逻 辑 结 构,ORACLE数据库在逻辑上是由一个或多个表空间组成。主要分为系统表空间和非系统表空间。系统表空间存数据字典,非系统表空间内存储着各项应用的数据、索引、存储过程等相关信息。一个表空间由一组分类段(Segments)组成 一个段由一组范围(Extents)组成 一个范围由一批数据库块(Blocks)组成 一个数据库块对应一个或多个物理块(OS Blocks),数据存储单位,A、Block 数据块:2K,4K,8K,16K(有的系统甚至可以达到32K)最小的I/O单位,Oracle 9i 数据库系统支持多数块结构。B、Extent 一组连续的数据块C、Segment 段:有共同结构的一个或几个区域(Extent)数据对象以 段的形式存在(Table,Index,等)D、Tablespace 表空间:逻辑上用来保存各种Segment,物理上有多个操作系统文件组成。E、File 文件:属于某个表空间的物理文件,数据库块(Database Block),数据块是Oracle数据库最小的I/O单位,又称逻辑块或ORACLE块。一个数据库块对应一个或多个物理块,块的大小由参数DB_BLOCK_SIZE确定。,数据块(Block)的格式,PCTFREE=20%,PCTUSED=40%,数据块(block)的结构,块空间的使用,数据块(Block)的存储参数,默认值Pctfree 10Pctfree,Pctused是互相消涨的,其和不能超过100Pctused 40Inittrans 1(或者 2)在单一块中最初活动的事务数Maxtrans 255在单一块中最大事务数常见的几种分配方案:大量Update操作Pcrfree 20Pctused 40大量Insert,Select,少量UpdatePctfree 5Pctused 60体积大的表,Select较多Pctfree 5Pctused 90仅仅用于查询的(DSS)Pctfree 0确省,用于行的UPDATE操作,在遭遇到PCTFREE后,这块被填满且不能进行INSERT操作。,PCTFREE,PCTFREE 的影响,Pctfree,低,高,1、可把块填 得较满2、易引起行迁移,1、剩下多的空间给以后修改用2、需更多的块存数据3、减少行链和重组数据的代价,用于行的INSERT的操作,当块的百分比小于PCTUSED时,可通过行DELETE或UPDATE来减少列存储。,PCTUSED,行链接(Row Chain)和 行迁移(Row Migration),Before update,After update,范围(Extent),一个范围由一组数据库块组成,范围是由段分配的,分配的第一个范围称初始范围(initial),以后分配的范围称增量范围(next)。下述情况下分配子段段创建时 扩展时修改时下述情况下释放子段删除时修改时清空时(Truncated)自动改变大小时(仅对回滚段),决定Extent的参数,决定extent的参数,initial 最初分配的空间next 下一步分配的空间数maxextents 最大分配的extent数minextents 最小分配的extnet数pctincrease 增长率,指数级增长,optimal 尽量设小,或为0(缺省为空,仅用于回滚段)freelist,存储参数的设定规则,1、在对象级的存储参数设置值覆盖表空间级的设置2、未在对象级设置存储参数,由表空间级数设置决定3、未在表空间级设置存储参数,由Oracle数据库级参数设置决定4、若存储参数改变后,新的选项只针对未分配的extents有效。,表空间、表、索引、分区、快照、快照日志 的存储参数,默认值 最小值Initial 5个数据块 2个数据块Next 5个数据块 1个数据块Minextents 1 1Maxextents根据数据块大小而定 1Pctincrease 50 0推荐使用的参数规则,使用大小一致的,增长率较低存储分配:initial=next表空间的pctincrease 1其它数据对象pctincrease 0,段(Segment),表空间可以由一个或多个段组成段无法跨越表空间,但是段可以跨越属于同一表空间的多个数据文件每个段由一个或多个分区组成空间管理信息包含在:表空间 TS$文件FILE$段 SEG$用过的子段UET$用户限额TSQ$空闲的子段FET$,Segment中常见的十种不同类型的存储对象,(1)table 表(2)view 视图(实为一个select语句)(3)index 索引(4)cluster 簇(5)sequence 序列(6)synonme 定义另一个数据库对象同义词(7)snapshot 快照(8)stored procedure(function)存储过程(函数)(9)package 程序包(10)db trigger 数据触发器,Oracle 9i 表空间管理,表空间(Tablespace),表空间对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。,常见的表空间名称,系统表空间(System),包含的数据文件称为系统数据文件。存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。,临时表空间(Temporary),包含的数据文件称为临时数据文件主要存放用户的排序等临时数据临时段占有的空间会在下次系统启动的时候全部被释放,回滚段表空间(Rollback),包含的数据文件就是回滚数据文件 回滚段是用来临时存放修改前的数据(UNDO)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,回滚段的工作方式,一个回滚表空间可以被划分成多个回滚段.一个回滚段可以保存多个会话的数据.回滚段是一个圆形的数据模型,用户表空间(User),包含的数据文件称为用户数据文件 一般是由用户建立,来存取用户数据的表空间 一般有两类常见的用户型数据,数据和索引,如果条件许可的话,建议考虑放在不同的磁盘上。,创建新表空间的命令,CREATE TABLESPACE testspace DATAFILE/usr/testTablespace/testspace1.dbf SIZE 100M,/usr/testTablespace/testspace2.dbf SIZE 100MAUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITEDMINIMUM EXTENT 25MDEFAULT STORAGE(INITIAL 128K NEXT 128KMINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0);,空间不足怎么办?创建数据文件,通