oracle 11G新特性2.docx
- 文档编号:12368059
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:31
- 大小:159.82KB
oracle 11G新特性2.docx
《oracle 11G新特性2.docx》由会员分享,可在线阅读,更多相关《oracle 11G新特性2.docx(31页珍藏版)》请在冰豆网上搜索。
oracle11G新特性2
OracleDatabase11g:
面向DBA和开发人员的重要特性
数据库重放
了解如何使用数据库重放(OracleDatabase11g中一个闪亮登场的全新工具)来捕获完整的数据库负载,以便您可以随意进行“重放”。
需要在数据库中进行更改时—无论是进行微小的改动(如变更初始化参数和数据库属性)还是进行不可避免的较大改动(如应用补丁集),您最关心什么?
对于到OracleDatabase11g的升级,您最关心的是什么?
对我而言,我最关心的是更改是否会带来“破坏性”风险。
即使微小的改动也有可能引发多米诺骨牌效应,最终导致严重后果。
为了将这种风险降至最低,许多厂商在类似于生产环境的控制环境中进行更改,应用类似于生产系统的负载并观察随之产生的影响。
复制生产系统非常简单(至少从技术层面上讲),但再现负载却是另一回事。
说起来容易做起来难。
多数机构会采用一些可自动运行以模拟真实用户活动的第三方负载生成工具进行尝试。
大多数情况下,这种方法是可行的,但始终无法真正忠实地再现生产数据库负载。
这些第三方工具只是通过不同参数执行预编写的查询若干次;您必须向这些工具提供查询并给定其可以随机使用的参数范围。
这并不能代表您的生产系统负载,而仅仅是运行了一小部分执行了若干次的生产负载,因此,这只是对1%的应用程序代码进行了测试。
最糟糕的是,这些工具要求您自己提供所有来自生产负载的查询,对于小型应用程序而言,这可能需要数周或数月,对于复杂些的应用程序,则可能需要多达一年的时间。
如果可以,在数据库本身内记录所有数据库操作(与DML相关的操作及其他操作),而后按这些操作出现的真实顺序进行重放,难道不是一种更好的方法吗?
数据库重放概述
OracleDatabase11g将为您带来诸多好处。
新的数据库重放工具好似数据库内的DVR。
使用这个独特的方法,可以如实地以二进制文件格式捕获SQL级以下的所有数据库活动,然后在同一数据库或不同数据库内进行重放(这正是在进行数据库更改之前您希望做的)。
您还可以自定义捕获流程,以包括或排除某些特定类型的活动。
数据库重放与另一个工具SQLPerformanceAnalyzer共同构成了OracleDatabase11g的RealApplicationTesting选件。
这两个工具之间的主要不同在于涉及的范围:
数据库重放适用于捕获和重放数据库内的所有(符合某些过滤条件)活动,而SQLPerformanceAnalyzer可用于捕获特定的SQL语句并对其进行重放。
(在数据库重放中,您无法查看或访问捕获到的特定SQL,而在SQLPerformanceAnalyzer中则可以)。
后者的一个显著优势是SQL调优,因为您可以调整由应用程序执行的SQL语句并评估其影响。
(本系列即将推出有关SQLPerformanceAnalyzer介绍的文章。
)
理论上,数据库重放的工作顺序如下图所示。
启动一个记录数据库活动的捕获流程。
∙该流程将活动写入名为“capturefiles”的特殊文件,该文件位于/capturedirectory/目录中。
∙稍后,停止捕获流程,将这些捕获文件移至/replaydirectory/目录中的测试系统。
∙启动一个重放流程和若干重放客户端,以重放这些捕获文件。
∙这些捕获文件将在测试数据库上应用。
那么,数据库重放可以提供哪些第三方工具不能提供的优势?
一些工具仅重放若干您提供的复合语句。
而数据库重放不需要您提供SQL语句。
由于它将捕获SQL之下的所有活动,因此您不会遗漏任何可能导致性能问题的关键操作。
此外,您可以有选择地(针对特定用户、程序等)进行捕获,还可在捕获负载时指定时间期限,可以重放导致问题的特定负载,而不是整个数据库。
例如,您注意到月末利息计算程序导致问题出现,并猜想更改参数将简化流程。
您必须做的是捕获月末程序运行期间内的负载,在测试系统上对参数进行更改,然后在该测试系统上重放捕获文件。
如果性能有所提升,则表明此解决方案可行。
如果性能没有提升,这也仅仅是个测试系统而已。
您不会妨碍到生产数据库的运行。
在我看来,单为了使用该工具,也值得升级到OracleDatabase11g。
下面将介绍该工具的工作原理。
捕获
第一个任务是捕获数据库中的负载。
所有任务都可通过命令行或OracleEnterpriseManagerDatabaseControl完成,但本文将使用后者。
1.捕获到的负载存储在系统中的文件上,这些文件是名副其实的“摄像机”内的“磁带”。
该目录应当为空。
因此,第一个任务是创建目录(如果还没有此目录)。
对于本例,创建的目录名为/home/oracle/dbcapture。
2.
3.$cd/home/oracle
$mkdirdbcapture
4.在数据库中为该目录创建一个目录对象:
5.SQL>createdirectorydbcaptureas'/home/oracle/dbcapture';
6.
7.Directorycreated.
8.现在,可以开始捕获了。
为了演示真实场景,将创建一个简单的测试工具,该工具将生成许多INSERT语句并插入到一个名为TRANS的表中。
9.
10.createtabletrans(
11.trans_idnumber,
12.cust_namevarchar2(20),
13.trans_dtdate,
14.trans_amtnumber(8,2),
15.store_idnumber
(2)
16.)
17./
下面是一个可完成此任务的小的PL/SQL代码片断。
该代码片断将生成1,000条插入语句并进行执行。
(注意,此代码片段将生成1,000条不同的插入语句,而不是在同样的语句或程序中执行1,000次插入操作。
)
declare
l_stmtvarchar2(2000);
begin
forctrin1..1000loop
l_stmt:
='insertintotransvalues('||
trans_id_seq.nextval||','||
''''||dbms_random.string('U',20)||''','||
'sysdate-'||
round(dbms_random.value(1,365))||','||
round(dbms_random.value(1,99999999),2)||','||
round(dbms_random.value(1,99))||')';
dbms_output.put_line(l_stmt);
executeimmediatel_stmt;
commit;
endloop;
end;
18.只创建包含以上内容的文件;不要运行。
将该文件命名为add_trans.sql。
(以上所有步骤仅对于此课程都是必要的。
如果没有目录对象,则在生产环境中执行操作时无需这些步骤。
)
19.在现实情况中,您可能会在不同的数据库上运行重放。
但是,在此处,针对我们的目的,您将只是闪回同一数据库并重放那里的活动。
您可以通过创建名为GOLD的恢复点来标记该场所。
20.
21.SQL>createrestorepointgold;
现在,准备开始捕获。
导航到OracleEnterpriseManagerDatabaseControl中的DatabaseReplay主页面。
在该主页中,选择SoftwareandSupport(如下图所示,标记为“1”)
22.单击DatabaseReplay(在RealApplicationTesting下面)启动DatabaseReplay页面(如下所示)。
23.在左侧窗格中,您将看到一系列活动。
选择第一个活动(Step1:
CaptureWorkload),方式是单击它旁边的GotoTask图标。
24.下一个屏幕将显示三个您应在启动捕获流程之前仔细检查并确认的假设:
o当前数据库可以在重放系统上恢复到负载捕获开始时的SCN
o有足够的磁盘空间来保存捕获的负载
o在负载捕获开始之前已准备好重启数据库(如果您选择这样做)
25.选中所有复选框进行确认。
26.单击Next。
27.下一个屏幕有两个不同的操作项。
在屏幕的上半部分,您将看到两个单选按钮,您可通过这两个按钮来选择是否希望在捕获流程前重启数据库。
启动捕获流程后,可能会有一些正处于运行中的事务,其中并非所有都可进行捕获。
重启数据库将使这些正处于运行中的事务无效。
重启数据库可清除这些“干扰”。
而且,重启数据库可以为您提供一个干净备份在测试系统上进行恢复,从而确保您在与生产系统的SCN号相同的系统上重放活动。
出于上述原因,特别是第一个,Oracle建议在捕获之前重启数据库(该选项为默认设置)。
但这不是必须的。
如果不希望重启,请选择另一个单选按钮。
28.屏幕底部显示的内容如下所示。
现在,您将记录捕获流程在捕获活动时将考虑的筛选器。
默认有两个筛选器:
排除所有来自OracleManagementServer的活动和来自OracleManagementAgent的活动。
您也可以添加其他筛选器。
例如,要添加排除所有Perl程序的筛选器,可单击AddAnotherRow并在域“FilterName”和“Value”中分别输入“perl”和“%perl%”。
同样,纠正默认参数中的小错误—OracleManagementAgent筛选器的值应为“%emagent%”,而不是“emagent%”。
或者,假设您希望排除所有SYS用户操作。
那么,您需要从SessionAttribute下拉框中选择USER,并在“Value”列中输入SYS。
29.单击Next。
这将显示一个类似如下所示的屏幕:
30.在该屏幕中,从下拉框中选择将在其中存储捕获文件的目录名。
本例中已使用了目录DBCAPTURE。
如果您没有在以上步骤中创建该目录,还可通过单击CreateDirectoryObject进行创建。
然后单击Next。
31.在下一个屏幕中,您将看到JobDetails(作业细节),如作业执行时间等。
选择单选按钮Immediate立即执行作业。
32.在该页面上填写其他详细信息,如OS用户名、SYS口令等,并单击Next。
33.下一个屏幕标为“Step5of5”,其中将显示您输入的所有信息,如作业名和排除筛选器。
如果所有内容都符合您的要求,则单击Submit。
否则,可返回进行修改。
34.一旦单击了Submit,负载捕获就将开始。
您将看到一个确认屏幕,如下所示。
注意Status,其显示为“InProgress”。
35.现在,该工具正在捕获负载,从SQL*Plus提示符运行您的模拟负载。
当然,在实际的系统中,无需运行任何模拟;只需让捕获流程运行一段时间以捕获所有负载。
36.
37.SQL>connectarup/arup
38.SQL>@ins_trans
这将在表TRANS中执行1,000条插入语句。
在负载完成后,单击StopCapture按钮,如以上屏幕中所示。
将要求您确认。
39.Oracle在捕获负载前后自动获取自动负载信息库(AWR)快照。
在下一个屏幕中,将询问您是否要导出AWR数据。
如果您在其他系统上重放并且希望将AWR数据从当前数据库导出到目标数据库(如以下屏幕中所示),这步操作很重要。
单击Yes。
40.这将创建一个导出AWR的调度程序作业。
单击作业名称并刷新状态屏幕,直至您看到作业从Running选项卡中消失。
您已将捕获的负载存储到/home/oracle/dbcapture目录中的文件里。
预处理
现在,负载已捕获,可进行重放了。
通常,您希望在单独的测试系统中进行重放,因此需要将目录/home/oracle/dbcapture中的文件复制到一个新的主机。
请确保在将文件复制到该目录时,该目录为空。
出于教学目的,您将使用同一个数据库进行重放。
在同一数据库中进行重放并不常见,但有可能出现。
例如,您可能希望在主系统中重放事务,测试完成后闪回至起始点。
您可能会中断一个时段,以在期间测试参数更改(您将在同一数据库中进行此更改)的效果。
您需要在播放捕获的负载之前对其进行预处理。
预处理可使这些捕获的文件为重放做好准备。
1.转至DatabaseReplay主页面。
2.选择Step2:
PreprocessWorkload。
3.从下拉列表框中选择目录对象。
这将显示捕获的负载。
在本例中,该目录对象是DBCAPTURE。
如果您还没有创建目录对象,单击相应的按钮即可轻松创建目录。
4.单击PreprocessWorkload。
5.在下一个页面中,将要求您提供作业名和相关详细信息,如主机用户名和口令。
如果不想指定作业名,则接受默认值。
选择立即运行该作业。
主机用户ID和口令应已填充。
如果还没有,输入相应的值,单击Submit。
6.在下一个页面中,您将看到确认信息和一个可用于查看作业状态的链接。
单击该链接。
7.刷新该屏幕,直至您看到状态为“Succeeded”。
现在,负载已经过预处理,可用于重放了。
重放
捕获负载并进行预处理后,就可在测试数据库中进行重放了。
出于教学目的,您在同一数据库中预处理了负载,并将使用同一数据库重放这些活动。
为此,您必须将数据库重置回起始点。
您可以通过将其闪回到在捕获流程期间创建的还原点GOLD来轻松实现此目的。
SQL>shutdownimmediate;
...databaseshutsdown...
SQL>startupmount
...instancestartsandmountsthedatabase...
SQL>flashbackdatabasetorestorepointgold;
...databasewillbeflashedback...
SQL>alterdatabaseopenresetlogs;
...databaseisopened...
现在,您处于负载启动之前的一个点,可以重放之前捕获的负载了。
按照以下步骤对其进行重放。
1.从Database主页转至DatabaseReplay主屏幕,如“Capturing”部分中所示。
2.从菜单中选择Step3:
ReplayWorkload。
这将带您进入Replay主屏幕。
3.您将看到一个用于选择目录的下拉框。
选择重放文件所在的目录。
这是目录对象;不是实际的UNIX目录。
在之前的示例中,您使用了目录对象DBCAPTURE,因此将其选中。
如果您还没有创建目录,可单击CreateDirectory创建一个目录对象。
4.单击右上角的SetupReplay。
5.下一个屏幕将显示即将发生的事情的信息列表。
以下为每条信息项的相关说明。
6.RestoreDatabase(还原数据库)—重放之前捕获的负载时,可能需要在测试系统上执行此操作。
您如何构建测试系统?
您可能将生产数据库还原到测试系统并对其进行还原。
最大的可能是,在此活动中,生产数据库没有关闭,因此您的恢复可能并不完全。
在这种情况下,确认恢复操作已执行至捕获和预处理阶段指定的SCN号。
本例中,您将数据库闪回至该SCN号。
因此,您遵循了规定。
7.PerformSystemChanges(执行系统更改)—这是为什么要首先执行重放的原因:
测试系统更改,如参数更改或设置更改。
当然,您需要在重放之前进行更改。
8.ResolveReferencestoExternalSystems(解决对外部系统的引用)—假设您已经在生产数据库中有了一个指向/home/appman/myfiles的目录对象,而测试系统上不存在该目录。
在重放时,对该目录的引用将失败。
同样,源系统中的所有数据库链接也将在测试系统中失败(如果它们不存在)。
因此,您需要通过创建或更改目录来解决这些问题。
可以利用下一个屏幕对其进行更改。
9.SetUpReplayClients(设置重放客户端)—了解如何在后续步骤中执行该操作。
10.单击Continue,这将显示如下所示的屏幕:
可以通过单击页面上显示的链接更改所有非引用参数。
请注意,单击任何一个链接都将离开DatabaseReplay页面。
因此,最好在SQL*Plus中对这些链接进行单独更改。
单击Continue。
11.输入ReplayName或接受默认值。
12.下一个屏幕将显示一些由于未解决的对数据库链接、目录等的引用而可能导致的问题。
如果愿意,可以在屏幕右侧更改重放系统。
在本例中,由于在同一数据库上运行,因此本步骤并非必需。
13.单击Next。
这将显示如下所示的屏幕:
该屏幕将显示重放流程正在等待重放客户端。
重放客户端的执行并不在DatabaseControl屏幕内进行。
这些客户端程序读取捕获的负载并对其进行重放。
程序名为wrc(在UNIX和Windows系统上均是该名称)。
要启动重放客户端,您需要转至UNIX提示符并执行以下命令行:
$wrcuserid=systempassword=*replaydir=/home/oracle/dbcapture
14.当然,您需要提供正确的SYSTEM口令。
如果捕获文件存储在另一个地方,则需更改目录名。
应返回以下消息:
15.
16.WorkloadReplayClient:
Release11.1.0.6.0-ProductiononTueSep419:
50:
442007
17.
18.Copyright(c)1982,2007,Oracle.Allrightsreserved.
19.
20.Waitforthereplaytostart(19:
50:
44)
21.此时,重放客户端仅仅是等待重放管理程序(DatabaseControl)告知其启动。
您可以决定是否启动多个客户端来并行处理负载。
22.立即转至DatabaseControl屏幕。
您应当看到该屏幕已更改,其中显示已连接重放客户端。
该屏幕将显示客户端连接的主机名、操作系统进程ID等。
23.单击Next,然后单击Submit启动重放流程。
如果现在转至UNIX会话,您会看到另一条消息:
“Replaystarted(01:
49:
56)”。
该屏幕将通过进度条来显示目前已处理的数据量。
24.一段时间之后,UNIX会话将显示“Replayfinished(01:
50:
35)”。
此时,如果查看DatabaseControl屏幕,您将看到该屏幕类似如下所示:
25.其中显示了重放作业的详细状态。
左上角的关键域“Status”显示为“Completed”,指示作业已完成。
26.现在可以进行运行分析了。
该屏幕在下半部分(标题“Comparison”下)显示了一些指标。
在本例中,完成重放所用的时间是捕获时间的39.08%。
这是个好消息吗?
您实施的更改有效吗?
未必。
查看下一个指标—DatabaseTime—是捕获时间的180%。
要查看更多信息,可单击选项卡Report,这将显示如下屏幕:
27.该屏幕显示报告的各种选项。
从最简单的WorkloadReport开始。
该报告没有比较性能,而是向您显示“差异”—重放中有多少数据不同。
例如,如果您有一条ID为3的记录,对该记录进行了更新,之后又将其删除。
在重放期间,假定先将其删除然后再更新;这就属于差异。
差异越少,回放越精确。
28.但请勿就此停下。
要进行明确分析,可检查如下所示的AWR比较时段报告,看看众多其他指标(如栓锁争用、锁定、重做产生、一致获取等)之间的差异,以使您更好、更清晰地了解更改所带来的影响。
该报告显示捕获和重放负载之间的差异。
在重放期间,与捕获期间相比,物理读取和写入分别增加为367%和111%。
其他参数(如排序和逻辑读取)也呈增长趋势,虽然增长的不是那么明显。
因此,您可以得出结论:
无论进行何种更改,都会损害性能,而非有助于性能。
第2版新增特性:
在第2版中,将一些新的信息类型捕获到AWR信息库中。
这些新数据源作为视图公开,视图名称中包含DBA_HIST。
DBA_HIST_DISPATCHER
DBA_HIST_DYN_REMASTER_STATS
DBA_HIST_IOSTAT_DETAIL
DBA_HIST_SHARED_SERVER_SUMMARY
DBA_HIST_SQLCOMMAND_NAME
DBA_HIST_TOPLEVELCALL_NAME
这里要介绍一个特别重要的视图。
DBA_HIST_IOSTAT_DETAIL显示按文件类型和功能(组件)组合所收集的I/O统计信息。
该视图包含V$IOSTAT_FILE和V$IOSTAT_FUNCTION的快照。
以下是内容的快照:
SNAP_IDDBIDINSTANCE_NUMBERFUNCTION_IDFUNCTION_NAME
----------------------------------------------------------------------------
FILETYPE_IDFILETYPE_NAMESMALL_READ_MEGABYTES
-------------------------------------------------------------
SMALL_WRITE_MEGABYTESLARGE_READ_MEGABYTESLARGE_WRITE_MEGABYTESSMALL_READ_REQS
-----------------------------------------------------------------------------
SMALL_WRITE_REQSLARGE_READ_REQSLARGE_WRITE_REQSNUMBER_OF_WAITSWAIT_TIME
------------------------------------------------------------------------
10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 11G新特性2 11 特性