OracleDatabase10g:闪回版本查询

OracleDatabase10g:闪回版本查询,第1张

不需要设置 立即识别对行的所有更改

在 Oracle i Database 中 我们看到它推出了以闪回查询形式表示的 时间机器 该特性允许 DBA 看到特定时间的列值 只要在还原段中提供该数据块此前镜像的拷贝即可 但是 闪回查询只提供某时刻数据的固定快照 而不是在两个时间点之间被更改数据的运行状态表示 某些应用程序 如涉及到外币管理的应用程序 可能需要了解一段时期内数值数据的变化 而不仅仅是两个时间点的数值 由于闪回版本查询特性 Oracle Database g 能够更方便高效地执行该任务

查询对表的更改

在本示例中 我使用了一个银行外币管理应用程序 其数据库含有一个名称为 RATES 的表 用于记录特定时间的汇率

SQL> desc rates    Name              NullType        CURRENCY                   VARCHAR ( )    RATE                       NUMBER( )

该表显示 US$ 与各种其他货币的汇率 在 CURRENCY 列中显示 在金融服务行业中 汇率不但在变更时进行更新 而且被记录在历史中 需要这种方式的原因是银行交易可能在 过去时间 生效 以便适应由于汇款而耗费的时间 例如 对于一项在上午 : 发生但在上午 : 生效的交易 其有效汇率是上午 : 的汇率 而不是现在的汇率

直到现在 唯一的选择是创建一个汇率历史表来存储汇率的变更 然后查询该表是否提供历史记录 另一种选择是在 RATES 表本身中记录特定汇率适用性的开始和结束时间 当发生变更时 现有行中的 END_TIME 列被更新为 SYSDATE 并插入一个具有新汇率的新行 其 END_TIME 为 NULL

但是在 Oracle Database g 中 闪回版本查询特性不需要维护历史表或存储开始和结束时间 使用该特性 您不必进行额外的设置 即可获得某行在过去特定时间的值

例如 假定该 DBA 在正常业务过程中数次更新汇率 ― 甚至删除了某行并重新插入该行

insert into rates values ( EURO );    mit;    update rates set rate = ;    mit;    update rates set rate = ;    mit;    delete rates;    mit;    insert into rates values ( EURO );    mit;    update rates set rate = ;    mit;

在进行了这一系列 *** 作后 DBA 将通过以下命令获得 RATE 列的当前提交值

SQL> select from rates;

CURR       RATE        EURO    

此输出显示 RATE 的当前值 没有显示从第一次创建该行以来发生的所有变更 这时使用闪回查询 您可以找出给定时间点的值 但我们对构建变更的审计线索更感兴趣 ― 有些类似于通过便携式摄像机来记录变更 而不只是在特定点拍摄一系列快照

以下查询显示了对表所做的更改

select versions_starttime versions_endtime versions_xid     versions_operation rate    from rates versions beeen timestamp minvalue and maxvalue    order by VERSIONS_STARTTIME    /

VERSIONS_STARTTIME     VERSIONS_ENDTIME       VERSIONS_XID     V       RATE        DEC PM  DEC PM  C I         DEC PM  DEC PM  A A U         DEC PM  DEC PM  A B U         DEC PM                         A C D         DEC PM  DEC PM  A D I         DEC PM                         A E U    

注意 此处显示了对该行所作的所有更改 甚至包括该行被删除和重新插入的情况 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 值 A D UNDO_SQL 值显示了实际的语句

SELECT UNDO_SQL    FROM FLASHBACK_TRANSACTION_QUERY    WHERE XID = A D ;

UNDO_SQL        insert into ANANDA RATES ( CURRENCY RATE ) values ( EURO );

除了实际语句之外 该视图还显示提交 *** 作的时间标记和 SCN 查询开始时的 SCN 和时间标记以及其他信息

找出一段时期中的变更

现在 让我们来看如何有效地使用这些信息 假设我们需要找出下午 : : 时 RATE 列的值 我们可以执行

select rate versions_starttime versions_endtime    from rates versions    beeen timestamp    to_date( / / : : mm/dd/yyyy hh :mi:ss )    and to_date( / / : : mm/dd/yyyy hh :mi:ss )    /

RATE VERSIONS_STARTTIME     VERSIONS_ENDTIME           

此查询与闪回查询类似 在以上的示例中 开始和结束时间为空 表示汇率在该时间段中没有更改 而是包含一个时间段 还可以使用 SCN 来找出过去的版本值 可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号 以下是一个示例

select rate versions_starttime versions_endtime    from rates versions    beeen scn and     /

使用关键词 MINVALUE 和 MAXVALUE 可以显示还原段中提供的所有变更 您甚至可以提供一个特定的日期或 SCN 值作为范围的一个端点 而另一个端点是文字 MAXVALUE 或 MINVALUE 例如 以下查询提供那些只从下午 : : 开始的变更 而不是全部范围的变更

select versions_starttime versions_endtime versions_xid     versions_operation rate    from rates versions beeen timestamp    to_date( / / : : mm/dd/yyyy hh :mi:ss )    and maxvalue    order by VERSIONS_STARTTIME    /

VERSIONS_STARTTIME     VERSIONS_ENDTIME       VERSIONS_XID     V       RATE        DEC PM                         A C D         DEC PM  DEC PM  A D I         DEC PM                         A E U    

最终的分析

闪回版本查询随取随用地复制表变更的短期易变数值审计 这一优点使得 DBA 能够获得过去时间段中的所有变更而不是特定值 只要还原段中提供数据 就可以尽情使用 因此 最大的可用版本依赖于 UNDO_RETENTION 参数

lishixinzhi/Article/program/Oracle/201311/17217

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

一般的文件型数据库,实际上对整个就是一个或者多个文件,所谓的备份就是把这些文件考虑到其它介质上,可能有一个打包的过程,或者刻录到DVD的过程。这是对文件型数据库备份和恢复的最好方法,效率最好, *** 作最简单。

有的大型数据库,它自己管理存储空间,是分区或者磁盘,不被 *** 作系统识别。这类数据库一样可以用GHOST等工具备份磁盘。

可能许多人讲备份数据库是把数据库转换为SQL或者文本文件。其实这是另外一个概念,叫做数据迁移,目的是把数据库的数据移植到其它数据库管理系统。数据迁移不适合用来做数据库的日常备份,一般关键数据库不会平凡的做数据迁移。一般数据库系统会提供专门的数据迁移工具,当然这类工具也可能就是一系列的SQL语句,自己也能编写。

以上就是关于OracleDatabase10g:闪回版本查询全部的内容,包括:OracleDatabase10g:闪回版本查询、数据库的原理是利用、数据库备份与恢复原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9563938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存