PK lUIoa,mimetypeapplication/epub+zipPKlUI OEBPS/lof.htmz List of Figures

List of Figures

PK"PKlUI OEBPS/lot.htmF List of Tables

List of Tables

PKmKFPKlUI OEBPS/spa.htm SQL Performance Analyzer

1 SQL Performance Analyzer

SQL Performance Analyzer enables you to assess the performance impact of any system change resulting in changes to SQL execution plans and performance characteristics. Examples of common system changes for which you can use SQL Performance Analyzer include:

This document specifically describes how to use SQL Performance Analyzer in a database upgrade from Oracle Database 9i to Oracle Database 10g Release 2. For complete information about SQL Performance Analyzer, and how to use it in other cases, see Oracle Database Performance Tuning Guide.

This chapter contains the following sections:

Testing Database Upgrade from Oracle Database 9i to Oracle Database 10g

SQL Performance Analyzer accepts a representative set of SQL statements stored in a SQL tuning set as its input source. Since SQL tuning sets are not supported in Oracle Database 9i, this release supports the added functionality to read SQL trace files from Oracle Database 9i to construct a SQL tuning set that can be used as an input source for SQL Performance Analyzer. Once constructed, you can use SQL Performance Analyzer to execute the SQL tuning set on Oracle Database 10g Release 2 remotely over a database link. This functionality is provided so that you can use SQL Performance Analyzer to test the impact on SQL response time of a database upgrade from Oracle Database 9i to Oracle Database 10g Release 2, as illustrated in Figure 1-1.

Figure 1-1 SQL Performance Analyzer Workflow for Database Upgrade from Oracle Database 9i to Oracle Database 10g Release 2

Description of Figure 1-1 follows

The production system which you are upgrading from should be running Oracle Database 9i. The test system which you are upgrading to should be running Oracle Database 10g Release 2. The database version can be release 10.2.0.2 or later. If you are upgrading to Oracle Database 10g release 10.2.0.2 or 10.2.0.3, you will also need to install a one-off patch before proceeding. To ensure that the analysis made by SQL Performance Analyzer is accurate, this system should contain an exact copy of the production data found on the production system. Furthermore, the hardware configuration should also be as similar to the production system as possible.

Next, you will need to set up a separate system running Oracle Database 11g Release 1. The database version should be release 11.1.0.6. You will also need to install a one-off patch for this release. You will be using this system to build a SQL tuning set and to run SQL Performance Analyzer. Neither your production data or schema need to be available on this system, since the SQL tuning set will be built using statistics stored in the SQL trace files from the production system, and SQL Performance Analyzer tasks will be executed remotely on the test system over a database link.

Once the upgrade environment is configured as described, you can use SQL Performance Analyzer in a database upgrade from Oracle Database 9i to Oracle Database 10g by completing the following steps, as illustrated in Figure 1-1:

  1. Enable the SQL Trace facility on the production system running Oracle Database 9i.

    To minimize the performance impact on the production system and still be able to fully capture a representative set of SQL statements, consider enabling SQL Trace for only a subset of the sessions, for as long as required, to capture all important SQL statements at least once.

  2. Create a mapping table on the production system running Oracle Database 9i.

    This mapping table will be used to convert the user and object identifier numbers in the SQL trace files to their string equivalents.

  3. Move the SQL trace files and the mapping table from the production system running Oracle Database 9i to the system running Oracle Database 11g.

  4. On the system running Oracle Database 11g, construct a SQL tuning set using the SQL trace files.

    The SQL tuning set will contain the SQL statements captured in the SQL trace files, along with their relevant execution context and statistics.

  5. On the system running Oracle Database 11g, use SQL Performance Analyzer to build a pre-upgrade SQL trial and a post-upgrade SQL trial:

    1. Convert the contents in the SQL tuning set into a pre-upgrade SQL trial that will be used as a baseline for comparison.

    2. Remotely test execute the SQL statements on the test system running Oracle Database 10g over a database link to build a post-upgrade SQL trial.

  6. Compare SQL performance and fix regressed SQL:

    SQL Performance Analyzer compares the performance of SQL statements read from the SQL tuning set during the pre-upgrade SQL trial to those captured from the remote test execution during the post-upgrade SQL trial. A report is produced to identify any changes in execution plans or performance of the SQL statements.

    If the report reveals any regressed SQL statements, you can make further changes to fix the regressed SQL. You can then repeat the process of executing the SQL tuning set and comparing its performance to a previous execution to test any fixes or additional changes made. Repeat these steps until you are satisfied with the outcome of the analysis.

The remaining sections in this chapter discuss each of these steps in greater detail.

Enabling SQL Trace on the Production System

Oracle Database 9i uses the SQL Trace facility to collect performance data on individual SQL statements. The information generated by SQL Trace is stored in SQL trace files. SQL Performance Analyzer consumes the following information from these files:

Although it is possible to enable SQL Trace for an instance, it is recommended that you enable SQL Trace for a subset of sessions instead. When the SQL Trace facility is enabled for an instance, performance statistics for all SQL statements executed in the instance are stored into SQL trace files. Using SQL Trace in this way can have a severe performance impact and may result in increased system overhead, excessive CPU usage, and inadequate disk space. It is required that trace level be set to 4 to capture bind values, along with the execution plans.

After enabling SQL Trace on the production system running Oracle 9i, identify the SQL trace files containing statistics for a representative set of SQL statements that you want to use with SQL Performance Analyzer. You can then copy the SQL trace files to the system running Oracle Database 11g. Once the SQL workload is captured in the SQL trace files, disable SQL Trace on the production system running Oracle 9i.


See Also:

Oracle Database Performance Tuning Guide for additional considerations when using SQL Trace, such as setting initialization parameters to manage SQL trace files

Creating a Mapping Table

To convert the user and object identifier numbers stored in the SQL trace files to their respective names, you need to provide a table that specifies each mapping. Oracle Database 11g will read this mapping table when converting the trace files into a SQL tuning set.

To create a mapping table, run the following SQL statements on the production database running Oracle Database 9i:

create table mapping as
    select object_id id, owner, substr(object_name, 1, 30) name from dba_objects
    where object_type NOT IN ('CONSUMER GROUP', 'EVALUATION CONTEXT', 'FUNCTION',
                              'INDEXTYPE', 'JAVA CLASS', 'JAVA DATA',
                              'JAVA RESOURCE', 'LIBRARY', 'LOB', 'OPERATOR',
                              'PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'QUEUE',
                              'RESOURCE PLAN', 'TRIGGER', 'TYPE', 'TYPE BODY')
    union all
    select user_id id, username owner, null name from dba_users;

Once the mapping table is created, you can use Data Pump to transport it to the system running Oracle Database 11g.


See Also:

Oracle Database Utilities for information about using Data Pump

Building a SQL Tuning Set

