只想知道 发表于 2015-1-16 22:35:50

MSSQL编程:关于scn的了解

有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。
关于scn的了解
体系反省点scn(v$database(checkpoint_change#))
数据文件反省点(v$datafile(checkpoint_change#))
数据文件停止scn(v$datafile(last_change#))

数据文件中寄存的反省点
启动scn(v$datafile_header(checkpoint_change#)

1、体系反省点scn
当一个反省点举措完成以后,Oracle就把体系反省点的SCN存储到把持文件中。
selectcheckpoint_change#fromv$database
2、数据文件反省点scn
当一个反省点举措完成后,Oracle就把每一个数据文件的scn独自寄存在把持文件中。
selectname,checkpoint_change#fromv$datafile
3、启动scn
Oracle把这个反省点的scn存储在每一个数据文件的文件头中,这个值称为启动scn,
由于它用于在数据库实例启动时,反省是不是必要实行数据库恢复。
selectname,checkpoint_change#fromv$datafile_header
4、停止scn
每一个数据文件的停止scn都存储在把持文件中。
selectname,last_change#fromv$datafile
在一般的数据库操纵过程当中,一切正处于联机读写形式下的数据文件的停止scn都为null.
5、在数据库运转时代的scn值
在数据库翻开并运转以后,把持文件中的体系反省点、把持文件中的数据文件反省点scn
和每一个数据文件头中的启动scn都是不异的。把持文件中的每一个数据文件的停止scn都为null.

在平安封闭数据库的过程当中,体系会实行一个反省点举措,这时候一切数据文件的停止scn
城市设置成数据文件头中的谁人启动scn的值。在数据库从头启动的时分,
Oracle将文件头中的谁人启动scn与数据库文件反省点scn举行对照,
假如这两个值互相婚配,oracle接上去还要对照数据文件头中的启动scn和把持文件
中数据文件的停止scn。假如这两个值也分歧,就意味着一切数据块多已提交,一切
对数据库的修正都没有在封闭数据库的过程当中丧失,因而此次启动数据库的历程
也不必要任何恢复操纵,此时数据库就能够翻开了。当一切的数据库都翻开以后,
存储在把持文件中的数据文件停止scn的值再次被变动为null,
这暗示数据文件已翻开并可以一般利用了。
------------------------------------------
廓清几个观点
1)体系以后SCN并非在任何的数据库操纵产生时城市改动,SCN是在事件提交或回滚时改动,
2)在把持文件,数据文件头,数据块,日记文件头,日记文件changevector中都有SCN,但其感化各不不异数据文件头中包括了该数据文件的checkpointSCN,暗示给数据文件比来一次实行反省点操纵时的SCN.日记文件头中包括了lowscn,nextscn,暗示给日记文件包括有从lowscn到nextscn的redorecord.把持文件中包括了每一个数据文件的checkpointSCN,stopSCN,每一个日记文件的lowscn,nextscn.把持文件中checkpointscn同数据文件头中checkpointscn不异,除非数据文件被手工交换失落.把持文件中的lowscn,nextscn同日记文件中lowscn和nextscn不异在数据库一般运转时,把持文件中对应数据文件的stopSCN都是最年夜值.在一般封闭数据库的情形下,在封闭前会实行一次反省点事情当oracle会将数据缓冲区上的内容全体写回到磁盘中,然后更新把持文件中对应数据文件的stopSCN,使其即是checkpointSCN

但在非常当机的情形下,因为最初一次反省点未举行或举行两头被中断,因此在把持文件,就存在部分的数据文件stopSCN为最年夜值,在数据库从头启动后,会反省把持文件中对应每一个数据文件的stopSCN,假如stopSCN不即是把持文件中对应每一个数据文件的checkpointSCN,就会利用日记文件redo从checkpointSCN开首到stopSCN为止的全体数据库操纵.在定位究竟是利用哪个redolog文件时,就用到了日记文件头中的lowscn,nextscn,也就是说要利用的redolog的lowscn,nextscn必需包括数据文件重做所须的changevector.

在断定了哪一个数据文件须redo后,oracle会对照changevector中的SCN和数据文件数据块中的SCN,假如changevector的SCN小于数据块的scn,则跳过此changevector,不然redo
数据块中ITL中另有SCN,但它的感化是用于发生分歧性读快照

MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。

分手快乐 发表于 2015-1-25 18:50:47

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

老尸 发表于 2015-2-3 13:32:09

可以动态传入参数,省却了动态SQL的拼写。

第二个灵魂 发表于 2015-2-9 02:51:54

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

谁可相欹 发表于 2015-2-26 19:27:50

呵呵,这就是偶想说的

因胸联盟 发表于 2015-3-8 16:44:54

你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。

灵魂腐蚀 发表于 2015-3-16 06:50:40

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

飘灵儿 发表于 2015-3-22 21:02:36

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页: [1]
查看完整版本: MSSQL编程:关于scn的了解