add Tanel scripte

This commit is contained in:
Franz Rustler 2014-09-17 13:23:48 +02:00
parent a328edb315
commit d8107faaae
708 changed files with 100580 additions and 0 deletions

2
Tanel/46off.sql Normal file
View File

@ -0,0 +1,2 @@
alter session set events '10046 trace name context off'
/

2
Tanel/46on.sql Normal file
View File

@ -0,0 +1,2 @@
alter session set events '10046 trace name context forever, level &1'
/

5
Tanel/53on.sql Normal file
View File

@ -0,0 +1,5 @@
prompt alter session set events '10053 trace name context forever, level 1';;
prompt alter session set "_optimizer_trace"=all;;
alter session set events '10053 trace name context forever, level 1';
alter session set "_optimizer_trace"=all;

60
Tanel/SOL10204.sql Normal file
View File

@ -0,0 +1,60 @@
set appinfo OFF
set appinfo "SQL*Plus"
set arraysize 500
set autocommit OFF
set autoprint OFF
set autorecovery OFF
set autotrace OFF
set blockterminator "."
set cmdsep OFF
set colsep " "
set compatibility NATIVE
set concat "."
set copycommit 0
set copytypecheck ON
set define "&"
set describe DEPTH 1 LINENUM ON INDENT ON
set echo OFF
set editfile "afiedt.buf"
set embedded OFF
set escape OFF
set escchar OFF
set feedback 6
set flagger OFF
set flush ON
set heading ON
set headsep "|"
set linesize 160
set logsource ""
set long 10000000
set longchunksize 10000000
set markup HTML OFF HEAD "<style type='text/css'> BODY{ font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} P { font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} TABLE,TR,TD { font:10pt Arial,Helvetica,sans-serif; color:black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px; white-space:nowrap;} TH { font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} H1 { font:16pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} H2 { font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#663300; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} </style> <title>SYS@solaris01:1521/SOL10204 report</title>" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PRE OFF
set newpage 1
set null ""
set numformat ""
set numwidth 10
set pagesize 5000
set pause OFF
set recsep WRAP
set recsepchar " "
set serveroutput OFF
set shiftinout invisible
set showmode OFF
set sqlblanklines OFF
set sqlcase MIXED
set sqlcontinue "> "
set sqlnumber ON
set sqlpluscompatibility 10.2.0
set sqlprefix "#"
set sqlprompt "SQL> "
set sqlterminator ";"
set suffix "sql"
set tab OFF
set termout OFF
set time OFF
set timing OFF
set trimout ON
set trimspool ON
set underline "-"
set verify OFF
set wrap ON

22
Tanel/a.sql Normal file
View File

@ -0,0 +1,22 @@
prompt A-Script: Display active sessions...
select
count(*)
, sql_id
, case state when 'WAITING' then 'WAITING' else 'ON CPU' end state
, case state when 'WAITING' then event else 'On CPU / runqueue' end event
from
v$session
where
status='ACTIVE'
--and type !='BACKGROUND'
and wait_class != 'Idle'
and sid != (select sid from v$mystat where rownum=1)
group by
sql_id
, case state when 'WAITING' then 'WAITING' else 'ON CPU' end
, case state when 'WAITING' then event else 'On CPU / runqueue' end
order by
count(*) desc
/

3
Tanel/acc.sql Normal file
View File

@ -0,0 +1,3 @@
prompt alter session set session_cached_cursors=&1;;
alter session set session_cached_cursors=&1
/

2
Tanel/aon.sql Normal file
View File

@ -0,0 +1,2 @@
set autotrace trace stat

7
Tanel/aot/README.txt Normal file
View File

@ -0,0 +1,7 @@
Advanced Oracle Troubleshooting course scripts by Tanel Poder
DON'T JUST RUN THE SCRIPTS HERE WITHOUT CHECKING WHAT THEY DO!
DON'T TEST THESE SCRIPTS IN PRODUCTION!
These scripts are designed to cause trouble, so that they could be troubleshooted.

25
Tanel/aot/bh_private.sql Normal file
View File

@ -0,0 +1,25 @@
col bhla_object head object for a40 truncate
col bhla_DBA head DBA for a20
col flg_lruflg head "FLAG:LRUFLAG"
select /*+ ORDERED */
trim(to_char(bh.flag, 'XXXXXXXX')) ||':'||
trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg,
bh.obj,
o.object_type,
o.owner||'.'||o.object_name bhla_object,
bh.tch,
file# ||' '||dbablk bhla_DBA,
bh.class,
bh.state,
bh.mode_held,
bh.dirty_queue DQ
from
x$bh bh,
dba_objects o
where
bh.obj = o.data_object_id
and bitand(flag,8)=8
order by
tch asc
/

4102
Tanel/aot/bigcomment.sql Normal file

File diff suppressed because it is too large Load Diff

3754
Tanel/aot/bigp.sql Normal file

File diff suppressed because it is too large Load Diff

466
Tanel/aot/bigsql.sql Normal file
View File

@ -0,0 +1,466 @@
DELETE FROM t
WHERE 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
/

58
Tanel/aot/demo1.sql Normal file
View File

@ -0,0 +1,58 @@
--------------------------------------------------------------------------------
--
-- File name: demo1.sql
--
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
-- Depending on the speed of LGWR IO will cause the session to wait
-- for log buffer space and log switch wait events (demo works
-- ok on a single hard disk laptop, probably will not wait so much
-- on a server with write cached storage)
--
-- Author: Tanel Poder ( http://www.tanelpoder.com )
-- Copyright: (c) Tanel Poder
--
--------------------------------------------------------------------------------
prompt Initializing Demo1...
set feedback off termout off
drop table t;
create table t as select * from dba_source where 1=0;
alter system switch logfile;
alter system switch logfile;
set termout on
prompt Taking Statspack report...
EXEC statspack.snap
prompt Starting Demo1 (running a "batch job")
set termout off
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
insert into t select * from dba_source;
commit;
set termout on
prompt "Batch job" finished...
prompt Taking Statspack report...
EXEC statspack.snap

103
Tanel/aot/demo2.sql Normal file
View File

@ -0,0 +1,103 @@
--------------------------------------------------------------------------------
--
-- File name: demo2.sql
--
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
-- Makes a single fetch to generate lots of LIOs by
-- nested looping over full table scans.
-- Requires lotslios.sql script from TPT scripts.
--
-- Author: Tanel Poder ( http://www.tanelpoder.com )
-- Copyright: (c) Tanel Poder
--
--------------------------------------------------------------------------------
prompt Starting Demo2...
-- @@lotslios 1000000000000
--------------------------------------------------------------------------------
--
-- File name: demos/bind_peeking_nested_loops.sql
-- Purpose: this script demos how a "wrong" bind variable value
-- can cause an execution plan to be compiled which is
-- very inefficient for the next execution with different bind variable
-- values (with large number of matching rows)
-- the second execution of the query takes very long time to complete
-- despite adaptive bind variable peeking, which would kick in during the
-- next (3rd) execution
--
-- This problem happens even on Oracle 11.2 despite adaptive bind peeking
-- and cardinality feedback (due design, not a bug)
--
-- Author: Tanel Poder (tanel@e2sn.com)
-- Copyright: (c) http://tech.e2sn.com
--
--------------------------------------------------------------------------------
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
CREATE TABLE t1 AS SELECT * FROM dba_objects;
CREATE TABLE t2 AS SELECT * FROM dba_objects;
CREATE TABLE t3 AS SELECT * FROM dba_objects;
CREATE INDEX i1 ON t1(owner);
CREATE INDEX i2 ON t2(owner);
CREATE INDEX i3 ON t3(owner);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=1;
VAR v VARCHAR2(100)
EXEC :v:='SCOTT'
SET TIMING ON
--PROMPT Running query first time, this should be fast (and should use nested loops execution plan)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/
SET TIMING OFF
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null));
EXEC :v:='SYS'
SET TIMING ON
PROMPT Running the "report"...
--PROMPT Now running the same query with different bind variables (this query should take very long time)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/

49
Tanel/aot/demo3.sql Normal file
View File

@ -0,0 +1,49 @@
--------------------------------------------------------------------------------
--
-- File name: demo3.sql
--
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
-- Causes a session hang by reading from external table
-- which in turn reads from a Unix named pipe. Before 11.1.0.7
-- this wait was uninstrumented.
--
-- Author: Tanel Poder ( http://www.tanelpoder.com )
-- Copyright: (c) Tanel Poder
--
-- Notes: Meant to be executed from an Unix/Linux Oracle DB server
--
--------------------------------------------------------------------------------
prompt Running demo3...
set feedback off termout off
CREATE OR REPLACE DIRECTORY mydir AS '/tmp';
host rm -f /tmp/myfile
host mknod /tmp/myfile p
DROP TABLE mytab;
CREATE TABLE mytab (
a int
)
ORGANIZATION EXTERNAL (
TYPE oracle_loader
DEFAULT DIRECTORY mydir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
(a)
)
LOCATION ('myfile')
)
/
select * from mytab;
set feedback on termout on
drop table mytab;

128
Tanel/aot/demo4.sql Normal file
View File

