This is the scenario:
- You traced the sql
- You trca-ed the trace file, which showed: Trace Analyzer executed successfully. There are no fatal errors in this log file.
- Yet when you open the html, there is nothing in there except “Directory alias does not exist in DBA_DIRECTORIES”.
http://damir-vadas.blogspot.com/2010/01/trace-analyzer-directory-alias-does-not.html
has one reason and solution, but that didn’t work for me. My oracle is
installed in Windows, TRCA$INPUT
and TRCA$OUTPUT are in lower case:
SQL> select DIRECTORY_NAME, DIRECTORY_PATH2 from dba_directories3 where DIRECTORY_NAME like 'TRC%';DIRECTORY_NAME DIRECTORY_PATH------------------------------ ---------------------------------------------------------------------------TRCA$OUTPUT c:\oracle\diag\rdbms\orcl\orcl\traceTRCA$INPUT c:\oracle\diag\rdbms\orcl\orcl\trace
But this didn't pose any problems,
so I had to search in other places.
After debugging trca
packages, I found out that if the size of the trace
file is too small, trcanlzr.sql would consider it is not really a trace file,
instead a text file containing the list of the trace files. Remember
there are 2 ways to use trcanlzr.sql:
SQL> start trcanlzr.sql largesql.trc <== your trace fileSQL> start trcanlzr.sql control_file.txt <== your text file
If the trace file size
is small, trcanlzr.sql will think it is the second usage. The logic is in tacpkg.lis:
-- if file is small then it means it is a control file with trace filenames in it, else is just one traceIF l_file_length < TO_NUMBER(trca$g.g_trace_file_min_size_bytes) THEN -- control file with multiple traces
Obviously this is a very
stupid assumption. The second stupid mistake trca made is that the output “Directory
alias does not exist in DBA_DIRECTORIES” bears no relationship with the real
root cause!
The default value for
this small size threshold is:
SQL> select p.value,p.default_value,p.low_value, p.high_value from TRCANLZR.TRCA$_TOOL_PARAMETER p where name='trace_file_min_size_bytes';VALUE DEFAULT_VALUE LOW_VALUE HIGH_VALUE------ -------------- ---------- ----------9999 9999 0 99999
You might think “LOW_VALUE”
is the low threshold, but according to the logic is in tacpkg.lis,
“VALUE” is actually the threshold. Update “VALUE” to 1, trcanlzr.sql can now successfully generate a report:
SQL> update TRCANLZR.TRCA$_TOOL_PARAMETER set value=1 where name='trace_file_min_size_bytes';
No comments:
Post a Comment