电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

講解Oracle數據庫10g新特性中的閃回查詢

瀏覽:118日期:2023-11-28 16:45:37
這篇論壇文章(賽迪網技術社區)深入探討了Oracle數據庫10g新特性中的閃回查詢,更多相關內容請參考下文。

不需要設置,立即識別對行的所有更改

在 Oracle9i Database 中,我們看到它推出了以閃回查詢形式表示的“時間機器”。該特性允許 DBA 看到特定時間的列值,只要在還原段中提供該數據塊此前鏡像的拷貝即可。但是,閃回查詢只提供某時刻數據的固定快照,而不是在兩個時間點之間被更改數據的運行狀態表示。某些應用程序,如涉及到外幣管理的應用程序,可能需要了解一段時期內數值數據的變化,而不僅僅是兩個時間點的數值。由于閃回版本查詢特性,Oracle Database 10g 能夠更方便高效地執行該任務。

查詢對表的更改

在本示例中,我使用了一個銀行外幣管理應用程序。其數據庫含有一個名稱為 RATES 的表,用于記錄特定時間的匯率。

SQL> desc rates

Name Null?Type

----------------- -------- ------------

CURRENCY  VARCHAR2(4)

RATE  NUMBER(15,10)

 

 

該表顯示 US$ 與各種其他貨幣的匯率,在 CURRENCY 列中顯示。在金融服務行業中,匯率不但在變更時進行更新,而且被記錄在歷史中。需要這種方式的原因是銀行交易可能在“過去時間”生效,以便適應由于匯款而耗費的時間。例如,對于一項在上午 10:12 發生但在上午 9:12 生效的交易,其有效匯率是上午 9:12 的匯率,而不是現在的匯率。

直到現在,唯一的選擇是創建一個匯率歷史表來存儲匯率的變更,然后查詢該表是否提供歷史記錄。另一種選擇是在 RATES 表本身中記錄特定匯率適用性的開始和結束時間。當發生變更時,現有行中的 END_TIME 列被更新為 SYSDATE,并插入一個具有新匯率的新行,其 END_TIME 為 NULL。

但是在 Oracle Database 10g 中,閃回版本查詢特性不需要維護歷史表或存儲開始和結束時間。使用該特性,您不必進行額外的設置,即可獲得某行在過去特定時間的值。

例如,假定該 DBA 在正常業務過程中數次更新匯率 — 甚至刪除了某行并重新插入該行:

insert into rates values ('EURO',1.1012);

commit;

update rates set rate = 1.1014;

commit;

update rates set rate = 1.1013;

commit;

delete rates;

commit;

insert into rates values ('EURO',1.1016);

commit;

update rates set rate = 1.1011;

commit;

在進行了這一系列操作后,DBA 將通過以下命令獲得 RATE 列的當前提交值:

SQL> select * from rates;

CURR  RATE

---- ----------

EURO 1.1011

 

 

此輸出顯示 RATE 的當前值,沒有顯示從第一次創建該行以來發生的所有變更。這時使用閃回查詢,您可以找出給定時間點的值;但我們對構建變更的審計線索更感興趣 — 有些類似于通過便攜式攝像機來記錄變更,而不只是在特定點拍攝一系列快照。

以下查詢顯示了對表所做的更改:

select versions_starttime, versions_endtime, versions_xid,

versions_operation, rate

from rates versions between timestamp minvalue and maxvalue

order by VERSIONS_STARTTIME

/

VERSIONS_STARTTIME VERSIONS_ENDTIME  VERSIONS_XID V  RATE

---------------------- ---------------------- ---------------- - ----------

01-DEC-03 03.57.12 PM 01-DEC-03 03.57.30 PM 0002002800000C61 I 1.1012

01-DEC-03 03.57.30 PM 01-DEC-03 03.57.39 PM 000A000A00000029 U 1.1014

01-DEC-03 03.57.39 PM 01-DEC-03 03.57.55 PM 000A000B00000029 U 1.1013

01-DEC-03 03.57.55 PM 000A000C00000029 D 1.1013

01-DEC-03 03.58.07 PM 01-DEC-03 03.58.17 PM 000A000D00000029 I 1.1016

01-DEC-03 03.58.17 PM 000A000E00000029 U 1.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 值顯示了實際的語句。

SELECT UNDO_SQL

FROM FLASHBACK_TRANSACTION_QUERY

WHERE XID = '000A000D00000029';

UNDO_SQL

--------------------------------------------------

insert into 'ANANDA'.'RATES'('CURRENCY','RATE')

values ('EURO','1.1013');

 

 

除了實際語句之外,該視圖還顯示提交操作的時間標記和 SCN、查詢開始時的 SCN 和時間標記以及其他信息。

找出一段時期中的變更

現在,讓我們來看如何有效地使用這些信息。假設我們需要找出下午 3:57:54 時 RATE 列的值。我們可以執行:

select rate, versions_starttime, versions_endtime

from rates versions

between timestamp

to_date('12/1/2003 15:57:54','mm/dd/yyyy hh24:mi:ss')

and to_date('12/1/2003 16:57:55','mm/dd/yyyy hh24:mi:ss')

/

RATE VERSIONS_STARTTIME VERSIONS_ENDTIME

---------- ---------------------- ----------------------

1.1011

 

 

此查詢與閃回查詢類似。在以上的示例中,開始和結束時間為空,表示匯率在該時間段中沒有更改,而是包含一個時間段。還可以使用 SCN 來找出過去的版本值。可以從偽列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中獲得 SCN 號。以下是一個示例:

select rate, versions_starttime, versions_endtime

from rates versions

between scn 1000 and 1001

/

 

 

使用關鍵詞 MINVALUE 和 MAXVALUE,可以顯示還原段中提供的所有變更。您甚至可以提供一個特定的日期或 SCN 值作為范圍的一個端點,而另一個端點是文字 MAXVALUE 或 MINVALUE。例如,以下查詢提供那些只從下午 3:57:52 開始的變更,而不是全部范圍的變更:

select versions_starttime, versions_endtime, versions_xid,

versions_operation, rate

from rates versions between timestamp

to_date('12/11/2003 15:57:52', 'mm/dd/yyyy hh24:mi:ss')

and maxvalue

order by VERSIONS_STARTTIME

/

VERSIONS_STARTTIME VERSIONS_ENDTIME  VERSIONS_XID V  RATE

---------------------- ---------------------- ---------------- - ----------

01-DEC-03 03.57.55 PM 000A000C00000029 D 1.1013

01-DEC-03 03.58.07 PM 01-DEC-03 03.58.17 PM 000A000D00000029 I 1.1016

01-DEC-03 03.58.17 PM 000A000E00000029 U 1.1011

 

最終的分析

閃回版本查詢隨取隨用地復制表變更的短期易變數值審計。這一優點使得 DBA 能夠獲得過去時間段中的所有變更而不是特定值,只要還原段中提供數據,就可以盡情使用。因此,最大的可用版本依賴于 UNDO_RETENTION 參數。

標簽: Oracle 數據庫
主站蜘蛛池模板: 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 河南凯邦机械制造有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 深圳市万色印象美业有限公司| 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 开云(中国)Kaiyun·官方网站-登录入口 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 电机保护器-电动机综合保护器-上海硕吉电器有限公司 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 永嘉县奥阳陶瓷阀门有限公司 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 |