让我从以下2个例子展开我们的探讨。
如果你观察得足够仔细,你可以从上面2个例子看到一个有趣的现象:无论session 1是否命中到数据,it最终都没有修改数据。其根本原因就是当前模式读与一致性读的区别。
我们知道,为了减少并发冲突,Oracle引入了MVCC(多版本并发控制,也叫MCC)方法。在这种机制中,并发事务不会因为一致性的原因而相互阻塞,除非他们要修改同一条记录。他们会将日志中所有SCN大于本身事务SCN的日志做回滚,以保证本事务读取到的数据块与事务SCN的一致。在Oracle中,这样的读取行为就称为一致性读。
然而,一致性读所读取到数据块仅仅是某个时间点的一个快照,也就是说这样的数据是只读的。如果要修改数据,那么oracle需要读取到当前的数据块,也就是当前模式读。
在一个UPDATE过程中,oracle会先一致性读取与事务SCN一致的数据快照,并用where条件进行过滤。让后根据读取到数据块的ID,再从当前数据中读取到相应的数据块进行修改。但是,如在事务启动后到数据块被读取之间的这段时间内,相应的数据块发生了改变,那么可能就会有我们意想不到的事情发生。

往回看我们的***个例子。我们在session 1中,在10:22:25启动了update事务。但是,由于该事务中存在一个大的子查询,它会在几十秒后才会读取到需要被修改的数据。在Session 2中,我们在10:22:37开始update这些数据并在10:23:02提交了事务。而这个时间是早于数据在session 1中被读取到的时间的。当session 2中的数据改变被提交后,session 1中的事务读取到了该数据块。因为session 2中的事务SCN大于session 1中的事务SCN,因此会读取UNDO中的数据进行回滚,也就是说它读取到数据SECONDARY是’A’,再通过条件(SECONDARY=’B’)过滤后,没有数据被命中,因此也没有数据被修改。
在第二个例子中,session 1的事务在一致性读取到数据块之前也发生了类似的事情。当它回滚了数据后,它一致性读取到了满足过滤条件(SECONDARY=’A’)的数据块。此时,它需要通过该数据块ID再到当前数据中读取该数据块。但是因为当前数据块的内容已经被session 2中的事务所修改,它还是没有能修改到数据。
我想,通过这两个例子,读者应该更容易理解到当前模式读与一致性读之间的区别。
【编辑推荐】
做课件的幻灯片怎么做?
制做PPT课件的软件很多,例如OFFICE 中的POWERPOINT ,使用ACDSEE也可以做出非常好看的幻灯片。 如果你会使用FLASH,FLASH也能制做幻灯片。 不过它们的格式都不一样。 利用PowerPoint 2000轻松制作课件 多媒体课件已经越来越广泛地应用在现代化教育中,许多教师可能觉得课件制作的难度比较高。 其实PowerPoint 2000是一个很方便的课件制作软件,方便大家制作出集文字、图表、图像、声音及视频剪辑为一体的演示幻灯片。 由于PowerPoint还提供了所见即所得的幻灯片放映效果,所以可以很容易地在屏幕上编辑演示文稿。 本文以实例介绍如何用Power Point来制作幻灯片。 基础篇—了解新建演示文稿的方法 单击“开始”菜单,点击“程序”中的PowerPoint 2000应用程序即可启动PowerPoint2000。 这时我们就会看到(如图1)新建演示文稿的选择界面。 这里提供了新建演示文稿的三种方法:内容提示向导、设计模板、空演示文稿。 这三种生成演示文稿的方法可以说各有千秋,下面让大家了解用这些方法新建演示文稿的步骤。 1.内容提示向导 利用内容提示向导的提示操作可引导你一步一步地快速创建一整套专业化演示文稿。 这是制作一个新演示文稿最容易的方法。 选择“内容提示向导”,你只需要选定一个演示文稿的主题,然后按照向导中的提示操作,PowerPoint会打开一份示例演示文稿。 您可以在示例文本中添加自己的文本或图片。 如果该示例演示文稿不能符合您的要求,也可以很方便地添加或删除幻灯片,添加图片或所需的其他项目。 完成后,请单击“文件”菜单上的“保存”,命名演示文稿,然后单击“保存”。 图1 2.设计模板 选择“设计模板”,选择好所需的模板,您就可以在预先设计好的基本框架上添加自己的文本或图片。 我们也可以自定义各幻灯片的版式,在各个幻灯片上键入标题和任意内容。 完成后,请单击“文件”菜单上的“保存”,命名演示文稿,然后单击“保存”。 3.空演示文稿 如果您想按照自己的思路创建演示文稿,那么就选择空演示文稿。 空演示文稿允许您从一个空白页面来展开创意,PowerPoint将不提供任何设计元素或建议。 选择空演示文稿后,为标题幻灯片选择所需的版式。 然后在标题幻灯片上键入标题以及要添加的任意内容,标题幻灯片完成后,单击“格式”工具栏上的“常规任务”,然后单击“新幻灯片”,对每个新幻灯片重复以上步骤,按需要修改演示文稿。 完成后,单击“文件”菜单上的“保存”,命名演示文稿,然后单击“保存”。 入门篇—用设计模板建立演示文稿 下面笔者以如何利用设计模板方式来建立学期报 告的演示文稿为例,来介绍PowerPoint的实际应用。 1.新建演示文稿 选择“设计模板”并单击“确定”。 这时,我们将看到 “新建演示文稿”对话框,切换到“演示文稿”。 然后从“演示文稿”选项卡中选择“主题演讲”(提示:在该对话框的右框中将会出现预览效果),单击“确定”按钮(如图2)。 这时,一个漂亮的幻灯片雏形已经展现在我们眼前。 2.文字录入 图2 在幻灯片视图下,单击所要修改的文本的任意位置,其周围的浅色边框将被较宽的斜纹边框所取代,在方框中有一个闪烁的光标提示符,表示可以在此录入文字。 然后我们根据需要修改文字,其字体、字号及颜色等均由模板提供默认值,若不满意可用鼠标框选所要修改的文字,再选择好字体、字号及颜色即可。 要在占位符外添加文字,可单击“插入”,选择“文本框”中的“水平”或“垂直”来实现。 如果我们想将该幻灯片的项目列表(表现为文本左侧有一小圆点的项目符号)进行修改,例如添加或减少项目,也很简单。 只需在幻灯片视图下,单击所要修改的项目文本的任意位置,然后在所要添加的项目上一行位置按一下回车键,将出现一个新的项目符号,带项目符号的文本若长度超出一行,PowerPoint 2000将会使其自动换行并对齐。 如果要删除该项目,只需将该项目中的文字全部删除即可。 这样第一张幻灯片就生成了,接下来我们再按同样的方法修改下面几张幻灯片。 全部完成后,只需单击文件菜单并选择保存,将已经做好的演示部分保存即可。 3.改变背景 若不喜欢当前的背景,可在虚线框外单击鼠标右键,在弹出子菜单的“背景”对话框中的下拉菜单中选“填充效果”进行更改(如图3)。 4.增减幻灯片 图3 大家可能会觉得模板提供的幻灯片张数不能满足您的需求。 如果想增加同样版式的幻灯片,只需在视图的左框中,用鼠标点选所要复制的幻灯片图标,这时左框中将会出现反白区域(如图4),点击常用工具栏上的“复制”图标,然后在所要增加的位置点击“粘贴”即可。 当然我们也可以通过点击常用工具栏中的“新幻灯片”图标的形式来建立新的幻灯片,只不过通过这种方法来建立幻灯片,就不能保持该演示文稿的一致性。 如果要减少幻灯片,只需在视图的左框中,用鼠标点选所要删除的幻灯片图标,这时左框中将会出现反白区域,然后点击常用工具栏上的“剪切”即可。 图4 提示:单击“视图”菜单中的“幻灯片浏览”可进入幻灯片浏览视图。 幻灯片浏览视图将向你提供幻灯片的总体流程和外观的缩略图,你可以在这个视图中插入新幻灯片、重新排列幻灯片、删除、复制幻灯片、以及预览幻灯片之间的切换效果等。 (如图5)在幻灯片浏览视图中双击任意一张幻灯片,可迅速切换至该幻灯片的幻灯片视图中进行局部设计。 提高篇—添加多媒体效果 图5 幻灯片的精彩之处,是集文字、图表、图像、声 音及视频剪辑为一体。 它可以针对不同的对象应用不同的多媒体效果,能使演示文稿的效果大大增强。 同样还是以上例为基础,向大家介绍几种常见效果的制作方法。 1.插入图片、影片、图表、表格 点击“插入”菜单栏中的“图片”,再选择“来 自文件”,在“插入图片”对话框中预览后选中所需要的图片,然后选择“插入”。 利用随后出现的图片 图6 工具,还可对图片进行裁剪、重新着色等编辑工作。 同样如果要插入影片、图表、表格,也是以类似的方法进行添加并编辑。 2、添加艺术字 单击“插入”菜单,选择“图片”,再切换到“艺术字”,然后在“艺术字库”中选择想要的艺术字式样,然后再键入您自己的内容,再选择好字形、字号(如图6),单“确定”按钮即可出现在视图框中。 然后根据需要,移动到适当的位置,其大小及比例均可调节。 3、添加动作按钮 通过定制一些动作按钮,可以方便在各个幻灯片之间进行浏览。 单击“幻灯片放映”菜单,选择“动作按钮”,这时我们看到提供了12种的动作按钮,选择好其中的一个后,在幻灯片视图中的鼠标变为十字形,单击鼠标即可产生相应按钮形状,而且屏幕会弹出“动作设置”对话框,这时我们选择好一个超链接动作即可(如图7)。 然后我们就可以将动作按钮,用鼠标拖动到适当的位置。 参考资料:加油
只有MDF文件如何恢复数据库
?????? 如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息?????? 设备激活错误。 ?????? 物理文件名 C:\Program Files\Microsoft SQL Server\MSSQL\data\test_ 可能有误。 ?????? 已创建名为 C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_ 的新日志文件。 ???????? 但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。 你也许会得到类似下面的错误信息?????? 服务器: 消息 1813,级别 16,状态 2,行 1?????? 未能打开新数据库 test。 CREATE DATABASE 将终止。 ?????? A.我们使用默认方式建立一个供恢复使用的数据库(如test)。 可以在SQL Server Enterprise Manager里面建立。 ?????? B.停掉数据库服务器。 ?????? C.将刚才生成的数据库的日志文件test_删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_?????? D.启动数据库服务器。 此时会看到数据库test的状态为“置疑”。 这时候不能对此数据库进行任何操作。 ???????? E.设置数据库允许直接操作系统表。 此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。 也可以使用如下语句来实现。 ?????? use master?????? go?????? sp_configure allow updates,1?????? go?????? reconfigure with override?????? go?????? F.设置test为紧急修复模式?????? update sysdatabases set status=- where dbid=DB_ID(test)?????? 此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表?????? G.下面执行真正的恢复操作,重建数据库日志文件?????? dbcc rebuild_log(test,C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_)?????? 执行过程中,如果遇到下列提示信息:?????? 服务器: 消息 5030,级别 16,状态 1,行 1?????? 未能排它地锁定数据库以执行该操作。 ?????? DBCC 执行完毕。 如果 DBCC 输出了错误信息,请与系统管理员联系。 ?????? 说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。 ?????? 正确执行完成的提示应该类似于:?????? 警告: 数据库 test 的日志已重建。 已失去事务的一致性。 ?????? 应运行 DBCC CHECKDB 以验证物理一致性。 ?????? 将必须重置数据库选项,并且可能需要删除多余的日志文件。 ?????? 数据恢复 SQL数据库修复 密码恢复?????? sql数据库恢复 硬盘异响 坏道修复 文件恢复?????? sql server修复 文件修复?????? raid数据恢复 sql数据库修复?????? raid磁盘阵列 sql恢复 sql server恢复?????? 硬盘数据恢复 硬盘坏道修复 硬盘数据修复 数据修复?????? DBCC 执行完毕。 如果 DBCC 输出了错误信息,请与系统管理员联系。 ?????? 此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。 此时可以访问数据库里面的用户表了。 ?????? H.验证数据库一致性(可省略)?????? dbcc checkdb(test)?????? 一般执行结果如下:?????? CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 test 中)?????? DBCC 执行完毕。 如果 DBCC 输出了错误信息,请与系统管理员联系。 ???????? I.设置数据库为正常状态?????? sp_dboption test,dbo use only,false?????? 如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。 ???????? J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。 因为平时直接操作系统表是一件比较危险的事情。 当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成?????? sp_configure allow updates,0?????? go
oracle,CR块的一些问题
修改数据是在还原段里进行的。 查询数据来源于数据库高速缓冲区。 commit之后,修改的数据才从还原段写入高速缓冲区,最后被写入数据文件。 读一致性是是因为读是读的高速缓冲区的内容,修改的是还原段的内容,所以,读不受写影响。 你可以看一下UNDO表空间管理的资料。
发表评论