SQL Trace in Oracle
Hello,
I am a Software Engineer using Oracle 9i Client. We have a website which is using ASP at front-end,Oracle as a back-end and some dll which is created in VC++. This dll will interact with oracle. When the ASP pages gets executed, it will execute the dll which in turn execute the oracle SQL's. So, I want to see SQL statements which are executed in Oracle. This type of feature is available in MS SQL Server 2000 tool called Profiler.
Thanks
Golak Saha
Software Engineer
Hi,
Maybe have a look at this MOS note: Running SQL*Trace on an Applications Report [ID 1019231.6]
Regards Peter
Similar Messages
-
How to look at the SQL trace in Oracle
Hi,
How do we look for the SQL trace in Oracle?
With SQL trace I mean all the SQL statements being executed in Oracle database ( including select ).
Thanks........Thanks for a quick reply nbellam. I wonder if there is a way to find out the date and time when the sql was executed?
-
Generate Sql Trace in oracle reports
Hi,
My Reports version is 10.1.2.0.2 and I would like to see the trace files of the sql queries that are executed while generating a report using rwbuilder.
I tried using a Formula column, with
SRW.DO_SQL('ALTER SESSION SET SQL_TRACE=TRUE');
return(1);
Also, I enable system level trace to capture anything and everything that is being fired into DB from reports.
I tried,
ksh rwthinclient.sh report=$REPORT_FILE_PATH/Journal.rdf server=$REPORT_SERVER userid=$ORAUSERID/$ORAPASSWD@$REPORT_DATABASE destype=cache desformat=pdf TRACEFILE=ver1.trc TRACEOPTS=trace_all TRACEMODE=trace_replace RUN_DATE=$CurDate;
I do not get trace at all. Kindly help me out.Hi,
Maybe have a look at this MOS note: Running SQL*Trace on an Applications Report [ID 1019231.6]
Regards Peter -
Create sql trace files on client machine
Hi
oracle creates sql trace files on server side, what are possible and best ways of sharing those files with end users? is it possible to create them on client side instead?Dbb wrote:
Hi
Hi
oracle creates sql trace files on server side,
Yes
what are possible and best ways of sharing those files with end users?
Using shared directory. Use the parameters dump to point to it
is it possible to create them on client side instead?
No
. :-) any help with my english is wellcome :-) .does this mean sharing user_dump destination at linux level and then mounting it from client machines ( win xp )?is there any doc on this? -
What is SQL Trace and How to Use it .
Dear Experts .
1.) May You Please tell me What is the Purpose of SQL-Trace and How to use it ?
2.) What is purpose of T-codes SE30 and ST22 ?
Please it is urgent ...
Regards : RajneeshHi
SQL Trace transaction ST05: The trace list has many lines that are not related to the SELECT statement in the ABAP program. This is because the execution of any ABAP program requires additional administrative SQL calls. To restrict the list output, use the filter introducing the trace list.
The trace list contains different SQL statements simultaneously related to the one SELECT statement in the ABAP program. This is because the R/3 Database Interface - a sophisticated component of the R/3 Application Server - maps every Open SQL statement to one or a series of physical database calls and brings it to execution. This mapping, crucial to R/3s performance, depends on the particular call and database system. For example, the SELECT-ENDSELECT loop on a particular database table of the ABAP program would be mapped to a sequence PREPARE-OPEN-FETCH of physical calls in an Oracle environment.
The WHERE clause in the trace list's SQL statement is different from the WHERE clause in the ABAP statement. This is because in an R/3 system, a client is a self-contained unit with separate master records and its own set of table data (in commercial, organizational, and technical terms). With ABAP, every Open SQL statement automatically executes within the correct client environment. For this reason, a condition with the actual client code is added to every WHERE clause if a client field is a component of the searched table.
To see a statement's execution plan, just position the cursor on the PREPARE statement and choose Explain SQL. A detailed explanation of the execution plan depends on the database system in use.
Run time analysis transaction SE30 :This transaction gives all the analysis of an ABAP program with respect to the database and the non-database processing.
STEPS
Run time analysis transaction SE30
In Transaction SE30, fill in the transaction name or the program name which needs to be analyzed for performance tuning.
For our case, let this be ZABAP_PERF_TUNING
After giving the required inputs to the program, execute it. After the final output list has been displayed, PRESS the BACK button.
On the original SE30 screen, now click on ANALYZE button.
The percentage across each of the areas ABAP/ Database/System shows the percentage of total time used for those areas and load on these areas while running the program . The lesser the database load faster the program runs.
SQL Trace ST05
Starting the Trace:
To analyze a trace file, do the following:
Choose the menu path Test Performance Trace in the ABAP Workbench or go to Transaction ST05. The initial screen of the test tool appears. In the lower part of the screen, the status of the Performance Trace is displayed. This provides you with information as to whether any of the Performance Traces are switched on and the users for which they are enabled. It also tells you which user has switched the trace on.
Using the selection buttons provided, set which trace functions you wish to have switched on (SWL trace, enqueue trace, RFC trace, table buffer trace).
If you want to switch on the trace under your user name, choose Trace on. If you want to pass on values for one or several filter criteria, choose Trace with Filter.
Typical filter criteria are: the name of the user, transaction name, process name, and program name.
Now run the program to be analyzed.
Stopping the Trace:
To deactivate the trace:
Choose Test Performance Trace in the ABAP Workbench. The initial screen of the test tool appears. It contains a status line displaying the traces that are active, the users for whom they are active, and the user who activated them.
Select the trace functions that you want to switch off.
Choose Deactivate Trace. If you started the trace yourself, you can now switch it off immediately. If the performance trace was started by a different user, a confirmation prompt appears before deactivation-
Analyzing a Sample trace data: PREPARE: Prepares the OPEN statement for use and determines the access method.
OPEN: Opens the cursor and specifies the selection result by filling the selection fields with concrete values.
FETCH: Moves the cursor through the dataset created by the OPEN operation. The array size displayed beside the fetch data means that the system can transfer a maximum package size of 392 records at one time into the buffered area. -
Access Oracle from SQL Server using Oracle Provider for OLE DB
Using
- SQL Server 2000 SP4
- Oracle 10g
- Oracle10g Provider for OLE DB Version 10.1.0.4.0
- Oracle 10g client
Able to create linked server in SQL server to Oracle 10g and display list of tables in Oracle. However, when execute query, it gives
Server: Msg 7320, Level 16, State 2, Line 1
Could not execute query against OLE DB provider 'OraOLEDB.Oracle'.
OLE DB error trace [OLE/DB Provider 'OraOLEDB.Oracle' ICommandText::Execute returned 0x80040155].
Any idea what is the problem ?I'm having the same error message...But I'm connecting to a Oracle 8i DB......
I think this has to do with SP4 for SQL....I will test this tonight.... -
OCCI/ODBC application sql trace failure...
Hi,
I was doing the sql*net trace for an OCCI/ODBC Application writen in c++. I have an InstantClient on my PC. I was trying to access the Oracle through my C++ program to
compare the performance of OCCI and ODBC.
I was using the Oracle 10g(ver10.2.0.1.0 ), Oracle instant cilent(win32-10.2.0.3-20061115), and VS 8.0.
TNSNAMES.ora:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = host_name)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
(SID = ORCL)
LISTENER.ORA:(It was created by net manager.)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = F:\oracle\product\10.1.0\Db_3)
(SID_NAME = ORCL)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOST_NAME)(PORT = 1521))
The sqlnet.ora file was writen to trace the client sql. Fortunately, my C++ program can access the oracle and get my result back successfully. In the same time, the trace files
can be created, but when using the tkprof tool to explain it, it comes to the file with useless information.
One of the *.trc file explaind by tkprof tool:
Sort options: default
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
Trace file: ora21763.trc
Trace file compatibility: 8.00.04
Sort options: default
1 session in tracefile.
0 user SQL statements in trace file.
0 internal SQL statements in trace file.
0 SQL statements in trace file.
0 unique SQL statements in trace file.
327 lines in trace file.
Finally, I got TNS-12518 TNS-12564 error. I tried to add DIRECT_HANDOFF_TTC_LISTENER=OFF, but it didnt work. I traced the listener, the error occured in the listener.trc "
ntt2err: soc 464 error " and " nsbequeath: error reading REDIR/NSE msg".
I just cann't get the right trace file and cann't sovle the two errors(TNS-12518 TNS-12564). Can somebody give me some advices, please.Hi,
The TKPROF facility accepts as input an SQL trace file generated when SQL Trace has been turned on for the system or a session, not a SQL*NET trace file. A SQL*Net trace file is a dump of raw data packets and communications at the SQL*NET layer. If you want to get performance statistics from SQL beign executed by your application, then you need to turn on SQL Trace not SQL*MET tracing.
To enable SQL trace at the system level, you need to execute:
alter system set SQL_TRACE=TRUE
The NS-12518 TNS-12564 normally means you are running into some sort of resource deletion issue. This can be caused by various things. Make sure you are properly cleaning up and closing sessions in your application.
Are you performing some sort of stress test or have you just written a Multi-threaded test harness that executes different types of SQL with OCCI/ODBC?
HTH
J.B. -
Help! how to check the SQL run in Oracle?
Hi all,
I have a problem. the developer said the SQL written in Java code are not the one executed in Oracle DB. that mean the query is some how manipulated by some PL/SQL so the final query run in Oracle is different. So can someone teach me how to check the actual SQL run in Oracle?
Thanks a lot.
Regards,
JasonHi Michel Thanks. But it looks like the query stored in v$sqlarea is not the final executable SQL. for example, the code in application is "select column_A from default_table where column_A = ?" and this ? will be given some value in run time. the query stored in v$sqlarea will be like "select column_A from default_table where column_A = :1"... what is this :1?
Also if some PL/SQL procedure appends some condition to the SQL, is it possible to view the full query from database side?
ok, let me try trace and tkprof first. -
SQL TRACE for WEB deployed report
When I put
Alter Session Set sql_trace=TRUE
into the BEFORE Parameter Form trigger...
I get a trace file showing data on the one SQL in that trigger.
There is no TRACE output of the main query or any of the PL/SQL in the Program Units.
The report is invoked from company-wide intra-net.
I think it is Oracle Apps running in Linux server.
What am I doing wrong?
PS
I cannot execute this report from Report Builder.Hello,
Just a remark : if you are using Reports 9.0.4 / 10.1.2, you don't have to modify the reports , you can activate the SQL trace with the parameter SQLTRACE=YES
http://www.oracle.com/webapps/online-help/reports/10.1.2/topics/htmlhelp_rwbuild_hs/rwrefex/cmdline/common/cla_sqltrace.htm
Regards -
SQL performance slow -- oracle 10g to oracle 11g
Hi,
We are have two development server, here we can call server10 and server11.
Server’s having same hardware and OS, but different oracle version, server 10 and server 11 having oracle 10g and oracle 11g respectively.
Problem, when you run sql query in oracle 11g it’s very slow compare to oracle 10g server.
Here I have checked
1) sga size – comparatively 11g size is big
2) no full table scan
OS – SUN
DB: 11.1.0.7.0, 10.2.0.4.0mmee wrote:
Hi,
We are have two development server, here we can call server10 and server11.
Server’s having same hardware and OS, but different oracle version, server 10 and server 11 having oracle 10g and oracle 11g respectively.
Problem, when you run sql query in oracle 11g it’s very slow compare to oracle 10g server.
Here I have checked
1) sga size – comparatively 11g size is big
2) no full table scan
OS – SUN
DB: 11.1.0.7.0, 10.2.0.4.0If the query is running slow, the sga size should not be the first thing to check. PLease post the execution plans of the queries from both the servers. Please try to post the tkprof output of the trace of both. The reason for this that explain plan may lie to us about what has happened but trace would be the real picture only.
HTH
Aman....
PS: Don't forget to use the code tag and using the Preview tab to see how the code looks. A better formatted post would most likely get better attention and response. -
I need to capture bind values in SQL Trace. I am running Oracle 9.2.0.8. I will be running my queries from an application, not SQL Plus. I can use a after log on trigger to turn on trace. Has anyone done this with success? Are there any other ways to do this at the server level?
Thank you for your input
DavidHello David,
it is such easy ... you wouldn't believe it.
Have a look at the pl/sql procedure "dbms_system.set_ev", with this one you can do this on session level: http://www.oracleadvice.com/Tips/dbms_system.htm#SET_EV
There are also some other possibilities... but this should hit your question..
To turn on:
SQL> exec dbms_system.set_ev(<SID>, <SERIAL>, 10046, 12, '');
To turn off:
SQL> exec dbms_system.set_sql_trace_in_session(<SID>, <SERIAL>, FALSE);
Regards
Stefan -
SQL trace query parameters round 2
Hi,
This is a follow up of this topic:
SQL trace query parameters
My problem is no matter what i do, the queries in my trace file do not show the query paramaters.
I have tried several approach including this:
http://theblasfrompas.blogspot.com/2010/05/dbmsmonitor-for-tracing-from-oracle.html
Any idea why it isn't working? (I'm using Oracle XE 11g)
Thanksuser610868 wrote:
Hi,
This is a follow up of this topic:
SQL trace query parameters
My problem is no matter what i do, the queries in my trace file do not show the query paramaters.
I have tried several approach including this:
http://theblasfrompas.blogspot.com/2010/05/dbmsmonitor-for-tracing-from-oracle.html
Any idea why it isn't working? (I'm using Oracle XE 11g)
Thankshttp://www.lmgtfy.com/?q=oracle+sql_trace+level=4 -
Plz help me to understand sql trace
Hi,
i need your help to understand the sql trace and where exactly i should concentrate,
i am also going through docs,
your help is appreciated,
select count(rep)
from
(select /*+ leading(v1 v2) use_nl_with_index(v2) */ count(v1.val) rep from
(select rn, val from (select rownum rn, val from (select /*+ no_merge
no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact
use_weak_name_resl dynamic_sampling(0) no_monitoring */"FFPR_FFAMS_ID" val
from sys.ora_temp_1_ds_108308 t where "FFPR_FFAMS_ID" is not null group by
"FFPR_FFAMS_ID" having count("FFPR_FFAMS_ID") = 1)) where ora_hash(rn) <=
273538662) v1, (select /*+ index(t2) */ "FFPR_FFAMS_ID" val from
"DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS" t2) v2 where v2.val = v1.val
group by v1.val having count(v1.val) <= 2)
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.29 0 8131 0 1
total 3 0.00 0.30 0 8131 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 213 (recursive depth: 1)
select /*+ no_parallel_index(t,"FFPR_FFAMS_FK_I") dbms_stats
cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring
no_expand index(t,"FFPR_FFAMS_FK_I") */ count(*) as nrw,count(distinct
sys_op_lbid(692895,'L',t.rowid)) as nlb,count(distinct "FFPR_FFAMS_ID") as
ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as clf
from
"DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS" t where ("FFPR_FFAMS_ID" is not
null) and (TBL$OR$IDX$PART$NUM("DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS",
0,4,0,"ROWID") = :objn)
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 2.56 0 425 0 1
total 3 0.00 2.56 0 425 0 1
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 213 (recursive depth: 1)
select /*+ no_parallel_index(t,"FFPR_FFAMS_FK_I") dbms_stats
cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring
no_expand index(t,"FFPR_FFAMS_FK_I") */ count(*) as nrw,count(distinct
sys_op_lbid(692895,'L',t.rowid)) as nlb,count(distinct "FFPR_FFAMS_ID") as
ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as clf
from
"DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS" t where "FFPR_FFAMS_ID" is not
null
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 2.56 0 427 0 1
total 3 0.00 2.56 0 427 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 213 (recursive depth: 1)
select /*+ no_parallel_index(t,"FFPR_PK_I") dbms_stats cursor_sharing_exact
use_weak_name_resl dynamic_sampling(0) no_monitoring no_expand index(t,
"FFPR_PK_I") */ count(*) as nrw,count(distinct sys_op_lbid(692907,'L',
t.rowid)) as nlb,null as ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as
clf
from
"DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS" t where ("FFPR_ID" is not null
or "FFPR_PLAN_NAME" is not null) and
(TBL$OR$IDX$PART$NUM("DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS",0,4,0,
"ROWID") = :objn)
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 1.51 847 857 0 1
total 3 0.00 1.52 847 857 0 1
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 213 (recursive depth: 1)
select /*+ no_parallel_index(t,"FFPR_PK_I") dbms_stats cursor_sharing_exact
use_weak_name_resl dynamic_sampling(0) no_monitoring no_expand index(t,
"FFPR_PK_I") */ count(*) as nrw,count(distinct sys_op_lbid(692907,'L',
t.rowid)) as nlb,null as ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as
clf
from
"DM_FM_REPORTING_OWNER"."FM_FP_PLAN_RESULTS" t where "FFPR_ID" is not null
or "FFPR_PLAN_NAME" is not null
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 1.26 0 850 0 1
total 3 0.00 1.27 0 850 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 213 (recursive depth: 1)
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 13 0.00 0.03 0 0 0 0
Execute 13 0.00 1.32 43 242 29 9
Fetch 4 0.00 0.00 0 0 0 4
total 30 0.00 1.36 43 242 29 13
Misses in library cache during parse: 4
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 2945 0.00 1.04 0 0 0 0
Execute 3741 0.00 5.49 3137 12995 7050 203362
Fetch 3088 0.00 38.42 3344 39486 27 9811
total 9774 0.00 44.96 6481 52481 7077 213173
Misses in library cache during parse: 284
Misses in library cache during execute: 160
144 user SQL statements in session.
2814 internal SQL statements in session.
2958 SQL statements in session.Regards
nicHi,
i did the homework, but some how i dont seem to understand what oracle is doing behind
esp with hints like
select /*+ leading(v1 v2) use_nl_with_index(v2) */ count(v1.val)
/*+ no_parallel(t) no_parallel_index(t) dbms_stats
cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring
substrb(dump(min("XXX"),16,0,32),1,120),
substrb(dump(max("XXX"),16,0,32),1,120),i havent used this things any where in my program, but still they are used,
so i got confused, can you throw some light on this issue,
regards
nic -
Bind variables in DB Connect SQL Statement in Oracle
We are looking for ways to improve performance of DB Connect extract from an Oracle database.
An example command that is created by the Info-Package using a DB-Connect:
Current
SELECT "A", "B", "C", "D", "E", "F", "G", "H"
FROM "GSF_BW"."V_BW_FORCAST_FACT"
WHERE ("A" = '200904') AND ("B" BETWEEN '100801' AND '101412')
The calculated cost (calculated by Oracle Optimizer) is 25.145
Oracle recommends the usage of bind-variables.
In that case the Statement would need to look like:
SELECT "A", "B", "C", "D", "E", "F", "G", "H"
FROM "GSF_BW"."V_BW_FORCAST_FACT"
WHERE ("PG0R_SUBD" = :b1) AND ("ZCALMONTH" BETWEEN :b2 AND :b3)
This would reduce the cost to 11.000 which is 40% of the statement before.
My question now is: Can anything be done to influence the generation of the SQL statement to make it better performing?Hi,
It is always better to test yourself. Using bind variable is always a good practice and optimizer avoids hard parsing (soft parsing will be done here) if bind variables are used.
So yes, if this function is being executed several times frequently then second execution onwards it may run faster.
If you want to see actually what is happening behind it, trace it (using tkprof) and see the result.
See the below link to know more about SQL TRACE and tkprof.
http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/sqltrace.htm#PFGRF01020
Regards,
Avinash
Edited by: Avinash Tripathi on Nov 16, 2010 11:46 PM -
Hello,
Can someone tell me what is SQL trance and TKprof?
when we will apply and what need of this?
why i should give alter session set sql trace = true?
if someone could give me an idea of what is a TKprof do, would be apprecaited.if someone could give me an idea of what is a TKprof doThe doc has an idea : http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14211/sqltrace.htm#PFGRF01010
Nicolas.
Maybe you are looking for
-
How do I edit an eps file in Illustrator?
I bought some vector eps files and would like to edit the text in them. How would I go about doing so? Are there any tutorials that you could direct me to? Thanks in advance!
-
Ms-Active Directory integration with SAP 4.7 SR2 through LDAP Connector
Dear Gurus, Let me clarify the scenario: At our end, we are planning for SSO, we are integrating Microsoft ADS with SAP 4.7 IDES Following are the system details: SAP: IDES 4.7, on Windows 2000 Advance Server, Oracle 8.1.7.,Kernel-620 MS-Active Direc
-
I can't see my events from iPhoto (11 - 9.3.1). Only one event is in my library (the first one) and the last import that I made in iphoto is the first one . The others events disapear!! What can be happen? Please, someone could help me?
-
RVS 4000 Email responses that need addressing
I have been bounced around between Cisco and Linksys for months-. I have two simple questions- One I know the answer on- the second, I haven't a clue- I have corresponded with 12-15 people at Linksys, and Cisco- Their last answer is I should contact
-
Please, help me to make package
Hi! I like qutIM, new ICQ and Jabber client. But AUR has old version 0.1-1 and new 0.1.99 version is avaiable. Problem is that core of program needs to compile separately from ICQ and Jabber modules in this new version. I don't know, how write this i