Once the SQL trace files and mapping table are moved to the system running Oracle Database 11g, you can build a SQL tuning set using the DBMS_SQLTUNE package.

To build a SQL tuning set:

  1. Copy the SQL trace files to a directory on the system running Oracle Database 11g.

  2. Create a directory object for this directory.

  3. Use the DBMS_SQLTUNE.SELECT_SQL_TRACE function to read the SQL statements from the SQL trace files.

    The following example reads the contents of SQL trace files stored in the sql_trace_prod directory object and loads them into a SQL tuning set.

    DECLARE
      cur sys_refcursor;
    BEGIN
      DBMS_SQLTUNE.CREATE_SQLSET('my_sts_9i');
      OPEN cur FOR
        SELECT VALUE (P) 
        FROM table(DBMS_SQLTUNE.SELECT_SQL_TRACE('sql_trace_prod', '%ora%')) P;
      DBMS_SQLTUNE.LOAD_SQLSET('my_sts_9i', cur);
      CLOSE cur;
    END;
    /
    

The syntax for the SELECT_SQL_TRACE function is as follows:

  DBMS_SQLTUNE.SELECT_SQL_TRACE ( 
    directory              IN VARCHAR2,
    file_name              IN VARCHAR2 := NULL,
    mapping_table_name     IN VARCHAR2 := 'mapping',
    mapping_table_owner    IN VARCHAR2 := NULL,
    select_mode            IN POSITIVE := SINGLE_EXECUTION,
    options                IN BINARY_INTEGER := LIMITED_COMMAND_TYPE,
    pattern_start          IN VARCHAR2 := NULL,
    parttern_end           IN VARCHAR2 := NULL,
    result_limit           IN POSITIVE := NULL)
  RETURN sys.sqlset PIPELINED;

Table 1-1 describes the available parameters for the SELECT_SQL_TRACE function.

Table 1-1 DBMS_SQLTUNE.SELECT_SQL_TRACE Function Parameters

ParameterDescription

directory

Specifies the directory object pointing to the directory where the SQL trace files are stored.

file_name

Specifies all or part of the name of the SQL trace files to process. If unspecified, the current or most recent trace file in the specified directory will be used. % wildcards are supported for matching trace file names.

mapping_table_name

Specifies the name of the mapping table. The default mapping table name is mapping. Note that the mapping table name is not case-sensitive.

mapping_table_owner

Specifies the schema where the mapping table resides. If set to NULL, the current schema will be used.

select_mode

Specifies the mode for selecting SQL statements from the trace files. The default value is SINGLE_EXECUTION. In this mode, only statistics for a single execution per SQL statement will be loaded into the SQL tuning set. The statistics are not cumulative, as is the case with other SQL tuning set data source table functions.

options

Specifies the options for the operation. The default value is LIMITED_COMMAND_TYPE, only SQL types that are meaningful to SQL Performance Analyzer (such as SELECT, INSERT, UPDATE, and DELETE) are returned from the SQL trace files.

pattern_start

Specifies the opening delimiting pattern of the trace file sections to consider. This parameter is currently not used.

pattern_end

Specifies the closing delimiting pattern of the trace file sections to process. This parameter is currently not used.

result_limit

Specifies the top SQL from the (filtered) source. The default value is MAXSB4.



See Also:

Oracle Database PL/SQL Packages and Types Reference for information about the DBMS_SQLTUNE package

Running SQL Performance Analyzer

After building the SQL tuning set on the system running Oracle Database 11g, you can use it as an input source to run SQL Performance Analyzer. Running SQL Performance Analyzer involves creating SQL trials for Oracle Database 9i and Oracle Database 10g Release 2, and storing them in a central task container. A SQL trial represents a discrete set of performance data in the task and is generated automatically by the EXECUTE_ANALYSIS_TASK procedure as a place to store its results.

To run SQL Performance Analyzer:

  1. Create a SQL Performance Analyzer task, as described in "Creating a SQL Performance Analyzer Task".

  2. Execute the task to convert production statistics from the SQL tuning set into a pre-upgrade SQL trial, as described in "Building the Pre-Upgrade SQL Trial".

  3. Perform a test execution to generate statistics and execution plans on the test system running Oracle Database 10g Release 2 to build a post-upgrade SQL trial, as described in "Building the Post-Upgrade SQL Trial".

Creating a SQL Performance Analyzer Task

This section describes how to create a new SQL Performance Analyzer task on the system running Oracle Database 11g by using the DBMS_SQLPA.CREATE_ANALYSIS_TASK function. A task is a database container for SQL Performance Analyzer execution inputs and results.

Before creating the task, ensure that the SQL workload to use for the performance analysis is available in the form of a SQL tuning set on the system. Call the CREATE_ANALYSIS_TASK function using the following parameters:

  • Set task_name to specify the name for the SQL Performance Analyzer task.

  • Set sqlset_name to the name of the SQL Tuning Set.

  • Set sqlset_owner to the owner of the SQL Tuning Set. The default is the current schema owner.

  • Use basic_filter to filter out SQL statements that you do not want to include in the trial.

  • Set order_by to specify an order-by clause on the selected SQL.

  • Set top_sql to consider only the top number of SQL statements after filtering and ranking.

The following example creates a SQL Performance Analyzer task named my_spa_task that will use the SQL tuning set named my_sts_9i as its input source:

VARIABLE t_name VARCHAR2(100);
EXEC :t_name := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sqlset_name => 'my_sts_9i', -
       task_name => 'my_spa_task');

See Also:

Oracle Database PL/SQL Packages and Types Reference to learn more about the DBMS_SQLPA.CREATE_ANALYSIS_TASK function

Building the Pre-Upgrade SQL Trial

After the SQL Performance Analyzer task is created on the system running Oracle Database 11g, you need to call the EXECUTE_ANALYSIS_TASK procedure to take the execution plans and runtime statistics in the SQL tuning set and use them to build a pre-upgrade SQL trial.

To build the pre-upgrade SQL trial, call the EXECUTE_ANALYSIS_TASK procedure using the following parameters:

  • Set the task_name parameter to the name of the SQL Performance Analyzer task that you want to execute.

  • Set the execution_type parameter to CONVERT SQLSET to direct SQL Performance Analyzer to treat the statistics in the SQL tuning set as a trial execution.

  • Specify a name to identify the execution using the execution_name parameter. If not specified, then SQL Performance Analyzer automatically generates a name for the task execution.

The following example executes the SQL Performance Analyzer task named my_spa_task as a trial execution:

EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'my_spa_task', -
       execution_type => 'CONVERT SQLSET', - 
       execution_name => 'my_trial_9i');

See Also:

Oracle Database PL/SQL Packages and Types Reference to learn about the DBMS_SQLPA.EXECUTE_ANALYSIS_TASK function

Building the Post-Upgrade SQL Trial

