Oracle数据库中级培训.ppt

上传人:仙人指路1688 文档编号:2998945 上传时间:2023-03-07 格式:PPT 页数:190 大小:1.45MB
返回 下载 相关 举报
Oracle数据库中级培训.ppt_第1页
第1页 / 共190页
Oracle数据库中级培训.ppt_第2页
第2页 / 共190页
Oracle数据库中级培训.ppt_第3页
第3页 / 共190页
Oracle数据库中级培训.ppt_第4页
第4页 / 共190页
Oracle数据库中级培训.ppt_第5页
第5页 / 共190页
点击查看更多>>
资源描述

《Oracle数据库中级培训.ppt》由会员分享,可在线阅读,更多相关《Oracle数据库中级培训.ppt(190页珍藏版)》请在三一办公上搜索。

1、第一章 数据库的启动和关闭,数据库关闭(SHUTDOWN),数据库启动(STARTUP),CHEESE,数据库关闭(SHUTDOWN),SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。,SHUTDOWN有四个参数:NORMAL、TRANSACTIONAL、IMMEDIATE、ABORT。,SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并

2、关闭数据文件。启动时不需要实例恢复。SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。,SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。,注意:缺省不带任何参数时表示是NORMAL。,数据库启动(STARTUP),STARTUP OPEN:STARTUP缺省

3、的参数就是OPEN,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。STARTUP MOUNT:MOUNT数据库,仅仅给DBA进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。,启动语法:STARTUP FORCE RESTRICT PFILE=filename OPEN RECOVER database|MOUNT|NOMOUNT,STARTUP NOMOUNT:仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能任何访问数据库。STARTUP PFILE=filename:以filena

4、me为初始化文件启动数据库,不是采用缺省初始化文件。STARTUP FORCE:中止当前数据库的运行,并立即开始重新正常的启动数据库。,STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。STARTUP RECOVER:数据库启动,并开始介质恢复。,启动和关闭数据库都做了些什么?,shutdownnomount过程:读初始参数文件 寻找参数文件顺序:spfile.ora spfile.ora init.ora 分配物理内存 启动后台进程 定位到控制文件 打开/写alert文件,nomountmount过程:打开控制文件 确认 database的

5、结构信息以下任务必须在mount状态下进行:命名数据文件、启用和禁用重作日志归档选项、执行完全数据库恢复,mountopen过程:打开数据文件 打开重做日志文件 最后阶段中,oracle服务器验证所有数据文件和重做日志文件是否可以打开,并检查数据库的一致性,如果需要,smon进程会启动例程恢复。,各状态下可访问的动态视图,nomount过程可以访问的动态性能视图:v$parameter,v$sga,v$option,v$process,v$version,v$instancemount过程可以访问的动态性能视图:v$thread,v$controlfile,v$database,v$dataf

6、ile,v$datafile_header,v$logfile OPEN状态下可访问的动态性能视图:所有,第二章 控制文件,什么信息记录在控制文件里:1.控制文件所属的数据库名称,一个控制文件只能属于一个数据库2.相关的数据文件和重做日志文件的名称、位置、联机/脱机状态信息3.数据库创建的时间信息4.当前重日志序号(log sequen)5.当前检查点信息6.Recovery Manager(RMAN,恢复管理器)的备份信息,多路复用(multiplexing)控制文件,方法和步骤:1.修改初始化参数CONTROL_FILESsqlalter system set control_files=

7、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.dbf5.开启服务开启服务:OracleServerORCL服务、OracleDBConsoleorcl服务6.开启数据库sqlplus sys/passwd as

8、 sysdbasqlstartup,管理控制文件的大小,控制文件的大小主要决定于创建数据库时,CREATE DATABASE指定的几个MAX子句的值:maxdatafiles-指定最大数据文件个数 maxlogfiles-指定最大重做日志文件个数 maxlogmembers-指定重做日志文件中每个组 的成员个数 maxloghistory-指定控制文件可记载的重做日志历史的最大个数 maxinstances-指定可以同时访问数据库的最大例程的个数,创建控制文件结构,create controlfile reuse database“cheese noresetlogs noarchivelog

9、,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

10、database语句中指定的,创建新控制文件步骤,1.制作一个包含数据库的所有数据文件和重做日志文件的列表select member from v$logfile;select name from v$datafile;select name from v$controlfile;2.关闭数据库shutdown immediate3.将数据库的所有数据文件、重做日志文件、spfile参数文件备份到其他地方4.启动一个新的例程,但不要装载或打开数据库sqlstartup nomount5.使用create controlfile语句为数据库创建一个新的控制文件6.在离线存储设备上存储新的控制文件

