Snapper v1.1.201.SQL
-
Upload
niranjan-nageswara -
Category
Documents
-
view
216 -
download
0
Transcript of Snapper v1.1.201.SQL
-
7/29/2019 Snapper v1.1.201.SQL
1/15
------------------------------------------------------------------------------------ File name: snapper_1.1.201.sql-- Purpose: An easy to use Oracle session-level performance snapshot utility---- NB! This script does NOT require creation of any database objects!---- This is very useful for ad-hoc performance diagnosis in environments-- with restrictive change management processes, where creating-- even temporary tables and PL/SQL packages is not allowed or would-- take too much time to get approved.---- All processing is done by few sqlplus commands and an anonymous-- PL/SQL block, all that's needed is SQLPLUS access (and if you want-- to output data to server-side tracefile then execute rights on-- DBMS_SYSTEM).---- The output is formatted the way it could be easily post-processed-- by either Unix string manipulation tools or loaded to spreadshee
t.------ Author: Tanel Poder-- Copyright: (c) http://www.tanelpoder.com-------------------------------------------------------------------------------------- The Session Snapper v1.10-- (c) Tanel Poder ( http://www.tanelpoder.com )------ +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a
cheap ASCII-- / imitation of a fish and afishing rod.-- | Nevertheless the PL/SQL code below the-- | fish itself should be helpful for quick-- | catching of relevant Oracle performance-- | information.-- | So I wish you happy... um... snapping?-- | )
-- | ......
-- | iittii,,....
-- iiffffjjjjtttt,,
-- ..;;ttffLLLLffLLLLLLffjjtt;;..
-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,,
-
7/29/2019 Snapper v1.1.201.SQL
2/15
-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;....-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;..-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,,-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;..-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii..-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;..-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,,
-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii..-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;..-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;;-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;..-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. ....
-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii..
-- ..;;ttttii;;.... ..;;;;....
-- ..iiii;;..
-- ..;;,,
-- ....
------ Usage:
---- snapper.sql ---- out - use dbms_output.put_line() for output-- trace - write output to server process tracefile-- (you must have execute permission on sys.dbms_system.ksdwrt() for that,-- you can use both out and trace parameters together if you like )-- pagesize - display header lines after X snapshots. if pagesize=0 don't display-- any headers. pagesize=-1 will display a terse header only
once-- gather - if omitted, gathers all statistics-- - if specified, then gather following:-- s - Session Statistics from v$sesstat-- t - Session Time model info from v$sess_time_model-- w - Session Wait statistics from v$session_event andv$session_wait-- l - instance Latch get statistics ( gets + immediate
_gets )-- e - instance Enqueue lock get statistics
-
7/29/2019 Snapper v1.1.201.SQL
3/15
-- b - buffer get Where statistics-- a - All above---- sinclude - if specified, then show only V$SESSTAT stats which matchthe-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+)-- linclude - if specified, then show only V$LATCH latch stats which match the-- LIKE pattern of linclude (REGEXP_LIKE in 10g+)-- tinclude - if specified, then show only V$SESS_TIME_MODEL stats which match the-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+)-- winclude - if specified, then show only V$SESSION_EVENT wait stats which match the-- LIKE pattern of winclude (REGEXP_LIKE in 10g+)---- you can combine above parameters in any order, separate them by commas-- (and don't use spaces as otherwise they are treated as following parameters)---- - the number of seconds between taking snapshots-- - the number of snapshots to take ( maximum value is power(2,31)-1 )
---- can be either one sessionid, multiple sessionids separated by-- commas or a SQL statement which returns a list of SIDs (if you need spaces-- in that parameter text, enclose it in double quotes).---- if you want to snap ALL sids, use "select sid from v$session" as value for-- parameter------ Examples:
---- @snapper out 1 1 515-- (Output one 1-second snapshot of session 515 using dbms_output and exit-- all statistics are reported)---- @snapper out,gather=w 1 1 515-- (Output one 1-second snapshot of session 515 using dbms_output and exit-- only Wait event statistics are reported)---- @snapper out,gather=st 1 1 515-- (Output one 1-second snapshot of session 515 using dbms_output and exit-- only v$Session and v$sess_Time_model statistics are gathered)--
-- @snapper trace,gather=stw,pagesize=0 10 90 117,210,313-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313-- all statistics are reported, do not print any headers)---- @snapper trace 900 999999999 "select sid from v$session"-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace,-- loop (almost) forever )---- @snapper out,trace 300 12 "select sid from v$session where username='APP
-
7/29/2019 Snapper v1.1.201.SQL
4/15
S'"-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write-- output to both dbms_output and tracefile)---- Notes:---- Snapper does not currently detect if a session with given SID has-- ended and been recreated between snapshots, thus it may report bogus-- statistics for such sessions. The check and warning for that will be-- implemented in a future version.----------------------------------------------------------------------------------
set termout off tab off verify off linesize 299
-- Get parametersdefine snapper_options="&1"define snapper_sleep="&2"define snapper_count="&3"define snapper_sid="&4"
-- The following code is required for making this script "dynamic" as due
-- different Oracle versions, script parameters or granted privileges some-- statements might not compile if not adjusted properly.
define _IF_ORA10_OR_HIGHER="--"define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" /*dummy*/
col snapper_oraversion noprint new_value _IF_ORA10_OR_HIGHERcol dbms_system_accessible noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLEcol snapper_sid noprint new_value snapper_sid
selectdecode(substr(banner, instr(banner, 'Release ')+8,1), 1, '', '--') snapper_o
raversion
, decode(trim(to_char('&snapper_sid')), '0', 'select /*+ no_unnest */ sid fromv$session', trim(to_char('&snapper_sid'))) snapper_sidfrom
v$versionwhere
rownum=1;
-- this block determines whether dbms_system.ksdwrt is accessible to us-- dbms_describe is required as all_procedures/all_objects may show this object-- even if its not executable by us (thanks to o7_dictionary_accessibility=false)
var v varchar2(100)
declare
o sys.dbms_describe.number_table;p sys.dbms_describe.number_table;l sys.dbms_describe.number_table;a sys.dbms_describe.varchar2_table;dty sys.dbms_describe.number_table;def sys.dbms_describe.number_table;inout sys.dbms_describe.number_table;
-
7/29/2019 Snapper v1.1.201.SQL
5/15
len sys.dbms_describe.number_table;prec sys.dbms_describe.number_table;scal sys.dbms_describe.number_table;rad sys.dbms_describe.number_table;spa sys.dbms_describe.number_table;
begin
sys.dbms_describe.describe_procedure('DBMS_SYSTEM.KSDWRT', null, null,o, p, l, a, dty, def, inout, len, prec, scal, rad, spa
);
-- we never get to following statement if dbms_system is not accessible-- as sys.dbms_describe will raise an exception:v:= '-- dbms_system is accessible';
exceptionwhen others then null;
end;/
select nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible
from dual;
set termout on serverout on size 1000000
declare
-- forward declarationsprocedure output(p_txt in varchar2);procedure fout;
function tptformat( p_num in number,p_stype in varchar2 default 'STAT',p_precision in number default 2,
p_base in number default 10,p_grouplen in number default 3)return varchar2;
function getopt( p_parvalues in varchar2,p_extract in varchar2,p_delim in varchar2 default ','
)return varchar2;
-- type, constant, variable declarations
-- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_I
NTEGERpls_adjust constant number(10,0) := power(2,31) - 1;
type srec is record (stype varchar2(4), sid number, statistic# number, valuenumber );
type stab is table of srec index by pls_integer;s1 stab;s2 stab;
type snrec is record (stype varchar2(4), statistic# number, name varchar2(64
-
7/29/2019 Snapper v1.1.201.SQL
6/15
));type sntab is table of snrec index by pls_integer;sn_tmp sntab;sn sntab;
i number;a number;b number;
c number;delta number;changed_values number;pagesize number:=99999999999999;missing_values_s1 number := 0;missing_values_s2 number := 0;d1 date;d2 date;lv_gather varchar2(100);
/*----------------------------------------------------- proc for outputting data to trace or dbms_output---------------------------------------------------*/procedure output(p_txt in varchar2) is
beginif getopt('&snapper_options', 'out') is not null then
dbms_output.put_line(p_txt);end if;
-- The block below is a sqlplus trick for conditionally commenting out P
L/SQL code&_IF_DBMS_SYSTEM_ACCESSIBLEif getopt('&snapper_options', 'trace') is not null then
sys.dbms_system.ksdwrt(1, p_txt);sys.dbms_system.ksdfls;
end if;
-- */end; -- output
/*----------------------------------------------------- proc for outputting data, utilizing global vars---------------------------------------------------*/procedure fout isbegin
-- output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# );-- output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count);
output( 'DATA, '||to_char(s2(b).sid,'999999')||', '||to_char(d1, 'YYYYMMDD HH24:MI:SS')||', '||to_char(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) *
86400 end, '9999999')||', '||s2(b).stype||', '||rpad(sn(s2(b).statistic#).name, 40, ' ')||', '||to_char(delta, '999999999999')||', '||to_char(delta/(case (d2-d1) when 0 then &snapper_sleep else (d
2-d1) * 86400 end),'999999999')||', '
-
7/29/2019 Snapper v1.1.201.SQL
7/15
||lpad(tptformat(delta, s2(b).stype), 10, ' ')||', '||lpad(tptformat(delta/(case (d2-d1) when 0 then &snapper_sleep
else (d2-d1)* 86400 end ), s2(b).stype), 10, ' '));
end;
/*----------------------------------------------------- function for converting large numbers to human-readable format---------------------------------------------------*/function tptformat( p_num in number,
p_stype in varchar2 default 'STAT',p_precision in number default 2,p_base in number default 10, -- for KiB/MiB formattin
g usep_grouplen in number default 3 -- p_base=2 and p_groupl
en=10)return varchar2
isbegin
if p_stype in ('WAIT','TIME') then
return
round(p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision
)|| case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p
_num)),p_grouplen))when 0 then 'us'when 1 then 'us'when p_grouplen*1 then 'ms'when p_grouplen*2 then 's'when p_grouplen*3 then 'ks'when p_grouplen*4 then 'Ms'else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_nu
m)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us'end;
else
returnround(
p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision
)|| case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p
_num)),p_grouplen))when 0 then ''
when 1 then ''when p_grouplen*1 then 'k'when p_grouplen*2 then 'M'when p_grouplen*3 then 'G'when p_grouplen*4 then 'T'when p_grouplen*5 then 'P'when p_grouplen*6 then 'E'else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_nu
m)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )end;
-
7/29/2019 Snapper v1.1.201.SQL
8/15
end if;
end; -- tptformat/*---------------------------------------------------
-- simple function for parsing arguments from parameter string---------------------------------------------------*/function getopt( p_parvalues in varchar2,
p_extract in varchar2,p_delim in varchar2 default ','
) return varchar2is
ret varchar(1000) := NULL;begin
-- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' );-- dbms_output.put('p_extract = ['||p_extract||'] ' );
if lower(p_parvalues) like lower(p_extract)||'%'or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then
ret :=
nvl (
substr(p_parvalues,instr(p_parvalues, p_extract)+length(p_extract),case
instr(substr(p_parvalues,
instr(p_parvalues, p_extract)+length(p_extract)
), p_delim
)when 0 then length(p_parvalues)else
instr(
substr(p_parvalues,instr(p_parvalues, p_extract)+length(p_extract)
), p_delim
) - 1end
), chr(0) -- in case parameter was specified but with no valu
e);
else
ret := null; -- no parameter foundend if;
-- dbms_output.put_line('ret = ['||ret||']');
return ret;
end; -- getopt
-
7/29/2019 Snapper v1.1.201.SQL
9/15
/*----------------------------------------------------- proc for querying performance data into collections---------------------------------------------------*/
procedure snap( p_snapdate in out date, p_stats in out stab ) is
lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options','sinclude=' )), '%');
lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options','linclude=' )), '%');
lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options','tinclude=' )), '%');
lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options','winclude=' )), '%');
beginp_snapdate := sysdate;
select *bulk collect into p_statsfrom (
select 'STAT' stype, sid, statistic# -pls_adjust statistic#, value
from v$sesstat
where sid in (&snapper_sid)and (lv_gather like '%s%' or lv_gatherlike '%a%')
and statistic# in (select statistic# from v$statname
where lower(name) like lv_include_stat
&_IF_ORA10_OR_HIGHER union&_IF_ORA10_OR_HIGHER select statistic# fr
om v$statname&_IF_ORA10_OR_HIGHER where regexp_like (n
ame, lv_include_stat, 'i'))
--union allselect
'WAIT', sw.sid,en.event# + (select count(*) fro
m v$statname) + 1 - pls_adjust,nvl(se.time_waited_micro,0) + (
decode(se.event||sw.state, sw.event||'WAITING', sw.seconds_in_wait, 0) * 1000000) value
from v$session_wait sw, v$session_eventse, v$event_name en
where sw.sid = se.sidand se.event = en.name
and se.sid in (&snapper_sid)and (lv_gather like '%w%' or lv_gathe
r like '%a%')and event# in (select event# from v$
event_namewhere lower(name) li
ke lv_include_wait&_IF_ORA10_OR_HIGHER union&_IF_ORA10_OR_HIGHER select event# from v
$event_name
-
7/29/2019 Snapper v1.1.201.SQL
10/15
&_IF_ORA10_OR_HIGHER where regexp_like (name, lv_include_wait, 'i')
)--
&_IF_ORA10_OR_HIGHER union all&_IF_ORA10_OR_HIGHER select 'TIME' stype, sid, stat_id - pls
_adjust statistic#, value&_IF_ORA10_OR_HIGHER from v$sess_time_model&_IF_ORA10_OR_HIGHER where sid in (&snapper_sid)&_IF_ORA10_OR_HIGHER and (lv_gather like '%t%' or lv_gathe
r like '%a%')&_IF_ORA10_OR_HIGHER and stat_id in (select stat_id from v$s
ys_time_model&_IF_ORA10_OR_HIGHER where lower(stat_nam
e) like lv_include_time&_IF_ORA10_OR_HIGHER union&_IF_ORA10_OR_HIGHER select stat_id from
v$sys_time_model&_IF_ORA10_OR_HIGHER where regexp_like (s
tat_name, lv_include_time, 'i')&_IF_ORA10_OR_HIGHER )
--union allselect 'LATG', s.sid,
l.latch# +(select count(*) from v$statname) +
(select count(*) from v$event_name) +
1 - pls_adjust statistic#,l.gets + l.immediate_gets value
from v$latch l, v$session swhere
-- deliberate cartesian joins.sid in (&snapper_sid)
and (lv_gather like '%l%' or lv_gatherlike '%a%')
and latch# in (select latch# from v$latchnamewhere lower(name) like l
v_include_latch&_IF_ORA10_OR_HIGHER union&_IF_ORA10_OR_HIGHER select latch# from v$lat
chname&_IF_ORA10_OR_HIGHER where regexp_like (name,
lv_include_latch, 'i'))
---- union all-- select 'BUFW', ses.sid,
-- s.indx +-- (select count(*) from v$statname) +-- (select count(*) from v$event_name) +-- (select count(*) from v$latch) +-- 1 - pls_adjust statistic#,-- s.why0+s.why1+s.why2 value-- from x$kcbsw s, x$kcbwh w, v$session
-
7/29/2019 Snapper v1.1.201.SQL
11/15
ses-- where-- -- deliberate cartesian join-- s.indx = w.indx-- and s.why0+s.why1+s.why2 > 0-- and ses.sid in (&snapper_sid)-- and (lv_gather like '%b%' or lv_gather like '%a%')
--union allselect ' ENQ', s.sid,
ascii(substr(e.eq_type,1,1))*256+ ascii(substr(e.eq_type,2,1)) +
(select count(*) from v$statname) +
(select count(*) from v$event_name) +
(select count(*) from v$latch) +-- (select count(*) from x$kcbwh) +
1 - pls_adjust statistic#,e.total_req# value
from v$enqueue_stat e, v$session s
where-- deliberate cartesian joins.sid in (&snapper_sid)
and (lv_gather like '%e%' or lv_gather like '%a%')
)order by sid, stype, statistic#;
end snap;
begin
pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize);
--output ( 'Pagesize='||pagesize );
-- determine which statistics to collectlv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw')
when 'all' then 'stw'else nvl( lower(getopt ('&snapper_options', 'gather=')), 'st
w')end;
--lv_gather:=getopt ('&snapper_options', 'gather=');--output('lv_gather='||lv_gather);
if pagesize > 0 thenoutput(' ');output(chr(8));output('-- Session Snapper v1.10 by Tanel Poder ( http://www.tanelpoder.
com )');-- output('-- Parameters used: snapper.sql '||to_char(snapper_options)||' '||to_char(&snapper_sleep)||' '-- ||to_char(&snapper_count)||' '||to_char(&snapper_sid));
output(chr(8));
-
7/29/2019 Snapper v1.1.201.SQL
12/15
output(' ');end if;
-- initialize statistic and event name array-- fetch statistic names with their adjusted IDsselect *bulk collect into sn_tmpfrom (
select 'STAT' stype, statistic# - pls_adjust statistic#, name
from v$statnamewhere (lv_gather like '%s%' or lv_gather like '
%a%')--union allselect 'WAIT',
event# + (select count(*) from v$statname) + 1 - pls_adjust, name
from v$event_namewhere (lv_gather like '%w%' or lv_gather like '
%a%')--
&_IF_ORA10_OR_HIGHER union all&_IF_ORA10_OR_HIGHER select 'TIME' stype, stat_id - pls_adjust stati
stic#, stat_name name&_IF_ORA10_OR_HIGHER from v$sys_time_model&_IF_ORA10_OR_HIGHER where (lv_gather like '%t%' or lv_gather like '
%a%')--union allselect 'LATG',
l.latch# +(select count(*) from v$statname) +(select count(*) from v$event_name) +1 - pls_adjust statistic#,
namefrom v$latch l
where (lv_gather like '%l%' or lv_gather like '%a%')--
-- union all-- select 'BUFW',-- indx +-- (select count(*) from v$statname) +-- (select count(*) from v$event_name)+-- (select count(*) from v$latch) +-- 1 - pls_adjust statistic#,-- kcbwhdes name
-- from x$kcbwh-- where (lv_gather like '%b%' or lv_gather like '%a%')
--union allselect ' ENQ',
ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) +
(select count(*) from v$statname) +(select count(*) from v$event_name) +
-
7/29/2019 Snapper v1.1.201.SQL
13/15
(select count(*) from v$latch) +-- (select count(*) from x$kcbwh) +
1 - pls_adjust statistic#,eq_type
from (select es.eq_type
&_IF_ORA10_OR_HIGHER ||' - '||lt.nameeq_type,total_req#
fromv$enqueue_stat es
&_IF_ORA10_OR_HIGHER , V$lock_type lt&_IF_ORA10_OR_HIGHER where es.eq_type = lt.type
) ewhere (lv_gather like '%e%' or lv_gather like '
%a%'))order by stype, statistic#;
-- store these into an index_by array organized by statistic# for fast lookup
--output('sn_tmp.count='||sn_tmp.count);--output('lv_gather='||lv_gather);for i in 1..sn_tmp.count loop
-- output('i='||i||' statistic#='||sn_tmp(i).statistic#);sn(sn_tmp(i).statistic#) := sn_tmp(i);end loop;
-- main sampling loopfor c in 1..&snapper_count loop
-- print header if requiredif pagesize > 0 and mod(c-1, pagesize) = 0 then
output(rpad('--',141,'-'));output('HEAD, SID, SNAPSHOT START , SECONDS, TYPE, '
||rpad('STATISTIC',40,' ')
||', DELTA, DELTA/SEC, HDELTA, HDELTA/SEC');output(rpad('-',141,'-'));
elseif pagesize = -1 and c = 1 then
output('HEAD, SID, SNAPSHOT START , SECONDS, TYPE, '||rpad('STATISTIC',40,' ')||', DELTA, D/SEC, HDELTA, HD/SEC'
);
end if;end if;
if c = 1 then
snap(d1,s1);
else
d1 := d2;s1 := s2;
-
7/29/2019 Snapper v1.1.201.SQL
14/15
end if; -- c = 1
dbms_lock.sleep( (&snapper_sleep - (sysdate - d1)) );-- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1))*1000/1024 );
snap(d2,s2);
changed_values := 0;missing_values_s1 := 0;missing_values_s2 := 0;
i :=1; -- iteration counter (for debugging)a :=1; -- s1 array indexb :=1; -- s2 array index
while ( a
-
7/29/2019 Snapper v1.1.201.SQL
15/15
b := b + 1;
when s1(a).sid < s2(b).sid then
output('WARN, Session has disappeared during snapshot, ignoring SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count);
a := a + 1;
elseoutput('ERROR, Should not be here, SID='||to_char(s2(b).sid)
||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count);
end case; -- s1(a).sid ... s2(b).sid
i:=i+1;
if delta != 0 then
changed_values := changed_values + 1;
end if; -- delta != 0
end loop; -- while ( a 0 then output('-- End of snap '||to_char(c)); end if;
end loop; -- for c in 1..snapper_count
end;/
undefine snapper_oraversion
undefine snapper_sleepundefine snapper_countundefine snapper_sidundefine _IF_ORA10_OR_HIGHERundefine _IF_DBMS_SYSTEM_ACCESSIBLEcol snapper_oraversion clearcol dbms_system_accessible clear
set serverout off