`

Flash Back Version Query

 
阅读更多

 

Flash Back Version Query

参考文档:

http://docs.oracle.com/cd/E11882_01/appdev.112/e25518/adfns_flashback.htm

http://www.cnblogs.com/coohoo/archive/2011/01/16/1936888.html

Use Oracle Flashback Version Query to retrieve the different versions of specific rows that existed during a given time interval. A row version is created whenever a COMMIT statement is executed.

<!--[if !supportLists]-->1.    <!--[endif]-->使用flashback query的前提

<!--[if !supportLists]-->Ø  <!--[endif]-->undo_management = auto,设置自动undo管理(AUM),该参数默认设置为:auto

查询语句:show parameter undo;

<!--[if !supportLists]-->Ø  <!--[endif]-->设置足够大的undo_retentionundo_retention表示的是操作在undo表空间中保存的时间

<!--[if !supportLists]-->Ø  <!--[endif]-->设置足够大的undo表空间大小

 

<!--[if !supportLists]-->2.       <!--[endif]-->flashback query 的使用方法

<!--[if !supportLists]-->Ø  <!--[endif]-->先用 select current_scn from V$database; 语句查出当前的scn值,记录为scn1

<!--[if !supportLists]-->Ø  <!--[endif]-->执行一段insertupdatedelete操作

<!--[if !supportLists]-->Ø  <!--[endif]--> select current_scn from V$database; 语句查出操作执行完毕后的scn值,记录为scn2

<!--[if !supportLists]-->Ø  <!--[endif]-->用语句

select   versions_startscn,versions_endscn,versions_operation,<查询表的字段名>  from <表名> versions between scn <操作开始前的scn> and <操作结束的scn>  where  versions_operation is not null

查出整个操作

示例数据:其中第一列为操作类型,后面为每列的数据

 

<!--[if !supportLists]-->3.       <!--[endif]-->性能比较

 

为了做性能的比较,我在本地用client setting表做实验,表格中是trigger方式的DDL语句

drop TABLE CLIENT_SETTING_INCREMENT;

CREATE TABLE CLIENT_SETTING_INCREMENT

  (

     "ACCOUNT_ID"    NUMBER(19,0),

    "CONTENT_ID"    NUMBER(*,0),

    "CONTEXT_ID"    NUMBER(*,0),

    "PROPERTY_ID"   NUMBER(*,0),

    "SETTING_TYPE"  NUMBER(*,0),

    "SETTING_VALUE" VARCHAR2(4000 BYTE),

    CHANGE_FLAGS        VARCHAR2(8 BYTE),   --U for update, I for insert, D for delete.

    CONSTRAINT "CLIENT_SET_INC_CONST_PKEY" PRIMARY KEY ("ACCOUNT_ID", "CONTENT_ID", "CONTEXT_ID", "PROPERTY_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "INDEX_LARGE" ENABLE,

    CONSTRAINT "CLIENT_SET_INC_AID_CONST_FKEY" FOREIGN KEY ("ACCOUNT_ID") REFERENCES "Z7ADMIN"."ACCOUNT" ("ID") ON

                DELETE CASCADE ENABLE

  );

 

--create a row level trigger to track the changes on CLIENT_SETTING

drop trigger CLIENT_SETTING_INC_TRIGGER;

CREATE OR REPLACE TRIGGER CLIENT_SETTING_INC_TRIGGER

AFTER  UPDATE OR DELETE OR INSERT ON CLIENT_SETTING

FOR EACH ROW

 

DECLARE

                change_flags     VARCHAR2(8); -- U, D, I

  num              NUMBER(2,0);

 

BEGIN

  num := 0;

 

  CASE

                WHEN UPDATING THEN

                    select count(1) into num from CLIENT_SETTING_INCREMENT where ACCOUNT_ID=:NEW.ACCOUNT_ID and CONTENT_ID=:NEW.CONTENT_ID and CONTEXT_ID=:NEW.CONTEXT_ID and PROPERTY_ID = :NEW.PROPERTY_ID;

 

                    IF num > 0 THEN

                                    update CLIENT_SETTING_INCREMENT set SETTING_TYPE=:NEW.SETTING_TYPE ,SETTING_VALUE=:NEW.SETTING_VALUE ,  CHANGE_FLAGS='U'

                                        where ACCOUNT_ID=:NEW.ACCOUNT_ID and CONTENT_ID=:NEW.CONTENT_ID and CONTEXT_ID=:NEW.CONTEXT_ID and PROPERTY_ID = :NEW.PROPERTY_ID;

        ELSE

            Insert into CLIENT_SETTING_INCREMENT (ACCOUNT_ID,CONTENT_ID,CONTEXT_ID,PROPERTY_ID,SETTING_TYPE,SETTING_VALUE,CHANGE_FLAGS )

                values (:NEW.ACCOUNT_ID, :NEW.CONTENT_ID, :NEW.CONTEXT_ID, :NEW.PROPERTY_ID, :NEW.SETTING_TYPE, :NEW.SETTING_VALUE, 'U');

        END IF;

 

                WHEN DELETING THEN

                    select count(1) into num from CLIENT_SETTING_INCREMENT where ACCOUNT_ID=:OLD.ACCOUNT_ID and CONTENT_ID=:OLD.CONTENT_ID and CONTEXT_ID=:OLD.CONTEXT_ID and PROPERTY_ID = :OLD.PROPERTY_ID;

dbms_output.put_line(num);

        IF num > 0 THEN

            update CLIENT_SETTING_INCREMENT set CHANGE_FLAGS='D'  where ACCOUNT_ID=:OLD.ACCOUNT_ID and CONTENT_ID=:OLD.CONTENT_ID and CONTEXT_ID=:OLD.CONTEXT_ID and PROPERTY_ID = :OLD.PROPERTY_ID;

        ELSE

         Insert into CLIENT_SETTING_INCREMENT (ACCOUNT_ID,CONTENT_ID,CONTEXT_ID,PROPERTY_ID,SETTING_TYPE,SETTING_VALUE,CHANGE_FLAGS )

                values (:OLD.ACCOUNT_ID,  :OLD.CONTENT_ID, :OLD.CONTEXT_ID, :OLD.PROPERTY_ID, :OLD.SETTING_TYPE, :OLD.SETTING_VALUE, 'D');

 

        END IF;

 

 

                WHEN INSERTING THEN

                                  Insert into CLIENT_SETTING_INCREMENT (ACCOUNT_ID,CONTENT_ID,CONTEXT_ID,PROPERTY_ID,SETTING_TYPE,SETTING_VALUE,CHANGE_FLAGS )

                values (:NEW.ACCOUNT_ID, :NEW.CONTENT_ID, :NEW.CONTEXT_ID, :NEW.PROPERTY_ID, :NEW.SETTING_TYPE, :NEW.SETTING_VALUE, 'I');

  END CASE;

 

END;

 

<!--[if !supportLists]-->Ø  <!--[endif]-->CLIENT_SETTING_INCREMENT1000000数据,10000操作

使用trigger 花费35621ms

               不使用trigger 花费31746ms

<!--[if !supportLists]-->Ø  <!--[endif]-->CLIENT_SETTING_INCREMENT2000000数据,100000操作

使用trigger 花费372923

               不使用trigger 花费294024

<!--[if !supportLists]-->4.       <!--[endif]-->项目的应用

考虑到sinc map项目中trigger可能会影响用户操作的响应时间,我们是否能够用flashback来减少对用户操作的影响,用户操作的记录可以用以下语句得到,对每一行都只会得到最新的操作记录。

select * from (select versions_operation,account_id,CONTENT_ID,CONTEXT_ID,PROPERTY_ID,SETTING_TYPE,SETTING_VALUE, RANK() OVER (PARTITION BY account_id,CONTENT_ID,CONTEXT_ID,PROPERTY_ID order by versions_startscn desc,versions_endscn desc) rank1   from z7admin.client_setting versions between scn 1005591 and 10405591

where  versions_operation is not null) where  rank1  = 1

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    BB flash back 屏幕录像软件

    BB FlashBack是一款功能强大的屏幕录像软件,主要用于创建高质量的视频教程、演示文稿或会议记录。这款软件以其易用性和专业性在IT行业内受到了广泛的认可。以下是对标题、描述及标签所涉及知识点的详细说明: ...

    Nand Flash Copy Back Feature

    ### NAND Flash Copy Back 特性详解 #### 描述与应用场景 **NAND Flash** 是一种非易失性存储器技术,被广泛应用于各种移动设备、固态硬盘等存储解决方案中。随着技术的发展,NAND Flash 不断进行优化,以提高性能...

    oracle flash back stop

    "Oracle Flash back stop"可能是指在操作过程中遇到的问题或需要停止的Flashback操作。让我们深入了解一下Oracle Flashback的相关知识点。 首先,Oracle Flashback主要包括三种类型:Flashback Query(查询闪回)、...

    BB Flash Back 4.7z最好用的录屏工具

    BB Flash Back 4是一款高效且用户友好的录屏软件,专为那些希望轻松捕捉和记录屏幕上活动的人设计。这款工具以其出色的性能和易用性在众多同类软件中脱颖而出,尤其适合那些需要创建教程、演示或者游戏录像的用户。 ...

    录屏软件BB Flash Back汉化破解

    录屏软件BB Flash Back,有BB FlashBack Pro 4 汉化补丁,可以正常使用

    BB Flash Back 4

    BB FlashBack 4是一款强大的屏幕录制软件,专为创建高质量的视频教程、演示和会议记录而设计。在本文中,我们将深入探讨这款软件的核心功能、使用场景以及它如何提升用户的屏幕录制体验。 一、核心功能 ...

    FlashTool 使用说明

    FlashTool 使用说明 FlashTool 是一种功能强大的刷机工具,专门为国产机 MTK 设备设计,提供了多种刷机模式和高级操作功能。本文将详细介绍 FlashTool 的使用说明和高级操作模式。 基本使用说明 1. 使用前请确定...

    ecan_back_to_back_28335_28335CAN_28335can_back_CAN_

    标题中的"ecan_back_to_back_28335_28335CAN_28335can_back_CAN_"暗示了这是一个关于28335微控制器(可能为TI公司的TMS320F28335)与CAN(Controller Area Network)接口之间进行回路连接的讨论。描述中进一步确认了...

    newNback_lianxi(use)_神经反馈_back_n-back实验范式_n-back_

    n-back实验范式,包含0,1,2back,eprime 3.0 运行

    MTK联发科SP_Flash_Tool_v5.2316_Win专业刷机工具

    MTK联发科SP_Flash_Tool_v5.2316_Win是一款针对联发科(MTK)处理器的安卓设备而设计的专业刷机工具。它主要用于帮助用户进行系统升级、故障修复、数据恢复等操作,尤其适用于那些无法通过常规方法进行软件更新的设备...

    MTK 刷机工具 Android系统刷机 SP_Flash_Tool_v5.2216_Win

    MTK(MediaTek)刷机工具,全称为SP_Flash_Tool,是专为基于MediaTek芯片的Android设备设计的一款强大的固件升级和恢复工具。在本文中,我们将深入探讨这款工具的功能、使用方法以及相关注意事项。 MTK,即联发科,...

    Ref_Back_to_Back.rar_back_back to back_back-to- back

    This is modeling back to back converter

    filtered-back-projection-master_back_fbp算法_图像重建_

    在图像处理领域,"filtered-back-projection"(滤波反投影)是一种常用的技术,用于将投影数据转换为图像,尤其在计算机断层扫描(CT)中广泛应用。此算法是图像重建过程中的核心部分,旨在从有限角度的一系列投影...

    Back_to_Back_HVDC_Conversion_System.rar_Back-To-Back HVDC_back_b

    【标题】"Back_to_Back_HVDC_Conversion_System.rar_Back-To-Back HVDC_back_b" 涉及的核心概念是“背靠背高压直流输电(Back-to-Back HVDC)”系统,这是一种电力传输技术,主要用于连接两个独立运行的交流电网。...

    NAND_FLASH_内存详解与读写寻址方式

    NAND FLASH 的读写操作可以分为读操作、编程操作、擦除操作和 COPY-BACK 编程操作等。读操作是从 NAND FLASH 中读取数据的过程。编程操作是将数据写入 NAND FLASH 中的过程。擦除操作是将 NAND FLASH 中的数据清除的...

    symantec back 2010 KEY

    symantec back 2010 KEY

    back_seg_code.zip_back_back images_fusion

    【标题】"back_seg_code.zip_back_back images_fusion" 是一个与图像融合相关的项目压缩包,其中包含了多种处理和分析图像的代码文件。这个项目主要关注的是如何将闪光灯(Flash)和非闪光灯(Non-Flash)拍摄的图像...

    Source Codes_backprojection_back_BP-GAN后处理_

    本文将深入探讨“后投影”(Back Projection)技术,以及其在BP-GAN(Back Projection GAN)中的应用,这些都是基于提供的标题"Source Codes_backprojection_back_BP-GAN后处理_"和描述"具体内容请见王楠楠的论文,...

    flashtool.rar_ flash tool_buffer_flashtool.rar_mtk_mtk read flas

    [DA] Fix that NAND download/read-back issue on MT6225 because buffer is linked on TCM. New features: 1. [DA] Supports new NOR Flash device [SPANSION] S29WS128P [SPANSION] S29WS256P [TOSHIBA] TV...

    TimeBack.exe命令行工具获取和更改文件的创建、修改、访问时间

    命令行工具TimeBack.exe获取和更改文件的创建、修改、访问时间 TimeBack 1.0 文件时间控制 作者:Xinje E-mail:xinje@126.com 2010.6.16 /F [文件名] 设置欲更改或查看文件时间的文件名。 /T [日期时间] 欲更改的...

Global site tag (gtag.js) - Google Analytics