11、备份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.修改数据库初始化参数文件spf

12、ile中的初始化参数control_files,删除不再需要的控制文件名称alter system set control_files=d:democontrol01.ctl,d:democontrol02.ctl,d:democontrol03.ctl scope=spfile;2.关闭数据库SHUTDOWN immediate3.删除不再需要的数据文件sqlhost del d:cheesecontrol04.ctl4.重启数据库alter database open;5.使用数据库,查询与控制文件相关的数据字典视图,v$controlfile-控制文件名称v$controlfile_re

13、cord_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前

14、)服务器参数文件(Server Parameter Files):spfile(可动态修改:alter sesion、alter system),Oracle数据库创建过程,create spfile=C:oracleproduct10.2.0db_1databasespfile.ora FROM pfile=C:oracleadmin cheesescriptsinit.ora;通过.bat-CreateDB.sql-init.ora 创建数据库完成后,进行后续处理 postDBCreation.sql-startup nomount pfile=c:oracleadmincheesescr

15、iptsinit.ora;,spfile 的创建,create spfile from pfile;v$spparameter-查看,Oracle 并没有向其他文件一样,在运行时间保持锁定,做个实验:sqlhost rename spfile.ora spfile.ora.backsqlalter system set db_cache_size=2m scope=both;sqlhost dir*.orasqlalter system set db_cache_size=2m scope=spfilesqlhost rename spfile.ora.bak spfile.ora,spfil

16、e的搜索顺序,spfile.ora-spfile.ora-initlog_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 syst

17、em 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

18、=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

19、null;-不是0是spfileselect*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;exitselect*from v$rman_configurati

20、on;,使用自动备份恢复spfile文件(不能mount,不可使用)rman target/restore spfile to/tmp/spfileorcl.ora from autobackup;exit,恢复自动备份的控制文件(不能mount,不可使用)rman target/restore controlfile to/tmp/control01.ctl from autobackup;Exitnomount状态下必须指定文件rman target/restore spfile to/tmp/spfile.ora from c-3152029224-20060509-00;exit,导出

21、spfile文件,create pfile=d:demoinitorcl.ora from spfile;shutdown immediatespfile例子: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

22、$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:控制不同块

23、大小的缓冲区大小。5.LOG_BUFFER:控制重做日志缓冲区大小。6.SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。7.SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。,SGA各组件作用,固定SGA:顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。,块缓冲区:查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的

24、I/O性能。块缓冲区中有三个区域:默认池(Default pool):所有数据默认都在这里缓存。保持池(Keep pool):用来缓存需要多次重用的数据。回收池(Recycle pool):用来缓存很少重用的数据。原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。,9i开始,还可以设置db_nk_cache。9

25、i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。,重做日志缓冲区(Redo log buffer):数据写到重做日志文件之前在这里缓存,在以下情况中触发:每隔3秒 缓存达到1MB或1/3满时 用户提交时 缓冲区的数据写入磁盘前,Java池(Java pool):在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JA

26、VA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。,大池(Large pool):下面三种情况使用到大池:并行执行:存放进程间的消息缓冲区 RMAN:某些情况下用于磁盘I/O缓冲区 共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)流池(Stream pool)9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。,共享池(Shared pool)共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。SQL和PL/SQL代码在执行前

27、会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。不使用“绑定变量”导致:系统需要花费大量的资源去解析查询。共享池中的代码从不重用,系统花费很大代价管理这部分内存。需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。,SGA设置,没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。

28、这里只是总结出大体的设定,避免因SGA设置不当引起的问题。,自动SGA内存管理 在Oracle 10g中引入了自动SGA内存管理特性,DBA可以设定SGA_TARGET告诉Oracle可用的SGA内存为多大,由Oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。需要注意一下几点:要使用自动SGA内存管理,STATISTICS_LEVEL参数必须设为TYPICAL或ALL,系统自动收集相应的信息用来动态调整SGA设定。可以设定某个组件的值,Oracle使用此值为该组件的最小大小可动态调整的参数:DB_CACHE_SIZE,SHARED_PO

29、OL_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*

30、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竞争。LAR

31、GE_POOL_SIZE:使用专用服务模式可设为30MB,除非必要,不然不建议使用共享服务器模式。DB_CACHE_SIZE:除去上述内存外其他可用内存都分配给该区域。,内存和操作系统的联系,系统shmmax决定物理内存大小echo 10000000/pro/sys/kernel/shmmax要想重启生效,修改/etc/sysctl.conf文件ipcs-sa-显示共享内存分配情况kernel.shmmax=10000000rootlocalhost#ipcs-sa-Shared Memory Segments-key shmid owner perms bytes nattch status