@ -0,0 +1,128 @@
--------------------------------------------------------------------------------
--
-- File name: demo4.sql
--
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
-- Causes optimizer to loop in CBO code for very long time
--
-- Author: Tanel Poder ( http://www.tanelpoder.com )
-- Copyright: (c) Tanel Poder
--
--------------------------------------------------------------------------------
prompt Starting demo4...
set termout off feedback off
drop table t;
create table t as select * from all_objects where 1=0;
exec dbms_stats.gather_table_stats(user,'T');
alter session set "_optimizer_search_limit"=100;
select *
from
t t1
,t t2
,t t3
,t t4
,t t5
,t t6
,t t7
,t t8
,t t9
,t t10
,t t11
,t t12
,t t13
,t t14
,t t15
,t t16
,t t17
,t t18
,t t19
,t t20
,t t21
,t t22
,t t23
,t t24
,t t25
,t t26
,t t27
,t t28
,t t29
,t t30
,t t31
,t t32
,t t33
,t t34
,t t35
,t t36
,t t37
,t t38
,t t39
,t t40
,t t41
,t t42
,t t43
,t t44
,t t45
,t t46
,t t47
,t t48
,t t49
,t t50
,t t51
,t t52
,t t53
,t t54
,t t55
,t t56
,t t57
,t t58
,t t59
,t t60
,t t61
,t t62
,t t63
,t t64
,t t65
,t t66
,t t67
,t t68
,t t69
,t t70
,t t71
,t t72
,t t73
,t t74
,t t75
,t t76
,t t77
,t t78
,t t79
,t t80
,t t81
,t t82
,t t83
,t t84
,t t85
,t t86
,t t87
,t t88
,t t89
,t t90
,t t91
,t t92
,t t93
,t t94
,t t95
,t t96
,t t97
,t t98
,t t99
/
set termout on feedback on

26
Tanel/aot/demo5.sql Normal file
View File

@ -0,0 +1,26 @@
--------------------------------------------------------------------------------
--
-- File name: demo5.sql
--
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
-- Causes a session hang by creating a pipe instead of a tracefile
-- and enabling tracing then
--
-- Author: Tanel Poder ( http://www.tanelpoder.com )
-- Copyright: (c) Tanel Poder
--
-- Notes: Meant to be executed from an Unix/Linux Oracle DB server
-- Requires the TPT toolset login.sql to be executed (via putting
-- TPT directory into SQLPATH) so that &trc variable would be
-- initialized with tracefile name.
--
--------------------------------------------------------------------------------
prompt Starting demo5...
host mknod &trc p
alter session set sql_trace=true;
select * from dual;

9
Tanel/aot/demo6.sql Normal file
View File

@ -0,0 +1,9 @@
-- on 10.2.0.1
-- doesn't work in all cases...
set feedback off termout off
alter session set optimizer_mode=first_rows;
select * from dba_lock_internal;
set feedback on termout on

28
Tanel/aot/demo7.sql Normal file
View File

@ -0,0 +1,28 @@
-- from metalink bug 2456257
create table fact (
id number primary key,
col01 number, col02 number, col03 number, col04 number,
col05 number, col06 number, col07 number, col08 number,
col09 number, col10 number, col11 number, col12 number,
col13 number, col14 number, col15 number, col16 number,
col17 number, col18 number, col19 number, col20 number,
dat01 number, dat02 number, dat03 number, dat04 number,
dat05 number, dat06 number, dat07 number, dat08 number,
dat09 number, dat10 number
);
select
id,
col01, col02, col03, col04, col05, col06, col07, col08, col09, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
sum(dat01), sum(dat02), sum(dat03), sum(dat04), sum(dat05),
sum(dat06), sum(dat07), sum(dat08), sum(dat09), sum(dat10)
from
fact
group by cube ( id,
col01, col02, col03, col04, col05, col06, col07, col08, col09, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20
);

20
Tanel/aot/hash.sql Normal file
View File

@ -0,0 +1,20 @@
col aot_hash_owner head OWNER for a12
col aot_hash_name head NAME word_wrap for a30
col aot_hash_dblink head DBLINK for a12
SELECT
kglnaown aot_hash_OWNER
, kglnaobj aot_hash_NAME
, kglnadlk aot_hash_DBLINK
, kglnahsh HASH_VALUE
, TO_CHAR(kglnahsh, 'xxxxxxxx') HASH_HEX
, kglnahsv MD5_HASH
, kglobt03 SQL_ID
, kglobt30 PLAN_HASH
, kglobt31 LIT_HASH
, kglobt46 OLD_HASH
FROM
x$kglob
WHERE
lower(kglnaobj) like lower('&1')
/

26
Tanel/aot/hash_demo.sql Normal file
View File

@ -0,0 +1,26 @@
prompt Dropping and creating users...
drop user a cascade;
drop user aa cascade;
set echo on
create user A identified by x;
create user AA identified by x;
alter user a quota unlimited on users;
alter user aa quota unlimited on users;
-- about to create two tables under different usernames...
pause
create table A.AA(a int);
create table AA.A(a int);
-- about to run @aot/hash <object_name> commands for both tables...
pause
set echo off
@aot/hash a
@aot/hash aa

26
Tanel/aot/kill_cpu.sql Normal file
View File

@ -0,0 +1,26 @@
prompt
prompt Jonathan Lewis'es kill_cpu script
prompt
set termout off
--drop table kill_cpu;
create table kill_cpu (n, primary key(n)) organization index
as
select rownum n
from all_objects
where rownum <= 50
;
set termout on echo on
alter session set "_old_connect_by_enabled"=true;
select count(*) X
from kill_cpu
connect by n > prior n
start with n = 1
;
set echo off

View File

@ -0,0 +1,20 @@
-- show which locks' id1/id2 columns have matching columns in v$session_wait/ASH
select /*+ leading(e) */
e.name
, lt.type
, lt.id1_tag
, lt.id2_tag
, lt.description lock_description
from
v$lock_type lt
, v$event_name e
where
substr(e.name, 6,2) = lt.type
and e.parameter2 = lt.id1_tag
and e.parameter3 = lt.id2_tag
and e.name like 'enq: %'
order by
e.name
/

View File

@ -0,0 +1,21 @@
DROP TABLE t;
CREATE TABLE t AS SELECT * FROM dba_objects;
CREATE INDEX i1 ON t(owner);
CREATE INDEX i2 ON t(owner,object_name);
CREATE INDEX i3 ON t(owner,subobject_name);
CREATE INDEX i4 ON t(owner,object_id);
CREATE INDEX i5 ON t(owner,data_object_id);
CREATE INDEX i6 ON t(owner,object_type);
CREATE INDEX i7 ON t(owner,created);
CREATE INDEX i8 ON t(owner,last_ddl_time);
CREATE INDEX i9 ON t(owner,timestamp);
CREATE INDEX i10 ON t(owner,status);
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T',NULL,100,METHOD_OPT=>'FOR ALL COLUMNS SIZE 254');
SELECT * FROM t
WHERE owner IN (SELECT owner FROM t GROUP BY owner HAVING count(*) > 1)
AND owner NOT IN (SELECT owner FROM t WHERE owner NOT LIKE 'S%')
;

38
Tanel/aot/ora4031.sql Normal file
View File

@ -0,0 +1,38 @@
-- metalink bug 7340448
-- oracle 10.2.0.4
drop table t;
drop table t1;
drop table t2;
create table t ( pat varchar2(10) );
begin
for i in 1 .. 1000 loop
insert into t values('abcdedghi');
end loop;
end;
/
commit;
create table t1 ( pk number , val varchar2(100) );
begin
for i in 1 .. 1000 loop
insert into t1 values(i,'a');
end loop;
end;
/
commit;
create table t2 as
select /*+ USE_NL(t) ordered */
pk, val, pat
from
t1,t
where
regexp_like(val,pat)
/

1715
Tanel/aot/short_stack.sql Normal file

File diff suppressed because it is too large Load Diff

36
Tanel/aot/sqlidconv.sql Normal file
View File

@ -0,0 +1,36 @@
@saveset
set serverout on
def convstr=0123456789abcdfghjkmnpqrstuvwxyz
def base=32
declare
r number := 0;
j number := 0;
a number := 0;
begin
for i in 1..length('&1') loop
j := length('&1') - i + 1;
-- dbms_output.put_line('i='||i||' j='||j||' chr='||substr('&1',i,1));
a := (( power(&base, j-1) * (instr('&convstr',substr('&1',i,1))-1) ));
-- dbms_output.put_line(' a='||a);
r := r + a;
-- dbms_output.put_line(' r='||to_char(r,'XXXXXXXXXXXXXXXX'));
-- dbms_output.put_line('power='||to_char(power(&base, i-1)));
-- dbms_output.put_line(' mult='||to_char(instr('&convstr',substr('&1',i,1))-1) );
-- dbms_output.put_line('--');
dbms_output.put_line('j='||j||' i='||i||' c='||substr('&1',i,1)||' mult='||to_char(instr('&convstr',substr('&1',i,1))-1)||' power='||to_char(power(&base, i-1))||' a='||a );
end loop;
dbms_output.put_line('result= '||r||' 0x'||trim(to_char(r, 'xxxxxxxxxxxxxxxxxxxxxxxx')));
dbms_output.put_line('last 4B= '||trunc(mod(r,power(2,32)))||' 0x'||trim(to_char(trunc(mod(r,power(2,32))), 'xxxxxxxxxxxxxxxxxxxxxxxx')));
dbms_output.put_line(chr(10)||'sqlid=&1 hash_value='|| trunc(mod(r,power(2,32))) );
end;
/
@loadset

View File

@ -0,0 +1,22 @@
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;
SET ECHO ON
CREATE TABLE t1(a INT) TABLESPACE users;
CREATE TABLE t2(a INT) TABLESPACE system;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
PAUSE
SET TIMING ON
EXEC FOR i IN 1..300000 LOOP INSERT INTO t1 VALUES(i); END LOOP;
ALTER SYSTEM CHECKPOINT;
EXEC FOR i IN 1..300000 LOOP INSERT INTO t2 VALUES(i); END LOOP;
SET TIMING OFF ECHO OFF

189
Tanel/aot/tx_lock_diag.txt Normal file
View File

@ -0,0 +1,189 @@
SQL> @sw 152
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
152 WAITING enq: TX - row lock contention 21 3 1415053318 393221 6000 0x54580006: TX mode 6
SQL> select obj, tch, file#, dbablk
2 from x$bh
3 where bitand(flag,8)=8;
no rows selected
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> desc v$transaction
Name Null? Type
------------------------------------------------------------------------------------------------------ -------- ----------------------------------------------------------------------------
1 ADDR RAW(8)
2 XIDUSN NUMBER
3 XIDSLOT NUMBER
4 XIDSQN NUMBER
5 UBAFIL NUMBER
6 UBABLK NUMBER
7 UBASQN NUMBER
8 UBAREC NUMBER
9 STATUS VARCHAR2(16)
10 START_TIME VARCHAR2(20)
11 START_SCNB NUMBER
12 START_SCNW NUMBER
13 START_UEXT NUMBER
14 START_UBAFIL NUMBER
15 START_UBABLK NUMBER
16 START_UBASQN NUMBER
17 START_UBAREC NUMBER
18 SES_ADDR RAW(8)
19 FLAG NUMBER
20 SPACE VARCHAR2(3)
21 RECURSIVE VARCHAR2(3)
22 NOUNDO VARCHAR2(3)
23 PTX VARCHAR2(3)
24 NAME VARCHAR2(256)
25 PRV_XIDUSN NUMBER
26 PRV_XIDSLT NUMBER
27 PRV_XIDSQN NUMBER
28 PTX_XIDUSN NUMBER
29 PTX_XIDSLT NUMBER
30 PTX_XIDSQN NUMBER
31 DSCN-B NUMBER
32 DSCN-W NUMBER
33 USED_UBLK NUMBER
34 USED_UREC NUMBER
35 LOG_IO NUMBER
36 PHY_IO NUMBER
37 CR_GET NUMBER
38 CR_CHANGE NUMBER
39 START_DATE DATE
40 DSCN_BASE NUMBER
41 DSCN_WRAP NUMBER
42 START_SCN NUMBER
43 DEPENDENT_SCN NUMBER
44 XID RAW(8)
45 PRV_XID RAW(8)
46 PTX_XID RAW(8)
SQL> @calc 1415053318 + 0
DEC HEX
---------- --------------------
1415053318 54580006
SQL> @lt TX
TYPE LOCK NAME ID1 MEANING ID2 MEANING LT_ DESCRIPTION
---- ------------------------------ ------------------------- ------------------------- --- ------------------------------------------------------------
TX Transaction usn<<16 | slot sequence YES Lock held by a transaction to allow other transactions to
wait for it
SQL> @sw 152
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
152 WAITING enq: TX - row lock contention 21 78 1415053318 393221 6000 0x54580006: TX mode 6
SQL>
SQL>
SQL> @sw 152
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
152 WAITING enq: TX - row lock contention 21 81 1415053318 393221 6000 0x54580006: TX mode 6
SQL>
SQL> select * from v$lock where sid = 152;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 99 0
00000003DA99E260 00000003DA99E288 152 TM 58197 0 3 0 99 0
SQL> select * from v$lock where sid = 152 and request != 0;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 108 0
SQL> select mod(393221,power(2,16)) from dual;
MOD(393221,POWER(2,16))
-----------------------
5
SQL> select 393221/power(2,16) usn, mod(393221,power(2,16)) slot from dual;
USN SLOT
---------- ----------
6.00007629 5
SQL> select trunc(393221/power(2,16)) usn, mod(393221,power(2,16)) slot from dual;
USN SLOT
---------- ----------
6 5
SQL>
SQL>
SQL>
SQL> select ses_addr from v$transaction where XIDUSN = 6 and XIDSLOT = 5;
SES_ADDR
----------------
00000003DD24CBA0
SQL> select sid, sql_hash_value from v$session where saddr = '00000003DD24CBA0';
SID SQL_HASH_VALUE
---------- --------------
144 3935459581
SQL> @sql 3935459581
CH# SQL_TEXT
---- ------------------------------------------------------------------------------------------------------------------------------------------------------
0 BEGIN dbms_lock.sleep(600); END;
CH# PARENT_HANDLE OBJECT_HANDLE PARSES H_PARSES EXECUTIONS FETCHES ROWS_PROCESSED LIOS PIOS SORTS CPU_MS ELA_MS USERS_EXECUTING
---- ---------------- ---------------- ---------- ---------- ---------- ---------- -------------- ---------- ---------- ---------- ---------- ---------- ---------------
0 00000003DC63AD80 00000003DC4EF988 1 1 0 0 0 0 0 0 3.729 3.729 1
SQL>
SQL>
SQL> desc v$open_cursor
Name Null? Type
------------------------------------------------------------------------------------------------------ -------- ----------------------------------------------------------------------------
1 SADDR RAW(8)
2 SID NUMBER
3 USER_NAME VARCHAR2(30)
4 ADDRESS RAW(8)
5 HASH_VALUE NUMBER
6 SQL_ID VARCHAR2(13)
7 SQL_TEXT VARCHAR2(60)
SQL> select hash_value, sql_text from v$open_cursor where sid = 144;
HASH_VALUE SQL_TEXT
---------- ------------------------------------------------------------
1420612433 update smon_scn_time set orig_thread=0, time_mp=:1, time_dp=
3114265815 select local_tran_id, global_tran_fmt, global_oracle_id, glo
3935459581 BEGIN dbms_lock.sleep(600); END;
541202592 select obj, tch, file#, dbablk from x$bh where bitand(flag,8
599212612 select s.username i_username, i.instance_name i_instance
2953317698 update mytest set dummy = 'Y'
2509924099 select value ||'/'||(select instance_name from v$instance)
7 rows selected.
SQL>
-- these were the troublemakers
3935459581 BEGIN dbms_lock.sleep(600); END;
2953317698 update mytest set dummy = 'Y'

5
Tanel/ar.sql Normal file
View File

@ -0,0 +1,5 @@
and rownum <= &1
.
prompt ....and rownum <= &1
/

23
Tanel/arg.sql Normal file
View File

@ -0,0 +1,23 @@
-- object arguments
col proc_owner head OWNER for a25
col proc_object_name head OBJECT_NAME for a30
col proc_procedure_name head PROCEDURE_NAME for a30
select
a.owner proc_owner
, a.object_name proc_object_name
, p.procedure_name proc_procedure_name
, a.subprogram_id
from
dba_arguments a
, dba_procedures p
where
a.owner = p.owner
and a.object_name = p.object_name
and a.object_id = p.object_id
and a.subprogram_id = p.subprogram_id
and lower(p.owner) like lower('%&1%')
and lower(p.object_name) like lower('%&2%')
and lower(p.procedure_name) like lower('%&3%')
/

18
Tanel/as.sql Normal file
View File

@ -0,0 +1,18 @@
prompt A-Script: Display active sessions grouped by &1....
select
&1
, count(*)
from
v$session
where
status='ACTIVE'
and type !='BACKGROUND'
and wait_class != 'Idle'
and sid != (select sid from v$mystat where rownum=1)
group by
&1
order by
count(*) desc
/

12
Tanel/ascii.sql Normal file
View File

@ -0,0 +1,12 @@
select
r*4+0, chr(r*4+0),
r*4+1, chr(r*4+1),
r*4+2, chr(r*4+2),
r*4+3, chr(r*4+3)
from (
select
rownum-1 r
from
dual connect by level <=64
)
/

33
Tanel/ash.sql Normal file
View File

@ -0,0 +1,33 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
DEF from_time="2010-11-03 14:16:00"
DEF to_time="2010-11-03 14:30:00"
DEF cols=session_state,event
PROMPT FROM_TIME=&from_time TO_TIME=&to_time
SELECT * FROM (
SELECT
&cols
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
FROM
-- active_session_history_bak
v$active_session_history
-- dba_hist_active_sess_history
WHERE
sample_time BETWEEN TIMESTAMP'&from_time' AND TIMESTAMP'&to_time'
GROUP BY
&cols
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
DEF cols=session_state,event,p1,p2
/
DEF cols=session_state,event,sql_id
/

View File

@ -0,0 +1,15 @@
SELECT
POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0)))) up_to_microsec
, COUNT(*)
, SUM(time_waited)
, MAX(time_waited)
FROM
v$active_session_history a
WHERE
a.event = 'log file sync'
GROUP BY
POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0))))
ORDER BY
up_to_microsec
/

52
Tanel/ash/asqlmon.sql Normal file
View File

