免费预览已结束,剩余185页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 数据库的启动和关闭,数据库关闭(shutdown),数据库启动(startup),cheese,数据库关闭(shutdown),shutdown normal:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 shutdown normal:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。,shutdown有四个参数: normal、transactional、immediate、abort。,shutdown transactional:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 shutdown immediate:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。,shutdown abort:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。shutdown abort:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。,注意: 缺省不带任何参数时表示是normal。,数据库启动(startup),startup open:startup缺省的参数就是open,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。 startup mount:mount数据库,仅仅给dba进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。,启动语法: startup force restrict pfile= filename open recover database | mount | nomount,startup nomount:仅仅通过初始化文件,分配出sga区,启动数据库后台进程,没有打开控制文件和数据文件。不能任何访问数据库。 startup pfile= filename:以filename为初始化文件启动数据库,不是采用缺省初始化文件。 startup force:中止当前数据库的运行,并立即开始重新正常的启动数据库。,startup restrict:只允许具有restricted session权限的用户访问数据库。 startup recover:数据库启动,并开始介质恢复。,启动和关闭数据库都做了些什么 ?,shutdownnomount过程: 读初始参数文件 寻找参数文件顺序: spfile.ora spfile.ora init.ora 分配物理内存 启动后台进程 定位到控制文件 打开/写alert文件,nomountmount过程: 打开控制文件 确认 database的结构信息 以下任务必须在mount状态下进行: 命名数据文件 、启用和禁用重作日志归档选项 、执行完全数据库恢复,mountopen过程: 打开数据文件 打开重做日志文件 最后阶段中,oracle服务器验证所有数据文件和重做日志文件是否可以打开,并检查数据库的一致性,如果需要,smon进程会启动例程恢复。,各状态下可访问的动态视图,nomount过程可以访问的动态性能视图: v$parameter,v$sga,v$option,v$process,v$version,v$instance mount过程可以访问的动态性能视图: v$thread,v$controlfile,v$database,v$datafile,v$datafile_header,v$logfile open状态下可访问的动态性能视图: 所有,第二章 控制文件,什么信息记录在控制文件里: 1.控制文件所属的数据库名称,一个控制文件只能属于一个数据库 2.相关的数据文件和重做日志文件的名称、位置、联机/脱机状态信息 3.数据库创建的时间信息 4.当前重日志序号(log sequen) 5.当前检查点信息 6.recovery manager(rman,恢复管理器)的备份信息,多路复用(multiplexing)控制文件,方法和步骤: 1.修改初始化参数control_files sqlalter system set control_files= d:democontrol01.dbf, d:democontrol02.dbf, d:democontrol03.dbf, c:democontrol04.dbf scope=spfile; 2.退出sql*plus,关闭数据库 3.关闭服务:oracleserverorcl服务、oracledbconsoleorcl服务 4.复制现有的控制文件 sqlhost copy d:democontrol01.dbf c:democontrol04.dbf 5.开启服务 开启服务:oracleserverorcl服务、oracledbconsoleorcl服务 6.开启数据库 sqlplus sys/passwd as sysdba sqlstartup,管理控制文件的大小,控制文件的大小主要决定于创建数据库时,create database指定的几个max子句的值: maxdatafiles -指定最大数据文件个数 maxlogfiles -指定最大重做日志文件个数 maxlogmembers -指定重做日志文件中每个组 的成员个数 maxloghistory -指定控制文件可记载的重做日志历史的最大个数 maxinstances -指定可以同时访问数据库的最大例程的个数,创建控制文件结构,create controlfile reuse database “cheese“ noresetlogs noarchivelog,logfile group 1 d:demoredo01.log size 10m, group 2 d:demoredo02.log size 10m, group 3 d:demoredo03.log size 10m,datafile d:demosystem01.dbf, d:demosysaux01.dbf, d:demoundotbs01.dbf, d:demousers01.dbf,character set zhs16gbk;,何时创建新的控制文件,1.所有数据库的控制文件都遭到永久性损坏,并且还没有任何控制文件备份 2.希望改变某个数据库参数的永久性设置,这些参数最初是在create database语句中指定的,创建新控制文件步骤,1.制作一个包含数据库的所有数据文件和重做日志文件的列表 select member from v$logfile; select name from v$datafile; select name from v$controlfile; 2.关闭数据库 shutdown immediate 3.将数据库的所有数据文件、重做日志文件、spfile参数文件备份到其他地方 4.启动一个新的例程,但不要装载或打开数据库 sqlstartup nomount 5.使用create controlfile语句为数据库创建一个新的控制文件 6.在离线存储设备上存储新的控制文件备份 7.编辑control_files初始化参数 8.有必要可以恢复数据库 9.打开数据库 alter database open; 或 alter database open resetlogs;,备份控制文件,1.将控制文件备份为二进制文件 alter database backup controlfile to g:backupcontrol.bkp; 2.将控制文件备份为文本文件 alter database backup controlfile to trace; 查看控制文件跟踪备份 show parameter user_dump_dest,删除控制文件,删除步骤: 1.修改数据库初始化参数文件spfile中的初始化参数control_files,删除不再需要的控制文件名称 alter system set control_files= d:democontrol01.ctl, d:democontrol02.ctl, d:democontrol03.ctl scope=spfile; 2.关闭数据库 shutdown immediate 3.删除不再需要的数据文件 sqlhost del d:cheesecontrol04.ctl 4.重启数据库 alter database open; 5.使用数据库,查询与控制文件相关的数据字典视图,v$controlfile -控制文件名称 v$controlfile_record_section -控制文件记录文档的信息 v$parameter -初始化参数cintrol_files指定控制文件名称 show parameter control_files -查看控制文件 select name from v$controlfile; -查看控制文件名称 select type,record_size,records_total,records_used from v$controlfile_record_section; -查看控制文件记录文档段的信息,第三章 参数文件,参数文件 初始化参数文件(initialization parameter files):pfile(9i前) 服务器参数文件(server parameter files):spfile(可动态修改:alter sesion 、alter system),oracle数据库创建过程,create spfile=c:oracleproduct10.2.0db_1databasespfile.ora from pfile= c:oracle admin cheesescriptsinit.ora; 通过.bat createdb.sql init.ora 创建数据库完成后,进行后续处理 postdbcreation.sql startup nomount pfile=“c:oracleadmincheesescriptsinit.ora“;,spfile 的创建,create spfile from pfile; v$spparameter -查看,oracle 并没有向其他文件一样,在运行时间保持锁定,做个实验: sqlhost rename spfile.ora spfile.ora.back sqlalter system set db_cache_size=2m scope=both; sqlhost dir *.ora sqlalter system set db_cache_size=2m scope=spfile sqlhost rename spfile.ora.bak spfile.ora,spfile的搜索顺序,spfile.ora spfile.ora init log_archive_start 来设置用pfile中的设置来代替spfile中的设置(用pfile中的参数覆盖spfile中的参数),修改参数,alter system命令scope选项有3个参数: memory:只改变当前实例运行,重启参数后失效 spfile:只改变spfile的设置,不改变当前实例运行,重启动数据库后生效 both:同时改变实例及spfile,当前更改立即生效,重新启动数据库后仍然有效 alter system set log_archive_start=false scop=memory; alter system set log_archive_start=false scop=spfile; alter system set log_archive_start=false scop=both; 注意:对与静态参数只能指定scope=spfile进行修改,查看参数值,select name,value from v$spparameter where name=db_cache_advice; alter system set open_cursors=500 sid=* scope=memory; -对所有实例起作用(适用于rac) alter system set open_cursors=500 sid=orcle scope=spfile; -对指定数据库进行修改,恢复某个参数为默认值(重置参数、缺省参数),alter system reset open_cursors scop=spfile sid=sid|*; alter system reset open_cursors scop=spfile sid=*;,查看是否使用spfile,select name,value from v$parameter where name=spfile; show parameter spfile; select count(*) from v$spparameter where value is not null; -不是0是spfile select * from v$spparameter where value is not null and name=open_cursors; select decode(count(*),1,pfile,spfile) used from v$spparameter where rownum=1 and isspecified=ture;,spfile 文件备份与恢复,rman自动备份spfile文件 rman target / configure controlfile autobackup on; exit select * from v$rman_configuration;,使用自动备份恢复spfile文件(不能mount,不可使用) rman target / restore spfile to /tmp/spfileorcl.ora from autobackup; exit,恢复自动备份的控制文件(不能mount,不可使用) rman target / restore controlfile to /tmp/control01.ctl from autobackup; exit nomount状态下必须指定文件 rman target / restore spfile to /tmp/spfile.ora from c-3152029224-20060509-00; exit,导出spfile文件,create pfile=d:demoinitorcl.ora from spfile; shutdown immediate spfile例子: alter system set undo_tablespace=undotbs2 scope=memory; -替换表空间 drop tablespace “undotbs1“ including contents and datafiles cascade constraints; -删除undo表空间,第四章 内存管理,内存结构: 包括sga和pga。使用内存最多的是sga,同时也是影响数据库性能的最大参数,sga,select * from v$sgainfo; -查看sga信息 sga由多个部分组成: 1. 固定sga(fixed sga) 2.块缓冲区(db cache) 3.重做日志缓冲区(redo log buffer) 4.java池(java pool) 5.大池(large pool) 6.共享池(shared pool) 7.流池(stream pool),有如下参数控制共享池相关组件大小: 1.java_pool_size:控制java池大小。 2. shared_pool_size:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。 3. large_pool_size:控制大池大小。 4. db_*k_cache_size:控制不同块大小的缓冲区大小。 5. log_buffer:控制重做日志缓冲区大小。 6.sga_target:10g以上控制自动sga内存管理的总内存大小。 7.sga_max_size:控制sga可以达到的最大大小,改变需重启数据库。,sga各组件作用,固定sga: 顾名思义,是一段不变的内存区,指向sga中其他部分,oracle通过它找到sga中的其他区,可以简单理解为用于管理的一段内存区。,块缓冲区: 查询时,oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,oracle可以通过内存缓存提高磁盘的i/o性能。 块缓冲区中有三个区域: 默认池(default pool):所有数据默认都在这里缓存。 保持池(keep pool):用来缓存需要多次重用的数据。 回收池(recycle pool):用来缓存很少重用的数据。 原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘i/o增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。 这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。,9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2kb,4kb,8kb,16kb,32kb),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。,重做日志缓冲区(redo log buffer): 数据写到重做日志文件之前在这里缓存,在以下情况中触发: 每隔3秒 缓存达到1mb或1/3满时 用户提交时 缓冲区的数据写入磁盘前,java池(java pool): 在数据库中运行java代码时用到这部分内存。例如:编写java存储过程在服务器内运行。需要注意的是,该内存与常见的java编写的b/s系统并没关系。用java语言代替pl/sql语言在数据库中写存储过程才会用到这部分内存。,大池(large pool): 下面三种情况使用到大池: 并行执行:存放进程间的消息缓冲区 rman:某些情况下用于磁盘i/o缓冲区 共享服务器模式:共享服务器模式下uga在大池中分配(如果设置了大池) 流池(stream pool) 9ir2以上增加了“流”技术,10g以上在sga中增加了流池。流是用来共享和复制数据的工具。,共享池(shared pool) 共享池是sga中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。 sql和pl/sql的解释计划、代码,数据字典数据等等都在这里缓存。sql和pl/sql代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。 不使用“绑定变量”导致: 系统需要花费大量的资源去解析查询。 共享池中的代码从不重用,系统花费很大代价管理这部分内存。 需要注意的是,shared_pool_size参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。,sga设置,没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。这里只是总结出大体的设定,避免因sga设置不当引起的问题。,自动sga内存管理 在oracle 10g中引入了自动sga内存管理特性,dba可以设定sga_target告诉oracle可用的sga内存为多大,由oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。 需要注意一下几点: 要使用自动sga内存管理,statistics_level参数必须设为typical或all,系统自动收集相应的信息用来动态调整sga设定。 可以设定某个组件的值,oracle使用此值为该组件的最小大小 可动态调整的参数: db_cache_size,shared_pool_size,large_pool_size,java_pool_size 需手动设置的参数: log_buffer, streams_pool, db_nk_cache_size, db_keep_cache_size,db_recycle_cache_size。,手动sga内存管理 1) 32bit和64bit限制 在32位的操作系统中,oracle最大可用内存为1.75g,也就是说sga+pga=1.75g,超过这一限制的内存将不会被oracle用到。 32位的oracle可以装到64位的操作系统上,64位的oracle不可以装到32位的操作系统上。,2) 查看oracle版本: sql select * from v$version; 3) 各组件设置: java_pool_size:如果没用到数据库端java的系统,30mb足够。 log_buffer:默认为max(512kb,128kb*cpu个数)。一般系统1mb足够,运行大型事务的系统可以设为2mb,让1/3满写入日志文件时可以继续写入缓冲,再大也没有意义。 shared_pool_size:过大过小都会严重影响系统性能,1gb内存可以设为100mb,2gb内存可设为150mb,4gb内存可设为300mb。共享池命中过低首先要调整的是应用程序而不是扩大共享池。使用绑定变量可以减少共享池需求、提高命中率,减少共享池管理负担和latch竞争。 large_pool_size:使用专用服务模式可设为30mb,除非必要,不然不建议使用共享服务器模式。 db_cache_size:除去上述内存外其他可用内存都分配给该区域。,内存和操作系统的联系,系统shmmax决定物理内存大小 echo 10000000/pro/sys/kernel/shmmax 要想重启生效,修改/etc/sysctl.conf文件 ipcs -sa -显示共享内存分配情况 kernel.shmmax=10000000 rootlocalhost # ipcs -sa - shared memory segments - key shmid owner perms bytes nattch status 0x00000000 32768 root 644 72 2 0x00000000 65537 root 644 16384 2 0x00000000 98306 root 644 280 2 0x00000000 131075 gdm 600 393216 2 dest 0xd2f70b08 163844 oracle 640 169869312 18 ipcrm -q 163844 -释放共享内存,如何诊断和解决cpu高度消耗(100%)问题 1.通过top命令查看 top -找到有问题的pid 2.找到存在问题的进程信息 ps -ef | grep 20521 -找到问题的进程 3.捕获存在问题的sql语句 select /*+ ordered */ sql_text from v$sqltext a where (a.hash_value,a.address) in( select decode (sql_hash_value,0,prev_hash_value,sql_hash_value), decode(sql_hash_value,0,prev_sql_addr,sql_address) from v$session b where b.paddr=(select addr from v$process c where c.spid= -获得session相关联的信息(输入ps -ef | grep 20521 查出的pid号) 4.连接数据库,找到问题sql及过程 5.进一步跟踪,第五章 重做(redo),redo的作用: oracle通过redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。redo对于oracle数据库来说至关重要。 在数据库中,redo的功能主要通过3个组件来实现: redo log buffer、lgwr后台进程和redo log file(在归档模式下,redo log file最终会经由arcn进程写出为归档日志文件)。 redo log buffer位于sga之中,是一块循环使用的内存区域,其保存数据库变更的相关信息。这些信息以重做条目(redo entries)形式存储(redo entries也经常称为redo records)。redo entries包含重构、重做数据库变更的重要信息,这些变更包括insert、update、delete、create、alter或者drop等。 redo entries的内容被oracle数据库进程从用户的内存空间(pga)复制到sga中的redo log buffer之中。redo entries在内存中占用连续的顺序空间,由于redo log buffer是循环使用的,oracle通过一个后台进程lgwr不断把redo log buffer的内容写出到redo log file中,redo log file同样是循环使用的。,redo的原理: 我们知道,用户数据通常在buffer cache中修改,oracle通过高速缓存来提高数据操作的性能。当用户在buffer cache中修改数据时,oracle并不会立即将变更数据写出到数据文件上,因为独立的离散写出效率会很低。到目前为止,计算机系统中最容易出现瓶颈的仍然是磁盘的i/o操作,oracle这样做的目的是为了减少io的压力,当修改过的数据达到一定数量之后,可以进行高效地批量写出。 大部分传统数据库(当然包括oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如:断电)可以恢复,oracle引入了redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应等性能提升。 同redo log buffer类似,redo log file也是循环使用的,oracle允许使用最少两个日志组。缺省的,数据库创建时会建立3个日志组。 select * from v$log; 当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为log switch。log switch会触发一个检查点,促使dbwr进程将写满的日志文件保护的变更数据写回数据库。在检查点完成之前,日志文件是不能被重用的。,由于redo机制对于数据的保护,当数据库发生故障时,oracle就可以通过redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何开始呢?如果读取的redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必须保证恢复时间尽量的短。 oracle通过检查点(checkpoint)来缩减恢复时间。检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。 当检查点发生时(此时的scn被称为checkpoint scn)oracle会通知dbwr进程,把修改过的数据,也就是此checkpoint scn之前的脏数据(dirty duffer)从buffer cache写入磁盘,在检查点完成后ckpt进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。 在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。,为了了解redo的内容,需要了解两个概念: 1.改变向量(change vestor):改变向量表示对数据库内某一个数据块所做的一次更改。其中包含了变更的版本号、事务操作代码、变更从属数据块地址(dba)以及更新后的数据。 2.重做记录(redo record):重做记录通常有一组改变向量组成,是一个改变向量的集合,代表一个数据库的变更(insert、update、delete等操作),构成数据库变更的最小恢复单位。 3.改变向量3.这里记录的是对数据块的修改 4.改变向量4。当事务提交之后,记录的scn信息,注意“media recovery markerscn“,也就是说,这是一个可以恢复的时间点,事务的恢复,必须redo record为最小单位,产生多少redo(试验) set autotrace trace stat insert into cheese select * from cheese; col name for a30 select ,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and =redo size; -查看session的统计信息 insert into cheese select * from cheese; select ,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and =redo size; -查看增加了 select 24650-24580 from dual;,redo写的触发条件,lgwr写触发条件有四个: 1.每3秒超时(timeout) 当lgwr处于空闲状态时,它依赖与rdbms ipc message等待,处于休眠状态,直到3秒超时时间到 2.阀值达到 redo log buffer 1/3满(缺省的_log_io_size等于1/3log buffer大小上线值为1mb,一般产检的经验推荐是将log buffer设置为3mb大小,就是因为3mb同时满足两个条件) redo log buffer具有1mb的脏数据 3.用户提交 当一个事务提交时,在redo stream中将记录一个提交标记。 4.dbwn写之前 如果dbwn将要写出的数据的high rba超过lgwr的on-disk rba,dbwr将通知lgwr去执行写出(否则这部分数据在recovery时将无法恢复)。,redo log buffer的大小设置,redo log buffer的大小设置 redo log buffer的大小由初始化参数log_buffer定义,该参数的缺省值为max(512kb,128kb*cpu_count) log_buffer参数的设置是否需要调整,可以从数据库的等待事件来判断: select event#,name from v$event_name where name=log buffer space; -当log buffer space等待事件出现并且较为显著时,可以考虑增大log buffer以减少竞争。 日志文件的大小 select group#,thread#,sequence#,bytes/1024/1024 “m bytes“ from v$log; -查询redo日志大小,如何设置日志文件的大小,select * from v$log; select * from v$logfile; alter dataabse add logfile group 4 /oracle/app/oracle/oradata/demo/redo04.log size 1m; -添加日志组 alter system switch logfile; -切换日志文件 alter dataabse drop logfile group 1; -删除日志组文件(inactive状态下的可删除) alter system archive log sequence 80; -手工归档日志 sql!rm /oracle/app/oracle/oradata/demo/redo01.log -清除redo数据文件 alter database add logfile group 3 /oracle/app/oracle/oradata/demo/redo03.log size 1m reuse; -重新初始化使用日志,第六章 回滚与撤销,update emp set sal=4000 where empno=7788;是怎么执行的? 1.检查empno=7788记录在buffer cache中是否存在,如果不存在则读到buffer cache中 2.在回滚表空间的相应回滚段事务表上分配事务槽,这个操作需要记录redo信息 3.从回滚段读入或者在buffer cache中创建sal=3000的前镜像,这需要产生redo信息并计入redo log buffer 4.修改sal=4000,这是update的数据变更,需要记录入redo log buffer 5.当用户提交时,会在redo log buffer记录提交信息,并在回滚段标记该事物为非激活(inactive) 注意:回滚过程也要产生redo,所以这个操作是很昂贵的,回滚段存储的内容,undo中只记录精简信息,这些信息足以撤销事务 对于insert操作,回滚段只记录插入记录的rowid,如果回退,只需将该记录根据rowid删除即可; 对于update操作,回滚段只需记录被更新的字段的旧值即可(前映像),回退时通过旧值覆盖新值即可完成回滚; 对于delete操作,oracle则必须记录整行的数据,在回滚时,oracle通过一个反向操作恢复删除的数据。,创建一个新的undo表空间,切换到这个undo表空间 create undo tablespace undotbs2 datafile size 50m; alter system set undo_tablespace=undotbs2; select * from v$rollname;,转储数据块信息,整个事务过程被完全解析: 1.首先当事务开始时,需要在回滚段事务表上分配一个事务槽 2.在数据块头部取一个itl事务槽,该事务槽指向回滚段头的事务槽 3.在修改数据之前,需要记录前镜像信息,这个信息以undo record的形式存储在回滚段中,回滚段头事务槽指向该记录 4.锁定修改行,修改行锁定位(lb-lock byte)指向itl事务槽 5.数据修改可以进行,oracle闪回查询特性的增强,提供两种闪回查询: 1.闪回版本查询(flashback versions query) 2.闪回事务查询(flashback transaction query),使用flashback query恢复误删除数据 首先先确认数据库的scn变化: col fscn for 9999999999999999999 col nscn for 9999999999999999999 select name,first_change# fscn,next_change# nscn,first_time from v$archived_log; 当前scn为: select dbms_flashback.get_system_change_number fscn from dual; fscn - 12930142214 使用应用用户连接数据库尝试闪回: connect username/password select count(*) from hs_passport;,创建恢复表: create table hs_passport_recov as select * from hs_passport where 1=0; 选择何时scn向前恢复: select count(*) from hs_passport as of scn 12929970422; 尝试多个scn,获得最佳值(如果能得知具体时间,那么就可以获得准确的数据闪回) select coun(*) from hs_passport as of scn ,第七章 索引,引入索引的目的是为了加快查询速度。索引只所以可以提高速度,是因为它们是按查询条件存储数据的,数据量少而且排列有序,便于采用数学方法进行快速定位。另外还提供了一个指向内容的指针,即记录的rowid。,建立必要的索引,建立索引常用的规则如下: 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;,7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: a、正确选择复合索引中的主列字段,一般是选择性较好的字段; b、复合索引的几个字段是否经常同时以and方式出现在where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引; c、如果复合索引中包含的字段经常单独出现在where子句中,则分解为多个单字段索引; d、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段; e、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 8、频繁进行数据操作的表,不要建立太多的索引; 9、删除无用的索引,避免对执行计划造成负面影响;,注意: 在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。,创建索引,b树索引 create index dept_dname_dx on dept(dname) tablespace my_tbs; -创建索引放到my_tbs表空间 create unique index emp_ename_dx on emp(ename) tablespace my_tbs -创建唯一索引放到my_tbs表空间 create index emp_ename_empno_dx on emp(empno,ename) tablespace my_tbs -创建复合索引 位图索引 在列的基数很低时使用 create bitmap index esex_bitmap_dx on employee(esex) tablesapce my_tbs; 反向键索引 特殊的b树索引,适用于有序列数的列上 creat index eid_reverse_dx on employee(eid) reverse tablesapce my_tbs; 基于函数的索引 create index edate_func_dx on employee(to_char(edate,yyyy-mm-dd) tablespace my_tbs;,管理索引,合并和重建索引 alter index ename_dx coalesce deallocate unused; -合并索引 alter index ename_dx rebuild tablespace my_tbs; -重建索引 监视索引 alter index ename_dx monitoring usage; -打开监视索引 select * from v$object_usage; -查看监视索引信息 alter index ename_dx nomonitoring usage; -关闭监视索引 删除索引 drop index emp_ename_dx;,第八章 分区表,为了提高巨型数据库的读写和查询速度,将数据以分区形式保存 分区是指将巨型的表或索引分隔成相对较小的,可独立管理的部分。,5中分类: 1.范围分区 create table mytable( id number primary key, name varchar2(8), subject varchar2(10), score number ) partition by range(score) ( partition part1 values less than(60) tablespace my_tbs, -小于60存储testspace partition part2 values less than(80) tablespace my_tbs, -大于60小于80存储testspace partition part3 values less than(maxvalue) tablespace users -大于80的存储users );,insert into mytb values(1,yang,java,90); -插入数据 insert into mytb values(2,zhao,java,80); -插入数据 insert into mytb values(3,zhang,java,54); -插入数据 insert into mytb values(4,yang,java,70); -插入数据 select * from mytb partition(part1); -查询part1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年浙江省初中物理力学知识点巩固习题
- 2025-2026年福建省部编版初中化学实验原理与操作测试卷
- 2026年天津市苏教版初中数学下册第7章综合测试卷
- 2026年江苏省部编版初中化学元素化合物知识巩固习题
- 2026年辽宁省人教版四年级语文上册第3单元综合测试卷
- 2025-2026年国防教育理念测试卷
- 2026年浙江省部编版初中英语上册第10单元语法练习题
- 2025-2026年四川省人教版初中物理电学知识点巩固习题
- ESG评级体系下PE通讯管套项目环境社会治理绩效与融资成本耦合效应
- AI算力中心液冷管路防护用PET网管热管理协同效应测算
- 性别与社会政策的性别平等-洞察及研究
- 《电机与电气控制基础》中职全套教学课件
- 《休闲食品加工技术》 课件 9 糖果类休闲食品加工技术
- 全国班主任比赛一等奖《班主任经验交流》课件
- 高三月考总结主题班会通用课件
- 新的《道路交通安全法》及《实施条例》图解
- 云南大学呈贡校区学生退宿申请表(外住)
- 第一课我们爱劳动(课件)苏科版劳动一年级上册
- 机械制图识图培训资料课件
- 垃圾清运服务实施方案投标文件(技术方案)
- 加装电梯方案
评论
0/150
提交评论