| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: Schedule Analyze using DBMS_STATS ???
This may be a little over-the-top for your needs, but it works for us.
We have a standard DBA-level user that we create in every instance.
This is a stored procedure within that instance. We schedule it using
DBMS_JOB.
Typically, we don't analyze every schema every time. Usage patterns
vary widely, so I wrote this to be schema-specific. It also creates a
log file in the /tmp directory, and sends output to the session with
DBMS_OUTPUT. You should be able to Window-icize this procedure
- it's written for UNIX.
There is an INSERT statement near the bottom, into a table called SEND_EMAIL. This is a table that uses a trigger to send the attached e-mail message. You can take this out if you don't have a similar mechanism.
HTH,
Mike
create or replace procedure gdt_analyze_schema
( p_schema_name IN VARCHAR2 ) AS
/*************************************************************************v_logfile_name VARCHAR2(64);
* *
* Name : GDT_ANALYZE_SCHEMA *
* Author : M. Vergara *
* Date : 19-Sept-2002 *
* Purpose : To compute fresh statistics for a specific schema. The *
* notion here is that this procedure will be executed from *
* the DBMS_JOB processor. *
* *
* Change Log: *
* Chg# Date Description *
* ---- ----------- --------------------------------- *
* *
*************************************************************************/ -- v_fh UTL_FILE.file_type; v_sdate DATE; v_edate DATE; v_host_name V$INSTANCE.host_name%TYPE;
/* Error handling variables */
v_error_code NUMBER;
v_error_message VARCHAR2( 200 );
--
BEGIN
DBMS_OUTPUT.enable( 200000 );
DBMS_OUTPUT.put_line( p_schema_name || ' Analysis started...' );
--
SELECT host_name
INTO v_host_name
FROM v$instance;
--
v_sdate := SYSDATE;
v_logfile_name := 'Analyze_' || p_schema_name;
v_fh := UTL_FILE.fopen( '/tmp', v_logfile_name, 'a' );
UTL_FILE.put_line( v_fh, '--------------------' );
UTL_FILE.put_line( v_fh, p_schema_name || ' Analysis started at ' ||
TO_CHAR( v_sdate, 'DD-MON-YYYY HH24:MI:SS' ));
UTL_FILE.fflush( v_fh );
--
UTL_FILE.put_line( v_fh, 'Compute Current Statistics' );
UTL_FILE.fflush( v_fh );
DBMS_UTILITY.analyze_schema( schema => p_schema_name, method => 'COMPUTE' );
--
UTL_FILE.put_line( v_fh, 'Compute Statistics on Indexed Columns' );
UTL_FILE.fflush( v_fh );
DBMS_UTILITY.analyze_schema( schema => p_schema_name,
method => 'COMPUTE',
method_opt => 'FOR ALL INDEXED COLUMNS' );
--
v_edate := SYSDATE;
UTL_FILE.put_line( v_fh, 'Analyze Complete at ' ||
TO_CHAR( v_edate, 'DD-MON-YYYY HH24:MI:SS' ));
UTL_FILE.fflush( v_fh );
--
INSERT INTO send_email( msg_to, msg_from, msg_subj, msg_text )
VALUES( 'mvergara', 'dbamon',
p_schema_name|| ' Analysis on ' || v_host_name,
'Analyze started at ' || TO_CHAR( v_sdate, 'DD-MON-YYYY HH24:MI:SS' ) ||
' and completed at ' || TO_CHAR( v_edate, 'DD-MON-YYYY HH24:MI:SS' ) ||
'. Check /tmp/' || v_logfile_name || ' on ' ||
v_host_name || ' for details.' );
COMMIT;
--
UTL_FILE.put_line( v_fh, 'Mail Sent and work committed.' );
UTL_FILE.fflush( v_fh );
UTL_FILE.fclose( v_fh );
--
EXCEPTION
WHEN OTHERS THEN
v_error_code := SQLCODE;
v_error_message := SUBSTR( SQLERRM, 1, 200 );
ROLLBACK;
UTL_FILE.put_line( v_fh, 'Exception Exit.' );
UTL_FILE.put_line( v_fh, 'ERROR! (' || v_error_code || ')' );
UTL_FILE.put_line( v_fh, 'ERROR : ' || v_error_message );
UTL_FILE.fflush( v_fh );
UTL_FILE.fclose( v_fh );
DBMS_OUTPUT.put_line( 'Exception Exit' );
DBMS_OUTPUT.put_line( 'ERROR! (' || v_error_code || ')' );
DBMS_OUTPUT.put_line( 'ERROR : ' || v_error_message );
END;
/
show errors
-----Original Message-----
Sent: Tuesday, June 03, 2003 4:55 AM
To: Multiple recipients of list ORACLE-L
Guys,
I would like to scedule the process of analyzing tables/indexes
using DBMS_STATS ?
Hope someone of u would have a script for the same.
can u share with me please ?!
BTW,Which is advisable : ANALYZE or DBMS_STATS ?
there was a discussion about the same on the list also.
but not found any conclusion yet.
anu suggestions !!!
the ENV is oracle 9.2.0.1/Win2K.
--
Please see the official ORACLE-L FAQ: http://www.orafaq.net
--
Author: Vergara, Michael (TEM)
INET: mvergara_at_guidant.com
Fat City Network Services -- 858-538-5051 http://www.fatcity.com
San Diego, California -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).
Received on Tue Jun 03 2003 - 11:19:49 CDT
![]() |
![]() |