Конечно, можно использовать DBMS_SQL, DBMS_JOB...
А можно и так:
#!/bin/sh
#
# Analyze all tables
#
SQLFILE=/tmp/analyze.sql
LOGFILE=/tmp/analyze.log
echo @connect dbo/passwd@ > $SQLFILE
$ORACLE_HOME/bin/svrmgrl <<EOF | awk \
'/^TABLE/ { print "ANALYZE TABLE DBO." $2 \
" ESTIMATE STATISTICS"; print "/"; }'
>> $SQLFILE
connect dbo/passwd
SELECT 'TABLE', TABLE_NAME FROM all_tables WHERE owner = 'DBO';
EOF
echo exit >> $SQLFILE
cat $SQLFILE > $LOGFILE
cat $SQLFILE | $ORACLE_HOME/bin/svrmgrl >> $LOGFILE
cat $LOGFILE | /usr/bin/mailx -s 'Analyze tables' tlk@nbd.kis.ru
rm $SQLFILE
rm $LOGFILE
Anatoly Kuznetsov
tlk@nbd.kis.ru (2:5015/4.1)