@ -0,0 +1,52 @@
COL operation FOR a30
COL options FOR a30
WITH sample_times AS (
select * from dual
),
sq AS (
SELECT
to_char(ash.sample_time, 'YYYY-MM-DD HH24') sample_time
, count(*) samples
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_line_id
, ash.sql_plan_operation
, ash.sql_plan_options
FROM
v$active_session_history ash
WHERE
1=1
AND ash.sql_id = '&1'
AND ash.sql_child_number LIKE '%&2%'
GROUP BY
to_char(ash.sample_time, 'YYYY-MM-DD HH24')
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_line_id
, ash.sql_plan_operation
, ash.sql_plan_options
)
SELECT
sq.samples
, plan.sql_id
, plan.child_number
, sq.sample_time
, plan.id
, plan.operation
, plan.options
FROM
v$sql_plan plan
, sq
WHERE
1=1
AND sq.sql_id(+) = plan.sql_id
AND sq.sql_child_number(+) = plan.child_number
AND sq.sql_plan_line_id(+) = plan.id
AND plan.sql_id = '&1'
AND plan.child_number LIKE '%&2%'
ORDER BY
-- sq.sample_time
to_number(plan.id)
/

28
Tanel/ash/event_hist.sql Normal file
View File

@ -0,0 +1,28 @@
COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE
COL evh_graph HEAD "Awesome|Graphic" JUST CENTER FOR A12
COL pct_evt_time HEAD "% Event|Time"
COL evh_est_total_ms HEAD "Estimated|Total ms"
COL evh_millisec HEAD "Wait time|bucket ms+"
COL evh_event HEAD "Wait Event"
COL evh_sample_count HEAD "Num ASH|Samples"
BREAK ON evh_event SKIP 1
SELECT
event evh_event
, TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) evh_millisec
, COUNT(*) evh_sample_count
, TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) * COUNT(*) evh_est_total_ms
, ROUND ( 100 * RATIO_TO_REPORT( TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) * COUNT(*) ) OVER (PARTITION BY event) , 1 ) pct_evt_time
, '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT( TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) * COUNT(*) ) OVER (PARTITION BY event)), '#'),' '), 10)||'|' evh_graph
FROM
V$ACTIVE_SESSION_HISTORY
WHERE
regexp_like(event, '&1')
AND time_waited > 0
GROUP BY
event
, TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) -- millisec
ORDER BY 1, 2
/

View File

@ -0,0 +1,2 @@
select to_char(sample_time,'YYYYMMDD HH24:MI'), sample_time-lag(sample_time) over(order by sample_time) from (select distinct sample_time from v$active_session_history);

40
Tanel/ash10.sql Normal file
View File

@ -0,0 +1,40 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
COL sql_plan_step FOR A50 WORD_WRAP
SELECT * FROM (
SELECT
a.session_state
, a.event
, a.sql_id
, a.blocking_session_status
, a.blocking_session
, a.blocking_session_serial#
, a.current_obj#
, a.sql_plan_line_id
, a.sql_plan_operation ||' '||a.sql_plan_options sql_plan_step
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
DBA_HIST_ACTIVE_SESS_HISTORY a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-20 17:25:00' AND TIMESTAMP'2011-01-20 18:55:00'
AND a.event = 'enq: TX - index contention'
GROUP BY
a.session_state
, a.event
, a.sql_id
, a.blocking_session_status
, a.blocking_session
, a.blocking_session_serial#
, a.current_obj#
, a.sql_plan_line_id
, a.sql_plan_operation ||' '||a.sql_plan_options
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/

76
Tanel/ash2.sql Normal file
View File

@ -0,0 +1,76 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
--DEF from_time="2010-10-30 18:12:00"
--DEF to_time="2010-10-30 18:14:00"
DEF from_time="&1"
DEF to_time="&2"
DEF cols=session_type,program,sql_opcode,sql_id
PROMPT FROM_TIME=&from_time TO_TIME=&to_time
SELECT * FROM (
SELECT
count(*),
&cols
, CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT'
WHEN IN_PARSE ='Y' THEN 'PARSE'
WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE'
WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION'
WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION'
WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC'
WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION'
WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION'
WHEN IN_BIND ='Y' THEN 'BIND'
WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE'
WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD'
END stage
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
FROM
--active_session_history_bak
v$active_session_history
-- dba_hist_active_sess_history
WHERE
sample_time BETWEEN TIMESTAMP'&from_time' AND TIMESTAMP'&to_time'
AND session_state = 'ON CPU'
AND event IS NULL
AND sql_id IS NULL
GROUP BY
&cols
, CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT'
WHEN IN_PARSE ='Y' THEN 'PARSE'
WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE'
WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION'
WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION'
WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC'
WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION'
WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION'
WHEN IN_BIND ='Y' THEN 'BIND'
WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE'
WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD'
END
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
DEF cols=session_type,program,top_level_sql_opcode,sql_id
/
DEF cols=session_type,program,top_level_sql_opcode,sql_id,event
/
DEF cols=session_type,program,top_level_sql_opcode,sql_id,event,p1
/
DEF cols=session_type,program,top_level_sql_opcode,sql_id,event,p1,p2
/
DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id
/
DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id
/

72
Tanel/ash3.sql Normal file
View File

@ -0,0 +1,72 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
DEF from_time="2010-10-30 18:12:00"
DEF to_time="2010-10-30 18:14:00"
DEF cols=session_type,program,sql_opcode
PROMPT FROM_TIME=&from_time TO_TIME=&to_time
SELECT * FROM (
SELECT
&cols
, CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT'
WHEN IN_PARSE ='Y' THEN 'PARSE'
WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE'
WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION'
WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION'
WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC'
WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION'
WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION'
WHEN IN_BIND ='Y' THEN 'BIND'
WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE'
WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD'
END stage
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
FROM
active_session_history_bak
-- v$active_session_history
-- dba_hist_active_sess_history
WHERE
sample_time BETWEEN TIMESTAMP'&from_time' AND TIMESTAMP'&to_time'
AND session_state = 'ON CPU'
AND event IS NULL
AND sql_id IS NULL
GROUP BY
&cols
, CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT'
WHEN IN_PARSE ='Y' THEN 'PARSE'
WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE'
WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION'
WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION'
WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC'
WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION'
WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION'
WHEN IN_BIND ='Y' THEN 'BIND'
WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE'
WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD'
END
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
DEF cols=module
/
DEF cols=action
/
DEF cols=user_id
/
DEF cols=session_type,program,top_level_sql_opcode
/
DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id
/
DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id
/

63
Tanel/ash5.sql Normal file
View File

@ -0,0 +1,63 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
SELECT * FROM (
SELECT /*+ LEADING(o) USE_HASH(a) */
a.sql_id
, o.kglnaobj cursor_name
, a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
v$active_session_history a
, x$kglob o
WHERE
a.sql_id = o.kglobt13
AND a.sample_time BETWEEN SYSDATE AND SYSDATE - 1/12
AND o.kglnaobj = 'table_4_9_73c8_0_0_0'
GROUP BY
a.sql_id
, o.kglnaobj
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT /*+ LEADING(o) USE_HASH(a) */
a.sql_id
, o.kglnaobj cursor_name
, a.session_state
, a.event
, a.p1
, a.p2
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
v$active_session_history a
, x$kglob o
WHERE
a.sql_id = o.kglobt13
AND a.sample_time BETWEEN SYSDATE AND SYSDATE - 1/12
AND o.kglnaobj = 'table_4_9_73c8_0_0_0'
GROUP BY
a.sql_id
, a.p1
, a.p2
, o.kglnaobj
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 300
/

54
Tanel/ash6.sql Normal file
View File

@ -0,0 +1,54 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
SELECT * FROM (
SELECT
a.sql_id
, a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00'
AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0
GROUP BY
a.sql_id
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00'
AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0
GROUP BY
a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
ORDER BY
percent DESC
)
WHERE ROWNUM <= 300
/

54
Tanel/ash7.sql Normal file
View File

@ -0,0 +1,54 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
SELECT * FROM (
SELECT
a.sql_id
, a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00'
AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0
GROUP BY
a.sql_id
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00'
AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0
GROUP BY
a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
ORDER BY
percent DESC
)
WHERE ROWNUM <= 300
/

77
Tanel/ash8.sql Normal file
View File

@ -0,0 +1,77 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
SELECT * FROM (
SELECT
a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.program
, a.sql_id
, a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.program
, a.sql_id
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.program
, a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
dba_hist_active_sess_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.program
, a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
ORDER BY
percent DESC
)
WHERE ROWNUM <= 300
/

77
Tanel/ash9.sql Normal file
View File

@ -0,0 +1,77 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
SELECT * FROM (
SELECT
a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
v$active_session_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.program
, a.sql_id
, a.session_state
, a.event
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
v$active_session_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.program
, a.sql_id
, a.session_state
, a.event
ORDER BY
percent DESC
)
WHERE ROWNUM <= 30
/
SELECT * FROM (
SELECT
a.program
, a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
, count(*)
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
, MIN(a.sample_time)
, MAX(a.sample_time)
FROM
v$active_session_history a
WHERE
a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00'
GROUP BY
a.program
, a.sql_id
, a.session_state
, a.event
, a.p1
, a.p2
ORDER BY
percent DESC
)
WHERE ROWNUM <= 300
/

50
Tanel/ashtop.sql Normal file
View File

@ -0,0 +1,50 @@
COL ash_from_date NEW_VALUE ash_from_date
COL ash_to_date NEW_VALUE ash_to_date
SELECT
regexp_replace('&3','^-([0-9]*)(.)$', ' sysdate - \1 / ', 1, 0, 'i')
||decode(regexp_replace('&3', '^-[0-9]*(.)$', '\1', 1, 0, 'i'),
'd', '1',
'h', '24',
'm','24/60',
's','24/60/60',
''
) ash_from_date,
regexp_replace(regexp_replace('&4', '^now$', 'sysdate'),'^-([0-9]*)(.)$', ' sysdate - \1 / ', 1, 0, 'i')
||decode(regexp_replace(regexp_replace('&4', '^now$', 'sysdate'), '^-[0-9]*(.)$', '\1', 1, 0, 'i'),
'd', '1',
'h', '24',
'm','24/60',
's','24/60/60',
''
) ash_to_date
from
dual
/
SELECT
&1
, COUNT(*) "Tot_Samples"
, SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU"
, SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application"
, SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration"
, SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency"
, SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit"
, SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle"
, SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network"
, SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O"
, SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O"
, SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster"
, SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other"
FROM
v$active_session_history
WHERE
&2
AND sample_time BETWEEN &ash_from_date AND &ash_to_date
GROUP BY
&1
ORDER BY
"Tot_Samples" DESC
, &1
/

2
Tanel/asmdf.sql Normal file
View File

@ -0,0 +1,2 @@
SELECT * FROM v$asm_diskgroup;

25
Tanel/asmdump.sql Normal file
View File

@ -0,0 +1,25 @@
-- simple asm dump utility
-- use full database file name (with +datagroup name) as only parameter
-- nb! doesnt work properly on multidisk diskgroups with fine grained striping
-- single disk disk groups with fine grained striping or multidisk groups
-- with coarse grained striping are ok
--
-- tanel poder - nov 2005 [ http://www.tanelpoder.com ]
set lines 300 trim on verify off pages 50000
select
'dd if='|| d.path||' bs=1048576 skip='||AU_KFFXP||' count=1 '||
'>> /tmp/'||substr('&1',instr('&1','/',-1)+1)||'.dmp' cmd
from
X$KFFXP X, V$ASM_DISK D, V$ASM_ALIAS A
where
lower(A.NAME) = lower(substr('&1',instr('&1','/',-1)+1))
and X.NUMBER_KFFXP = A.FILE_NUMBER
and X.GROUP_KFFXP = A.GROUP_NUMBER
and X.INCARN_KFFXP = A.FILE_INCARNATION
and X.DISK_KFFXP = D.DISK_NUMBER
and X.GROUP_KFFXP = D.GROUP_NUMBER
order by
X.XNUM_KFFXP;

30
Tanel/asmdumpf.sql Normal file
View File

@ -0,0 +1,30 @@
-- EXPERIMENTAL! USE AT YOUR OWN RISK!
--
-- simple asm dump utility
-- use full database file name (with +datagroup name) as only parameter
-- nb! doesnt necessarily work properly on multidisk diskgroups with fine
-- grained striping. created for 2-disk diskgroup. doesnt probably work
-- ok on 2+ disk diskgroups.
--
-- tanel poder - nov 2005 [ http://www.tanelpoder.com ]
set lines 300 trim on verify off pages 50000
select
'dd if='|| d.path||' bs=131072 skip='||(AU_KFFXP*8)+(mod(stripefact.r,8)*131072)||' count=1 '||
'>> /tmp/'||substr('&1',instr('&1','/',-1)+1)||'.dmp' cmd
from
X$KFFXP X,
V$ASM_DISK D,
V$ASM_ALIAS A,
(select rownum-1 r from v$mystat where rownum <= 8) stripefact
where
lower(A.NAME) = lower(substr('&1',instr('&1','/',-1)+1))
and X.NUMBER_KFFXP = A.FILE_NUMBER
and X.GROUP_KFFXP = A.GROUP_NUMBER
and X.INCARN_KFFXP = A.FILE_INCARNATION
and X.DISK_KFFXP = D.DISK_NUMBER
and X.GROUP_KFFXP = D.GROUP_NUMBER
order by
X.XNUM_KFFXP;

21
Tanel/asql.sql Normal file
View File

@ -0,0 +1,21 @@
prompt Display active sessions current SQLs
select
sql_id
, sql_hash_value
, sql_child_number
, count(*)
from
v$session
where
status='ACTIVE'
and type !='BACKGROUND'
and sid != (select sid from v$mystat where rownum=1)
group by
sql_id
, sql_hash_value
, sql_child_number
order by
count(*) desc
/

View File

@ -0,0 +1,75 @@
set doc on
--DOCUMENT
set echo on
--pause
-- view merging
select * from dual;
select * from table(dbms_xplan.display_cursor);
--pause
create or replace view v as select * from dual;
select * from (select * from v);
alter session set "_simple_view_merging"=false;
select * from (select * from v);
alter session set "_simple_view_merging"=true;
select * from (select /*+ NO_MERGE */ * from v);
select * from (select rownum r, v.* from v);
-- scalar subqueries, run a subquery for populating a value in a single column or a row (9i+)
select owner, count(*) from test_objects o group by owner;
-- another way (excludes nulls if any)
select u.username, (select count(*) from test_objects o where u.username = o.owner) obj_count from test_users u;
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
set echo off

View File

@ -0,0 +1,45 @@
-- GRANT EXECUTE ON sys.dbms_advanced_rewrite TO &user
-- there's no public synonym for this package so you should reference it by schema name
exec sys.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE ('test_rewrite');
begin
sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
'test_rewrite'
, 'select username,created from test_users u where username in (select owner from test_objects o where o.owner = u.username)'
, 'select /*+ qb_name(main) no_unnest(@subq) */ username,created from test_users u where username in (select /*+ qb_name(subq) */ owner from test_objects o where o.owner = u.username) and /* careful! */ 1=1'
, validate => true
, rewrite_mode => 'general'
);
end;
/
alter session set query_rewrite_enabled = true -- this is true by default;
alter session set query_rewrite_integrity = trusted;
-- if you see a FILTER operation (not a HASH JOIN SEMI) then the rewrite worked
select username,created from test_users u where username in (select owner from test_objects o where o.owner = u.username);
@x9a
-- an example of how to add a missing ORDER BY to a statement which assumes that GROUP BY always orders data too
-- (this is not true in 10.2+ where GROUP BY and DISTINCT operations can be done using hashing instead of sorting)
exec sys.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE ('test_rewrite_order');
begin
sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
'test_rewrite_order'
, 'select owner,count(*) from test_objects group by owner'
, 'select * from (select owner,count(*) from test_objects group by owner order by owner)'
, validate => true
, rewrite_mode => 'text_match'
);
end;
/
select owner,count(*) from test_objects group by owner;
@x9a

View File

@ -0,0 +1,130 @@
DROP TABLE badly_correlated1;
DROP TABLE badly_correlated2;
CREATE TABLE badly_correlated1 (id, a, b, c, d, e, f, g, h, val) AS (
SELECT rownum id, v.* FROM (
SELECT
mod(rownum, 100000) a
, mod(rownum, 100000) b
, mod(rownum, 100000) c
, mod(rownum, 100000) d
, mod(rownum, 100000) e
, mod(rownum, 100000) f
, mod(rownum, 100000) g
, mod(rownum, 100000) h
, lpad('x',100,'x')
FROM
dual CONNECT BY LEVEL <= 100000
UNION ALL
SELECT
90 a
, 91 b
, 92 c
, 93 d
, 94 e
, 95 f
, 96 g
, 97 h
, lpad('y',100,'y')
FROM
dual CONNECT BY LEVEL <= 100000
) v
)
/
CREATE TABLE badly_correlated2 AS SELECT * FROM badly_correlated1;
ALTER TABLE badly_correlated1 MODIFY id PRIMARY KEY;
ALTER TABLE badly_correlated2 MODIFY id PRIMARY KEY;
CREATE INDEX idx1_badly_correlated1 ON badly_correlated1 (a,b,c,d,e,f,g);
CREATE INDEX idx1_badly_correlated2 ON badly_correlated2 (a,b,c,d,e,f,g);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE', cascade=>true);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE', cascade=>true);
select /*+ opt_param('_optimizer_use_feedback', 'false') */
*
from
badly_correlated1 t1
, badly_correlated2 t2
where
t1.id = t2.id
and t1.a = 90
and t1.b = 91
and t1.c = 92
and t1.d = 93
and t1.e = 94
and t1.f = 95
and t1.g = 96
and t1.h = 97
and t2.val like 'xy%'
/
@x
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true);
select /*+ opt_param('_optimizer_use_feedback', 'false') */
*
from
badly_correlated1 t1
, badly_correlated2 t2
where
t1.id = t2.id
and t1.a = 90
and t1.b = 91
and t1.c = 92
and t1.d = 93
and t1.e = 94
and t1.f = 95
and t1.g = 96
and t1.h = 97
and t2.val like 'xy%'
/
@x
-- create extended stats
select
dbms_stats.create_extended_stats(
ownname => user
, tabname=>'BADLY_CORRELATED1'
, extension=>'(a,b,c,d,e,f,g,h)'
)
from dual
/
select
dbms_stats.create_extended_stats(
ownname => user
, tabname=>'BADLY_CORRELATED2'
, extension=>'(a,b,c,d,e,f,g,h)'
)
from dual
/
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true);
select /*+ opt_param('_optimizer_use_feedback', 'false') */
*
from
badly_correlated1 t1
, badly_correlated2 t2
where
t1.id = t2.id
and t1.a = 90
and t1.b = 91
and t1.c = 92
and t1.d = 93
and t1.e = 94
and t1.f = 95
and t1.g = 96
and t1.h = 97
and t2.val like 'xy%'
/
@x

View File

@ -0,0 +1,84 @@
--------------------------------------------------------------------------------
--
-- File name: demos/bind_peeking_nested_loops.sql
-- Purpose: this script demos how a "wrong" bind variable value
-- can cause an execution plan to be compiled which is
-- very inefficient for the next execution with different bind variable
-- values (with large number of matching rows)
-- the second execution of the query takes very long time to complete
-- despite adaptive bind variable peeking, which would kick in during the
-- next (3rd) execution
--
-- This problem happens even on Oracle 11.2 despite adaptive bind peeking
-- and cardinality feedback (due design, not a bug)
--
-- Author: Tanel Poder (tanel@e2sn.com)
-- Copyright: (c) http://tech.e2sn.com
--
--------------------------------------------------------------------------------
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
CREATE TABLE t1 AS SELECT * FROM dba_objects;
CREATE TABLE t2 AS SELECT * FROM dba_objects;
CREATE TABLE t3 AS SELECT * FROM dba_objects;
CREATE INDEX i1 ON t1(owner);
CREATE INDEX i2 ON t2(owner);
CREATE INDEX i3 ON t3(owner);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10;
VAR v VARCHAR2(100)
EXEC :v:='SCOTT'
SET TIMING ON
PROMPT Running query first time, this should be fast (and should use nested loops execution plan)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/
SET TIMING OFF
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null));
EXEC :v:='SYS'
SET TIMING ON
PROMPT Now running the same query with different bind variables (this query should take very long time)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/

View File

@ -0,0 +1,84 @@
--------------------------------------------------------------------------------
--
-- File name: demos/bind_peeking_nested_loops.sql
-- Purpose: this script demos how a "wrong" bind variable value
-- can cause an execution plan to be compiled which is
-- very inefficient for the next execution with different bind variable
-- values (with large number of matching rows)
-- the second execution of the query takes very long time to complete
-- despite adaptive bind variable peeking, which would kick in during the
-- next (3rd) execution
--
-- This problem happens even on Oracle 11.2 despite adaptive bind peeking
-- and cardinality feedback (due design, not a bug)
--
-- Author: Tanel Poder (tanel@e2sn.com)
-- Copyright: (c) http://tech.e2sn.com
--
--------------------------------------------------------------------------------
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
CREATE TABLE t1 AS SELECT * FROM dba_objects;
CREATE TABLE t2 AS SELECT * FROM dba_objects;
CREATE TABLE t3 AS SELECT * FROM dba_objects;
CREATE INDEX i1 ON t1(owner);
CREATE INDEX i2 ON t2(owner);
CREATE INDEX i3 ON t3(owner);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10;
VAR v VARCHAR2(100)
EXEC :v:='SYS'
SET TIMING ON
PROMPT Running query first time, this should be fast (and should use nested loops execution plan)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/
SET TIMING OFF
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null));
EXEC :v:='SCOTT'
SET TIMING ON
PROMPT Now running the same query with different bind variables (this query should take very long time)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/

View File

@ -0,0 +1,84 @@
--------------------------------------------------------------------------------
--
-- File name: demos/bind_peeking_nested_loops.sql
-- Purpose: this script demos how a "wrong" bind variable value
-- can cause an execution plan to be compiled which is
-- very inefficient for the next execution with different bind variable
-- values (with large number of matching rows)
-- the second execution of the query takes very long time to complete
-- despite adaptive bind variable peeking, which would kick in during the
-- next (3rd) execution
--
-- This problem happens even on Oracle 11.2 despite adaptive bind peeking
-- and cardinality feedback (due design, not a bug)
--
-- Author: Tanel Poder (tanel@e2sn.com)
-- Copyright: (c) http://tech.e2sn.com
--
--------------------------------------------------------------------------------
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
CREATE TABLE t1 AS SELECT * FROM dba_objects;
CREATE TABLE t2 AS SELECT * FROM dba_objects;
CREATE TABLE t3 AS SELECT * FROM dba_objects;
CREATE INDEX i1 ON t1(owner);
CREATE INDEX i2 ON t2(owner);
CREATE INDEX i3 ON t3(owner);
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1');
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1');
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10;
VAR v VARCHAR2(100)
EXEC :v:='SCOTT'
SET TIMING ON
PROMPT Running query first time, this should be fast (and should use nested loops execution plan)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/
SET TIMING OFF
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null));
EXEC :v:='SYS'
SET TIMING ON
PROMPT Now running the same query with different bind variables (this query should take very long time)
SELECT
MIN(t1.created), MAX(t1.created)
FROM
t1
, t2
, t3
WHERE
t1.object_id = t2.object_id
AND t2.object_id = t3.object_id
AND t1.owner = :v
AND t2.owner = :v
AND t3.owner = :v
/

View File

@ -0,0 +1,33 @@
-- setting the 11.2 cardinality feedback option to false for demo stability purposes
exec execute immediate 'alter session set "_optimizer_use_feedback"=false'; exception when others then null;
SELECT /*+ no_star_transformation */
ch.channel_desc
, co.country_iso_code co
, cu.cust_city
, p.prod_category
, sum(s.quantity_sold)
, sum(s.amount_sold)
FROM
sh.sales s
, sh.customers cu
, sh.countries co
, sh.products p
, sh.channels ch
WHERE
-- join
s.cust_id = cu.cust_id
AND cu.country_id = co.country_id
AND s.prod_id = p.prod_id
AND s.channel_id = ch.channel_id
-- filter
AND ch.channel_class = 'Direct'
AND co.country_iso_code = 'US'
AND p.prod_category = 'Electronics'
GROUP BY
ch.channel_desc
, co.country_iso_code
, cu.cust_city
, p.prod_category
/

View File

@ -0,0 +1,22 @@
-- TODO: not working yet
-- LEADING hint sets the order properly but not the ORDERED hint
drop table t1;
drop table t2;
create table t1 as select * from all_objects;
create table t2 as select * from all_objects;
create index i1 on t2(object_id);
exec dbms_stats.gather_table_stats(user,'T1');
exec dbms_stats.gather_table_stats(user,'T2');
-- ordered hint "ignored" starting from 11.2.0.1 thanks to distinct aggregation transformation
select /*+ ORDERED */ t1.owner, count(distinct t2.object_type) from t2, t1 where t1.object_id = t2.object_id group by t1.owner;
@x
select /*+ ORDERED NO_TRANSFORM_DISTINCT_AGG */ t1.owner, count(distinct t2.object_type) from t2, t1 where t1.object_id = t2.object_id group by t1.owner;
@x

View File

@ -0,0 +1,70 @@
set echo on
select
t.owner, t.created, i.last_ddl_time
from
test_objects t
, indexed_objects i
where
t.object_id = i.object_id
and t.owner = 'AST'
and t.object_name like 'T%'
/
@xall
select /*+ LEADING(t,i) USE_NL(i) */
t.owner, t.created, i.last_ddl_time
from
test_objects t
, indexed_objects i
where
t.object_id = i.object_id
and t.owner = 'AST'
and t.object_name like 'T%'
/
@xall
select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_PREFETCH(i) */
t.owner, t.created, i.last_ddl_time
from
test_objects t
, indexed_objects i
where
t.object_id = i.object_id
and t.owner = 'AST'
and t.object_name like 'T%'
/
@xall
select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_BATCHING(i) */
t.owner, t.created, i.last_ddl_time
from
test_objects t
, indexed_objects i
where
t.object_id = i.object_id
and t.owner = 'AST'
and t.object_name like 'T%'
/
@xall
select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_PREFETCH(t) NO_NLJ_PREFETCH(i) NO_NLJ_BATCHING(t) NO_NLJ_BATCHING(i) */
t.owner, t.created, i.last_ddl_time
from
test_objects t
, indexed_objects i
where
t.object_id = i.object_id
and t.owner = 'AST'
and t.object_name like 'T%'
/
@xall
set echo off

View File

@ -0,0 +1,22 @@
select
/*+
no_unnest(@my_sub)
leading (@my_sub emp_inner@my_sub)
use_merge (@my_sub dept_inner@my_sub)
*/
*
from
scott.emp emp_outer
where
emp_outer.deptno in (
select /*+ qb_name(my_sub) */
dept_inner.deptno
from
scott.dept dept_inner
, scott.emp emp_inner
where
dept_inner.dname like 'S%'
and emp_inner.ename = dept_inner.dname
and dept_inner.deptno = emp_outer.deptno
)
/

View File

@ -0,0 +1,20 @@
drop table qt_test;
create table qt_test (
id number primary key
, name varchar2(100)
)
/
insert into qt_test select rownum, lpad('x',100,'x') from dual connect by level <=10000;
exec dbms_stats.gather_table_stats(user,'QT_TEST');
select count(name) from qt_test;
@x
alter table qt_test modify name not null;
select count(name) from qt_test;
@x

View File

@ -0,0 +1,33 @@
-- setting the 11.2 cardinality feedback option to false for demo stability purposes
exec execute immediate 'alter session set "_optimizer_use_feedback"=false'; exception when others then null;
SELECT /*+ star_transformation */
ch.channel_desc
, co.country_iso_code co
, cu.cust_city
, p.prod_category
, sum(s.quantity_sold)
, sum(s.amount_sold)
FROM
sh.sales s
, sh.customers cu
, sh.countries co
, sh.products p
, sh.channels ch
WHERE
-- join
s.cust_id = cu.cust_id
AND cu.country_id = co.country_id
AND s.prod_id = p.prod_id
AND s.channel_id = ch.channel_id
-- filter
AND ch.channel_class = 'Direct'
AND co.country_iso_code = 'US'
AND p.prod_category = 'Electronics'
GROUP BY
ch.channel_desc
, co.country_iso_code
, cu.cust_city
, p.prod_category
/

View File

@ -0,0 +1,43 @@
DROP TABLE cons_demo;
CREATE TABLE cons_demo (owner varchar2(100), object_name varchar2(128));
INSERT /*+ APPEND */ INTO cons_demo SELECT owner, object_name FROM dba_objects;
COMMIT;
SELECT COUNT(*) FROM cons_demo;
@x
CREATE INDEX idx1_cons_demo ON cons_demo(owner);
SELECT COUNT(*) FROM cons_demo;
@x
SELECT /*+ INDEX(cons_demo cons_demo(owner)) */ COUNT(*) FROM cons_demo;
ALTER TABLE cons_demo MODIFY owner NOT NULL NOVALIDATE;
INSERT INTO cons_demo VALUES (null, 'x');
SELECT COUNT(*) FROM cons_demo;
@x
ALTER TABLE cons_demo MODIFY owner NULL;
--ALTER TABLE cons_demo MODIFY owner NOT NULL VALIDATE;
--ALTER TABLE cons_demo MODIFY owner NOT NULL DEFERRABLE INITIALLY DEFERRED VALIDATE;
ALTER TABLE cons_demo MODIFY owner NOT NULL DEFERRABLE VALIDATE;
SELECT COUNT(*) FROM cons_demo;
@x
DROP TABLE cons_demo2;
CREATE TABLE cons_demo2 AS SELECT * FROM scott.emp;
ALTER TABLE cons_demo2 ADD CONSTRAINT c2 CHECK (SAL > 500);
SELECT * FROM cons_demo2 WHERE sal = 100;
@x

View File

@ -0,0 +1,40 @@
-- analyze index density (how many rows per leaf block)
-- using SYS_OP_LBID function
-- replace the first argument of SYS_OP_LBID number with the object_id of the index you are scanning
-- also you need to modify the table name and index name hint to query the table/index of your interest
-- make sure that the index is actually accessed in the execution plan (both fast full scan and range/full
-- scans do work, but fast full scan is the fastest if you want to scan through the entire index segment)
--
-- additionally, you can use SAMPLE BLOCK syntax (below) to sample only some index blocks (when using
-- fast full scan)
COL blocks_histogram HEAD "Log(2,blocks) Histogram" FOR A30
SELECT
LPAD(NVL(TO_CHAR(rows_per_block), 'Total:'), 15, ' ') num_rows_in_blk
, blocks
, NVL2(rows_per_block, LPAD('#', LOG(2,blocks), '#'), null) blocks_histogram
FROM (
SELECT
CEIL(num_rows/10) * 10 rows_per_block
, COUNT(*) blocks
FROM (
SELECT /*+ INDEX_FFS(o i99) */
count(*) num_rows
FROM
indexed_objects o -- SAMPLE BLOCK (1000) o
WHERE
owner IS NOT NULL
GROUP BY
SYS_OP_LBID( 82824, 'L', o.ROWID)
)
GROUP BY ROLLUP
( CEIL(num_rows/10) * 10 )
ORDER BY
CEIL(num_rows/10) * 10
)
/

View File

@ -0,0 +1,17 @@
select /*+ index_rs(o o(owner)) */ avg(sysdate - created) days_old
from
indexed_objects o
where
owner = 'SYS'
and object_type = 'PACKAGE'
/
@x
-- Then create an index which satisfies the additional filter column...
-- create index idx2_indexed_objects on indexed_objects (owner, object_type);
-- Then re-create the index with also the column that includes the columns selected in the query
-- drop index idx2_indexed_objects;
-- create index idx2_indexed_objects on indexed_objects (owner, object_type, created);

View File

@ -0,0 +1,23 @@
select
owner, object_type, status, count(*)
from
indexed_objects o
where
owner = 'SYS'
and object_type = 'JAVA CLASS'
and created > sysdate - 3650
group by
owner,object_type,status
order by
status
/
-- Then re-create the index with also the column that we sort/group by
-- drop index idx2_indexed_objects;
-- create index idx2_indexed_objects on indexed_objects (owner, object_type, created, status);
-- And try tho swap the last 2 columns in end of the index:
-- drop index idx2_indexed_objects;
-- create index idx2_indexed_objects on indexed_objects (owner, object_type, status, created);

View File

@ -0,0 +1,12 @@
DROP TABLE selectivity_test;
CREATE TABLE selectivity_test AS
SELECT sysdate - rownum d
FROM dual connect by level <= 365;
@gts selectivity_test
@minmax d selectivity_test
@descxx selectivity_test

View File

@ -0,0 +1,42 @@
SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */
d.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
, SUM(oi.quantity)
, sum(oi.unit_price * oi.quantity) total_price
FROM
oe.orders o
, oe.order_items oi
, oe.products prod
, oe.customers c
, oe.promotions prom
, hr.employees e
, hr.departments d
WHERE
-- joins
o.order_id = oi.order_id
AND oi.product_id = prod.product_id
AND o.promotion_id = prom.promo_id (+)
AND o.customer_id = c.customer_id
AND o.sales_rep_id = e.employee_id
AND d.department_id = e.department_id
-- filters
AND d.department_name = 'Sales'
AND e.first_name = 'William'
AND e.last_name = 'Smith'
AND prod.product_name = 'Mobile Web Phone'
AND c.cust_first_name = 'Gena'
AND c.cust_last_name = 'Harris'
GROUP BY
d.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
ORDER BY
total_price
/

View File

@ -0,0 +1,50 @@
SELECT /*+ leading (dep e o c oi)
use_hash(oi)
xuse_nl(oi)
xindex(oi iii)
NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "C"@"SEL$1")
NO_SWAP_JOIN_INPUTS(@"SEL$5488CC2B" "C"@"MAIN")
opt_param('_optimizer_use_feedback', 'false')
qb_name(main)
*/
dep.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
, SUM(oi.quantity)
, sum(oi.unit_price * oi.quantity) total_price
FROM
hr.departments dep -- 1
, hr.employees e -- 1
, oe.orders o -- ?
, oe.order_items oi -- ?
, oe.products prod -- 1
, oe.customers c -- 1
, oe.promotions prom -- ?
WHERE
-- joins
o.order_id = oi.order_id
AND oi.product_id = prod.product_id
AND o.promotion_id = prom.promo_id (+)
AND o.customer_id = c.customer_id
AND o.sales_rep_id = e.employee_id
AND dep.department_id = e.department_id
-- filters
AND dep.department_name = 'Sales' -- 1 row
AND e.first_name = 'William' -- 1 row
AND e.last_name = 'Smith'
AND prod.product_name = 'Mobile Web Phone' -- 1 row (view)
AND c.cust_first_name = 'Gena' --
AND c.cust_last_name = 'Harris' -- 1 row
GROUP BY
dep.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
ORDER BY
total_price
/

View File

@ -0,0 +1,58 @@
SELECT
/*+ opt_param('_optimizer_use_feedback', 'false')
dynamic_sampling(4) opt_param('_optimizer_use_feedback', 'false')
leading(c d e o oi)
use_hash(o)
use_hash(oi)
index(o)
index(oi)
NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "I"@"SEL$2")
NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "D"@"SEL$2")
*/
d.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
, SUM(oi.quantity)
, sum(oi.unit_price * oi.quantity) total_price
FROM
oe.orders o
, oe.order_items oi
, oe.products prod
, oe.customers c
, oe.promotions prom
, hr.employees e
, hr.departments d
WHERE
-- joins
o.order_id = oi.order_id
AND oi.product_id = prod.product_id
AND o.promotion_id = prom.promo_id (+)
AND o.customer_id = c.customer_id
AND o.sales_rep_id = e.employee_id
AND d.department_id = e.department_id
-- filters
AND d.department_name = 'Sales'
AND e.first_name = 'William'
AND e.last_name = 'Smith'
AND prod.product_name = 'Mobile Web Phone'
AND c.cust_first_name = 'Gena'
AND c.cust_last_name = 'Harris'
AND o.customer_id = 189 -- (select customer_id from oe.customers c2
-- WHERE c2.cust_first_name = 'Gena'
-- AND c2.cust_last_name = 'Harris')
AND oi.customer_id = 189 -- (select customer_id from oe.customers c3
-- WHERE c3.cust_first_name = 'Gena'
-- AND c3.cust_last_name = 'Harris')
GROUP BY
d.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
ORDER BY
total_price
/

View File

@ -0,0 +1,46 @@
SELECT /*+ leading (dep e o)
NO_SWAP_JOIN_INPUTS(@"SEL$5488CC2B" "C"@"MAIN")
opt_param('_optimizer_use_feedback', 'false')
qb_name(main)
*/
dep.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
, SUM(oi.quantity)
, sum(oi.unit_price * oi.quantity) total_price
FROM
hr.departments dep -- 1
, hr.employees e -- 1
, oe.orders o -- ?
, oe.order_items oi -- ?
, oe.products prod -- 1
, oe.customers c -- 1
, oe.promotions prom -- ?
WHERE
-- joins
o.order_id = oi.order_id
AND oi.product_id = prod.product_id
AND o.promotion_id = prom.promo_id (+)
AND o.customer_id = c.customer_id
AND o.sales_rep_id = e.employee_id
AND dep.department_id = e.department_id
-- filters
AND dep.department_name = 'Sales' -- 1 row
AND e.first_name = 'William' -- 1 row
AND e.last_name = 'Smith'
AND prod.product_name = 'Mobile Web Phone' -- 1 row (view)
AND c.cust_first_name = 'Gena' --
AND c.cust_last_name = 'Harris' -- 1 row
GROUP BY
dep.department_name
, e.first_name
, e.last_name
, prod.product_name
, c.cust_first_name
, c.cust_last_name
ORDER BY
total_price
/

View File

@ -0,0 +1,68 @@
INSERT INTO oe.promotions
SELECT 10+rownum promo_id, 'promotion '||to_char(10+rownum)
FROM dual CONNECT BY level < 90
/
INSERT INTO oe.promotions VALUES (100, 'online super-sale');
exec dbms_stats.gather_schema_stats('OE');
exec dbms_stats.create_stat_table('OE', 'STATS_BACKUP');
exec dbms_stats.export_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_01');
CREATE TABLE oe.tmp AS SELECT * FROM oe.orders WHERE 1=0;
INSERT /*+ APPEND */ INTO oe.tmp
SELECT
oe.orders_seq.NEXTVAL
, sysdate -- order date
, 'online' -- order mode
, 189 -- customer id
, 12 -- order status
, 99.95 -- order_total
, 171 -- sales rep
, 100 -- promotion_id
FROM
dual CONNECT BY level <= 100000
/
COMMIT;
INSERT INTO oe.orders (
order_id NOT NULL NUMBER(12)
, order_date NOT NULL TIMESTAMP(6) WITH LOCAL TIME ZONE
, order_mode VARCHAR2(8)
, customer_id NOT NULL NUMBER(6)
, order_status NUMBER(2)
, order_total NUMBER(8,2)
, sales_rep_id NUMBER(6)
, promotion_id
)
SELECT * FROM oe.tmp
ORDER BY
dbms_random.random -- to increase pk clustering factor
/
COMMIT;
BEGIN
FOR i IN (SELECT order_id FROM oe.tmp) LOOP
-- such a lousy loop is needed as there's a "single row" trigger on order_items tab
INSERT INTO oe.order_items (ORDER_ID,PRODUCT_ID,UNIT_PRICE,QUANTITY)
VALUES ( i.order_id, 3337, 9.95, power(2,power(2,dbms_random.value(1,3))) );
-- commit in a loop so i wouldnt blow up my little undo tablespace
COMMIT;
END LOOP;
END;
/
-- save old "bad" stats
exec dbms_stats.export_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_BEGIN');
-- to restore:
-- exec dbms_stats.import_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_BEGIN', NO_INVALIDATE=>FALSE);
-- run the 04_cbo_troubleshoot_1.sql and troubleshoot! :)

21
Tanel/ast/ast_setup.sql Normal file
View File

@ -0,0 +1,21 @@
DEF datafile_dir=/export/home/oracle/oradata/SOL102
CREATE TABLESPACE ast DATAFILE '&datafile_dir/ast.01.dbf' SIZE 200M AUTOEXTEND ON;
CREATE USER ast IDENTIFIED BY ast DEFAULT TABLESPACE ast TEMPORARY TABLESPACE temp;
ALTER USER ast QUOTA UNLIMITED ON ast;
GRANT CREATE SESSION TO ast;
GRANT CONNECT, RESOURCE TO ast;
GRANT SELECT ANY DICTIONARY TO ast;
GRANT EXECUTE ON DBMS_LOCK TO ast;
GRANT EXECUTE ON DBMS_MONITOR TO ast;
GRANT EXECUTE ON DBMS_SQLTUNE TO ast;
GRANT EXECUTE ON DBMS_WORKLOAD_REPOSITORY TO ast;
-- for testing
GRANT DBA TO ast;

View File

@ -0,0 +1,73 @@
CREATE TABLE test_objects AS SELECT * FROM dba_objects;
CREATE TABLE test_objects10 AS SELECT * FROM test_objects WHERE rownum <= 10;
CREATE TABLE test_objects100 AS SELECT * FROM test_objects WHERE rownum <= 100;
CREATE TABLE test_users AS SELECT * FROM all_users;
CREATE TABLE indexed_objects AS SELECT * FROM dba_objects;
CREATE UNIQUE INDEX pk_obj_id ON indexed_objects (object_id);
CREATE INDEX idx_owner_name ON indexed_objects(owner,object_name);
CREATE TABLE dummy1 AS SELECT 1 a, 'one' b FROM dual;
CREATE TABLE dummy2 AS SELECT 1 a, 'one' b FROM dual;
CREATE TABLE indexed_source AS SELECT * FROM dba_source;
CREATE INDEX idx1_indexed_source ON indexed_source (owner,name,line);
EXEC DBMS_STATS.SET_PARAM('METHOD_OPT', 'FOR ALL COLUMNS SIZE REPEAT');
--EXEC DBMS_STATS.GATHER_SCHEMA_STATS('AST');
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(user);
-- deterministic PL/SQL functions can utilize PL/SQL function result caching
CREATE OR REPLACE FUNCTION my_multiply(a IN NUMBER, b IN NUMBER) RETURN NUMBER AS
BEGIN
DBMS_OUTPUT.PUT_LINE('x');
RETURN a * b;
END;
/
CREATE OR REPLACE FUNCTION my_multiply_d (a IN NUMBER, b IN NUMBER) RETURN NUMBER
DETERMINISTIC
AS
BEGIN
RETURN a * b;
END;
/
CREATE OR REPLACE FUNCTION my_sqrt (a IN NUMBER) RETURN NUMBER
AS
BEGIN
RETURN SQRT(a);
END;
/
-- select max(my_sqrt(mod(rownum,100))) from dual connect by level<=100000;
CREATE OR REPLACE FUNCTION my_sqrt_d (a IN NUMBER) RETURN NUMBER
DETERMINISTIC
AS
BEGIN
RETURN SQRT(a);
END;
/
-- additional stuff in scott and other standard demo schemas
create or replace view scott.high_pay_depts as
select
*
from
scott.dept d
where
exists (select 1
from
scott.emp e
where
e.deptno = d.deptno
and e.sal > 4500
)
/

View File

@ -0,0 +1,22 @@
-- starting from 10g, the push_subq hint must be specified in the subquery block
-- you wish to push earlier (or with the @subq hint addressing)
select
e.*
, d.dname
from
scott.emp e
, scott.dept d
where
e.deptno = d.deptno
and exists (
select /*+ no_unnest push_subq */
1
from
scott.bonus b
where
b.ename = e.ename
and b.job = e.job
)
/

116
Tanel/ast/test_plan.txt Normal file
View File

@ -0,0 +1,116 @@
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Writes | OMem | 1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2 |00:00:06.65 | 50499 | 2086 | 1041 | | | |
| 1 | TEMP TABLE TRANSFORMATION | | 1 | | 2 |00:00:06.65 | 50499 | 2086 | 1041 | | | |
| 2 | LOAD AS SELECT | | 1 | | 0 |00:00:06.32 | 48405 | 2 | 1041 | 530K| 530K| 530K (0)|
|* 3 | TABLE ACCESS BY INDEX ROWID | SUM$ | 3 | 1 | 0 |00:00:00.01 | 3 | 0 | 0 | | | |
|* 4 | INDEX UNIQUE SCAN | I_SUM$_1 | 3 | 1 | 3 |00:00:00.01 | 2 | 0 | 0 | | | |
| 5 | TABLE ACCESS BY INDEX ROWID | OBJ$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 6 | INDEX RANGE SCAN | I_OBJ1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 7 | FILTER | | 1 | | 73027 |00:00:05.77 | 47342 | 2 | 0 | | | |
|* 8 | HASH JOIN | | 1 | 74860 | 74936 |00:00:00.79 | 948 | 0 | 0 | 1063K| 1063K| 1234K (0)|
| 9 | TABLE ACCESS FULL | USER$ | 1 | 104 | 104 |00:00:00.01 | 7 | 0 | 0 | | | |
|* 10 | HASH JOIN | | 1 | 74860 | 74936 |00:00:00.51 | 941 | 0 | 0 | 981K| 981K| 1254K (0)|
| 11 | INDEX FULL SCAN | I_USER2 | 1 | 104 | 104 |00:00:00.01 | 1 | 0 | 0 | | | |
|* 12 | TABLE ACCESS FULL | OBJ$ | 1 | 74860 | 74936 |00:00:00.18 | 940 | 0 | 0 | | | |
|* 13 | TABLE ACCESS BY INDEX ROWID | IND$ | 4995 | 1 | 4087 |00:00:00.04 | 933 | 0 | 0 | | | |
|* 14 | INDEX UNIQUE SCAN | I_IND1 | 4995 | 1 | 4995 |00:00:00.01 | 134 | 0 | 0 | | | |
|* 15 | HASH JOIN | | 25955 | 1 | 24502 |00:00:03.60 | 26661 | 0 | 0 | 981K| 981K| 1051K (0)|
|* 16 | INDEX RANGE SCAN | I_OBJAUTH1 | 25955 | 1 | 24747 |00:00:00.19 | 26661 | 0 | 0 | | | |
| 17 | FIXED TABLE FULL | X$KZSRO | 24589 | 100 | 27424 |00:00:00.18 | 0 | 0 | 0 | | | |
|* 18 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 19 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
| 20 | NESTED LOOPS | | 1645 | 1 | 96 |00:00:00.01 | 1865 | 0 | 0 | | | |
|* 21 | INDEX RANGE SCAN | I_OBJAUTH1 | 1645 | 1 | 133 |00:00:00.01 | 1865 | 0 | 0 | | | |
|* 22 | FIXED TABLE FULL | X$KZSRO | 133 | 1 | 96 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 23 | HASH JOIN | | 2845 | 1 | 1478 |00:00:00.48 | 3051 | 0 | 0 | 990K| 990K| 485K (0)|
|* 24 | INDEX RANGE SCAN | I_OBJAUTH1 | 2845 | 1 | 1551 |00:00:00.02 | 3051 | 0 | 0 | | | |
| 25 | FIXED TABLE FULL | X$KZSRO | 1493 | 100 | 1853 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 26 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
| 27 | NESTED LOOPS | | 1255 | | 0 |00:00:00.35 | 7429 | 0 | 0 | | | |
| 28 | NESTED LOOPS | | 1255 | 1 | 0 |00:00:00.35 | 7429 | 0 | 0 | | | |
| 29 | NESTED LOOPS | | 1255 | 1 | 0 |00:00:00.35 | 7429 | 0 | 0 | | | |
| 30 | NESTED LOOPS | | 1255 | 1 | 28865 |00:00:00.25 | 4702 | 0 | 0 | | | |
| 31 | MERGE JOIN CARTESIAN | | 1255 | 1 | 28865 |00:00:00.12 | 3445 | 0 | 0 | | | |
|* 32 | INDEX RANGE SCAN | I_OBJ5 | 1255 | 1 | 1255 |00:00:00.01 | 3445 | 0 | 0 | | | |
| 33 | BUFFER SORT | | 1255 | 100 | 28865 |00:00:00.07 | 0 | 0 | 0 | 2048 | 2048 | 2048 (0)|
| 34 | FIXED TABLE FULL | X$KZSRO | 1255 | 100 | 28865 |00:00:00.03 | 0 | 0 | 0 | | | |
|* 35 | INDEX RANGE SCAN | I_USER2 | 28865 | 1 | 28865 |00:00:00.07 | 1257 | 0 | 0 | | | |
|* 36 | INDEX RANGE SCAN | I_OBJAUTH1 | 28865 | 1 | 0 |00:00:00.06 | 2727 | 0 | 0 | | | |
|* 37 | INDEX RANGE SCAN | I_DEPENDENCY1 | 0 | 3 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 38 | TABLE ACCESS BY INDEX ROWID | DEPENDENCY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 39 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
| 40 | NESTED LOOPS | | 617 | 1 | 7 |00:00:00.01 | 1923 | 0 | 0 | | | |
| 41 | NESTED LOOPS | | 617 | 1 | 19 |00:00:00.01 | 1923 | 0 | 0 | | | |
|* 42 | TABLE ACCESS BY INDEX ROWID | TRIGGER$ | 617 | 1 | 592 |00:00:00.01 | 1245 | 0 | 0 | | | |
|* 43 | INDEX UNIQUE SCAN | I_TRIGGER2 | 617 | 1 | 617 |00:00:00.01 | 628 | 0 | 0 | | | |
|* 44 | INDEX RANGE SCAN | I_OBJAUTH1 | 592 | 1 | 19 |00:00:00.01 | 678 | 0 | 0 | | | |
|* 45 | FIXED TABLE FULL | X$KZSRO | 19 | 1 | 7 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 46 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
| 47 | NESTED LOOPS | | 240 | | 0 |00:00:00.07 | 1471 | 0 | 0 | | | |
| 48 | NESTED LOOPS | | 240 | 1 | 0 |00:00:00.07 | 1471 | 0 | 0 | | | |
| 49 | NESTED LOOPS | | 240 | 1 | 0 |00:00:00.07 | 1471 | 0 | 0 | | | |
| 50 | NESTED LOOPS | | 240 | 1 | 5727 |00:00:00.05 | 926 | 0 | 0 | | | |
| 51 | MERGE JOIN CARTESIAN | | 240 | 1 | 5727 |00:00:00.02 | 684 | 0 | 0 | | | |
|* 52 | INDEX RANGE SCAN | I_OBJ5 | 240 | 1 | 249 |00:00:00.01 | 684 | 0 | 0 | | | |
| 53 | BUFFER SORT | | 249 | 100 | 5727 |00:00:00.01 | 0 | 0 | 0 | 2048 | 2048 | 2048 (0)|
| 54 | FIXED TABLE FULL | X$KZSRO | 240 | 100 | 5520 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 55 | INDEX RANGE SCAN | I_USER2 | 5727 | 1 | 5727 |00:00:00.01 | 242 | 0 | 0 | | | |
|* 56 | INDEX RANGE SCAN | I_OBJAUTH1 | 5727 | 1 | 0 |00:00:00.01 | 545 | 0 | 0 | | | |
|* 57 | INDEX RANGE SCAN | I_DEPENDENCY1 | 0 | 3 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 58 | TABLE ACCESS BY INDEX ROWID | DEPENDENCY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 59 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 60 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 61 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 62 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 63 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 64 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 65 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 66 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 67 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
| 68 | VIEW | | 52 | 1 | 52 |00:00:00.01 | 0 | 0 | 0 | | | |
| 69 | FAST DUAL | | 52 | 1 | 52 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 70 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 71 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 72 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 73 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 74 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 75 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 76 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 77 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 78 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 79 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 80 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 81 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 82 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 83 | INDEX RANGE SCAN | I_OBJAUTH1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 84 | FIXED TABLE FULL | X$KZSRO | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 85 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 86 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 87 | INDEX RANGE SCAN | I_OBJAUTH1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 88 | FIXED TABLE FULL | X$KZSRO | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 89 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 90 | VIEW | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 91 | SORT GROUP BY | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | 73728 | 73728 | |
| 92 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 93 | MERGE JOIN CARTESIAN | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 94 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 95 | INDEX UNIQUE SCAN | I_OLAP_CUBES$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 96 | TABLE ACCESS BY INDEX ROWID| OLAP_DIMENSIONALITY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|* 97 | INDEX RANGE SCAN | I_OLAP_DIMENSIONALITY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 98 | BUFFER SORT | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | 73728 | 73728 | |
| 99 | INDEX FULL SCAN | I_OLAP_CUBE_DIMENSIONS$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|*100 | INDEX RANGE SCAN | I_OBJ1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 101 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|*102 | INDEX FULL SCAN | I_USER2 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
|*103 | INDEX RANGE SCAN | I_OBJ4 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | |
| 104 | UNION-ALL | | 1 | | 2 |00:00:00.33 | 2091 | 2084 | 0 | | | |
| 105 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.18 | 1047 | 1042 | 0 | | | |
| 106 | VIEW | | 1 | 31935 | 73027 |00:00:00.13 | 1047 | 1042 | 0 | | | |
| 107 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6637_489CA79 | 1 | 31935 | 73027 |00:00:00.07 | 1047 | 1042 | 0 | | | |
| 108 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.15 | 1044 | 1042 | 0 | | | |
| 109 | VIEW | | 1 | 31935 | 73027 |00:00:00.12 | 1044 | 1042 | 0 | | | |
| 110 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6637_489CA79 | 1 | 31935 | 73027 |00:00:00.05 | 1044 | 1042 | 0 | | | |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff

10920
Tanel/ast/trace/a.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
#!/bin/sh
cat $1 | awk '
function p(str) { printf("%6d: %s\n", NR, str) ; return 0 }
/Now joining|Join order/{ p($0) }
/^Best::/{ x=1 ; p($0) }
(!/Best::/ && x ==1) { p($0) ; x=0 }
'

0
Tanel/aud.sql Normal file
View File

1
Tanel/audo.sql Normal file
View File

@ -0,0 +1 @@
@@audo2 "%&1%" "%&2%"

10
Tanel/audo2.sql Normal file
View File

@ -0,0 +1,10 @@
select
*
from
dba_audit_object
where
upper(owner) like upper('&1')
and upper(obj_name) like upper('&2')
order by
timestamp desc
/

View File

@ -0,0 +1,19 @@
SELECT
CAST(begin_interval_time AS DATE) begin_time
, event_name
, time_waited_micro
, total_waits
, total_timeouts
, time_waited_micro/nullif(total_waits,0) avg_wait_micro
FROM
dba_hist_snapshot
NATURAL JOIN
dba_hist_system_event
WHERE
event_name IN ('log file sync', 'log file parallel write', 'ksfd: async disk IO')
AND begin_interval_time > SYSDATE - 30
ORDER BY
event_name
, begin_time
/

18
Tanel/awr/other_xml.sql Normal file
View File

@ -0,0 +1,18 @@
select
-- sql_id
-- , child_number
-- , plan_hash_value
substr(extractvalue(value(d), '/hint'), 1, 100) as outline_hints
from
xmltable('/*/outline_data/hint'
passing (
select
xmltype(other_xml) as xmlval
from
dba_hist_sql_plan
where
sql_id = '&1'
and other_xml is not null
)
) d
/

11
Tanel/ba.sql Normal file
View File

@ -0,0 +1,11 @@
col ba_blsiz head BLSZ for 99999
select
-- addr,
indx,hladdr,
blsiz ba_blsiz,
flag,lru_flag,ts#,file#,
dbarfil,dbablk,class,state,mode_held,obj,tch
from x$bh where ba = hextoraw(lpad('&1',16,0))
/

19
Tanel/bclass.sql Normal file
View File

@ -0,0 +1,19 @@
-- blcass.sql by Tanel Poder (http://blog.tanelpoder.com)
--
-- Usage: @bclass <block_class#>
--with undostart as (select r from (select rownum r, class from v$waitstat) where class = 'undo header')
select class, r undo_segment_id from (
select class, null r
from (select class, rownum r from v$waitstat)
where r = bitand(&1,to_number('FFFF','XXXX'))
union all
select
decode(mod(bitand(&1,to_number('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') type
, trunc((bitand(&1,to_number('FFFF','XXXX')) - 17)/2) undoseg_id
from
dual
)
where rownum = 1
/

1
Tanel/bg.sql Normal file
View File

@ -0,0 +1 @@
@@bg2 "%&1%"

18
Tanel/bg2.sql Normal file
View File

@ -0,0 +1,18 @@
select /*+ ordered use_hash(s) */
b.paddr
, s.saddr
, p.spid
, p.pid
, s.sid
, b.name
, b.description
from
v$bgprocess b
, v$process p
, v$session s
where
b.paddr = p.addr
and b.paddr = s.paddr
and p.addr = s.paddr
and (lower(b.name) like lower('&1') or lower(b.description) like lower('&1'))
/

55
Tanel/bhdo.sql Normal file
View File

@ -0,0 +1,55 @@
SELECT
hladdr
-- , blsiz
-- , nxt_hash
-- , prv_hash
-- , nxt_repl
-- , prv_repl
, flag
, rflag
, sflag
, lru_flag
, ts#
, file#
-- , dbarfil
, dbablk
, class
, state
, mode_held
, changes
, cstate
, le_addr
, dirty_queue
, set_ds
, obj
, ba
, cr_scn_bas
, cr_scn_wrp
, cr_xid_usn
, cr_xid_slt
, cr_xid_sqn
, cr_uba_fil
, cr_uba_blk
, cr_uba_seq
, cr_uba_rec
, cr_sfl
, cr_cls_bas
, cr_cls_wrp
, lrba_seq
, lrba_bno
, hscn_bas
, hscn_wrp
, hsub_scn
, us_nxt
, us_prv
, wa_nxt
, wa_prv
, obj_flag
, tch
, tim
FROM
x$bh
WHERE
obj IN (&1)
/

43
Tanel/bhla.sql Normal file
View File

@ -0,0 +1,43 @@
--------------------------------------------------------------------------------
--
-- File name: bhla.sql (Buffer Headers by Latch Address)
-- Purpose: Report which blocks are in buffer cache, protected by a cache
-- buffers chains child latch
--
-- Author: Tanel Poder
-- Copyright: (c) http://www.tanelpoder.com
--
-- Usage: @bhla <child latch address>
-- @bhla 27E5A780
--
--
-- Other: This script reports all buffers "under" the given cache buffers
-- chains child latch, their corresponding segment names and
-- touch counts (TCH).
--
--------------------------------------------------------------------------------
col bhla_object head object for a40 truncate
col bhla_DBA head DBA for a20
select /*+ ORDERED */
trim(to_char(bh.flag, 'XXXXXXXX')) ||':'||
trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg,
bh.obj,
o.object_type,
o.owner||'.'||o.object_name bhla_object,
bh.tch,
file# ||' '||dbablk bhla_DBA,
bh.class,
bh.state,
bh.mode_held,
bh.dirty_queue DQ
from
x$bh bh,
dba_objects o
where
bh.obj = o.data_object_id
and hladdr = hextoraw(lpad('&1', vsize(hladdr)*2 , '0'))
order by
tch asc
/

27
Tanel/bhobjects.sql Normal file
View File

@ -0,0 +1,27 @@
col bhobjects_owner head OWNER for a30
col bhobjects_object_name head OBJECT_NAME for a30
col bhobjects_subobject_name head SUBOBJECT_NAME for a30
col bhobjects_object_type head OBJECT_TYPE for a20 word_wrap
select * from (
select
count(*) buffers
, o.owner bhobjects_owner
, o.object_name bhobjects_object_name
, o.subobject_name bhobjects_subobject_name
, o.object_type bhobjects_object_type
from
v$bh bh
, dba_objects o
where
bh.objd = o.data_object_id
group by
o.owner, o.object_name, o.subobject_name, o.object_type
order by
buffers desc
)
where rownum <=30
/

75
Tanel/bhobjects2.sql Normal file
View File

@ -0,0 +1,75 @@
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON
col bhobjects_owner head OWNER for a30
col bhobjects_object_name head OBJECT_NAME for a30
col bhobjects_subobject_name head SUBOBJECT_NAME for a30
col bhobjects_object_type head OBJECT_TYPE for a20 word_wrap
select * from v$sgainfo;
select * from v$sga_dynamic_components;
select * from v$buffer_pool;
SELECT * FROM (
SELECT
TO_CHAR(ROUND(RATIO_TO_REPORT( ROUND(SUM(ts.block_size) / 1048576) ) OVER () * 100, 1), '999.9')||' %' "%BUFCACHE"
, ROUND(SUM(ts.block_size) / 1048576) MB
--, count(*) buffers
, bh.objd dataobj_id
, ts.tablespace_name
, o.owner bhobjects_owner
, o.object_name bhobjects_object_name
, o.subobject_name bhobjects_subobject_name
, o.object_type bhobjects_object_type
FROM
v$bh bh
, (SELECT data_object_id
, MIN(owner) owner
, MIN(object_name) object_name
, MIN(subobject_name) subobject_name
, MIN(object_type) object_type
, COUNT(*) num_duplicates
FROM dba_objects GROUP BY data_object_id) o
, v$tablespace vts
, dba_tablespaces ts
WHERE
bh.objd = o.data_object_id (+)
AND bh.ts# = vts.ts#
AND vts.name = ts.tablespace_name
GROUP BY
bh.objd, ts.tablespace_name, o.owner, o.object_name, o.subobject_name, o.object_type
ORDER BY
mb DESC
)
WHERE ROWNUM <=30
/
SELECT * FROM (
SELECT
TO_CHAR(ROUND(RATIO_TO_REPORT( ROUND(SUM(ts.block_size) / 1048576) ) OVER () * 100, 1), '999.9')||' %' "%BUFCACHE"
, ROUND(SUM(ts.block_size) / 1048576) MB
, ts.tablespace_name
, bh.status
FROM
v$bh bh
, (SELECT data_object_id
, MIN(owner) owner
, MIN(object_name) object_name
, MIN(subobject_name) subobject_name
, MIN(object_type) object_type
, COUNT(*) num_duplicates
FROM dba_objects GROUP BY data_object_id) o
, v$tablespace vts
, dba_tablespaces ts
WHERE
bh.objd = o.data_object_id (+)
AND bh.ts# = vts.ts#
AND vts.name = ts.tablespace_name
GROUP BY
ts.tablespace_name
, bh.status
ORDER BY
mb DESC
)
WHERE ROWNUM <=30
/

12
Tanel/bitmask.sql Normal file
View File

@ -0,0 +1,12 @@
select
level - 1 bit
,DECODE(bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)),0,0,1) is_set
,to_char(power(2,level-1),'XXXXXXXXXXXXXXXX') val_hex
,bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)) val_dec
from
dual
where
DECODE(bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)),0,0,1) != 0
connect by
level <= (select log(2,to_number('&1','XXXXXXXXXXXXXXXX'))+2 from dual)
/

84
Tanel/bufprof.sql Normal file
View File

@ -0,0 +1,84 @@
--------------------------------------------------------------------------------
--
-- File name: BufProf 1.03 ( Buffer Get Profiler )
-- Purpose: Display buffer gets done by a session and their reason
--
-- Author: Tanel Poder
-- Copyright: (c) http://www.tanelpoder.com
--
-- Usage: @bufprof <SID> <#samples>
-- @bufprof 142 1000
--
-- Other: This is an experimental script, which may or may not work for you
-- It's dependent on the size of the cache buffers handles array
-- (db_handles), so if you have lots of sessions configured
-- scanning this repeatedly may be slow.
--
--------------------------------------------------------------------------------
--DEF bufprof_cols=KCBBFSO_TYP,KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),KCBBFWHR,KCBBFWHY,w.KCBWHDES,KCBBPBH,KCBBPBF,m.ksmmmval,p.sid,p.username,p.program
--DEF bufprof_cols=KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES,KCBBPBF,m.ksmmmval,p.sid
--DEF bufprof_cols=p.sid,kcbbfwhy,kcbbfso_flg,TO_CHAR(kcbbfflg,'XXXXXXXX'),TO_CHAR(KCBBFCM,'XXXXXXXX'),KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES
DEF bufprof_cols=p.sid,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES
COL kcbwhdes FOR A35
COL bufprof_addrlen NEW_VALUE addrlen
COL bufprof_addrmask NEW_VALUE addrmask
SET TERMOUT OFF
SELECT VSIZE(addr) bufprof_addrlen, LPAD('X',VSIZE(addr)*2,'X') bufprof_addrmask FROM x$kcbsw WHERE ROWNUM = 1;
SET TERMOUT ON
DEF num_samples=&2
PROMPT
PROMPT -- BufProf 1.03 (experimental) by Tanel Poder ( http://www.tanelpoder.com )
PROMPT
WITH
s AS (SELECT /*+ NO_MERGE MATERIALIZE */ 1 r FROM DUAL CONNECT BY LEVEL <= &num_samples),
p AS (SELECT p.addr paddr, s.saddr saddr, s.sid sid, p.spid spid, s.username, s.program, s.terminal, s.machine
FROM v$process p, v$session s WHERE s.paddr = p.addr),
t1 AS (SELECT hsecs FROM v$timer),
samples AS (
SELECT /*+ ORDERED USE_NL(bf) USE_NL(m) USE_NL(p) USE_NL(w) */
&bufprof_cols,
m.ksmmmval proc_so,
COUNT(*) total_samples
FROM
s, -- this trick is here to avoid an ORA-600 in kkqcbydrv:1
(SELECT /*+ NO_MERGE */
b.*,
HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(b.kcbbfso_own),'&addrmask')+&addrlen*2,'&addrmask')) ) call_so -- call state object
FROM x$kcbbf b
WHERE 1=1
AND bitand(b.KCBBFSO_FLG,1) = 1
--AND b.KCBBFCM > 0
) bf,
X$KSMMEM m,
p,
x$kcbwh w
WHERE
1=1
AND bf.call_so = m.addr
AND m.ksmmmval = p.paddr -- compare the fetched word to process state object address
AND BITAND(bf.KCBBFSO_FLG,1) = 1 -- buffer handle in use
AND bf.kcbbfwhr = w.indx
--AND (p.sid LIKE '&1' OR p.sid IS NULL)
AND (p.sid LIKE '&1')
AND (p.sid != (select sid from v$mystat where rownum = 1))
GROUP BY &bufprof_cols , m.ksmmmval
),
t2 AS (SELECT hsecs FROM v$timer)
SELECT /*+ ORDERED */
s.*
, (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &num_samples active_pct
FROM
t1,
samples s,
t2
ORDER BY
s.total_samples DESC
/

59
Tanel/bufprof_wrong.sql Normal file
View File

@ -0,0 +1,59 @@
--DEF bufprof_cols=KCBBFSO_TYP,KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),KCBBFWHR,KCBBFWHY,w.KCBWHDES,KCBBPBH,KCBBPBF,m.ksmmmval,p.sid,p.username,p.program
--DEF bufprof_cols=KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES,KCBBPBF,m.ksmmmval,p.sid
DEF bufprof_cols=kcbbfso_own,p.sid,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES
COL kcbwhdes FOR A30
COL bufprof_addrlen NEW_VALUE addrlen
COL bufprof_addrmask NEW_VALUE addrmask
SET TERMOUT OFF
SELECT VSIZE(addr) bufprof_addrlen, LPAD('X',VSIZE(addr)*2,'X') bufprof_addrmask FROM x$kcbsw WHERE ROWNUM = 1;
SET TERMOUT ON
DEF num_samples=&2
WITH
s AS (SELECT /*+ NO_MERGE MATERIALIZE */ 1 r FROM DUAL CONNECT BY LEVEL <= &num_samples),
p AS (SELECT p.addr paddr, s.saddr saddr, s.sid sid, p.spid spid, s.username, s.program, s.terminal, s.machine
FROM v$process p, v$session s WHERE s.paddr = p.addr),
t1 AS (SELECT hsecs FROM v$timer),
samples AS (
SELECT /*+ ORDERED USE_NL(bf) USE_NL(m) USE_NL(b) */
&bufprof_cols,
COUNT(*) total_samples
FROM
s, -- this trick is here to avoid an ORA-600 in kkqcbydrv:1
(SELECT /*+ NO_MERGE */ caddr top_so, bf.*, m.* FROM
(SELECT /*+ NO_MERGE */
b.*,
HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(b.kcbbfso_own),'&addrmask')+&addrlen*2,'&addrmask')) ) caddr -- call SO address
FROM x$kcbbf b
WHERE bitand(b.KCBBFSO_FLG,1) = 1
) bf,
x$ksmmem m
WHERE
m.addr = bf.caddr
AND BITAND(bf.KCBBFSO_FLG,1) = 1 -- buffer handle in use
) b,
p,
x$kcbwh w
WHERE
--m.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(bf.KCBBFSO_OWN),'&addrmask')+&addrlen,'&addrmask')) )
--m.addr = bf.KCBBFSO_OWN
b.top_SO = p.paddr(+)
AND b.kcbbfwhr = w.indx
AND (p.sid LIKE '&1' OR p.sid IS NULL)
GROUP BY &bufprof_cols
),
t2 AS (SELECT hsecs FROM v$timer)
SELECT /*+ ORDERED */
s.*
, (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &num_samples active_pct
FROM
t1,
samples s,
t2
ORDER BY
s.total_samples DESC
/

54
Tanel/c.sql Normal file
View File

@ -0,0 +1,54 @@
col c_objtype head OBJTYPE for a20
col c_kglhdnsp head NAMESPACE for a20
col c_kglnaobj head SQL_TEXT for a40 word_wrap &1
col c_kglnaown head OWNER for a25 word_wrap &1
col c_kglnadlk head DB_LINK for a25 word_wrap &1
select /*+ ORDERED USE_NL(o) */
kglhdadr,
kglhdpar,
kglnatim tstamp,
-- kglnaptm prev_tstamp,
-- decode(kglhdnsp,0,'CURSOR',1,'TABLE/PROCEDURE',2,'BODY',3,'TRIGGER',
-- 4,'INDEX',5,'CLUSTER',6,'OBJECT',13,'JAVA SOURCE',14,'JAVA RESOURCE', 15,'REPLICATED TABLE OBJECT',
-- 16,'REPLICATION INTERNAL PACKAGE', 17,'CONTEXT POLICY',18,'PUB_SUB',19,'SUMMARY',20,'DIMENSION',
-- 21,'APP CONTEXT',22,'STORED OUTLINE',23,'RULESET',24,'RSRC PLAN', 25,'RSRC CONSUMER GROUP',
-- 26,'PENDING RSRC PLAN',27,'PENDING RSRC CONSUMER GROUP', 28,'SUBSCRIPTION',29,'LOCATION',30,'REMOTE OBJECT',
-- 31,'SNAPSHOT METADATA',32,'JAVA SHARED DATA',33,'SECURITY PROFILE', 'INVALID NAMESPACE') c_kglhdnsp,
decode(bitand(kglobflg,3),0,'NOT LOADED',2,'NON-EXISTENT',3,'INVALID STATUS',
decode(kglobtyp,0,'CURSOR',1,'INDEX',2,'TABLE',3,'CLUSTER',4,'VIEW', 5,'SYNONYM',6,'SEQUENCE',7,'PROCEDURE',
8,'FUNCTION',9,'PACKAGE',10, 'NON-EXISTENT',11,'PACKAGE BODY',12,'TRIGGER',13,'TYPE',14,'TYPE BODY',
15,'OBJECT',16,'USER',17,'DBLINK',18,'PIPE',19,'TABLE PARTITION', 20,'INDEX PARTITION',21,'LOB',22,'LIBRARY',
23,'DIRECTORY',24,'QUEUE', 25,'INDEX-ORGANIZED TABLE',26,'REPLICATION OBJECT GROUP', 27,'REPLICATION PROPAGATOR',
28,'JAVA SOURCE',29,'JAVA CLASS',30,'JAVA RESOURCE',31,'JAVA JAR', 32,'INDEX TYPE',33, 'OPERATOR',
34,'TABLE SUBPARTITION',35,'INDEX SUBPARTITION', 36, 'REPLICATED TABLE OBJECT',37,'REPLICATION INTERNAL PACKAGE',
38,'CONTEXT POLICY',39,'PUB_SUB',40,'LOB PARTITION',41,'LOB SUBPARTITION', 42,'SUMMARY',43,'DIMENSION',
44,'APP CONTEXT',45,'STORED OUTLINE',46,'RULESET', 47,'RSRC PLAN',48,'RSRC CONSUMER GROUP',49,'PENDING RSRC PLAN',
50,'PENDING RSRC CONSUMER GROUP',51,'SUBSCRIPTION',52,'LOCATION', 53,'REMOTE OBJECT',54,'SNAPSHOT METADATA',
55,'IFS', 56,'JAVA SHARED DATA',57,'SECURITY PROFILE','INVALID TYPE')) as cc_objtype,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 heapsize,
kglhdldc,
kglhdexc,
kglhdlkc,
kglobpc0,
decode(kglhdkmk,0,'NO','YES'),
kglhdclt,
kglhdivc,
kglhdkmk,
kglnaown c_kglnaown,
kglnaobj c_kglnaobj,
kglnadlk c_kglnadlk
from
v$open_cursor c,
x$kglob o
where
c.hash_Value = o.kglnahsh
and c.address = o.kglhdadr
--and o.kglnaobj = 'select /*tanel*/ * from dual'
--and c.sid = (select sid from v$mystat where rownum = 1)
and c.sid in (&1)
--kglhdadr in (
-- select /**/ address from v$open_cursor
-- where sid = (select sid from v$mystat where rownum = 1)
-- )
/

53
Tanel/calc.sql Normal file
View File

@ -0,0 +1,53 @@
--------------------------------------------------------------------------------
--
-- File name: calc.sql
-- Purpose: Basic calculator and dec/hex converter
--
-- Author: Tanel Poder
-- Copyright: (c) http://www.tanelpoder.com
--
-- Usage: @calc <num1> <operation> <num2>
-- @calc 10 + 10
-- @calc 10 + 0x10
-- @calc 0xFFFF - 0x5F
-- @calc xBB * 1234
-- Other:
-- Can calculate only 2 operands a time
-- You can use just "x" instead of "0x" for indicating hex numbers
--
--------------------------------------------------------------------------------
COL calc_dec HEAD "DEC" FOR 9999999999999999999.999999
COL calc_hex HEAD "HEX" FOR A20 JUSTIFY RIGHT
with
p1 as (
select case
when lower('&1') like '%x%' then 'XXXXXXXXXXXXXXXXXX'
else '999999999999999999999999999.9999999999'
end
format
from dual
),
p3 as (
select case
when lower('&3') like '%x%' then 'XXXXXXXXXXXXXXXXXX'
else '999999999999999999999999999.9999999999'
end
format
from dual
)
select
-- decimal
to_number(substr('&1',instr(upper('&1'),'X')+1), p1.format)
&2
to_number(substr('&3',instr(upper('&3'),'X')+1), p3.format) calc_dec,
-- hex
to_char( to_number(substr('&1',instr(upper('&1'),'X')+1), p1.format)
&2
to_number(substr('&3',instr(upper('&3'),'X')+1), p3.format)
, 'XXXXXXXXXXXXXXXXXXX') calc_hex
from
p1,p3
/

208
Tanel/cbo_helper.sql Normal file
View File

@ -0,0 +1,208 @@
begin
for i in (select value from v$parameter where name = 'user_dump_dest') loop
execute immediate 'create or replace directory e2sn_udump as '''||i.value||'''';
end loop;
end;
/
create or replace package e2sn_monitor as
function get_trace_file (file_name in varchar2) return dbms_debug_vc2coll pipelined;
function get_session_trace ( p_sid in number default sys_context('userenv','sid') ) return dbms_debug_vc2coll pipelined;
procedure cbo_trace_on;
procedure cbo_trace_off;
procedure sql_trace_on (p_waits in boolean default true, p_binds in boolean default true);
procedure sql_trace_off;
procedure set_tracefile_identifier(p_text in varchar2);
function trace_dump (p_exec_statement in varchar2) return dbms_debug_vc2coll pipelined;
function test (p_select_statement in varchar2 default 'select count(*) from dba_segments') return dbms_debug_vc2coll pipelined;
end e2sn_monitor;
/
create or replace package body e2sn_monitor as
procedure sql_trace_on (p_waits in boolean default true, p_binds in boolean default true)
as
begin
execute immediate 'alter session set events ''10046 trace name context forever, level 12''';
--dbms_monitor.session_trace_enable(waits=>p_waits, binds=>p_binds);
end; -- sql_trace_on
procedure sql_trace_off
as
begin
execute immediate 'alter session set events ''10046 trace name context off''';
--dbms_monitor.session_trace_disable;
end; -- sql_trace_off
procedure cbo_trace_on
as
begin
--dbms_output.put_line('setting 10053');
execute immediate 'alter session set events ''10053 trace name context forever, level 1''';
--execute immediate 'alter session set "_optimizer_trace"=all';
--dbms_output.put_line('event 10053 set');
end cbo_trace_on;
procedure cbo_trace_off
as
begin
execute immediate 'alter session set events ''10053 trace name context off''';
--execute immediate 'alter session set "_optimizer_trace"=none';
end cbo_trace_off;
procedure set_tracefile_identifier(p_text in varchar2)
as
begin
dbms_output.put_line('trci='||p_text);
execute immediate 'alter session set tracefile_identifier='||p_text;
end;
function trace_dump (p_exec_statement in varchar2) return dbms_debug_vc2coll pipelined
as
j number;
l_prefix varchar2(100);
begin
l_prefix := upper('CBOHELP_'||to_char(sysdate, 'YYYYMMDD_HH24_MI_SS'));
set_tracefile_identifier(l_prefix);
--cbo_trace_on;
--sql_trace_on;
execute immediate p_exec_statement ||' /* E2SN CBO helper: '||l_prefix||'*/ ';
dbms_output.put_line(j);
--sql_trace_off;
--cbo_trace_off;
for i in (select column_value from table(e2sn_monitor.get_session_trace)) loop
pipe row (i.column_value);
end loop;
end trace_dump;
function test (p_select_statement in varchar2 default 'select count(*) from dba_segments') return dbms_debug_vc2coll pipelined
as
j number;
l_prefix varchar2(100);
begin
l_prefix := upper('CBOHELP_'||to_char(sysdate, 'YYYYMMDD_HH24_MI_SS'));
set_tracefile_identifier(l_prefix);
--cbo_trace_on;
--sql_trace_on;
execute immediate p_select_statement ||' /* E2SN CBO helper: '||l_prefix||'*/ ' INTO j;
dbms_output.put_line(j);
--sql_trace_off;
--cbo_trace_off;
for i in (select column_value from table(e2sn_monitor.get_session_trace)) loop
pipe row (i.column_value);
end loop;
end test;
function get_trace_file (file_name in varchar2) return dbms_debug_vc2coll pipelined
as
invalid_file_op exception;
pragma exception_init(invalid_file_op, -29283);
f utl_file.file_type;
line varchar2(32767);
begin
dbms_output.put_line('opening file='||file_name);
f := utl_file.fopen('E2SN_UDUMP', file_name, 'R', 32767);
loop
begin
utl_file.get_line(f, line);
exception
when no_data_found then utl_file.fclose(f) ; exit;
when others then utl_file.fclose(f) ; raise;
end;
if length(line) > 1000 then
for i in 0..trunc(length(line)/1000) loop
pipe row(substr(line,i*1000+1,1000));
end loop;
else
pipe row(line);
end if;
end loop;
return;
exception
when invalid_file_op then raise_application_error(-20000, 'ERROR: Unable to open tracefile. Maybe it does not exist');
end get_trace_file;
function get_session_trace ( p_sid in number default sys_context('userenv','sid') ) return dbms_debug_vc2coll pipelined
as
tracefile_name varchar2(4000);
tracefile_name_lower varchar2(4000);
begin
begin
select par.value ||'/'||(select instance_name from v$instance) ||'_ora_'||s.suffix|| '.trc' into tracefile_name
from
v$parameter par
, (select spid||case when traceid is not null then '_'||traceid else null end suffix
from v$process where addr = (select paddr from v$session
where sid = p_sid
)
) s
where name = 'user_dump_dest';
select par.value ||'/'||(select lower(instance_name) from v$instance) ||'_ora_'||s.suffix|| '.trc' into tracefile_name_lower
from
v$parameter par
, (select spid||case when traceid is not null then '_'||traceid else null end suffix
from v$process where addr = (select paddr from v$session
where sid = p_sid
)
) s
where name = 'user_dump_dest';
exception
when no_data_found then raise_application_error(-20000, 'ERROR: No matching SID/SERIAL# combination found');
end;
begin
for i in (select column_value from table(get_trace_file( tracefile_name ))) loop
pipe row(i.column_value);
end loop;
return;
exception
when others then
begin
for i in (select column_value from table(get_trace_file( tracefile_name_lower ))) loop
pipe row(i.column_value);
end loop;
return;
exception
when others then raise_application_error(-20000, 'Unknown error: '||sqlerrm||chr(10)||dbms_utility.format_error_backtrace);
end;
end;
return;
end get_session_trace;
end e2sn_monitor;
/
show err;
-- grant execute on e2sn_monitor to public;
-- create public synonym e2sn_monitor for e2sn_monitor;

27
Tanel/cborun.sql Normal file
View File

@ -0,0 +1,27 @@
exec e2sn_monitor.cbo_trace_on;
def cbo_suffix ="/* cbotrace &_DATE */"
clear buffer
1 &1 &cbo_suffix
/
exec e2sn_monitor.cbo_trace_off
prompt Fetching tracefile...
set trimspool on termout off
spool &_tpt_tempdir/cbotrace_&_tpt_tempfile..txt
prompt &1 &cbo_suffix
select column_value CBO_TRACE
from table (e2sn_monitor.get_session_trace)
where regexp_like(column_value, '&2', 'i') or lower(column_value) like lower('&2');
spool off
set termout on
set define ^
host mvim ^_tpt_tempdir/cbotrace_^_tpt_tempfile..txt &
set define &

Some files were not shown because too many files have changed in this diff Show More