-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrace_utils.pkb
More file actions
177 lines (153 loc) · 5.04 KB
/
Copy pathtrace_utils.pkb
File metadata and controls
177 lines (153 loc) · 5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
CREATE OR REPLACE PACKAGE BODY &&owner..trace_utils AS
v_serialno v$session.serial#%TYPE;
v_sql_id V$SQL.SQL_ID%TYPE;
PROCEDURE start_sql_trace IS
BEGIN
SYS.DBMS_SUPPORT.START_TRACE(waits=>TRUE, binds=>TRUE);
DBMS_OUTPUT.PUT_LINE
(
'SQL trace started, please execute your SQL. Tracefile_name: ' ||
&&owner..trace_utils.get_tracefile_name
);
END start_sql_trace;
--
PROCEDURE stop_sql_trace IS
BEGIN
IF v_sql_id IS NULL THEN
SYS.DBMS_SUPPORT.STOP_TRACE;
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace stopped. Tracefile_name in this session would be: ' ||
&&owner..trace_utils.get_tracefile_name
);
ELSE
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''sql_trace [SQL: ' || v_sql_id || ' ] off''';
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace stopped. See your SQL Tracefile_name: ' ||
&&owner..trace_utils.get_tracefile_name
);
v_sql_id := NULL;
END IF;
END stop_sql_trace;
--
PROCEDURE start_sql_trace (p_sqlid IN VARCHAR2) IS
BEGIN
v_sql_id := p_sqlid;
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''sql_trace [sql:' || p_sqlid || '] bind=true, wait=true''';
DBMS_OUTPUT.PUT_LINE
(
'SQL trace set for SQL ID ' || p_sqlid || ', please execute your SQL. Tracefile_name in this session: ' ||
&&owner..trace_utils.get_tracefile_name
);
DBMS_OUTPUT.PUT_LINE
(
'You can fetch the tracefile name in another session using: SELECT &&owner..trace_utils.get_tracefile_name FROM dual;'
);
END start_sql_trace;
--
PROCEDURE start_optimiser_trace IS
BEGIN
SYS.DBMS_SYSTEM.SET_EV(si=> SYS.dbms_support.mysid, se=>v_serialno, ev=>10053, le=>1, nm=>'');
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace started, please execute your SQL. Tracefile_name: ' ||
&&owner..trace_utils.get_tracefile_name
);
END start_optimiser_trace ;
--
PROCEDURE stop_optimiser_trace IS
BEGIN
IF v_sql_id IS NULL THEN
SYS.DBMS_SYSTEM.SET_EV(si=> SYS.dbms_support.mysid, se=>v_serialno, ev=>10053, le=>0, nm=>'');
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace stopped. Tracefile_name: ' ||
&&owner..trace_utils.get_tracefile_name
);
ELSE
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''trace[rdbms.SQL_Optimizer.*]off''';
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace stopped. See your SQL Tracefile_name: ' ||
&&owner..trace_utils.get_tracefile_name
);
v_sql_id := NULL;
END IF;
END stop_optimiser_trace ;
--
PROCEDURE start_optimiser_trace (p_sqlid IN VARCHAR2) IS
BEGIN
v_sql_id := p_sqlid;
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''trace[rdbms.SQL_Optimizer.*][sql:' || p_sqlid || ']''';
DBMS_OUTPUT.PUT_LINE
(
'Optimizer trace started, please execute your SQL. Tracefile_name in this session would be : ' ||
&&owner..trace_utils.get_tracefile_name
);
DBMS_OUTPUT.PUT_LINE
(
'You can fetch the tracefile name in another session using: SELECT &&owner..trace_utils.get_tracefile_name FROM dual;'
);
END start_optimiser_trace ;
--
FUNCTION get_tracefile_name RETURN VARCHAR2 IS
v_name v$diag_info.value%TYPE;
BEGIN
SELECT
regexp_substr(value,'[^/]+$') AS trace_file
INTO
v_name
FROM
v$diag_info
WHERE
name = 'Default Trace File';
-- dbms_output.put_line('Default trace file name: ' || v_name);
RETURN v_name;
END get_tracefile_name;
--
FUNCTION get_tracefile ( p_file_name IN VARCHAR2 ) RETURN trace_coll
PIPELINED
IS
PRAGMA autonomous_transaction;
out_rec trace_record := trace_record(NULL);
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE &&owner..trace_file LOCATION (''' || p_file_name || ''')';
FOR i IN (
SELECT
text
FROM
&&owner..trace_file
) LOOP
out_rec.text := i.text;
PIPE ROW ( out_rec );
END LOOP;
return;
END get_tracefile;
--
FUNCTION get_tkprof ( p_file_name IN VARCHAR2 ) RETURN trace_coll
PIPELINED
IS
PRAGMA autonomous_transaction;
out_rec trace_record := trace_record(NULL);
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE &&owner..tkprof LOCATION (''' || p_file_name || ''')';
FOR i IN (
SELECT
text
FROM
&&owner..tkprof
) LOOP
out_rec.text := i.text;
PIPE ROW ( out_rec );
END LOOP;
return;
END get_tkprof;
BEGIN
SELECT serial#
INTO v_serialno
FROM v$session
WHERE sid = SYS.dbms_support.mysid;
END trace_utils;
/
SHO ERR