选择显示字体大小

oracle database 10g:为 dba 提供的最佳前 20 位的特性(一)

oracle database 10g:为 dba 提供的最佳前 20 位的特性(一)

作者 arup nanda 来源: otn

在过去的 27 年中, oracle 已经在其核心数据库产品中进行了大量的改进工作。现在,该产品不仅是世界上最可靠和性能最好的数据库,而且是用于企业计算的完整软件基础架构的组成部分。随着每个新版本的出现,有时会推出夺目的新功能和特性,有时会让开发人员、 it 经理甚至经验丰富的 dba 疑惑哪些新特性会为他们带来最大的利益。

随着 oracle database 10 g 的推出, dba 将会得到 oracle 历来提供的最深奥的新版本之一。因此,对于那些花时间来理解如何将新的 oracle 技术正确应用到其日常工作中的 dba 来说,他们将会喜欢许多省时并且最终会省钱的新功能。

oracle database 10 g 提供了许多新的工具,它们帮助 dba 更加高效(也可能更加愉快)地工作,使他们解放出来,进行更具有战略性、创造性的工作 — 而不是谈论他们在夜间和周末的加班工作。 oracle database 10 g 确实 dba 的得力工具。

在新的 20 周时间中,我将通过给出我所认为的 oracle database 10 g 数据库管理任务提供的最佳前 20 位的新特性,帮助您详细了解这个功能强大的新版本。该列表包含了从基本特性(如为创建用户而设置默认表空间)到高级特性(如新的自动存储管理特性)等内容。

在本系列中,我将提供对这些有趣的新工具和技术的简要、集中的分析。其目的是概述特性的功能和优点,以便您能够尽快将其应用到您的环境中。

欢迎您对本系列提出您的想法、意见和问题。祝您愉快!

第 1 周


得到电影而不是图片:闪回版本查询

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

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

查询对表的更改

在本示例中,我使用了一个银行外币管理应用程序。其数据库含有一个名称为 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 10 g 中,闪回版本查询特性不需要维护历史表或存储开始和结束时间。使用该特性,您不必进行额外的设置,即可获得某行在过去特定时间的值。

例如,假定该 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 0002002800000c 61 i 1.1012

01-dec-03 03.57.30 pm 01-dec-03 03.57.39 pm 000a 000a 00000029 u 1.1014

01-dec-03 03.57.39 pm 01-dec-03 03.57.55 pm 000a 000b00000029 u 1.1013

01-dec-03 03.57.55 pm 000a 000c 00000029 d 1.1013

01-dec-03 03.58.07 pm 01-dec-03 03.58.17 pm 000a 000d00000029 i 1.1016

01-dec-03 03.58.17 pm 000a 000e00000029 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 值 000a 000d00000029 , undo_sql 值显示了实际的语句。

select undo_sql

from flashback_transaction_query

where xid = ' 000a 000d00000029';

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 000a 000c 00000029 d 1.1013

01-dec-03 03.58.07 pm 01-dec-03 03.58.17 pm 000a 000d00000029 i 1.1016

01-dec-03 03.58.17 pm 000a 000e00000029 u 1.1011

最终的分析

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

有关闪回版本查询的更多信息,请参见 oracle database concepts 10g release 1 (10.1) 指南的 相关部分 。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons