Tom
khalid, September 28, 2002 - 1:21 pm UTC
Thank you
correct your script
A reader, February 08, 2003 - 4:56 pm UTC
cd $oracle_home/rdbms/admin
log into sqlplus as system
run SQL> @utlxplan
run SQL> create public public synonym plan_table for plan_table
run SQL> grant all on plan_table to public
exit sqlplus and cd $oracle_home/sqlplus/admin
log into sqlplus as SYS
run SQL> @plustrce
run SQL> grant plustrace to public
Tom
Please correct create public public synonym plan_table for plan_table
Remove extra public
Secondly why cant I run plustrce connect as system, and why should I log out and login again...
Lastly why cant I run all the above scripts connected as scott..
thanks
February 09, 2003 - 3:11 pm UTC
removed the extra public....
you need to "log out and login" again because I want you to create the table as system -- but the grants need to be run as "sys" or "sysdba"
because
a) scott cannot create a public synonym
b) scott cannot run plustrce.sql successfully.
Why 'SYS' why not 'SYSTEM'
Nasser, February 09, 2003 - 9:48 pm UTC
Tom
I understand that SCOTT does not have necessary privileges to create public synonyms and create roles.
But system does have those abilities, so then why connect as SYS why not as system and create the public synonym, and run the plustrce.sql script.
February 09, 2003 - 9:54 pm UTC
Confusion on my part here. system does the public synonym:
You ask " so then why connect as SYS why not as
system and create the public synonym,"
well, SYSTEM created the public synonym in my example. system created the table and hence created the public synonym and granted on it.
sys runs plustrce.sql because at the top of it (the script) it says:
-- DESCRIPTION
-- Creates a role with access to Dynamic Performance Tables
-- for the SQL*Plus SET AUTOTRACE ... STATISTICS command.
-- After this script has been run, each user requiring access to
-- the AUTOTRACE feature should be granted the PLUSTRACE role by
-- the DBA.
--
-- USAGE
-- sqlplus "/ as sysdba" @plustrce
--
in order to run this, you must have been granted select on v_$ views with the ADMIN option or own the v_$ views. SYS owns them, SYSTEM doesn't have the admin option.... hence, SYSTEM cannot run this script.
All the Statistics are not showing
Arun, March 21, 2003 - 6:04 am UTC
Tom,
I Asked my DBA to give PLUSTRACE role to me. He also enabled that. But i find this.
SQL> select count(*) from dual;
COUNT(*)
----------
1
Statistics
----------------------------------------------------------
0 recursive calls
1 rows processed
SQL>
Only a part of info is shown. He said, on checking he got all the other information also.
What would have gone wrong.
Thanks,
Arun
March 21, 2003 - 8:56 am UTC
I have never before seen that in my life.
if you trace autotrace, we run a query:
SELECT STATISTIC# S, NAME
FROM
SYS.V_$STATNAME WHERE NAME IN ('recursive calls','db block gets','consistent
gets','physical reads','redo size','bytes sent via SQL*Net to client',
'bytes received via SQL*Net from client','SQL*Net roundtrips to/from
client','sorts (memory)','sorts (disk)') ORDER BY S
that gets the statistic numbers for each statistic of interest. That is used to drive this report.
I cannot imagine what caused your output -- you'll have to contact support if it is happening like that.
I think this is the reason
Arun, March 21, 2003 - 10:06 am UTC
Tom,
When i log into oracle, on sqlplus from my home directory only i get this problem. When i tried from some other directory it works fine.
My DBA would be cursing me for all the trouble i gave him.
Still i donno whats the reason...
Regards,
Arun
Similar behaviour for TKPROF
Matt, March 25, 2003 - 7:40 pm UTC
I have been receiving some trace files from a customer site. My understanding was that these trace files are standalone - there is sufficient information in them to be tkprof'ed on any machine.
However, when I use for example 'tkprof ora_40714.trc outputfile=out.prf' and look at the resulting file, I do not see any 'Row Source Operation' output. eg:
Rows Row Source Operation
------- ---------------------------------------------------
0 UPDATE DAEMON
5 TABLE ACCESS FULL DAEMON
Everything else in the file seemed fine - no errors.
So, can you please clarify whether I should see this output?
BTW, I just received a tkprof'ed file from the same customer. Same problem.
Does the tkprof utility have any reason to use the PLAN_TABLE (for the parameters I've described)? I can't find anything described in the doc to this effect. I couldn't find a description of any required setup either.
Is this a known problem, or is this again, a good reason to have a chat with support?
Thanks for any help.
March 26, 2003 - 7:18 am UTC
they did not close their session before grabbing the trace file.
The STAT records are recorded only when the cursor is closed, most cursors are wisely not closed until the session disconnects.
You need to have them
o enable tkprof
o run
o END THE SESSION
then grab the trace file.
It is normal, expected behavior. You can observe it yourself with sqlplus -- trace, run a query, host out and run tkprof. Then EXIT from sqlplus and run tkprof on that same trace file.
The session should have been closed.
Matt, March 26, 2003 - 6:49 pm UTC
The trace was generated by a software module that, when started, runs in it's own session. The first thing that the module does is an alter sesssion to switch on SQL_TRACE. So, when the module is completed (this is viewable via the UI) the trace file is then retrieved.
I have tested this (described above) many times in our development environments and have never seen this before.
I will double check with the customer that the task had indeed completed before the retreival of the trace, but as teh job was scheduled to run overnight and the trace was retreived in the morning, I am not hopefull.
There is definately no interface between PLAN_TABLE and tkprof for the previous description? It may be possible the there is an eariler pre-upgrade version of the PLAN_TABLE in the site test environment.
March 26, 2003 - 7:07 pm UTC
there is no connection to the PLAN table.
that information comes from the STAT records placed into the trace file.
Dear Tom, what am I mising here?
Sami, March 11, 2004 - 1:35 pm UTC
SQL> grant connect,resource to a identified by a;
Grant succeeded.
SQL> grant plustrace to a;
Grant succeeded.
SQL> show user
USER is "SYS"
SQL> exit
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.3.0 - Production
With the Partitioning and Parallel Server options
JServer Release 8.1.7.3.0 - Production
njd05dsmdbc01 oracle idb11 /opt/oracle
$ sqlplus a/a
SQL*Plus: Release 8.1.7.0.0 - Production on Thu Mar 11 13:33:31 2004
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.3.0 - Production
With the Partitioning and Parallel Server options
JServer Release 8.1.7.3.0 - Production
SQL> @?/rdbms/admin/utlxplan.sql
Table created.
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
A CONNECT NO YES NO
A PLUSTRACE NO YES NO
A RESOURCE NO YES NO
PUBLIC PLUSTRACE NO YES NO
March 11, 2004 - 2:14 pm UTC
what is
select * from dba_tab_privs where grantee = 'PLUSTRACE';
SELECT on v_$session should be granted to plustrace
rsergio, March 11, 2004 - 2:54 pm UTC
I´ve got a similar problem (as the last post) and found that SELECT on V_$SESSION is necessary to plustrace to function properly. It is not in the plstrce.sql script.
March 11, 2004 - 3:08 pm UTC
in 8i, it should look like this:
set echo on
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$session to plustrace;
grant plustrace to dba with admin option;
set echo off
in 9i, like this:
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
set echo off
what could have happened is someone used the 9i plustrace in 8i to set it up. thats why I wanted the dba_tab_privs.
Working on 91
rsergio, March 11, 2004 - 3:35 pm UTC
Dear Tom,
I'm working on 9i (9.2.0.4) and I have executed plstrce.sql as SYS (the script with grants on v_$statname, v_$mystat and v_$sesstat) but the only way I could get plustrace doing its job (granting access to set autotrace on) was granting also select on v_$session. Well, something must have been very wrong! Oh, God! Time for worries have begun!
Thanks for your time and excuse my bad english.
March 11, 2004 - 3:43 pm UTC
did you use v8i sqlplus? if so, that is the issue, it (sqlplus) would be looking for different v$ views.
SQL*Plus 9.2.0.1.0
rsergio, March 11, 2004 - 4:04 pm UTC
Nope. Version of SQL*Plus is as the title says. Well, but it's not a big deal (I hope) since autotrace is accessible to developers and things are going OK. I just get a little worried because it is not a normal behavior. I've had a hope this was a documented bug or something. I would appreciate if you could shed more ligth on the subject. Anyway, life goes on. Thanks again.
March 11, 2004 - 4:16 pm UTC
that's it
9201 -> 9204
9203 and up use v$mystat
9202 and before use v$session
9201 client and lower queries v$session
9203 client and higher queries v$mystat
Great!
rsergio, March 11, 2004 - 4:26 pm UTC
Peace reigns in the land of the sun.
Thanks.
Varad, March 12, 2004 - 5:50 am UTC
Hi arun,
SQL> set autotrace on
Unable to verify PLAN_TABLE format or existence
Error enabling EXPLAIN report
when i tried this autotrace, it gave me this error and subsequently when i run any query, it shows me this.
Statistics
----------------------------------------------------------
680 recursive calls
20 rows processed
This could be one of the problems you are facing.
March 12, 2004 - 9:46 am UTC
you didn't create a plan table, thats all
@?/rdbms/admin/utlxplan
Philip Tao, March 30, 2004 - 11:24 pm UTC
Hi Tom,
I have followed the given steps to enable autotrace and granted the plustrace role to a database user called dbo.
but for some reason when i enable autotrace for the user
it still complains :
SQL> set autotrace traceonly;
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
When i granted the plustrace role to user HR , the autotrace worked for HR.
March 31, 2004 - 8:30 am UTC
look up a couple of reviews.
I believe you have slightly mismatched versions of SQLPlus and database.
9203 and up use v$mystat
9202 and before use v$session
9201 client and lower queries v$session
9203 client and higher queries v$mystat
make sure plustrace has select on v$mystat and v$session or use the same version of sqlplus as database.
Interesting scenario
Arun Mathur, April 19, 2004 - 3:06 pm UTC
Tom,
I'm running 10g on my local machine, and use it connect to other 9i instances. Interestingly enough, when I connect to a 9i instance using my 10g client, I get an error when trying to set the autotrace
(SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report)
However, when I connect to the instance using the 9i client, I am able to set the autotrace without issues, as I've always have been.
Regards,
Arun
April 19, 2004 - 3:13 pm UTC
look up one comment -- make sure you have the right grants in place.
You hit the nail on the head
Arun Mathur, April 19, 2004 - 3:30 pm UTC
I am up and running. Thank you.
Arun
Table or view not exists (v_$sesstat)
Hector Gabriel Ulloa Ligarius, April 28, 2004 - 5:53 pm UTC
Dear Tom...
My problem is when running the file plustrce.sql :
See :
17:38:54 SQL> @plustrce.sql
17:38:56 SQL>
17:38:56 SQL> drop role plustrace;
Role dropped.
real: 600
17:38:56 SQL> create role plustrace;
Role created.
real: 60
17:38:57 SQL>
17:38:57 SQL> grant select on v_$sesstat to plustrace;
grant select on v_$sesstat to plustrace
*
ERROR at line 1:
ORA-00942: table or view does not exist
real: 60
17:38:57 SQL> grant select on v_$statname to plustrace;
grant select on v_$statname to plustrace
*
ERROR at line 1:
ORA-00942: table or view does not exist
real: 50
17:38:57 SQL> grant select on v_$session to plustrace;
grant select on v_$session to plustrace
*
ERROR at line 1:
ORA-00942: table or view does not exist
real: 110
17:38:57 SQL> grant plustrace to dba with admin option;
Grant succeeded.
real: 60
17:38:57 SQL>
17:38:57 SQL> set echo off
17:38:57 SQL>
Why the views not exists?
I have a running another SQLs files ?
Thanks Tom
Regards
HGUL
PD : Sorry my english
April 28, 2004 - 7:46 pm UTC
you are not logged in as SYS, or "as sysdba" as the script says you must be.
Table or view not exists (v_$sesstat)
Hector Gabriel Ulloa Ligarius, April 29, 2004 - 4:06 pm UTC
Thanks Tom..
Very GOD (Good)
Regards
HGUL
A reader, May 05, 2004 - 7:26 am UTC
Tom,
Please help me.
wanted to install your runstats script. i am gettingt his error
SQL>conn sys/change_on_install@test3 as sysdba
Connected.
SQL>grant select on v$mystat to scott;
grant select on v$mystat to scott
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
thanks
SP2-0575
reader, June 09, 2004 - 10:32 am UTC
Oracle v.9.2.0.4
Have set up autotrace with no problems.
when I try to designate the execution plan report
I get the following error:
SQL> set autotrace on explain
SP2-0575: Use of Oracle SQL feature not in SQL92 Entry Level.
the documentation explains/action:
SP2-0575 Use of Oracle SQL feature not in SQL92 Entry |Intermediate|Full Level
Cause: A SQL statement was attempted that is not FIPS compliant. This error may also occur
if a SQL*Plus feature, for example SET AUTOTRACE, that uses SQL specific to Oracle was turned on when using FIPS flagging.
Action: Use SET FLAGGER, and turn FIPS compliance checking OFF, or rewrite the statement
can you explain what this is and how to correct.
thanks
June 09, 2004 - 11:28 am UTC
ops$tkyte@ORA9IR2> show flagger
flagger OFF
ops$tkyte@ORA9IR2> set autotrace on
ops$tkyte@ORA9IR2> set autotrace off
ops$tkyte@ORA9IR2> set flagger
Usage: SET FLAGGER { OFF | ENTRY | INTERMEDIATE | FULL }
ops$tkyte@ORA9IR2> set flagger full
ops$tkyte@ORA9IR2> set autotrace on
SP2-0575: Use of Oracle SQL feature not in SQL92 Full Level.
ops$tkyte@ORA9IR2>
it is the "fips flagger", something ANSI compliant databases are supposed to have in order to be compliant. it disallows "non standard" commands.
Don't forget default roles
Chris, June 17, 2004 - 8:16 pm UTC
I've been pulling my hair out for the past hour reading and re-reading this post trying to figure out what I am missing. As it turns out, a vender application issued an ALTER USER statement that set DEFAULT ROLES. Since the statement specifically enumuerated each default role, all subsequent roles granted to the user, including PLUSTRACE, are non-default. As a result, these users were encountering the SP2-0618 error while others were not. Just something else to keep in mind for those of you having trouble with this feature!
Sql*plus error
Yogesh, November 17, 2004 - 1:07 pm UTC
I was executing one of the queries. I just wanted to know row count of output, so I used set autotrace traceonly and executed the query.
I got following output, with sql*plus error,
Statistics
----------------------------------------------------------
19 recursive calls
337 db block gets
62158007 consistent gets
999584 physical reads
462264 redo size
SQL*Plus internal error state 1075, context 1:5:0
Unsafe to proceed
51364157 bytes received via SQL*Net from client
462737 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
6941000 rows processed
Elapsed: 01:54:26.05
Is it due to set autotrace traceonly? or some other reason? I searched metalink but couldn't find any document.
November 17, 2004 - 2:05 pm UTC
contact support please.
A reader, November 23, 2004 - 1:10 pm UTC
Tom,
Why wouldn't plustrace work in my environment even after the dba set it (grant)? How is it working for some other user?
November 23, 2004 - 2:25 pm UTC
it is an internal (hence unexpected) error. please contact support.
Autotrace not working in 8.0.4
Yogesh, January 31, 2005 - 12:10 pm UTC
whenever I execute following I get
SQL> set autotrace on
Cannot find the Session Identifier. Check PLUSTRACE role is enabled Error enabling STATISTICS report
SELECT * FROM dba_tab_privs WHERE grantee = 'PLUSTRACE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE
PLUSTRACE SYS V_$SESSION SYS SELECT NO
PLUSTRACE SYS V_$SESSTAT SYS SELECT NO
PLUSTRACE SYS V_$STATNAME SYS SELECT NO
what could be the problem ?
January 31, 2005 - 12:23 pm UTC
doesn't mean that the role is actually granted to you OR enabled....
Yogesh, January 31, 2005 - 12:36 pm UTC
What should I do to enable this role?
January 31, 2005 - 12:42 pm UTC
make sure it is granted to you and if it is not "default" as they normally are, use the "set role" command to enable it.
Yogesh, January 31, 2005 - 12:51 pm UTC
I used following command to enable it
SQL> set role all
2 /
Role set.
SQL> set autotrace on
Error while connecting
Error enabling STATISTICS report
SQL>
I'm using OS auth for connecting. Is this cauing problem ?
January 31, 2005 - 12:53 pm UTC
yes, won't work in that release with OS identified accounts.
alter user ops$your_name identified by foobar;
will let you
connect /
and
connect ops$your_name/foobar
second one will work with autotrace.
can't use ops$
Yogesh, January 31, 2005 - 1:03 pm UTC
alter user ops$tc1 identified by foobar
*
ERROR at line 1:
ORA-01918: user 'OPS$TC1' does not exist
January 31, 2005 - 1:22 pm UTC
well, whatever you are using then
Yogesh, January 31, 2005 - 1:19 pm UTC
if os_authent_prefix = "" then how to use
alter user ops$<un> identified by foobar;
January 31, 2005 - 1:42 pm UTC
you don't since you don't have ops$
Yogesh, February 01, 2005 - 5:59 am UTC
Is there any way we can use OS and password auth at same time?
I mean if I want to use sqlplus / or sqlplus user/pass for same user, is it possible?
February 01, 2005 - 9:00 am UTC
if you have os_authent_prefix, yes.
ops$tkyte@ORA9IR2> connect /
Connected.
ops$tkyte@ORA9IR2> connect ops$tkyte/foobar;
Connected.
else, no.
getting another error
Jim, February 01, 2005 - 1:43 pm UTC
IN 8.1.7.4, I get this as an app owner, but not as user system:
alter session set sort_area_size=2000000;
Session altered.
SQL> set autotrace traceonly statistics;
ERROR:
ORA-01017: invalid username/password; logon denied
SP2-0619: Error while connecting
SP2-0611: Error enabling STATISTICS report
Any idea what is wrong here?
February 01, 2005 - 3:40 pm UTC
how did you log on.
and did you change your password after logging in?
found it
Jim, February 01, 2005 - 2:19 pm UTC
I found the answer on Metalink:
I needed to set o7_dictionary_acessibility=true in my 8174 database and the problem went away
Upgrading from 9.2.0.1 to 9.2.0.6 does not upgrade PLUSTRACE
Lefteris Vakalis, March 09, 2005 - 8:00 am UTC
I have just upgraded my local database
from 9.2.0.1 to 9.2.0.6 and seems that
the "plustrace" role has not been updated.
SQL*Plus: Release 9.2.0.6.0 - Production on Wed Mar 9 11:52:39 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production
evakalis@LV920> set autot trace
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
...
system@LV920> select * from dba_tab_privs where grantee = 'PLUSTRACE';
PLUSTRACE SYS V_$SESSION SYS SELECT
PLUSTRACE SYS V_$SESSTAT SYS SELECT
PLUSTRACE SYS V_$STATNAME SYS SELECT
...
sys@LV920> grant select on V_$MYSTAT to PLUSTRACE;
Grant succeeded.
...
evakalis@LV920> set autotr trace
evakalis@LV920>
So, it must be updated manually with the correct
grants.
And of course, no one can reach to the solution
of the problem just reading the error message.
That's why "Ask Tom" is the first place to go
in research of answers to my problems with Oracle.
Regards
plan table,
A reader, October 10, 2005 - 3:27 pm UTC
I don't have access to log in as sys or system.
However, using the plan table definition, can I create the plan_table on my schema and somehow use that to generate the trace for the SQL's I run?
Thanks,
October 10, 2005 - 3:35 pm UTC
you can create the plan table in your own schema, yes.
plan table
A reader, October 11, 2005 - 7:48 am UTC
I tried creating the plan_table in my own schema and it worked. Can the plan_table in my schema be in a different name?
October 11, 2005 - 3:19 pm UTC
if you use explain plan directly - yes.
explain plan .... INTO TABLENAME ..
for autotrace, I believe it wants "plan_table" - I know of no way to have it go elsewhere.
Unable to configure autotrace on 9.2.0.5
DELABY, October 12, 2005 - 1:04 pm UTC
Hi Tom.
First, thanks for all the time you share with us ! :)
Next, my config and my problem
I'm working on 9.2.0.5. I setup the plan as discribed in "Effective Oracle by Design" (great !) with the utils schema.
Now, I want to setup autotrace. I do as I read everywhere :
SQL> connect SYS AS SYSDBA
SQL> @?/sqlplus/admin/plustrce.sql
SQL> grant plustrace to public
No problem when I try this following as sys :
SQL> set autotrace traceonly
But when I try on an other acount
service@MEGA> set autotrace traceonly
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
I can add this as comment
service@MEGA> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
PUBLIC PLUSTRACE NO YES NO
SERVICE CONNECT NO YES NO
SERVICE RESOURCE NO YES NO
sys@MEGA> select * from dba_tab_privs where grantee = 'PLUSTRACE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
PLUSTRACE SYS V_$SESSTAT SYS SELECT NO NO
PLUSTRACE SYS V_$MYSTAT SYS SELECT NO NO
PLUSTRACE SYS V_$STATNAME SYS SELECT NO NO
...
any idea please ???
October 12, 2005 - 2:24 pm UTC
Unable to configure autotrace on 9.2.0.5
DELABY, October 13, 2005 - 5:03 am UTC
Hi,
First, I used a 10g client. When I read the previous posts, I only try to setup autotrace on the server with this version
SQL*Plus: Release 9.2.0.5.0 - Production on Je Oct 13 10:22:54 2005
I tried to grant manually the v_$session with no effects. (I know, it's for 8i...)
Note that the problem is only with statistics. No problem with set autotrace trace exp.
Able to configure autotrace on 9.2.0.5 !
DELABY, October 14, 2005 - 10:38 am UTC
No answer from Tom... OK, I surely have all that I need.
Glups, ...
May be...
alter user service default role all;
Yes, it runs !
OK, sorry for time wasting...
Regards.
Same problem to 10g Client
Raj, May 07, 2006 - 7:58 am UTC
Hi Tom,
I read the above reviews for solving issues with setting the AUTOTRACE when connected as O/S authenticated users and found that the answer suggested was:
set o7_dictionary_acessibility=true
Is this the correct way to get round the issue?
When I connect as Scott it works fine but when I connect as O/S authenticated user it fails. I even tried using the password for the user but even that doesn't work.
Here is what I tried:
**************************
C:\Documents and Settings\Sanju>sqlplus scott/tiger@orcl
SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 7 12:52:04 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> set autotrace on
SQL> set autotrace off
SQL> connect /
Connected.
SQL> sho user
USER is "OPS$ARCHU\SANJU"
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
SQL> connect "OPS$ARCHU\SANJU"/sanju
Connected.
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
SQL>
*************************************************
Please help!
Thanks
Raj
May 07, 2006 - 11:39 am UTC
i don't get it - once you connect scott/tiger@REMOTE_DATABASE
then you connect two times locally? You are using fundementally different databases perhaps.
C:\oracle\product\10.1.0\db_1\sqlplus\admin>sqlplus scott/tiger
SQL*Plus: Release 10.1.0.4.0 - Production on Sun May 7 11:36:01 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
scott@ORA10GR1> set autotrace on
scott@ORA10GR1> connect /
Connected.
ops$xp10gr1\tkyte@ORA10GR1> set autotrace on
ops$xp10gr1\tkyte@ORA10GR1> show user
USER is "OPS$XP10GR1\TKYTE"
ops$xp10gr1\tkyte@ORA10GR1> connect "OPS$XP10GR1\TKYTE"/foobar;
Connected.
ops$xp10gr1\tkyte@ORA10GR1> set autotrace on
ops$xp10gr1\tkyte@ORA10GR1>
check to see that you actually have plustrace the role enabled (session_roles) and that you are using consistent sqlplus versions with database versions (older releases of sqlplus used different v$ tables then newer ones and that mismatch can do this as well)
Autotrace problem
Raj, May 07, 2006 - 3:31 pm UTC
Hi Tom,
All the time I am connecting to the same database and there is only 1 version of SQL*Plus client on my machine.
I tried setting the PLUSTRACE role and it now works but I am not sure why the O/S authenticated user doesn't have this role set by default.
OK ..here is what I tried.
*********************
C:\Documents and Settings\Sanju>sqlplus scott/tiger@orcl
SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 7 20:22:08 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> sho user
USER is "SCOTT"
SQL> select * from session_roles;
ROLE
------------------------------
PLUSTRACE
CONNECT
RESOURCE
SQL> set autotrace on
SQL> set autotrace off
SQL> connect /@orcl
Connected.
SQL> sho user
USER is "OPS$ARCHU\SANJU"
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
SQL> set role plustrace;
Role set.
SQL> set autotrace on
SQL> set autotrace off
*********************************
I even trid granting the role explicity to the user:
********************************************
SQL> connect sys@orcl as sysdba
Enter password:
Connected.
SQL> grant plustrace to "OPS$ARCHU\SANJU";
Grant succeeded.
SQL> connect /@orcl
Connected.
SQL> sho user
USER is "OPS$ARCHU\SANJU"
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
*********************************
but even that doesn't seem to work.
Please can you explain why this is so?
Thanks
Raj
May 07, 2006 - 4:19 pm UTC
when granted to them, or via some alter user - it was not made one of their default roles.
they must have had "alter this user and make these their default roles" at some point, just alter them again and let that role be default too
ops$tkyte@ORA10GR2> create user a identified by a;
User created.
ops$tkyte@ORA10GR2> grant connect to a;
Grant succeeded.
ops$tkyte@ORA10GR2> alter user a default role connect;
User altered.
ops$tkyte@ORA10GR2> grant plustrace to a;
Grant succeeded.
ops$tkyte@ORA10GR2> connect a/a
Connected.
a@ORA10GR2> select * from session_roles;
ROLE
------------------------------
CONNECT
a@ORA10GR2> connect /
Connected.
ops$tkyte@ORA10GR2> alter user a default role ALL;
User altered.
ops$tkyte@ORA10GR2> connect a/a
Connected.
a@ORA10GR2> select * from session_roles;
ROLE
------------------------------
CONNECT
PLUSTRACE
Thanks
Raj, May 07, 2006 - 4:41 pm UTC
Hi Tom,
I understand it now. Thanks for the comments, very much appreciated!
clarification on autotrace
A reader, August 24, 2006 - 1:29 am UTC
Our problem using autotrace solved by altering the user to default role all (again),
just as your above proved solution.
That I want to clarify here are :
1. You create user a with connect as the default role (in example followup).
Here is the creation script of my user :
CREATE USER RK
IDENTIFIED BY VALUES '00538F1742769E8C'
DEFAULT TABLESPACE RK
TEMPORARY TABLESPACE RK_TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
-- 2 Roles for RK
GRANT RESOURCE TO RK;
GRANT CONNECT TO RK;
ALTER USER RK DEFAULT ROLE ALL;
-- 1 System Privilege for RK
GRANT UNLIMITED TABLESPACE TO RK;
-- 1 Tablespace Quota for RK
ALTER USER RK QUOTA UNLIMITED ON RK_IDX;
In time of creation, that user has all default role. (Plustrace role not yet created)
2. Long after the user was created, I create plustrace role. And when I try
to enable it (set autotrace on), the error occured.
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
We are using SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 23 11:27:35 2006
And when we try to query
RK@orcl3> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
The problem here, we already have all default role (from user creation script above),
so why we must altering the role again.
SYSTEM@orcl3> alter user rk default role all;
Please explain, Tom.
Thanks.
August 27, 2006 - 7:36 pm UTC
1) user RK already had unlimited tablespace - granting either resource or dba does that.
and that blows away the need for quota unlimited.
2) I cannot reproduce that set of steps:
ops$tkyte%ORA10GR2> drop user rk;
User dropped.
ops$tkyte%ORA10GR2> create user rk identified by rk;
User created.
ops$tkyte%ORA10GR2> grant connect, resource to rk;
Grant succeeded.
ops$tkyte%ORA10GR2> alter user rk default role all;
User altered.
ops$tkyte%ORA10GR2> grant plustrace to rk;
Grant succeeded.
ops$tkyte%ORA10GR2> connect rk/rk
Connected.
rk%ORA10GR2> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
PLUSTRACE
so, if you run that script, what do you see? (use something other than RK if RK is important to you)
Whats the actual problem?
Arindam Mukherjee, September 18, 2006 - 9:27 am UTC
If I issue autotrace on, I could not get the value of parameter. Could you kindly tell me why? Please have a loot at below.
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
PL/SQL Release 9.2.0.5.0 - Production
CORE 9.2.0.6.0 Production
TNS for Solaris: Version 9.2.0.5.0 - Production
NLSRTL Version 9.2.0.5.0 - Production
5 rows selected.
SQL> show parameter optimizer_features_enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_features_enable string 9.2.0
SQL> set autotrace traceonly explain
SQL> show parameter optimizer_features_enable
SQL> show parameter optimizer_mode
SQL> set autotrace off
SQL> show parameter optimizer_mode
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string RULE
set autotrace traceonly explain
SQL> select * from v$version;
Execution Plan
----------------------------------------------------------
ERROR:
ORA-01039: insufficient privileges on underlying objects of the view
Ultimately, during autotrace on, I could not get parameter value and also contents of v$version.
It's my question - Why?
September 18, 2006 - 1:38 pm UTC
you are not allowed to do an explain plan on v$version - that is all that is saying.
see the error message - it says why.
Error enabling EXPLAIN report
A reader, March 23, 2007 - 6:15 am UTC
tom,
when i do this
SQL> set autot on exp
i am getting this
ERROR:
ORA-00904: "BYTES": invalid identifier
SP2-0611: Error enabling EXPLAIN report
what could be wrong
March 23, 2007 - 9:52 am UTC
sounds like you have the wrong plan_table installed.
utlxplan.sql in $ORACLE_HOME/rdbms/admin - make sure to use that structure
Why no help available
A reader, April 03, 2007 - 2:19 am UTC
Tom,
Why is there no help documented w.r.t these kind of errors in oracle documentation.
April 03, 2007 - 11:08 pm UTC
I have no idea what you mean by that.
?
Ora-904 - documented
error message, well, it actually seemed quite "self explanatory" to me?
SQL> set autot on exp
i am getting this
ERROR:
ORA-00904: "BYTES": invalid identifier
seems like maybe (just maybe) the explain plan table was - not right? you wanted explain plan on - and it said "bytes, not there..."
trc files
A reader, April 03, 2007 - 2:27 am UTC
Tom,
to get the trace files
i did
alter session set sql_trace=trueand
set autot on exp
even after doing this i am unable to find the .trc file.
please tell me the process of generating the trace files
hope my query is clear
April 03, 2007 - 11:11 pm UTC
trace files will be
a) in the user dump destination (init.ora parameter) directory if you use a dedicated server
b) in the background dump destination if you use a shared server
but, the cause is "obvious"?
A reader, April 04, 2007 - 12:06 am UTC
Tom,
Tell me the process of generating trace files
i mean the steps of generating trace files
April 04, 2007 - 10:06 am UTC
sorry, don't know what you mean - unless you are talking about setting sql_trace = true?
SQL92 levels
Cristian, June 01, 2007 - 3:57 am UTC
Tom,
i've not undertand a thing: by the error above reported SP-0575 it seems that SQL92 have three levels: Entry, Intermediate and Full. Also in a draft of SQL92 that i've found on internet there are specified three levels, but on your book "Expert Oracle Database Architecture", on page 30 you add a fourth level (transitional), why?
Compliments for your book and for your answers.
Thanks
Cristian
June 01, 2007 - 11:59 am UTC
Reader, July 10, 2007 - 4:06 pm UTC
Tom--Nice to post a question after long time.As usual I know I will get my answers here...
I have two databases(DB1 & DB2) on the same server using 9207 binaries.DB1 has 4K blocks and DB2 has 8K blocks.But I see high consistent gets for DB2 for the below query.Also it takes 16 secs on DB1 and 1.6 mins on DB2.
Below are the stats on both the databases:
<b>-------------DB1-------------</b>
select code, stream_category,name,STREAM_TYPE,
avg(GRS_gas_VOL_MSCF) as "Daily Ave",
sum(GRS_GAS_VOL_MTD_MSCF) as "MTD Cum",
sum(GRS_GAS_VOL_YTD_MSCF) as "YTD Cum",
sum(GRS_GAS_VOL_MTD_MSCF)/ TO_CHAR ((production_day),'dd') "MTD Ave",
sum(GRS_GAS_VOL_YTD_MSCF)/TO_CHAR ((production_day),'ddd') as "YTD Ave",
sum(AVG_PRESS_PSIG) as Press_PSIG,
sum(AVG_TEMP_F) as "Temp F",
sum(EcBp_Stream_Fluid.calcGrsStdVolTotalToDay(object_id,daytime)) as FLTD
from RV_CT_STRM_DAY_STREAM
where production_day='21-apr-2007'
and code not like 'RS_%'
and op_area_code ='A_BBLT'
and stream_category like 'GAS_%'
group by name,stream_category,stream_type,code,production_day;
10 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=1 Bytes=230)
1 0 SORT (GROUP BY) (Cost=11 Card=1 Bytes=230)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'STRM_VERSION' (Cost=2
Card=1 Bytes=48)
3 2 NESTED LOOPS (Cost=8 Card=1 Bytes=230)
4 3 NESTED LOOPS (Cost=6 Card=1 Bytes=182)
5 4 NESTED LOOPS (Cost=5 Card=1 Bytes=130)
6 5 NESTED LOOPS (Cost=5 Card=1 Bytes=97)
7 6 INDEX (UNIQUE SCAN) OF 'PK_SYSTEM_DAYS' (UNIQU
E) (Cost=1 Card=1 Bytes=8)
8 6 TABLE ACCESS (BY INDEX ROWID) OF 'STRM_VERSION
' (Cost=4 Card=1 Bytes=89)
9 8 INDEX (RANGE SCAN) OF 'I_STRM_VERSION_1' (NO
N-UNIQUE) (Cost=3 Card=1)
10 5 INDEX (UNIQUE SCAN) OF 'PK_STREAM' (UNIQUE)
11 4 TABLE ACCESS (BY INDEX ROWID) OF 'STREAM' (Cost=1
Card=1 Bytes=52)
12 11 INDEX (UNIQUE SCAN) OF 'PK_STREAM' (UNIQUE)
13 3 INDEX (RANGE SCAN) OF 'PK_STRM_VERSION' (UNIQUE) (Co
st=1 Card=1)
Statistics
----------------------------------------------------------
149472 recursive calls
0 db block gets
669363 consistent gets
0 physical reads
0 redo size
2441 bytes sent via SQL*Net to client
655 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
4099 sorts (memory)
0 sorts (disk)
10 rows processed
SQL>
<b>---------------DB2----------------</b>
11 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=8 Card=1 Bytes=2
17)
1 0 SORT (GROUP BY) (Cost=8 Card=1 Bytes=217)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'STRM_VERSION' (Cost=2
Card=1 Bytes=45)
3 2 NESTED LOOPS (Cost=6 Card=1 Bytes=217)
4 3 NESTED LOOPS (Cost=4 Card=1 Bytes=172)
5 4 NESTED LOOPS (Cost=3 Card=1 Bytes=122)
6 5 NESTED LOOPS (Cost=3 Card=1 Bytes=90)
7 6 INDEX (UNIQUE SCAN) OF 'PK_SYSTEM_DAYS' (UNIQU
E) (Cost=1 Card=1 Bytes=7)
8 6 TABLE ACCESS (BY INDEX ROWID) OF 'STRM_VERSION
' (Cost=2 Card=1 Bytes=83)
9 8 INDEX (RANGE SCAN) OF 'I_STRM_VERSION_1' (NO
N-UNIQUE) (Cost=1 Card=1)
10 5 INDEX (UNIQUE SCAN) OF 'PK_STREAM' (UNIQUE)
11 4 TABLE ACCESS (BY INDEX ROWID) OF 'STREAM' (Cost=1
Card=1 Bytes=50)
12 11 INDEX (UNIQUE SCAN) OF 'PK_STREAM' (UNIQUE)
13 3 INDEX (RANGE SCAN) OF 'PK_STRM_VERSION' (UNIQUE) (Co
st=1 Card=1)
Statistics
----------------------------------------------------------
173562 recursive calls
0 db block gets
2620881 consistent gets
7 physical reads
120 redo size
2566 bytes sent via SQL*Net to client
655 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5045 sorts (memory)
0 sorts (disk)
11 rows processed
SQL>
Query accesses three base tables which have almost same amount of data.The execution plan is exactly the same on both databases.I also generated a 10046 trace with level 8 and I see absolutely no wait events on both.I also monitored the locks using v$segment_statistics and see no
locks.
On DB2,thinking DUAL was costing more and hence I created a IOT of DUAL following the metalink doc:363988.1.
Still I see no gain in elapsed time.Though the costs look small in 10046 file.
I wonder why the consistent gets are so high on DB2?
Is there anything I am doing wrong or missing any part?
Or is there any way to know where exactly the time is being spent?(like DBMS_PROFILER for pl/sql)
Thanks
July 10, 2007 - 8:13 pm UTC
tkprof it, it can show consistent gets by step in the plan, that'll be interesting to compare.
but based on the large number of recursive call differences - I'd say that plsql function is called "a lot less" in one case - run it without that thing and see what you see as well.
Reader, July 11, 2007 - 10:36 am UTC
Tom-here is a portion from 10046 file.Interesting is the CR values are too low compared to other database.
You are right there is a difference in recursive calls because the query has 3 additional columns in DB2(so 3 additional function calls).
Do you think just 3 additional function calls can cause this huge difference(16 secs to 1.6 mins) in elapsed time?
One more point to notice is, I see the fetch query mode blocks for DUAL table going up and down ...this number is high compared to other database.
--------On DB2 Where the query takes 1.6 mins----------select code, stream_category,name,STREAM_TYPE,
avg(GRS_gas_VOL_MSCF) as "Daily Ave",
sum(GRS_GAS_VOL_MTD_MSCF) as "MTD Cum",
sum(GRS_GAS_VOL_YTD_MSCF) as "YTD Cum",
sum(GRS_GAS_VOL_MTD_MSCF)/ TO_CHAR ((production_day),'dd') "MTD Ave",
sum(GRS_GAS_VOL_YTD_MSCF)/TO_CHAR ((production_day),'ddd') as "YTD Ave",
sum(AVG_PRESS_PSIG) as Press_PSIG,
sum(AVG_TEMP_F) as "Temp F",
sum(EcBp_Stream_Fluid.calcGrsStdVolTotalToDay(object_id,daytime)) as FLTD
from RV_CT_STRM_DAY_STREAM
where production_day='21-apr-2007'
and code not like 'RS_%'
and op_area_code ='A_BBLT'
and stream_category like 'GAS_%'
group by name,stream_category,stream_type,code,production_day
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 93.75 179.95 23 2620872 0 11
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 93.75 179.95 23 2620872 0 11
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 25
Rows Row Source Operation
------- ---------------------------------------------------
11 SORT GROUP BY (cr=2620872 r=0 w=0 time=183662116 us)
11 TABLE ACCESS BY INDEX ROWID STRM_VERSION (cr=99 r=0 w=0 time=3062 us)
35 NESTED LOOPS (cr=79 r=0 w=0 time=2639 us)
11 NESTED LOOPS (cr=77 r=0 w=0 time=2152 us)
17 NESTED LOOPS (cr=58 r=0 w=0 time=1724 us)
17 NESTED LOOPS (cr=56 r=0 w=0 time=1428 us)
1 INDEX UNIQUE SCAN PK_SYSTEM_DAYS (cr=2 r=0 w=0 time=25 us)(object id 40195)
17 TABLE ACCESS BY INDEX ROWID STRM_VERSION (cr=54 r=0 w=0 time=1325 us)
179 INDEX RANGE SCAN I_STRM_VERSION_1 (cr=1 r=0 w=0 time=493 us)(object id 40183)
17 INDEX UNIQUE SCAN PK_STREAM (cr=2 r=0 w=0 time=113 us)(object id 40022)
11 TABLE ACCESS BY INDEX ROWID STREAM (cr=19 r=0 w=0 time=297 us)
17 INDEX UNIQUE SCAN PK_STREAM (cr=2 r=0 w=0 time=84 us)(object id 40022)
23 INDEX RANGE SCAN PK_STRM_VERSION (cr=2 r=0 w=0 time=186 us)(object id 40182)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
SQL*Net message from client 2 7.06 7.07
********************************************************************************
select ecbp_stream_formula.evaluatemethod('FCTY_CLASS_1',
'0756655FAF0E0F50E0440003BA5D246D','TOTAL_THEOR_WELL_GAS_PROD',
to_date('31.12.2005 00:00:00','dd.mm.yyyy hh24:mi:ss'),to_date('21.04.2007
00:00:00','dd.mm.yyyy hh24:mi:ss'))
from
dual
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 20.93 39.54 4 469731 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 20.93 39.54 4 469731 0 1
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 25 (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
1 INDEX FULL SCAN SYS_IOT_TOP_50480 (cr=1 r=0 w=0 time=22 us)(object id 50481)
********************************************************************************
select ecbp_stream_formula.evaluatemethod('FCTY_CLASS_1',
'0756655FAF0E0F50E0440003BA5D246D','TOTAL_THEOR_WELL_GAS_PROD',
to_date('01.01.2007 00:00:00','dd.mm.yyyy hh24:mi:ss'),to_date('21.04.2007
00:00:00','dd.mm.yyyy hh24:mi:ss'))
from
dual
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 7.65 14.25 0 131884 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 7.65 14.25 0 131884 0 1
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 25 (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
1 INDEX FULL SCAN SYS_IOT_TOP_50480 (cr=1 r=0 w=0 time=20 us)(object id 50481)
********************************************************************************
select ecbp_stream_formula.evaluatemethod('FCTY_CLASS_1',
'0756655FAF0E0F50E0440003BA5D246D','TOTAL_THEOR_WELL_GAS_PROD',
to_date('01.04.2007 00:00:00','dd.mm.yyyy hh24:mi:ss'),to_date('21.04.2007
00:00:00','dd.mm.yyyy hh24:mi:ss'))
from
dual
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 1.44 2.63 0 25014 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 1.44 2.63 0 25014 0 1
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 25 (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
1 INDEX FULL SCAN SYS_IOT_TOP_50480 (cr=1 r=0 w=0 time=20 us)(object id 50481)
********************************************************************************
select ecbp_stream_formula.evaluatemethod('FCTY_CLASS_1',
'0756655FAF0E0F50E0440003BA5D246D','TOTAL_THEOR_WELL_GAS_PROD',
to_date('21.04.2007 00:00:00','dd.mm.yyyy hh24:mi:ss'),to_date('21.04.2007
00:00:00','dd.mm.yyyy hh24:mi:ss'))
from
dual
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.07 0.12 0 1194 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.07 0.12 0 1194 0 1
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 25 (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
1 INDEX FULL SCAN SYS_IOT_TOP_50480 (cr=1 r=0 w=0 time=19 us)(object id 50481)
July 11, 2007 - 1:03 pm UTC
could three additional function calls do that? Absolutely, it is your code - what does it do??
most all of the consistent gets are coming FROM these functions!!
they are the culprit, the query is fine itself.
Autotrace in 10g ...
Zahir M, April 01, 2008 - 2:52 pm UTC
The autotrace output wrongfully states that RBO is being used , when no RULE hint is being applied to it / nor the optimizer mode is set to RULE .
Please advise.
The following is from 10.2.0.3.0 version of the database .
SQL> desc t
Name Null? Type
----------------------------------------- -------- ----------------------------
CLAIM_TYPE VARCHAR2(2)
ASSIGNMENT_TYPE VARCHAR2(2)
BENEFIT_TYPE NOT NULL VARCHAR2(2)
NETWORK_ID NUMBER(10)
SQL> select BENEFIT_TYPE from t;
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
----------------------------------
| Id | Operation | Name |
----------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS FULL| T |
----------------------------------
Note
-----
- rule based optimizer used (consider using cbo)
April 01, 2008 - 8:59 pm UTC
it is not wrong, why do you think it is?
you did not show the optimizer mode. I think you might be mistaken.
do this for us:
ops$tkyte%ORA10GR2> column p format a72
ops$tkyte%ORA10GR2> select name || '=' || value p from v$parameter where isdefault <> 'TRUE';
....
show the output.
Autotrace - Rule
Zahir M, April 02, 2008 - 9:17 am UTC
Tom ,
Here is the output .
processes=150
sga_max_size=629145600
sga_target=264241152
control_files=E:\ORACLE\PRODUCT\10.2.0\ORADATA\10.2.0\PRD\CONTROLPRD01.CTL,
E:\ORACLE\PRODUCT\10.2.0\ORADATA\10.2.0\PRD\CONTROL
PRD02.CTL, E:\ORACLE\PRODUCT\10.2.0\ORADATA\10.2.0\PRD\CONTROL
PRD03.CTL
db_block_size=8192
compatible=10.2.0.1.0
log_buffer=2854912
db_file_multiblock_read_count=16
db_recovery_file_dest=\\vsg01\RMAN\ORCL1
db_recovery_file_dest_size=214748364800
undo_management=AUTO
undo_tablespace=UNDOTBS1
remote_login_passwordfile=EXCLUSIVE
db_domain=
dispatchers=(PROTOCOL=TCP) (SERVICE=PRDXDB)
utl_file_dir=*
job_queue_processes=10
cursor_sharing=SIMILAR
audit_file_dest=E:\ORACLE\PRODUCT\10.2.0\ADMIN\PRD\ADUMP
background_dump_dest=E:\ORACLE\PRODUCT\10.2.0\ADMIN\PRD\BDUMP
user_dump_dest=E:\ORACLE\PRODUCT\10.2.0\ADMIN\PRD\UDUMP
core_dump_dest=E:\ORACLE\PRODUCT\10.2.0\ADMIN\PRD\CDUMP
db_name=PRD
open_cursors=3000
optimizer_mode=CHOOSE
_optimizer_cost_model=CHOOSE
optimizer_index_cost_adj=25
optimizer_index_caching=0
pga_aggregate_target=67108864
_gby_hash_aggregation_enabled=FALSE
April 02, 2008 - 10:11 am UTC
so, you have no statistics, optimizer is set to choose
therefore, rule based optimizer will be used. If you access objects with statistics, the cbo will be used.
what a mess that init.ora is. that you have set cursor_sharing indicates NO BINDS (huge security risk on your part there, sql injection).
setting _ parameters :(
setting optimizer_index_*
setting the db file multiblock read count :(
Ouch!
Michel Cadot, April 02, 2008 - 10:19 am UTC
And what about
utl_file_dir=*
It could really also hurt.
Regards
Michel
April 02, 2008 - 10:25 am UTC
thank you - i missed that one, the others annoyed me right off.
utl_file.fopen( '/home/oracle/oradata/yoursid', 'system.dbf', 'w' );
bamm, your dead in the water.
Dynamic Sampling
Zahir M, April 02, 2008 - 10:44 am UTC
1. If the statistics are not available ; Should not it use dynamic sampling?
2. Agree ... I raised the same concerns for the following parameters and few other packages
( like UTL_TCP , UTL_SMTP , UTL_FILE... ) . Apparently , this is the standard set by the DB architect .
Even I showed them the slide from one of your presentation about binds - not to set cursor_sharing=SIMILAR at the system level.
Still ... no luck
cursor_sharing=SIMILAR
optimizer_index_cost_adj=25
optimizer_index_caching=0
utl_file_dir=*
sql92_security =FALSE
April 02, 2008 - 12:00 pm UTC
1) no, you said CHOOSE, not ALL_ROWS (the default), not FIRST_ROWS - you said "choose" and choose defaults to RBO if no stats are present on the segments (and presuming the object can be processed by the RBO - eg: it is not partitioned for example)
2) Your DB architect needs training. Period. If an architect of buildings used the same level of thought - we would *never* enter any of their buildings (the ones still standing somehow). Sorry to sound harsh - but hey - that person is no architect)
please update autotrace article
Nicholas Sushkin, March 17, 2009 - 1:24 pm UTC
March 18, 2009 - 7:52 am UTC
what about it - other than it isn't valid?
ops$tkyte%ORA10GR2> set role autotrace
2 ;
set role autotrace
*
ERROR at line 1:
ORA-01919: role 'AUTOTRACE' does not exist
ops$tkyte%ORA10GR2> set role connect;
Role set.
Rows in Explain Plan Vs Rows in Statistics
Rajeshwaran, Jeyabal, September 03, 2009 - 1:47 pm UTC
CREATE TABLE T1(x NUMBER CONSTRAINT T1_PK PRIMARY KEY,v VARCHAR2(100));
CREATE TABLE T2(x NUMBER CONSTRAINT T2_PK PRIMARY KEY,v VARCHAR2(100));
CREATE TABLE MAP(id NUMBER CONSTRAINT MAP_PK PRIMARY KEY,T1_x NUMBER, T2_X NUMBER);
CREATE UNIQUE INDEX MAP_IX ON MAP(T1_X,T2_X);
ALTER TABLE MAP ADD CONSTRAINT MAP_FK1 FOREIGN KEY(t1_x) references T1(X);
ALTER TABLE MAP ADD CONSTRAINT MAP_FK2 FOREIGN KEY(T2_X) REFERENCES T2(X);
INSERT /*+ APPEND */ INTO T1
SELECT ROWNUM,rpad('*',100,'*')
FROM all_objects;
INSERT /*+ APPEND */ INTO T2
SELECT ROWNUM,rpad('*',100,'*')
FROM all_objects;
INSERT /*+ APPEND */ INTO MAP
SELECT ROWNUM,ROWNUM,ROWNUM
FROM all_objects;
BEGIN
dbms_stats.gather_table_stats(ownname=>USER,tabname=>'T1',estimate_percent=>dbms_stats.auto_sample_size,cascade=>TRUE,method_opt=>'for all columns size AUTO');
dbms_stats.gather_table_stats(ownname=>USER,tabname=>'T2',estimate_percent=>dbms_stats.auto_sample_size,cascade=>TRUE,method_opt=>'for all columns size AUTO');
dbms_stats.gather_table_stats(ownname=>USER,tabname=>'MAP',estimate_percent=>dbms_stats.auto_sample_size,cascade=>TRUE,method_opt=>'for all columns size AUTO');
dbms_stats.gather_index_stats(ownname=>USER,indname=>'T1_PK',estimate_percent=>dbms_stats.auto_sample_size);
dbms_stats.gather_index_stats(ownname=>USER,indname=>'T2_PK',estimate_percent=>dbms_stats.auto_sample_size);
dbms_stats.gather_index_stats(ownname=>USER,indname=>'MAP_PK',estimate_percent=>dbms_stats.auto_sample_size);
dbms_stats.gather_index_stats(ownname=>USER,indname=>'MAP_IX',estimate_percent=>dbms_stats.auto_sample_size);
END;
Rajesh@IRADSDB> SELECT *
2 FROM T1, T2, MAP
3 WHERE T1.X = MAP.T1_X
4 AND T2.X = MAP.T2_X
5 AND T1.v = 'x'
6 AND T2.v ='y'
7 /
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 2174958959
--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 249 | 3 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 1 | 249 | 3 (0)| 00:00:01 |
| 2 | NESTED LOOPS | | 1 | 144 | 3 (0)| 00:00:01 |
| 3 | VIEW | index$_join$_003 | 1 | 39 | 3 (0)| 00:00:01 |
|* 4 | HASH JOIN | | | | | |
| 5 | INDEX FAST FULL SCAN | MAP_IX | 1 | 39 | 1 (0)| 00:00:01 |
| 6 | INDEX FAST FULL SCAN | MAP_PK | 1 | 39 | 1 (0)| 00:00:01 |
|* 7 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 105 | 0 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | T1_PK | 1 | | 0 (0)| 00:00:01 |
|* 9 | TABLE ACCESS BY INDEX ROWID | T2 | 1 | 105 | 0 (0)| 00:00:01 |
|* 10 | INDEX UNIQUE SCAN | T2_PK | 1 | | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access(ROWID=ROWID)
7 - filter("T1"."V"='x')
8 - access("T1"."X"="MAP"."T1_X")
9 - filter("T2"."V"='y')
10 - access("T2"."X"="MAP"."T2_X")
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
776 consistent gets
0 physical reads
8748 redo size
583 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
Tom,
I am really confused with this. Can you please help me.
The query returns no records. But looking at the
number of rows in Execution Plan it is 1 while in the Statistics it is 0. why this is happening even my query is using CBO. I am working with Oracle 10g R2.
Am i interpreting Thing wrong here. If yes please correct me.
September 04, 2009 - 3:36 pm UTC
cardinalities in an explain plan are ESTIMATES
we *never* estimate zero, we always estimate at least one.
it is normal, expected, correct
Cardinality in Tkprof.
Rajeshwaran, Jeyabal, September 06, 2009 - 9:40 am UTC
Thanks Tom, The cardinality in TKPROF seems to be correct.
SELECT *
FROM T1,
T2,
MAP
WHERE T1.X = MAP.T1_X
AND T2.X = MAP.T2_X
AND T1.v = 'x'
AND T2.v ='y'
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 3 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 3 0 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 70
Rows Row Source Operation
------- ---------------------------------------------------
0 NESTED LOOPS (cr=3 pr=0 pw=0 time=39 us)
0 NESTED LOOPS (cr=3 pr=0 pw=0 time=35 us)
0 TABLE ACCESS BY INDEX ROWID T1 (cr=3 pr=0 pw=0 time=31 us)
0 INDEX RANGE SCAN T_IND (cr=3 pr=0 pw=0 time=27 us)(object id 89149)
0 TABLE ACCESS BY INDEX ROWID MAP (cr=0 pr=0 pw=0 time=0 us)
0 INDEX RANGE SCAN MAP_IX (cr=0 pr=0 pw=0 time=0 us)(object id 89147)
0 TABLE ACCESS BY INDEX ROWID T2 (cr=0 pr=0 pw=0 time=0 us)
0 INDEX UNIQUE SCAN T2_PK (cr=0 pr=0 pw=0 time=0 us)(object id 89144)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
SQL*Net message from client 1 0.01 0.01
September 06, 2009 - 9:58 am UTC
that is not the estimated cardinality.
that is the ACTUAL OBSERVED RESULTS from that execution. they are 100% correct, they are what happened.
Now, you compare that to the plan - to see if the estimate (plan) is near actual (row source operation)
Don Seiler, September 30, 2009 - 2:50 pm UTC
URL not working
Benny, November 05, 2009 - 4:17 pm UTC
A reader, December 13, 2009 - 5:18 pm UTC
Sir, whenever I start autotrace I always see:
SQL> set autotrace on;
ERROR:
ORA-00904: "BYTES": invalid identifier
Oracle version is :9.2.0.6.0
I also recreated autotrace like below:
SQL> @?/rdbms/admin/utlxplan
create table PLAN_TABLE (
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
$ORACLE_HOME/sqlplus/admin/plustrce
SQL> @$ORACLE_HOME/sqlplus/admin/plustrce
SQL>
SQL> drop role plustrace;
Role dropped.
SQL> create role plustrace;
Role created.
SQL>
SQL> grant select on v_$sesstat to plustrace;
Grant succeeded.
SQL> grant select on v_$statname to plustrace;
Grant succeeded.
SQL> grant select on v_$mystat to plustrace;
Grant succeeded.
SQL> grant plustrace to dba with admin option;
Grant succeeded.
SQL>
SQL> set echo off
SQL>
SQL> set autotrace on;
ERROR:
ORA-00904: "BYTES": invalid identifier
SP2-0611: Error enabling EXPLAIN report
SQL> select sysdate from dual;
SYSDATE
--------------
20091214121248
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
495 bytes sent via SQL*Net to client
651 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
December 14, 2009 - 9:11 am UTC
ops$tkyte%ORA9IR2> @?/rdbms/admin/utlxplan
Table created.
ops$tkyte%ORA9IR2> set autotrace on
ops$tkyte%ORA9IR2> set autotrace off
ops$tkyte%ORA9IR2> alter table plan_table drop column bytes;
Table altered.
ops$tkyte%ORA9IR2> set autotrace on
ops$tkyte%ORA9IR2> select * from dual;
D
-
X
Execution Plan
----------------------------------------------------------
ERROR:
ORA-00904: "BYTES": invalid identifier
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
402 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
looks like your plan_table is botched.
You did see the "name is already used" error right?
try recreating your plan_table - which would involve dropping it (make sure it is really a plan table and not a table a developer is using to store, say, project plans or something in)
A reader, December 23, 2009 - 4:28 pm UTC
Respected Sir;
...that is not true.
sir assume DMT.
Assume table a has extents 1m,1.1m,1.2m,..
Table b has extents 10m,11m,12m,..
Assume I drop table a. As far as I know coalesce doesnt automatically happen in DMT.
Conside I didnt issue coalesce statement.
so when I table b needs an extent of 13mb, the free extents of table a would never be used.
Therefore they will be wasted.
am I wrong?
December 31, 2009 - 2:19 pm UTC
reader - I don't know what "that is not true" refers to.
... As far as I know coalesce doesnt automatically happen in
DMT.
...
automatically at some fixed point in time, in the future, by a background process - manually - later.
... so when I table b needs an extent of 13mb, the free extents of table a would
never be used.
...
You cannot say that, you have a series there - 1, 1.1, 1.2, ... (dot dot dot, and so on and so on).
If the first 10 extents of table A are contiguous, when you drop A, that would be 14.5mb - it would fit.
But in short, stop using dictionary managed, or if you do either
a) use initial=next and pctincrease = 0 (emulates a locally managed tablespace with uniform extents)
b) use initial =64k, pctincrease = 100 (sort of like system allocated extents)
and stop worrying about it.
... Therefore they will be wasted. ...
that in general would not be true, think about it please, there would be other segments in that tablespace - they would likely be used for something at some point.
A reader, January 04, 2010 - 2:21 pm UTC
Respected sir;
You have been really helpfull.
My final question :)
1-)
...automatically at some fixed point in time, in the future, by a background process - manually - later.
In DMT, How does coalesce happen automatically?
2-)
...You cannot say that, you have a series there - 1, 1.1, 1.2, ... (dot dot dot, and so on and so on).
...If the first 10 extents of table A are contiguous, when you drop A, that would be 14.5mb - it would fit.
If oracle combines the contiguous extents in DMT automatically, there is no need to manually execute "coalesce" statement.
Am I right?
January 04, 2010 - 4:23 pm UTC
1) smon does it.
2) in versions created in this century and near the end of last century - yes. In really old (7.ish) versions, the alter coalesce could be used to force it to happen "right then and there", you might have done this in the olden days before creating a new table immediately after dropping an old one.
link not working
Sasidhar, April 07, 2010 - 2:15 pm UTC
April 13, 2010 - 7:34 am UTC
drop your plan table and create the one for the current release - recreate your plan table, it is in a very old format.
run @?/rdbms/admin/utlxplan
to create it.
ROWNUM and EXISTS
Rajeshwaran, Jeyabal, October 23, 2010 - 4:05 am UTC
test@IRDST1> select index_name, column_name, column_position
2 from user_ind_columns
3 where index_name ='IX_IR_TEST_04'
4 order by 3;
INDEX_NAME COLUMN_NAME COLUMN_POSITION
------------------------------ ------------------------------ ---------------
IX_IR_TEST_04 NEW_MAX_DT 1
IX_IR_TEST_04 NEW_MIN_DT 2
IX_IR_TEST_04 ENC_KEY 3
IX_IR_TEST_04 MEMBER_ID 4
IX_IR_TEST_04 MEMBER_SRC_CD 5
IX_IR_TEST_04 ENC_NBR 6
IX_IR_TEST_04 DATA_SRC_KEY 7
IX_IR_TEST_04 DENIAL_CD 8
IX_IR_TEST_04 CONTRACT_ID 9
IX_IR_TEST_04 LOB_KEY 10
IX_IR_TEST_04 ENC_STATUS_KEY 11
11 rows selected.
Elapsed: 00:00:00.84
test@IRDST1>
test@IRDST1>
test@IRDST1>
test@IRDST1> select index_name, column_name, column_position
2 from user_ind_columns
3 where index_name ='IX_IR_TEST_020'
4 /
INDEX_NAME COLUMN_NAME COLUMN_POSITION
------------------------------ ------------------------------ ---------------
IX_IR_TEST_020 CONTRACT_ID 1
Elapsed: 00:00:00.90
test@IRDST1>
The statistics present in the table and Index are stale so thought of using dynamic sampling hint and Benchmarking results from Test Instance below (Test instance is just Exact copy of production Instance)
Query -1test@IRDST1> select /*+ dynamic_sampling(ir_test,3) */ 1
2 from ir_test
3 where CONTRACT_ID = 4
4 and rownum = 1
5 /
Elapsed: 00:00:01.90
Execution Plan
----------------------------------------------------------
Plan hash value: 4145087313
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 4207 (2)| 00:00:51 |
|* 1 | COUNT STOPKEY | | | | | |
|* 2 | INDEX RANGE SCAN| IX_IR_TEST_020 | 3355K| 12M| 4207 (2)| 00:00:51 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(ROWNUM=1)
2 - access("CONTRACT_ID"=4)
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
219 bytes sent via SQL*Net to client
246 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
Query -2test@IRDST1> select 1 from dual
2 where exists (
3 select /*+ dynamic_sampling(ir_test,3) */ 1
4 from ir_test
5 where CONTRACT_ID = 4
6 and rownum = 1
7 )
8 /
Elapsed: 00:00:01.95
Execution Plan
----------------------------------------------------------
Plan hash value: 3363643798
-----------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
-----------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 3 (-100| 00:00:01 | | | | | |
|* 1 | FILTER | | | | | | | | | | |
| 2 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 | | | | | |
|* 3 | COUNT STOPKEY | | | | | | | | | | |
| 4 | PX COORDINATOR | | | | | | | | | | |
| 5 | PX SEND QC (RANDOM) | :TQ10000 | 2 | 8 | 1 (0)| 00:00:01 | | | Q1,00 | P->S | QC (RAND) |
|* 6 | COUNT STOPKEY | | | | | | | | Q1,00 | PCWC | |
| 7 | PX PARTITION RANGE ALL| | 2 | 8 | 1 (0)| 00:00:01 | 1 | 50 | Q1,00 | PCWC | |
|* 8 | INDEX FULL SCAN | IX_IR_TEST_04 | 2 | 8 | 1 (0)| 00:00:01 | 1 | 50 | Q1,00 | PCWP | |
-----------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter( EXISTS (SELECT /*+ */ 0 FROM "ir_test" "ir_test" WHERE ROWNUM=1 AND "CONTRACT_ID"=4))
3 - filter(ROWNUM=1)
6 - filter(ROWNUM=1)
8 - access("CONTRACT_ID"=4)
filter("CONTRACT_ID"=4)
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
12 recursive calls
0 db block gets
657 consistent gets
1 physical reads
0 redo size
218 bytes sent via SQL*Net to client
246 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
60 sorts (memory)
0 sorts (disk)
1 rows processed
test@IRDST1> SELECT partitioned, degree
2 FROM user_indexes
3 WHERE index_name ='IX_IR_TEST_04'
4 /
PAR DEGREE
--- ----------------------------------------
YES 4
test@IRDST1> SELECT partitioned, degree
2 FROM user_indexes
3 WHERE index_name ='IX_IR_TEST_020'
4 /
PAR DEGREE
--- ----------------------------------------
NO 4
IX_IR_TEST_04 is Global Range partitioned on NEW_MAX_DT column.
Questions1) Why the Optimizer considers Index
IX_IR_TEST_04 ( having CONTRACT_ID in non-leading portion) to be better than Index
IX_IR_TEST_020 ( having CONTRACT_ID in leading portion) in Query-2?
2) Query-1 INDEX RANGE SCAN (
IX_IR_TEST_020) fetches 3355K rows took only
4 Logical IO. Query-2 INDEX FULL SCAN (
IX_IR_TEST_04) fetches 2 rows from Index segment by scanning all partitioned segments took
657 Logical IO. Is that 657 IO is due to Scanning all partitioned segments?
3)From the above two query, which would you consider better and why? Is that the Query-1 having 4 logical IO and cost 4207 or Query-2 having 657 logical IO and cost 3
October 25, 2010 - 5:34 pm UTC
tell me about statistics in place here - looks like _04 might have wacky stats on it.
3) obviously the one that just does 4 io's
'trick' to use in 9i
Rajeshwaran, Jeyabal, June 18, 2011 - 11:51 am UTC
June 20, 2011 - 9:51 am UTC
how often are you going to do that.
And why the heck would you ask this on this question - when it OBVIOUSLY should be asked on the other page???? Seems a big strange to find something you want to do on page 1 and go to a random page 2 to ask about it doesn't it?
A reader, December 30, 2011 - 12:42 am UTC
Hi Tom,
I am getting below error.
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as DEV3HOST
SQL> set autotrace on;
Cannot SET AUTOTRACE
Please help.I am very new to this.
Tuning
A reader, December 30, 2011 - 11:27 am UTC
Hi Tom,
Yes i got it now.Previously we use simply look at plan by pressing F5 for tuning and try to reduce the cost.so using sqltrace is better option for tuning???
how can i know if we have tkprof utility using 10.2.0 version of oracle ???
Thanks alot
December 30, 2011 - 11:43 am UTC
everyone has tkprof - it comes with every release of the database.
sql trace shows you what actually happened, real world information.
explain plan shows you what might or might not happen, and what we guessed would be the amount of data processed, which might or might not be right.
A reader, December 30, 2011 - 12:13 pm UTC
Hi Tom,
Thanks alot.
If you any doc for installation/setup tkprof can you please share.
December 30, 2011 - 4:32 pm UTC
Thanks
A reader, January 01, 2012 - 10:00 pm UTC
Thanks alot Tom now i am able to use tkprof.
But i am facing below error for sql trace :
Error: cannot fetch plan for statement_id 'PLUS4294967295'
but statistics is showing but not explain plan.Why ???
Please help.
January 02, 2012 - 8:31 am UTC
explain where and when you are getting this error, what 'command' are you running in order to get that error.
A reader, January 02, 2012 - 11:34 pm UTC
Hi Tom,
I am runing command in linux.Oracle Version 10.2.0
sqlplus / as sysdba
SQL > set autotrace trace only ;
sql > select * from temp_test ;
Execution Plan
----------------------------------------------------------
Error: cannot fetch plan for statement_id 'PLUS4294967295'
Statistics
----------------------------------------------------------
12 recursive calls
29 db block gets
212 consistent gets
0 physical reads
2248 redo size
839 bytes sent via SQL*Net to client
1773 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
1 rows processed
January 03, 2012 - 11:32 am UTC
do not do anything as sysdba
stop using sysdba
sysdba is special
sysdba is magic
sysdba is nothing to be used except for things like upgrading a database, backup, recovery. It shouldn't even be used for starting and stopping the database (sysoper is sufficient for that)
stop using sysdba
create your own account and use that.
sysdba works differently from other accounts. Using sysdba is like using root as your own personal account, no one would ever do that (and if they did - well, they deserve what they get - which will be a mess someday)
Auto Trace link is not working
Habib Memon, May 09, 2012 - 7:30 am UTC
May 10, 2012 - 3:30 am UTC
the like out
Talal, May 15, 2017 - 4:55 pm UTC
the like not work !
Many thanks
Broken Link
Nataraj, December 13, 2017 - 9:56 am UTC
December 14, 2017 - 8:29 am UTC
Go to Resources => Presentation Downloads and search for "autotrace"
SQL
SACHIN, March 10, 2018 - 4:06 am UTC
THIS ANS WAS CORRECT.