After the pre-upgrade SQL trial is built, you need to run a SQL Performance Analyzer task to perform a test execute or explain plan of SQL statements in the SQL tuning set on the test system running Oracle Database 10g Release 2 to build a post-upgrade SQL trial. SQL Performance Analyzer remotely test executes the SQL statements using a database link that you need to specify so that Oracle Database 11g can connect to Oracle Database 10g Release 2 to generate the execution plan and statistics for the SQL trial. The database link should exist on the system running Oracle Database 11g and connect to the test system running Oracle Database 10g Release 2.

To build the post-upgrade SQL trial, perform an explain plan or test execute using the system running Oracle Database 11g by calling the EXECUTE_ANALYSIS_TASK procedure with the DATABASE_LINK task parameter set to the global name of a public database link to be used. If you choose to use EXPLAIN PLAN, only execution plans will be generated. Subsequent comparisons will only be able to yield a list of changed plans without making any conclusions about performance changes. If you choose to use TEST EXECUTE, the SQL workload will be executed to completion. This effectively builds the post-upgrade performance data using the statistics and execution plans generated from the test system running Oracle Database 10g. Using TEST EXECUTE is recommended to capture the SQL execution plans and performance data at the source, thereby resulting in a more accurate analysis.

The following example performs a test execute of the SQL statements remotely over a database link:

EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'my_spa_task', -
       execution_type => 'TEST EXECUTE', - 
       execution_name => 'my_remote_trial_10g', -
       execution_params => dbms_advisor.arglist('database_link',
                                                'LINK.A.B.C.BIZ.COM'));

See Also:

Oracle Database PL/SQL Packages and Types Reference to learn about the DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER procedure

Comparing SQL Performance

After the pre-upgrade and post-upgrade SQL trials are built, you can compare the pre-upgrade version of performance data (from the production system) to the post-upgrade version (from the test system) by calling the DBMS_SQLPA.EXECUTE_ANALYSIS_TASK procedure or function to run a comparison analysis. Afterwards, SQL Performance Analyzer can generate a report that shows the results of the comparison and then interpret the results.

