谁能介绍下oracle数据库的前滚rolling forward原理吗

谁能介绍下oracle数据库的前滚rolling forward原理吗,第1张

偶然的一次,网友在taskmacleancom ASK Maclean Home提问了关于112 上一个ORA-600问题的解决途径,我们这里不讨论该ORA-600[kcratr_nab_less_than_odr]错误, 比这个错误本身更有趣的是 该600 trace中记录了一段对于前滚恢复rolling upgrade描述十分详细的KST trace。

很多网友肯定要问什么是KST KST是9i以后引入的内部诊断机制Tracing Facility,每一个Oracle 进程都维护SGA中的一小块Trace buffer,并将自身的默认启用的一些event事件信息写入到Trace Buffer中(这些事件默认包括10280, 10401, 10441, 10442, 10425, 10427, 10429, 10434, 10666),可以使用内部视图x$trace观察这些信息,默认Trace Buffer不写到磁盘上,而只在SGA中维护,当Trace Buffer用完时将被重用。

了解了 KST的知识后,我们可以从容地阅读下面这段TRACE了:

Trace Bucket Dump Begin: default bucket for process 19 (osid: 29785)

TIME(=approx):SEQ:COMPONENT:FILE@LINE:FUNCTION:SECT/DUMP: [EVENT#:PID:SID] DATA

以上是KST Trace的 头部

COMPONENT 组件名 例如 db_trace 、CACHE_RCV,这里的CACHE_RCV意为 cache recovery,实际上是我们所说的前滚rolling forward。

FILE@LINE 指oracle内核代码的文件名和行数 例如:kstc、kcvc,这些都是oracle的核心C代码名

FUNCTION 指oracle内核函数名 例如kcvcrv()、kctrec()

[EVENT#:PID:SID] 即 EVENT ID:PID:SID

DATA 实际的 *** 作内容

我们选择性地阅读KST TRACE的内容:

2012-02-07 13:40:52755567 :800005B3:CACHE_RCV:kcvc@15475:kcvcrv(): kcvcrv: Entering kcvcrv()2012-02-07 13:40:52755609 :800005B4:KFNU:kfnc@2200:kfnPrepareASM(): kfnPrepareASM force=0 state_kfnsg=0x7

2012-02-07 13:40:52772999:800005B5:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 1 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:52826001:800005B6:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 2 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:52862014:800005B7:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 3 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:52909981:800005B8:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 4 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:52945933:800005B9:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 5 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:52993824:800005BA:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 6 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:53005829:800005BB:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 7 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:53041893:800005BC:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 8 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:53065779:800005BD:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 9 - cpscn 0x0000018b76b2, rsflg 0

2012-02-07 13:40:53089760:800005BE:CACHE_RCV:kcvc@16100:kcvcrv(): kcvcrv: file 10 - cpscn 0x0000018b76b2, rsflg 0

kcvcrv的全称是 [K]ernel [C]ache [R]ecovery [C]rash [R]ecovery [V]erify , kcvcrv内核函数在crash recovery的过程中显得极为重要,它总是发生在当一个前台进程试图启动脏关闭(dirty shutdown)的数据库的时候。kcvcrv 的工作包括检验所有的数据文件头并验证控制文件中的数据文件记录以确认是否需要介质恢复。这个步骤必要地验证仅仅crash recovery是否足以让数据库恢复到一致状态(consistent),相信大家已经耳熟能详 crash recovery 、 instance recovery 、 media recovery 三者的区别。 若kcvcrv发现 data files数据文件、control files控制文件亦或者redo log file在线日志文件存在corrupted 或者 丢失,或者实际上是从之前的备份中还原过来的,那么kcvcrv会强制用户必须使用media recovery才能将数据库恢复到一致,无法通过crash recovery实现恢复。注意 kcvcrv的检测并不是完全的,它主要是检测 数据文件头的checkpoint scn 和 控制文件中data files的checkpoint scn是否一致,以确保 这些数据文件完成了shutdown instance时的最后一次FULL Checkpoint。 kcvcrv并不能检测出除数据文件头部外的datafile body是否存在介质讹误。

kcvcrv需要对control file读写才能完成其必要的任务,所以它会启动一个控制文件读写事务 read-write control file transaction。通过检验控制文件中每个数据文件的记录以确认数据文件是否有被重新同步的必要。 当然kcvcrv会跳过哪些OFFLINE和read-only的数据文件,因为这些文件不存在recovery的必要。

在确认crash recovery的必要性后,kcvcrv还会主导启动并行的恢复工作(parallel recovery),注意parallel recovery只在多CPU且参数recovery_parallelism不为零的环境下有效, kcvcrv会创建并初始化Oracle中的PQ Slave 并行子进程以便恢复实例。 默认的子进程数Slave Processes等于(CPU的总数-1),这是因为需要为recovery coordinator process恢复协调进程保留一个CPU。并且需要kcvcrv分配一个recovery state object给并行恢复 协调进程与其Slave子进程。

最后kcvcrv还会调用另一个关键内核函数 kctrec ( Kernel Cache Threads ), kctrec会在所有打开的redo thread上实施进一步的thread recovery。

2012-02-07 13:40:53366569 :80000687:KFNU:kfnc@2200:kfnPrepareASM(): kfnPrepareASM force=0 state_kfnsg=0x7

2012-02-07 13:40:53366569:80000688:CACHE_RCV:kcvc@16365:kcvcrv(): kcvcrv: Calling kctrec()

2012-02-07 13:40:53366569:80000689:CACHE_RCV:kctc@4163:kctrec(): kctrec: Entering kctrec()

2012-02-07 13:40:53413557:8000068A:CACHE_RCV:kctc@4271:kctrec(): kctrec: thread 1 cf thread ckpt: logseq 1468, block 2,scn 25917106

常见的 kcvcrv 调用堆栈 stack call如下:

kcratr_odr_check <- kcratr <- kctrec <- kcvcrv <- kcfopd <- adbdrv

kcliarq <- kclrinit <- kcbrst <- kcrpci <- kcratr <- kctrec <- kcvcrv <- kcfopd <- adbdrv

kfgrpIterInit()<-kfis_sageonly_anygroup()<-krr_init_rrx()<-kcra_scan_redo()<-kcra_dump_redo()+2246<-kcra_dump_redo_internal()+1752<-kco_image_corrupt()<-kcoapl()<-kcbr_apply_change()<-kcbr_mapply_change()<-kcbrapply()<-kcbr_apply_pending()<-kcbr_media_apply()<-krp_serial_apply()<-krr_do_media_recovery()<-krddmr()<-krd_do_media_rcv()<-krd_implicit_rcv()<-kcvcrv()<-kcfopd()<-adbdrv()

蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m,如果增加功率或是加上某些外设便可达到100m的传输距离。它采用24GHz ISM频段和调频、跳频技术,使用权向纠错编码、ARQ、TDD和基带协议。TDMA每时隙为0625μs,基带符合速率为1Mb/s。蓝牙支持64kb/s实时语音传输和数据传输,语音编码为CVSD,发射功率分别为1mW、25mW和100mW,并使用全球统一的48比特的设备识别码。由于蓝牙采用无线接口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术功耗低、对人体危害小,而且应用简单、容易实现,所以易于推广。

蓝牙技术

SIG组织于1999年7月26日推出了蓝牙技术规范10版本。蓝牙技术的系统结构分为三大部分:底层硬件模块、中间协议层和高层应用。 底层硬件部分包括无线跳频(RF)、基带(BB)和链路管理(LM)。无线跳频层通过24GHz无需授权的ISM频段的微波,实现数据位流的过滤和传输,本层协议主要定义了蓝牙收发器在此频带正常工作所需要满足的条件。基带负责跳频以及蓝牙数据和信息帧的传输。链路管理负责连接、建立和拆除链路并进行安全控制。

蓝牙技术结合了电路交换与分组交换的特点,可以进行异步数据通信,可以支持多达3个同时进行的同步话音信道,还可以使用一个信道同时传送异步数据和同步话音。每个话音信道支持64kb/秒的同步话音链路。异步信道可以支持一端最大速率为721kb/秒、另一端速率为576kb/秒的不对称连接,也可以支持432kb/秒的对称连接。

中间协议层包括逻辑链路控制和适应协议、服务发现协议、串口仿真协议和电话通信协议。逻辑链路控制和适应协议具有完成数据拆装、控制服务质量和复用协议的功能,该层协议是其它各层协议实现的基础。服务发现协议层为上层应用程序提供一种机制来发现网络中可用的服务及其特性。串口仿真协议层具有仿真9针RS232串口的功能。电话通信协议层则提供蓝牙设备间话音和数据的呼叫控制指令。

主机控制接口层(HCI)是蓝牙协议中软硬件之间的接口,它提供了一个调用基带、链路管理、状态和控制寄存器等硬件的统一命令接口。蓝牙设备之间进行通信时,HCI以上的协议软件实体在主机上运行,而HCI以下的功能由蓝牙设备来完成,二者之间通过一个对两端透明的传输层进行交互。

在蓝牙协议栈的最上部是各种高层应用框架。其中较典型的有拨号网络、耳机、局域网访问、文件传输等,它们分别对应一种应用模式。各种应用程序可以通过各自对应的应用模式实现无线通信。拨号网络应用可通过仿真串口访问微微网(Piconet),数据设备也可由此接入传统的局域网;用户可以通过协议栈中的Audio(音频)层在手机和耳塞中实现音频流的无线传输;多台PC或笔记本电脑之间不需要任何连线,就能快速、灵活地进行文件传输和共享信息,多台设备也可由此实现同步 *** 作。

总之,整个蓝牙协议结构简单,使用重传机制来保证链路的可靠性,在基带、链路管理和应用层中还可实行分级的多种安全机制,并且通过跳频技术可以消除网络环境中来自其它无线设备的干扰。

应用前景

蓝牙技术的应用范围相当广泛,可以广泛应用于局域网络中各类数据及语音设备,如PC、拨号网络、笔记本电脑、打印机、传真机、数码相机、移动电话和高品质耳机等,蓝牙的无线通讯方式将上述设备连成一个微微网(Piconet),多个微微网之间也可以进行互连接,从而实现各类设备之间随时随地进行通信。应用蓝牙技术的典型环境有无线办公环境、汽车工业、信息家电、医疗设备以及学校教育和工厂自动控制等。目前,蓝牙的初期产品已经问世,一些芯片厂商已经开始着手改进具有蓝牙功能的芯片。与此同时,一些颇具实力的软件公司或者推出自已的协议栈软件,或者与芯片厂商合作推出蓝牙技术实现的具体方案。尽管如此,蓝牙技术要真正普及开来还需要解决以下几个问题:首先要降低成本;其次要实现方便、实用,并真正给人们带来实惠和好处;第三要安全、稳定、可靠地进行工作;第四要尽快出台一个有权威的国际标准。一旦上述问题被解决,蓝牙将迅速改变人们的生活与工作方式,并大大提高人们的生活质量。

什么是数据库呢?简单地理解,“数据库”就是按一定规律组织起来,保存在计算机中的数据集合。

以上就是关于谁能介绍下oracle数据库的前滚rolling forward原理吗全部的内容,包括:谁能介绍下oracle数据库的前滚rolling forward原理吗、蓝牙是什么数据库是什么、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9307949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存