仓酷云

标题: MYSQL教程之Oracle Database 10g:最好新特征(第一周... [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-16 22:39
标题: MYSQL教程之Oracle Database 10g:最好新特征(第一周...
对于现有业务,可以轻松移植到MySQL。当你需要替换掉老的硬件,当你需要削减历史遗留下的老系统的时候,选用MySQL对于财务部门来说更具吸引力。oracle
第一周:闪回查询

失掉影戏而不是图片:闪回版本查询



不必要设置,当即辨认对行的一切变动

在Oracle9iDatabase中,我们看到它推出了以闪回查询情势暗示的“工夫呆板”。该特征同意DBA看到特准时间的列值,只需在复原段中供应该数据块此前镜像的拷贝便可。可是,闪回查询只供应某时候数据的流动快照,而不是在两个工夫点之间被变动数据的运转形态暗示。某些使用程序,如触及到外币办理的使用程序,大概必要懂得一段时代内数值数据的变更,而不单单是两个工夫点的数值。因为闪回版本查询特征,OracleDatabase10g可以更便利高效地实行该义务。

查询对表的变动


在本示例中,我利用了一个银行外币办理使用程序。其数据库含有一个称号为RATES的表,用于纪录特准时间的汇率。

SQL>descratesNameNull?Type-------------------------------------CURRENCYVARCHAR2(4)RATENUMBER(15,10)

该表显现US$与各类其他泉币的汇率,在CURRENCY列中显现。在金融服务行业中,汇率不仅在变动时举行更新,并且被纪录在汗青中。必要这类体例的缘故原由是银行买卖大概在“已往工夫”失效,以便顺应因为汇款而泯灭的工夫。比方,关于一项在上午10:12产生但在上午9:12失效的买卖,其无效汇率是上午9:12的汇率,而不是如今的汇率。



直到如今,独一的选择是创立一个汇率汗青表来存储汇率的变动,然后查询该表是不是供应汗青纪录。另外一种选择是在RATES表自己中纪录特定汇率合用性的入手下手和停止工夫。当产生变动时,现有行中的END_TIME列被更新为SYSDATE,并拔出一个具有新汇率的新行,其END_TIME为NULL。



可是在OracleDatabase10g中,闪回版本查询特征不必要保护汗青表或存储入手下手和停止工夫。利用该特征,您不用举行分外的设置,便可取得某行在已往特准时间的值。



比方,假定该DBA在一般营业过程当中数次更新汇率―乃至删除某行偏重新拔出该行:

insertintoratesvalues(EURO,1.1012);commit;updateratessetrate=1.1014;commit;updateratessetrate=1.1013;commit;deleterates;commit;insertintoratesvalues(EURO,1.1016);commit;updateratessetrate=1.1011;commit;

在举行了这一系列操纵后,DBA将经由过程以下命令取得RATE列确当条件交值

SQL>select*fromrates;CURRRATE--------------EURO1.1011

此输入显现RATE确当前值,没有显现从第一次创立该行以来产生的一切变动。这时候利用闪回查询,您能够找出给准时间点的值;但我们对构建变动的审计线索更感乐趣―有些相似于经由过程便携式摄像机来纪录变动,而不但是在特定点拍摄一系列快照。



以下查询显现了对表所做的变动:

selectversions_starttime,versions_endtime,versions_xid,versions_operation,ratefromratesversionsbetweentimestampminvalueandmaxvalueorderbyVERSIONS_STARTTIME/VERSIONS_STARTTIMEVERSIONS_ENDTIMEVERSIONS_XIDVRATE-----------------------------------------------------------------------01-DEC-0303.57.12PM01-DEC-0303.57.30PM0002002800000C61I1.101201-DEC-0303.57.30PM01-DEC-0303.57.39PM000A000A00000029U1.101401-DEC-0303.57.39PM01-DEC-0303.57.55PM000A000B00000029U1.101301-DEC-0303.57.55PM000A000C00000029D1.101301-DEC-0303.58.07PM01-DEC-0303.58.17PM000A000D00000029I1.101601-DEC-0303.58.17PM000A000E00000029U1.1011

注重,此处显现了对该行所作的一切变动,乃至包含该行被删除和从头拔出的情形。VERSION_OPERATION列显现对该行实行了甚么操纵(Insert/Update/Delete)。所做的这些事情不必要汗青表或分外的列。



在上述查询中,列versions_starttime、versions_endtime、versions_xid、versions_operation是伪列,与ROWNUM、LEVEL等其他熟习的伪列相相似。其他伪列―如VERSIONS_STARTSCN和VERSIONS_ENDSCN―显现了该时候的体系变动号。列versions_xid显现了变动该行的事件标识符。有关该事件的更多具体信息可在视图FLASHBACK_TRANSACTION_QUERY中找到,个中列XID显现事件id。比方,利用上述的VERSIONS_XID值000A000D00000029,UNDO_SQL值显现了实践的语句。

SELECTUNDO_SQLFROMFLASHBACK_TRANSACTION_QUERYWHEREXID=000A000D00000029;UNDO_SQL----------------------------------------------------------------------------insertinto"ANANDA"."RATES"("CURRENCY","RATE")values(EURO,1.1013);

除实践语句以外,该视图还显现提交操纵的工夫标志和SCN、查询入手下手时的SCN和工夫标志和其他信息。



找出一段时代中的变动



如今,让我们来看怎样无效地利用这些信息。假定我们必要找出下战书3:57:54时RATE列的值。我们能够实行:

selectrate,versions_starttime,versions_endtimefromratesversionsbetweentimestampto_date(12/1/200315:57:54,mm/dd/yyyyhh24:mi:ss)andto_date(12/1/200316:57:55,mm/dd/yyyyhh24:mi:ss)/RATEVERSIONS_STARTTIMEVERSIONS_ENDTIME------------------------------------------------------1.1011

此查询与闪回查询相似。在以上的示例中,入手下手和停止工夫为空,暗示汇率在该工夫段中没有变动,而是包括一个工夫段。还可使用SCN来找出已往的版本值。能够从伪列VERSIONS_STARTSCN和VERSIONS_ENDSCN中取得SCN号。以下是一个示例:

selectrate,versions_starttime,versions_endtimefromratesversionsbetweenscn1000and1001/

利用关头词MINVALUE和MAXVALUE,能够显现复原段中供应的一切变动。您乃至能够供应一个特定的日期或SCN值作为局限的一个端点,而另外一个端点是笔墨MAXVALUE或MINVALUE。比方,以下查询供应那些只从下战书3:57:52入手下手的变动,而不是全体局限的变动:

selectversions_starttime,versions_endtime,versions_xid,versions_operation,ratefromratesversionsbetweentimestampto_date(12/11/200315:57:52,mm/dd/yyyyhh24:mi:ss)andmaxvalueorderbyVERSIONS_STARTTIME/VERSIONS_STARTTIMEVERSIONS_ENDTIMEVERSIONS_XIDVRATE-----------------------------------------------------------------------01-DEC-0303.57.55PM000A000C00000029D1.101301-DEC-0303.58.07PM01-DEC-0303.58.17PM000A000D00000029I1.101601-DEC-0303.58.17PM000A000E00000029U1.1011

终极的剖析



闪回版本查询随取随用地复制表变动的短时间易变数值审计。这一长处使得DBA可以取得已往工夫段中的一切变动而不是特定值,只需复原段中供应数据,就能够恣意利用。因而,最年夜的可用版本依附于UNDO_RETENTION参数。

有关闪回版本查询的更多信息,请拜见OracleDatabaseConcepts10gRelease1(10.1)指南的相干部分。



首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。
作者: 精灵巫婆    时间: 2015-1-19 20:40
连做梦都在想页面结构是怎么样的,绝非虚言
作者: admin    时间: 2015-1-19 20:40
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
作者: 谁可相欹    时间: 2015-1-26 22:51
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
作者: 分手快乐    时间: 2015-2-4 21:33
代替了原来VB式的错误判断。比Oracle高级不少。
作者: 再见西城    时间: 2015-2-10 14:57
原来公司用过MYSQL自己也只是建个表写个SQL
作者: 再现理想    时间: 2015-3-1 12:47
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
作者: 愤怒的大鸟    时间: 2015-3-10 16:55
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
作者: 莫相离    时间: 2015-3-17 09:09
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
作者: 第二个灵魂    时间: 2015-3-24 05:06
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2