To compare the pre-change and post-change SQL performance data:

  1. Call the EXECUTE_ANALYSIS_TASK procedure or function using the following parameters:

    • Set the task_name parameter to the name of the SQL Performance Analyzer task.

    • Set the execution_type parameter to COMPARE PERFORMANCE. This setting will analyze and compare two versions of SQL performance data.

    • Specify a name to identify the execution using the execution_name parameter. If not specified, it will be generated by SQL Performance Analyzer and returned by the function.

    • Specify two versions of SQL performance data using the execution_params parameters. The execution_params parameters are specified as (name, value) pairs for the specified execution. Set the execution parameters that are related to comparing and analyzing SQL performance data as follows:

      • Set the execution_name1 parameter to the name of pre-upgrade SQL trial.

      • Set the execution_name2 parameter to the name of the post-upgrade SQL trial.

      • Set the comparison_metric parameter to specify an expression of execution statistics to use in the performance impact analysis. Possible values include the following metrics or any formula combining them: elapsed_time (default), cpu_time, buffer_gets, disk_reads, direct_writes, and optimizer_cost.

      For other possible parameters that you can set for comparison, see the description of the DBMS_SQLPA package in Oracle Database PL/SQL Packages and Types Reference.

    The following example illustrates a function call:

    EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'my_spa_task', - 
           execution_type => 'COMPARE PERFORMANCE', -
           execution_name => 'my_exec_compare', -
           execution_params => dbms_advisor.arglist(-
                               'comparison_metric', 'buffer_gets',
                               'execution\_name1', 'my_trial_9i',
                               'execution_name2', 'my_remote_trial_10g',
    
  2. Call the DBMS_SQLPA.REPORT_ANALYSIS_TASK function to generate a report using the following parameters:

    • Set the task_name parameter to the name of the SQL Performance Analyzer task.

    • Set the execution_name parameter to the name of the COMPARE PERFORMANCE execution.

    • Set the type parameter to specify the type of report to generate. Possible values include TEXT (default), HTML, and XML.

    • Set the level parameter to specify the format of the recommendations. Possible values include TYPICAL (default), BASIC, and ALL.

    • Set the section parameter to limit the report to a particular section. Possible values include SUMMARY (default) and ALL.

    • Set the top_sql parameter to specify the number of SQL statements in a SQL Tuning Set to include in the report. By default, the report shows the top 100 SQL statements impacted by the system change.

    The following example illustrates a portion of a SQL script that you could use to create and display a comparison summary report:

    VAR rep   CLOB;
    EXEC :rep := DBMS_SQLPA.REPORT_ANALYSIS_TASK('my_spa_task', -
                    'text', 'typical', 'summary', NULL, 100, 'my_exec_compare');
    SET LONG 100000 LONGCHUNKSIZE 100000 LINESIZE 130
    PRINT :rep
    
  3. Review the SQL Performance Analyzer report.

    When reviewing the reports, the following considerations should be made to determine the validity of the results:

    • Hardware and data differences

      Any data or hardware differences between the two systems may produce a greater discrepancy in the results.

    • Use of the SQL Trace facility

      SQL tracing itself has an impact on the statistics generated. Consequently, performance data for the Oracle Database 9i trial may appear worse than actual. Therefore, any regression detected after comparing the SQL performance should be addressed before upgrading your production system.


See Also:


Tuning Regressed SQL

After reviewing the SQL Performance Analyzer report, you should tune any regressed SQL statements that are identified after comparing the SQL performance. If there are large numbers of SQL statements that appear to have regressed, you should try to identify the root cause and make system-level changes to rectify the problem. In cases when only a few SQL statements have regressed, consider using one of the following tuning methods to implement a point solution for them:

After tuning the regressed SQL statements, you should test these changes using SQL Performance Analyzer. Run a new remote test execution on the test system, followed by a second comparison (between this new SQL trial and the pre-upgrade SQL trial) to validate your results. Once SQL Performance Analyzer shows that performance has stabilized, the testing is complete. Implement the fixes from this step as part of the upgrade process of your production system.

PK?UPKlUIOEBPS/content.opf( Oracle® Database Real Application Testing Addendum, 11g Release 1 (11.1) en-US E12159-01 Oracle Corporation Oracle Corporation Oracle® Database Real Application Testing Addendum, 11g Release 1 (11.1) 2005-07-10T12:57:20+08:00 Provides information about how to use SQL Performance Analyzer to test database upgrades from Oracle Database 9i to Oracle Database 10g and subsequent releases. PK#l- ( PKlUI OEBPS/toc.ncx* Oracle® Database Real Application Testing Addendum, 11g Release 1 (11.1) Cover Title and Copyright Information Contents List of Figures List of Tables Preface 1 SQL Performance Analyzer Index Copyright PK$_@/*PKlUIOEBPS/cover.htm Cover

Oracle Corporation

PK;PKlUIOEBPS/index.htm Index

Index

C  D  E  M  R  S  U 

C

CREATE_ANALYSIS_TASK function, 1.5.1

D

database version
production system, 1.1
system running SQL Performance Analyzer, 1.1
test system, 1.1

E

EXECUTE_ANALYSIS_TASK procedure, 1.5.2, 1.5.3, 1.6

M

mapping table
about, 1.3
creating, 1.1, 1.3
moving, 1.1, 1.3

R

regressed SQL
tuning, 1.1, 1.7
REPORT_ANALYSIS_TASK function, 1.6

S

SELECT_SQL_TRACE function
parameters, 1.4
syntax, 1.4
using, 1.4
SQL performance
comparing, 1.1, 1.6
SQL Performance Analyzer
database upgrade
Oracle Database 9i to 10g, 1.1
input source, 1.1
remote test execution, 1.5.3
task
about, 1.5.1
creating, 1.5.1
use cases, 1
SQL Trace
about, 1.2
enabling, 1.1, 1.2
impact, 1.6
trace level, 1.2
SQL trace files
about, 1.2
moving, 1.1, 1.2
SQL trial
about, 1.5
building
post-upgrade version, 1.1, 1.5.3
pre-upgrade version, 1.1, 1.5.2
SQL tuning set
building, 1.4
constructing, 1.1
converting, 1.1, 1.5.2
executing, 1.5

U

upgrade environment, 1.1
PKyPKlUI OEBPS/toc.htmp Table of Contents

Contents

List of Figures

List of Tables

Preface

1 SQL Performance Analyzer

Index

PKu p PKlUIOEBPS/img/ratad001.gifKxGIF89aCn퀀@@@000 䠠???ٿppp```PPPϵ999yyy;;;<<<>>>vvv___rrr///XXX}}}ȻoooɅ̸OOOgggͦ ,,,IJJJJ¼+++Êuuusss:::nnn***111qqq777444xxx222wwwiii|||555mmm333666(((---dddFFFlll...888===)))bbbNNNttt&&&kkkQQQ[[[hhhZZZMMM\\\KKKDDD]]]eeeLLL{{{fffBBBCCC RRRHHHcccUUUWWWYYYaaa'''~~~zzz^^^jjjIIIAAAGGG$$$!,Cn H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗! fɳϟ@qu'e]" {\ PZ9zPQ! vFB8P`S6mʉ'$Xb]Gv]WNLUvewBT)v pa\š]ᷛs\vFG^L TW& &:cet) Exf b➋` <曛7h壐F*iGׅb`1 Uw\vai9.Haa$puYΏk7&AS Riմ T9W&W!pPUn lSwic^믖! @&`f$0I*|@_9 \`S1< /TP 3#蔀]X@-DmH'L7(& !BDCϤ"\wuK Zb lw_#7V qEBpS߭U{~\xvv3z㐳{]p%F#egY[虗iԢ,FHtmo5qfw9~RWHɻ. 'Goo9u(n-ga o:_}X((#+~f{W09~.aI8 3S80@Qt vj@v75_H8pG̡w@ H"HL"g[P9T%Z=I^-%q@Lj8|J"y,)oB* IX> H@"|k`m"ypq THJZ@1ȮV-Le%K8t`%w)lḀ.N"q D"$aL`HMa1c*L'GhzS"prrfL7Nq .`vuA1VA`:d4B-gRԩsAЉ^tmkIż& ؐJ( H -e?>vgiگƶ]HۻV19@nj*(G `r[v7=j ^5]}Xk֐u) na4T ~)zwHWz%[y3A!xC<M>~twG|ny3CMw$N:4Ww7zZ ^"$qd3Uaa3Dfys s없(w׆GX\}3?2F1sw؂FwU WqBq5{xXq7ȂEXH$x'1W;g+HW| -fa%xcͶ{؀*8Y(p[~0'lYP,P@Έ阋'8툅nV hi؏ ɎBx _a%FCpiHɀבhnEW=@ho<-;$jȋaŔءp$HWi|P N@lٖnpI&E7xz)^i`Fbi4Yf/Rr:Yߒф}fFɑlH׸W .`Etiac)E9鋛5 APTljiIcyEiG8qn-(qVDYf x4  E !(JDTYyG 7 13H8YsDIi)pVPP$q?ى$T8YəeA0]O=Ƞ;&(YV @^_ɡRШɚi i(.z0:!:ٟ a ڣh*Y%ʞ)~ (HѸ4Jש<&)HHC:){pڤrtZ8W1J"ZX0y`DKz zYKWM *x:yK P&2p(fJٚ6zeVP2[B楥uHt9FSy:ΚP7 +P[bVŭHF*ڬXiX \2ġZiZh:ֹUX+`1%5,٢NBF`+zjj'@ 76^v%NDʬ.[@*2qOc p@;ۨE F@`(B.=볞M_ ` `ʯ/kkp F ph(`rpqKV+P5UF  ^˨X ~@ F O,)N:0 f u ^Dfd|t@zp {TV f "K(,֏K @v 4[xi 0 \;-/+L>+7_M`80VPA,)=P(lu SNP5g 3P†V6(5#,PQ64\6lÏ[U\AKP@BlNCIKM XlRR1PU<"WfLIUjaO8ƐRgl jLV`- ds|uLkLU!E|,)eL 76h \VyŇL"rPLLPDs(Np0 Ll*va`{b>YˡLELN`<\tpQ7!g a*N>$_NBP{0.#sVbY5"/R֯n 'b NI  !.) 89A*ra 1#b, -fh.nsP>NtI<P-!_ }vb{;qr%tMH!:Cc^<s Z_K=-2ZjBWooAs^A qc`q;q pN1~>+qv % Ӹq00/q2O ?i3B3Tñ۱>  X rIHRΡ*10#w!\Hˆ)\ G\Ō(B!8*!r'RH CE^iUYn:AaŎ%(\ծe[qΥ[]^ 5_ \aĉ ėȐ "\(͖TcƍH!J !(`-Af)l?*^]u ur#wŏ'_|9|e¾$f 3ΣrF8!%H rP! "b$HrJѡj!PKM+ܸoG{q:N(xmFtI(+k>,#'X0 !^&HE@i,:`A0-@<phCМ-:O@ !FH4^SFHJp$kTR b$<V[ʫTZk訬r+0rK 0ƴfGp$!2t(iu{%C7)Fj3eڤJzqmKR7T%2rP.BmCW_+V]w:cC `ذB/(Qy+~TQPXhUPhـbU&gVziʸ^<ܐKrhK̰wlSG1lJ7I4׋Zj,ɱ%^P\ɚ&UQa%Xo @8 &W}u#|j.Xr_$i{K~xn0&h{[rNA5#w'/p+eJ=er`W?,/UU`ay.>>|Ot9vսev>XJ7aa~Y( cA 1)da s@x/!@Bwp } ^0,l$?N"B %9pBPbE0ыpHWtah!D )`c8%)D:AE!GUDBQCD2DV; 8ƲD~d)MAv\J8%-S |BHB`A/t\LhnNdf5Atp I'X0Q ] 3;kbЁ|Tg|L&'`MtH]>;#e!A"r@*]AK[j```./茤`5`KmfTbnPІ1| BejߊzzA]%+L JV=BY5l_uQ`pNEk_"Uvf)A*f:QcHh,tUfV_3^}+ U';]-dŀbgz:!HUmowm]@9DO|enh[["HP 첂~$ ъVJ1 8l.j9!x2ho}\J5WB2Nw!ZmAa4}k-lV%(a-Z}E^,7녣^  Xm U'vx x1 45nrJ/؀A2e0g c&s \1r`|6!d6hsXYH oL 3+ϱް p 䌈pɬAӛ̼Tʵ A'" <tT`t,W)Ml k)) 8Nɓ uL֑MMXA8A$ p$Dq)R0ӹG@dϧODϔ \`ԓ\dF O;# Ip3A) E  @Ռ1N-OCU\Q(Jn7iOPMqA($ɗ<ٰ IP&%ihgq &5@lARش @dl M\"m= LۄC [Jқ@و6 ;ſ!h H Z"1Yq?,` S4O@rfLo4PEܤQq͘”E A=-4]ՈL 7m/#]T>Un)neW~bMA4WXV;tT;@Z&+P&b>L!UOS־a~g&;TzxjMƊ- pح-+r:se*:jZ2嬐IR-AKQ "m,@&(}nƢkVy֗@~j% $(iF8i"P*@Eؼ2uVy~>=$"Honj&nm.j-nn.Xd#:x)xN;Ҿ$'8oOq 3n^3}Af"Nq^U#5ca?Gqq%r0p[NnAV%_'Kf w/,?-. 3s??΃[/7m4W-%0T5~~:7;`(sN/) =>t?> iN2JG,<$Nu&N`2)SGq^o"(ݬV1,'翼hbظIbv'2\a^o]Zwi~~uv 3@b2x*wU?_pWs]V!6)@rЭVtxw)r02H)tRn]&Vo&( jPp\aN0qp7yJW^.ږ>k(ȂrHzzz1cw( WqOsgg_woryp{{?̲wpl"8qja_^7 ߖފ&0oi|'7\ E|˗l$`i\hO0@,×5@/Xr|."V x:Q~~~Ƥw՗3}}rhE('D_I0rqk!'4}r g\ "8H.K&sPŒ7r#Ȑ"G,i$ʔ*Wn `00Y@ ;tbB-j(ҤBP1mX%Z ( (m9%fJ(-klf hjիY9`cARP{/ .l0Ċs&\s ذ@tSMz *\rxF8Y9G 3 1بjVY{@rFɤbC䭧SnzdOʼr1Vvp.r̚ζtqtx]eA cAql{ EAI%jy4XG8DNlv!8"%jt!ugWA>@.8FHlD[ G|} <I~xeCC`X9`R@)Z$}M4iC#`"uy'K(r"c-^ ԐCjH:h!e$7Р$NX, /A(AJA婂=p | ."{",L0A`GNX* &8LS,jJ<n䯟 Wpa B`xa^p 1ʓk3u3kzo/xV%<;y.J'<okCȱ<%KIˌP 02AyO$l6w:̀#\P?ul !HݝP}\\8 ~H$!Plq"A-1!_v>}laٛR iwC0|CB" H1юA>PC b#)Il1Y4oWG/*l_?xc'͍sv'͸k𲗾%0 L"qe2|&4)iRּ&6K&d+NQA%ISҰJce]I2-SΕՅq'@&=(BЅ2}(DM|58Lj\pvjkˀ A8gQx~>BȈ.tN( ӡF=*R*=a+9?<55P? ,~:e4 yXLF XѢ/F)X^ڕ5`Oys.(bHK98@vl SJE%LiWD' Hd;2(kC4X1϶jSS+,ڑVKw&e›sF @ C:.] 9:IŸP_Jɢ󦆫 pl].t(^xݟl߲w贼X}`|//x]Hy!( 9Ӄ$i#A+ >06`bES .1o8VpR#h@F+Pͯ)HaĽ@fg1'쓸et=yQQ$9 a†(ܽ9 9݇%p s@DQ_8B4 -yNmHD0"*iؗ L`aUU@t 5 9`gAB@1%$d9 l@/08TP "`&|1Xh2d7xA%`$`9_D@ HAF0i *DqH_0D؆ nHQҝv%P+ p!79BL!-C `*rBp9BnChB(@0f9lC'43>#4F4N#5V5^#6fc47*^9TO4=D,i$S7#<18!2]͑ M%fxbڎ9R` 9,9( @ 4"L9",*X@))M֤M$cdAis AF@:f#Q$E4؃#&4? @b`^U$'L/%@AHnhBM'CBCI]e6%$Q`&B _9@4A:f9B%aNP)M_T]d`jABb"X#)%<dFB+(]K#9i:B g0.ģr.'s7 D.ס 8 ;6wկ)%$Vfghn8 1,.9YRA (A#ȦZĖ(A!%,1"39dBL hg!!8F8<4 6."~6AHDS:Dp\rLIa_g§p B2xAȂA"9 @ H̺pFV)u@-"L@i 5ACف|$! j+"T 땉6j#FX@ <  + U%܀f1dX 9*L,^, r^ r&Jx̫*%̓DbAhCAV,Z,~-N_bjjӖ)$)`A&ЁVEЮmG4Pr8N,V؞5kϚ@B@+t 8-|.`9m9@9@Y% p0[pM_vN/VRe.Eg@ax$(<양GAPi&AĊ.n.U(^et^=JNjo9'ElU.[-K/C/Z/Po!(բP F:j@ĞI*pd-@΂V\..K1X9KF>\4nEh@4C116* h D4v;R1!!c]8*Ut@(1 $;@! 11"e$PbQ1P Dc aOĉ(_$fibF1_ٲ4C"mz#/$$-\z9';Ԓ&AFr749"=$.+"e} @B4F0 FA dPtH'T5S?bis) %$ Ѵ Axh\8Ԉ,.,lB #V"pAA(HPo:ĎϺN/"=?I.~DE'&D oɰ !54/!v#߇E` @\$h:g82]٪4~+@+Pl_̄W֒u/{[%)) ]<;~6DA|/zB#{o];Dɟ{ `\9N@oI={l;`HlxoAf|9λ !g=56gD* 4Ӽ@b#cF, @79 ȼ@ h Dp{$C3.Ȃl#"/xČ*\{xsD-= P2@AXC̺ >H@\.(#l(}b&!|+X@w|t>$+C"HiuAe H2B7;4wXlA?ja1XP@#6rXaTI&@naz` emk &b'"$\&B (ܒ.LJR=6|3&sz(P#@e R`Ͳ 'Q蓄?Y@Z"GAO:@R2BДRMoQNFSJ4$]4QYYz4$989c%L1vSdQJWi]NkSݖ[Z XVZV ]3J.PQD gwQ@W u!G\r8vOlDkXn5ޘc%lw (Q=UM r=i d3LFQ (av(EHz&/$Ÿ㮽Xِ]]C0wLweyQr8!N)ls?6fD`VΚ\rIeɑrZe\\keG8]v{q н|a.sOGO?=/'L9XeEGwO`tL9A}~^\?ag}waeyFQN|}sxߟf6=bu}Ot3R/^"h96kf&f{|\;@)T&$<; vX@Z qUB a\>L (X (a Ee AVJqT(A5qc6DK x~JF0dCR=>^Jp6.~ٲ(< oY֜.W(a ]y? x%X̉YהO \b,G&T dN X: 1Ӄ #efLOWHJD+ZrsIĕ 3YOH.,tWԴlqfpW3%$̪@gL$$+a))Rj= []:fdLA(JKczNȼZ8,NoS9gEJ=9,Y͞T&`96ϦrcZE+ 7H0r&蔜iUJQlalUY\r{`t-&6;`9M Sە%)jۛ[80oDwAt)L&ڕVl X2;Κ_7[Mɏ[^#dwKV[fe=guxnպ,\Yw.J,K1w.%e~5b=J}՘;8㶣"ȑ-Y-n%茒iO6ԗ|Mj$Jl8`^5&Ĝ%AmHݕlX݂'EΗʾ/7̱0+T"mMJFgg< rUfVb?KҗT]j̕Ui7٥D_=6JUv7ZW%ܴRg\Vm5+MQW뻣75Yֽqq͞ї)NQpyWDk;Q>V䔀9̗J9l t^5,ZBˑ"7F7. W;,Ewwiw0ZՑ|M뵨}..IYd;,:g T:\!RD( &>)9@jcp\]X/ur%|mS [*k悗:mO!;PKA"1KKPKlUIOEBPS/preface.htm o Preface

Preface

Oracle's Real Application Testing option enables you to perform real-world testing of Oracle Database. By capturing production workloads and assessing the impact of system changes before production deployment, Oracle Real Application Testing minimizes the risk of instabilities associated with changes.

Database Replay enables you to replay a full production workload on a test system to assess the overall impact of system changes. SQL Performance Analyzer enables you to assess the impact of system changes on SQL response time on a given SQL workload.

In this release, Oracle Real Application Testing supports the added functionality to read SQL trace files from Oracle Database 9i to construct a SQL tuning set that can be used as an input source for SQL Performance Analyzer. Once constructed, you can use SQL Performance Analyzer to execute the SQL tuning set on Oracle Database 10g Release 2 remotely over a database link. This functionality is provided so that you can use this option to test the impact on SQL response time of a database upgrade from Oracle Database 9i to Oracle Database 10g Release 2.


Note:

The use of Database Replay and SQL Performance Analyzer requires the Oracle Real Application Testing licensing option. For more information, see Oracle Database Licensing Information.

This preface contains the following topics:

Audience

This document provides information about how to use SQL Performance Analyzer to test database upgrades from Oracle Database 9i to Oracle Database 10g and subsequent releases. This document is intended for database administrators, application designers, and programmers who are responsible for upgrading and performing real application testing on Oracle Database.

Documentation Accessibility

Our goal is to make Oracle products, services, and supporting documentation accessible, with good usability, to the disabled community. To that end, our documentation includes features that make information available to users of assistive technology. This documentation is available in HTML format, and contains markup to facilitate access by the disabled community. Accessibility standards will continue to evolve over time, and Oracle is actively engaged with other market-leading technology vendors to address technical obstacles so that our documentation can be accessible to all of our customers. For more information, visit the Oracle Accessibility Program Web site at

http://www.oracle.com/accessibility/

Accessibility of Code Examples in Documentation

Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.

Accessibility of Links to External Web Sites in Documentation

This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.

TTY Access to Oracle Support Services

Oracle provides dedicated Text Telephone (TTY) access to Oracle Support Services within the United States of America 24 hours a day, 7 days a week. For TTY support, call 800.446.2398. Outside the United States, call +1.407.458.2479.

Related Documents

For more information about some of the topics discussed in this document, see the following documents in the Oracle Database Release 11.1 documentation set:

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PK& PKlUIOEBPS/title.htm, Oracle Database Real Application Testing Addendum, 11g Release 1 (11.1)

Oracle® Database

Real Application Testing Addendum

11g Release 1 (11.1)

E12159-01

February 2008


Oracle Database Real Application Testing Addendum, 11g Release 1 (11.1)

E12159-01

Copyright © 2008, Oracle. All rights reserved.

Primary Author:  Immanuel Chan

Contributors:  Pete Belknap, Karl Dias, Prabhaker Gongloor, Mughees Minhas, Khaled Yagoub

The Programs (which include both the software and documentation) contain proprietary information; they are provided under a license agreement containing restrictions on use and disclosure and are also protected by copyright, patent, and other intellectual and industrial property laws. Reverse engineering, disassembly, or decompilation of the Programs, except to the extent required to obtain interoperability with other independently created software or as specified by law, is prohibited.

The information contained in this document is subject to change without notice. If you find any problems in the documentation, please report them to us in writing. This document is not warranted to be error-free. Except as may be expressly permitted in your license agreement for these Programs, no part of these Programs may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose.

If the Programs are delivered to the United States Government or anyone licensing or using the Programs on behalf of the United States Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

The Programs are not intended for use in any nuclear, aviation, mass transit, medical, or other inherently dangerous applications. It shall be the licensee's responsibility to take all appropriate fail-safe, backup, redundancy and other measures to ensure the safe use of such applications if the Programs are used for such purposes, and we disclaim liability for any damages caused by such use of the Programs.

Oracle, JD Edwards, PeopleSoft, and Siebel are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

The Programs may provide links to Web sites and access to content, products, and services from third parties. Oracle is not responsible for the availability of, or any content provided on, third-party Web sites. You bear all risks associated with the use of such content. If you choose to purchase any products or services from a third party, the relationship is directly between you and the third party. Oracle is not responsible for: (a) the quality of third-party products or services; or (b) fulfilling any of the terms of the agreement with the third party, including delivery of products or services and warranty obligations related to purchased products or services. Oracle is not responsible for any loss or damage of any sort that you may incur from dealing with any third party.

PKE1c1,PKlUIOEBPS/dcommon/cpyr.htmd Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2016, Oracle and/or its affiliates. All rights reserved.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, then the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information about content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services unless otherwise set forth in an applicable agreement between you and Oracle. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services, except as set forth in an applicable agreement between you and Oracle.

Alpha and Beta Draft Documentation Notice

If this document is in preproduction status:

This documentation is in preproduction status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Private Alpha and Beta Draft Documentation Notice

If this document is in private preproduction status:

The information contained in this document is for informational sharing purposes only and should be considered in your capacity as a customer advisory board member or pursuant to your beta trial agreement only. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described in this document remains at the sole discretion of Oracle.

This document in any form, software or printed matter, contains proprietary information that is the exclusive property of Oracle. Your access to and use of this confidential material is subject to the terms and conditions of your Oracle Master Agreement, Oracle License and Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution agreement, or other license agreement which has been executed by you and Oracle and with which you agree to comply. This document and information contained herein may not be disclosed, copied, reproduced, or distributed to anyone outside Oracle without prior written consent of Oracle. This document is not part of your license agreement nor can it be incorporated into any contractual agreement with Oracle or its subsidiaries or affiliates.

Documentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

Access to Oracle Support

Oracle customers that have purchased support have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

Oracle Logo

PKS\UKPKlUIOEBPS/dcommon/blafdoc.cssc@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.8.12 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; text-align: left; } h2 { font-size: 152%; font-weight: bold; text-align: left; } h3 { font-size: 139%; font-weight: bold; text-align: left; } h4 { font-size: 126%; font-weight: bold; text-align: left; } h5 { font-size: 113%; font-weight: bold; display: inline; text-align: left; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; text-align: left; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } li { text-align: left; } dd { text-align: left; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #f00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #f00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKr.hcPKlUIOEBPS/dcommon/oracle.gifJGIF87aiyDT2F'G;Q_oKTC[ 3-Bq{ttsoGc4I)GvmLZ).1)!ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPKlUIOEBPS/dcommon/oracle-logo.jpgq7JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222'7" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzE7V%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?l:ϊw "{{-3j3%{sj~2= 7 ~MڅKrHb|P3 r=Ҁ +Ş/$iu7=q2dԂxn⸷9$l]H #WI񯄴;\[ݚD8C3p&0U9^AnK vI+!I8>5(zqj03Y.X ,@85ߛ8>pq8=} \xmm常8` $Q@$v7zwp]ɝA GX;y_]覮O&4 SPtY.X),@84U=7Vuv K4,$g{@<+uqtiGw3; I@ORմn5MBp%8'ƫ%u6uBJrHRN2@ϸ J(9i[[mk6puQ-'UfzoOۼ?-ϕv83^Y>_ A-GM",6Jr_y NK|6rWKO![4˭?deHGC6gYO^,kQH]*x6 LI{"#bRencMO=Hxg&t*/!# =AGtg@k5MRS%n6$IUOvuhH!Av7\܃`gugqqG4 t: գԣ7%mܯ=^u \FW |ozR#~Mh=0py.|wZu7ڼ*l$Fpz@򏈩Tүƞ)7=&Vd0܀Dk `+sJoj:Env8+qif6i2s°Lぐy{~0_ExXnb0<: V,|5P)#|OM 9G0sץIsVJ/|mGinot۸f'w!p@· e{%yý?~!դEnX.ni^6v!c`;IaXTUko-½f"BI#ʪI$5'$O*Z Z}Lj5ON>n--J:&pIbj|duz6{\q3lKh_9COq [Vim*4 G(CEE=%98Ój:^p}dݶ;ʁH h/FgOӒG:Vu{'$3o4T~G:+0̈K+RB>p ERh'}oNKȾkSDlAWgW+pN+sO¨|xmbK[M,Q ng(ĉqaXk6u#3*ێ ;,6 Ďx~ aqMZ}3]H%NU>qTI hkiqY@_ڣeca |ω:Wp_/;褂:JgPvm#8r=#׈nϲ}vlۻ;}럸YK@m2 >dDvONQ@C L-$ew-nqf/,;9, 1"6#*x8 ¬Q@=CD29Gbq^hѴGT,R_:o58b@ۦ:4;IgӨ1J.ѺD!'AQ{ׄ|+xo4}.IWNY+|QEG<[oqsA*92<Gn%;yfE(ڻ(?FiaXAej;!Ln Vl9'Т'oikkQ2 ζ(1 h%լ,I^)!Ut!@zQ@=]MGD 8D`a^x{º,ͮAe}򀗓Y$8V ^+k » (?D4hi:M`Žn,ybIɪ:K 얲Jfd^L$QVQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW 'FM7P_Nml,6`ͽ~@cL/\G_|:˺/[2O2QWմqjʲ*SlA ezuoż9#`FApA椯3ͨx&MCE{9BeUܧ&08}\c|{xp_SӾӯU ~Gc îUG, s^֭uMk*Zϊwe~2@,7ؐ E|i>#hi$wyhp ; ),koY>uVv/r Ȯ' IaY?TU|1w&ԥm^ o ݎ?O5 N/>(j4?-~F<UhgmkC⯋}GJOm ;w8rXdd=Bg]d3k{Hܣ 9+,rr{LoŮ%vLX–Qx^O㼑|]yя>N Y706c00*}5#x|Ks.*֢4_VH5Y,ȧ1@r@.rJ+4\[5?㯛͍k<τ*֥5I%Χ20HsAJ+ WWĿivޙNWԚԀUX ᕦʞ+Cƿ ᆈ|[jV: U&Dg@mPݷ(LꞭg6_Y[g=żGswB̤ QQZ߇[~iϕvnp38@? Vuo?\Ï x5oY凓vW4#nϚ1ھjEE@|xS-k?:cV?CoO :"2G nb892,C%jȪpI;wY;jħ3pI`+9 c?.xOkr׬IqZ +ʖmVۻ9(((((((((((((((Vڗm_WʷUswcHk#?oj;CD*mpU#GBkryUs.{0Op J"x#cy|5Yoл{PFUI de9g'dQWA6[0D#5 `+Wiz\sA-\3]:*Tc;z:*?֫L a/"ߤ,Fi7I3aOXyl8^e6ǚ"X c*6?^?ƫX]ƙGsgp%0`%gvgdH$F WcQkE ռobfGCs`lW7?ٮ%.ܲePF'Ԛ/ÚFlc]-Q*rKA,x9@W7gu4Qq) ňB'ey=+F//Ed[4xGYDa ۙ*3$d`yU.ecAp 7=y'i -xM״'O7r6$#%*f_|68`SgI*m$ײV%xF:^ @̍G&P#A6SO-[HK+dmE9{Nş A#L?jbA,Qc$|}Zm5E=/żTmvI MgCC=ad3F=UN`h~|?>`n߻sgp,YųHh20oeʏ1sִ?|7U|3h_/ns;7{v;C=%a1=YXrhCaQn+$](<77λYOw$.VgR۝P@̇=\O]˽I㵺ٽ`muqATv yZ襮:l:6c۴v*p=\qyVO{s~ V=m/Kh%kkV`Up6aoZOFzuyMʑI-B$@;Ƈm,Z檺 吸^7ʆ2Ly# s>;G_xT}Jh.vyUA3r ʁĜ@7ޏ-Zu[y%Xm{wʠ*Yn]srp9TTL-Λαj;DR3RAd { CڢjPwwҫXgUUX`jgo"-`\|grrM?g_qwΈ).# vN>WiZUevv(I9$I$@?&K/:Jo9 vG<+_~> xellb.`tf$O+MOw \-µ`;0緥I'%Uj !пJ$Vatk.X/m䷑ 0WR3j7gZhvO%;sǵy( *mW#:V<ә%$A >u&I&P!#9/*xF ,Qg }Ѻ2zr@"=XYvrYAwk&7!^#u? JL2e]$ͻ~Gнr =2;; H--c`FIŽI'PEy^jPѾ.OLwfaێY3~UҽR ( ( ( ( ( ( ( ( ( ( ( ( ( (9:M"XXBFn Ns<~_ޒcO$BTZ@#N~fvMOĞ XdT{愘d 0BUI80zjC/$P-}V++H.̪\u6Az1U񎳣exw_..cTDz p=y%o .y+U*z5u.5xM;D~lks~?i>wK+o7n%wc'q@߆3ǾuMCz%Yjy( w!b,H+CZߊ'4x:ջͧ] qT)O<RןN A 1tK%ej4q/V!' YF܎ĝNӾ#_^Žlg.a4T;K $?RXt\h Af87^=yᵷX$/$0UE$xs@' >;m}=2C#hAN^E1ՙGy !пJ$,m 5ޟ4n3qJKpHܜLjHWL Nwd _5M3TM߈|;up YĪ J$P**?h'cRpx7us xE6?(>ıY/^Dr[t@(;`Cm8gmh(+*E5tIu9_Ht/x҉++ !пJ$@iEK^^?G<+<ⷌG#]{Uv*Wk )aۀ Niuxb޶3xdr0W*zsvxxt,v[Il.daH@3G!z-|*b]1 O%۵{EfL*QBK(vGuOa&%\9\<(x 5g1~n^)Z՜T$ݾ_ĝn#k鶓kd\ g q֧ÿKek}֡ sx(ܡ)NV\σ?⸷9#2A9\›8X_. (p+e: *O7+CK[_jҋm>$?ṬQ??t>T Sl7Mܚ}6KZ\*āޠ@Y5u {5}6mlApB: l3w?~,o!}>;2;I˒qY|'UռW$fVWR2"|G9Sy|@5[Kw=bL13@5oMf;Dcдnsw&IK1ژ 8dCt~~ `y 7{:4^2ơ5bo#fyH*p#xrM_Ejv}da"lFi+ ^??Xk(cl1 ge'pΛ^)"X0 ;J( ( ( ( ( ( ( ( (8u\?hbZC9%b4{@P_[دK^:7X(e=c^C3񏃴h:4r@^7 A: (Ko|Bo4U@ahԪ :)ӌug~[Qצu9QU7b88Q@~UQ4T  A%U9͟o7$3u'K#>F[c`2fA`9cXlg|^^3ܜcv:OuZ߇}h2H`*U#$695PJ%_5{Oīe#:)pz?K0~nwwHݻw@8ɮQ/(i>4~F|̉F[ivP?i~8uo=aYVhn222<yu)muoZ抨# QGP8zq(?-YֺE~̊d*1~ }zǿ |m{kǨz՚*[@w W *Al (?SoIgs$NF}-ݔYضe^  l/+ݺFn^Q@Ï¿Ɠ:|#Qn773?`xzIv>o{WaE [Ɵ>g}Ǘݿw?m{۞ŠwV8;sQ> Y3c׬QEOkz/,Veo쑣Hܟn0;WQ@/cGĚevv[KX!4\NOIk5k9K9-;e 8 :Ex+^mT_@cyT6 1#>O |8&;MNZÿ}MFs+ ^Er~=|Yh\,vwUQ+e `182w}C⟉zf '@uaB2Ez%xF:^ @̍G&P#?g_qwΈ).# vN>P?[:Eޠ!ؙ#H fA OU=+J}3L6EtQ'$$jq O<|78G]ܿsڻ (?\5 G3Weܓ<4}Ln+1w:MWJ43S6Ka *q Դ|Bt=xP,RDu8 #7zE}vOEA3}EwP4hm?#>fDv~:MWJ43S6Ka *q Դ|Bt=xP,RDu8 #7zE}vOEA3}EwP> F-f}#]iKaH*ι2HP>~xUH,[)ʳl˝9/}^BE43> H\?(/Xn-N: aP>F]f}_]q{둍,ȹ$3Řp@b |3|o^-u @ s\ҊS^$ƣC\七͌˓3FG z,|-=MYO13K3X<8J((((((((((5/ ~g{KnE*yڌp 5{fi>^X})&" !RJ>h潂?t>T {Q@<6\K0DF dOkxľ5&f%tB_~˻v7y(d|/^x%7;1J# š7#t$/0 Q9m$d'׊>~Q𷊴6{+#pjlǴH+&xT?k@^ox/_ھͲA9X&BX.v.~qPƺ<+ujZC0J.#3ܨ@ʽV^p"OHuw.'6Ԙ`>|tc^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x|'`?ZEg6F.0F!DOnҀ= xk6:/d@^7o#NO^~€N30xOƾڷoE4W67PLRD`\ (pMz%x|Y`Z.Q\ÍĞş5KiRo> @1N}ꟍt2?nuY"3w6Xf'iQױA%wG`ZuRL6֩/x-X n^k}vÖx ]wxv+z.thh?h5=CUO2$}c`' ,0((((((((((((((((((((((((((((((q:l:ڤZ}j&n>2GʼzU((((((5[z} ;XV%-2B3}\(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKqqPKlUIOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PKlUIMETA-INF/container.xml PKYuPK lUIoa,mimetypePKlUI" :OEBPS/lof.htmPKlUImKF OEBPS/lot.htmPKlUI?U OEBPS/spa.htmPKlUI#l- ( mOEBPS/content.opfPKlUI$_@/* ٫OEBPS/toc.ncxPKlUI;COEBPS/cover.htmPKlUIyOEBPS/index.htmPKlUIu p OEBPS/toc.htmPKlUIA"1KKbOEBPS/img/ratad001.gifPKlUI& 2!OEBPS/preface.htmPKlUIE1c1,BOEBPS/title.htmPKlUIS\UKtVOEBPS/dcommon/cpyr.htmPKlUIr.hcXqOEBPS/dcommon/blafdoc.cssPKlUIl-OJOEBPS/dcommon/oracle.gifPKlUIqqOEBPS/dcommon/oracle-logo.jpgPKlUIo"nR M OEBPS/dcommon/doccd_epub.jsPKlUIYuOMETA-INF/container.xmlPKz