32、 0 x00000000 32768 root 644 72 2 0 x00000000 65537 root 644 16384 2 0 x00000000 98306 root 644 280 2 0 x00000000 131075 gdm 600 393216 2 dest 0 xd2f70b08 163844 oracle 640 169869312 18 ipcrm-q 163844-释放共享内存,如何诊断和解决CPU高度消耗(100%)问题1.通过top命令查看top-找到有问题的pid2.找到存在问题的进程信息ps-ef|grep 20521-找到问题的进程3.捕获存在问题的S

33、Ql语句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 205

34、21 查出的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 Entr

35、ies)形式存储(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 F

36、ile同样是循环使用的。,Redo的原理:我们知道,用户数据通常在Buffer Cache中修改,Oracle通过高速缓存来提高数据操作的性能。当用户在Buffer Cache中修改数据时,Oracle并不会立即将变更数据写出到数据文件上,因为独立的离散写出效率会很低。到目前为止,计算机系统中最容易出现瓶颈的仍然是磁盘的I/O操作,Oracle这样做的目的是为了减少IO的压力,当修改过的数据达到一定数量之后,可以进行高效地批量写出。大部分传统数据库(当然包括Oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故

37、障时(例如:断电)可以恢复,Oracle引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应等性能提升。同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省的,数据库创建时会建立3个日志组。Select*from v$log;当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回数据库。在检查点完成之前,日志文件是不能被重用的。,由于R

38、edo机制对于数据的保护,当数据库发生故障时,Oracle就可以通过Redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何开始呢?如果读取的Redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必须保证恢复时间尽量的短。Oracle通过检查点(Checkpoint)来缩减恢复时间。检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。当检查点发生时(此时的SCN被称为Checkpoint SCN)Oracle会通知DBWR进程,把修改过的数据,也就是此Checkpoint SCN之前的脏数据(Dirty Duffer)从Buffer Cache写入磁盘,在检查点完成后CK

39、PT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。,为了了解Redo的内容,需要了解两个概念:1.改变向量(Change Vestor):改变向量表示对数据库内某一个数据块所做的一次更改。其中包含了变更的版本号、事务操作代码、变更从属数据块地址(

40、DBA)以及更新后的数据。2.重做记录(Redo Record):重做记录通常有一组改变向量组成,是一个改变向量的集合,代表一个数据库的变更(insert、update、delete等操作),构成数据库变更的最小恢复单位。3.改变向量3.这里记录的是对数据块的修改4.改变向量4。当事务提交之后,记录的SCN信息,注意“MEDIA RECOVERY MARKERSCN,也就是说,这是一个可以恢复的时间点,事务的恢复,必须Redo Record为最小单位,产生多少Redo(试验)set autotrace trace statinsert into cheese select*from chees

41、e;col name for a30select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic#and a.name=redo size;-查看session的统计信息insert into cheese select*from cheese;select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic#and a.name=redo size;-查看增加了select 24650-2458

42、0 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将

43、要写出的数据的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 Buff

44、er 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 logfil

45、e;-切换日志文件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

46、sal=4000 where empno=7788;是怎么执行的?1.检查empno=7788记录在Buffer Cache中是否存在,如果不存在则读到Buffer Cache中2.在回滚表空间的相应回滚段事务表上分配事务槽,这个操作需要记录Redo信息3.从回滚段读入或者在Buffer Cache中创建sal=3000的前镜像,这需要产生Redo信息并计入Redo Log Buffer4.修改Sal=4000,这是update的数据变更,需要记录入Redo Log buffer5.当用户提交时,会在Redo Log Buffer记录提交信息,并在回滚段标记该事物为非激活(INACTIVE)注

47、意:回滚过程也要产生redo,所以这个操作是很昂贵的,回滚段存储的内容,UNDO中只记录精简信息,这些信息足以撤销事务对于insert操作,回滚段只记录插入记录的rowid,如果回退,只需将该记录根据rowid删除即可;对于update操作,回滚段只需记录被更新的字段的旧值即可(前映像),回退时通过旧值覆盖新值即可完成回滚;对于delete操作,oracle则必须记录整行的数据,在回滚时,Oracle通过一个反向操作恢复删除的数据。,创建一个新的undo表空间,切换到这个undo表空间create undo tablespace undotbs2 datafile size 50m;alter

48、 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

49、Query)2.闪回事务查询(Flashback Transaction Query),使用Flashback Query恢复误删除数据首先先确认数据库的SCN变化:col fscn for 9999999999999999999col nscn for 9999999999999999999select 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-1

50、2930142214使用应用用户连接数据库尝试闪回:connect username/passwordselect 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

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号