<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Batch update_dbms_stats? in Data Management Questions</title>
    <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2300#M156</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks to all who responded.&amp;nbsp; After considering your replies and advice, I wrote the following bash shell script to perform the batch analyze operation.&amp;nbsp; I've tested it on my ArcSDE instance of ~1300 objects, and found that it works pretty well in my environment.&amp;nbsp; I'm releasing what I've created back to the community in hopes that someone else will find it useful.&amp;nbsp;&amp;nbsp; I've tried to generalize the script as much as possible to facilitate reuse by allowing users to configure the necessary input parameters up front.&amp;nbsp; If this is the wrong place for this (ArcScripts, perhaps?) I can post it elsewhere.&amp;nbsp; Any comments and suggestions for improvement are welcome.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

#!/bin/bash

##########################################################################
# Batch analyze script
# Query ArcSDE to get a list of all datasets in the database, then
# iterate through each owner.dataset to update DBMS statistics (ANALYZE).
# Output is logged to a file and optionally, a summary may be e-mailed to
# the ArcSDE administrator.
# Tested to work with ArcSDE/Oracle on RHEL 5.
# Author: Seth Peery, Virginia Polytechnic Institute and State University
# E-mail: sspeery@vt.edu
# Last Modified 2011-04-15
# Licensed under a Creative Commons Attribution 3.0 Unported License
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://creativecommons.org/licenses/by/3.0/
##########################################################################

# PREREQUISITE:
# Set the following variables to match your environment
# N.B. be sure to chmod the referent of PASSWORDFILE to 600!
OUT_DIR=/path/to/script/output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # logfile destination
PASSWORDFILE=$OUT_DIR/sdepass.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # a single-line file with sde password
SERVER_NAME="myserver.example.com"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # hostname of SDE server
DBMS_INSTANCE="my_TNS_entry"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # TNS entry for SDE's Oracle Instance
SEND_EMAIL=true&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # set to true to send $SUMMARYFILE
ADMIN_EMAIL="foo@example.com"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # admin's e-mail address
LAYERLIST=/tmp/allsdelayers.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # no real need to change this

# Now, process the above to set password and output location variables.
PASSWORD=$(cat $PASSWORDFILE | head -n 1)
LOGFILE=$OUT_DIR/analyze_log_$(date +%F)
SUMMARYFILE=$OUT_DIR/analyze_summary_$(date +%F)

# Write the opening banner.&amp;nbsp; Note that the first line truncates
# any existing logfile with the same name.
# If you want this to operate silently,
# replace 'tee -a' with '&amp;gt;&amp;gt;' and 'tee' with '&amp;gt;'.
echo '********************************************' | tee&amp;nbsp; $SUMMARYFILE $LOGFILE
echo '******* ArcSDE Batch Analyze Utility *******' | tee -a $SUMMARYFILE $LOGFILE
echo '********************************************' | tee -a $SUMMARYFILE $LOGFILE
echo 'Analyze operation initiated ' $(date) | tee -a $SUMMARYFILE $LOGFILE
echo "Logging output to $LOGFILE" | tee -a $SUMMARYFILE

# Here's the SQL command we send to SQL*PLUS
# to get a list of all the objects in sde.table_registry
{
echo "set pagesize 0";
echo "set feedback off";
echo "select owner || '.' || table_name from table_registry order by owner, table_name;";
} | sqlplus -s sde/$PASSWORD@$DBMS_INSTANCE &amp;gt; $LAYERLIST;

echo 'Processing' $(cat $LAYERLIST | wc -l ) 'layers...' | tee -a $SUMMARYFILE
echo 'Any errors encountered during this process will be listed below.' | tee -a $SUMMARYFILE
echo '----------------------------------------------------------------' | tee -a $SUMMARYFILE


# Iterate through the layer list and run sdetable -o update_dbms_stats.
numLayers=0
numProcessedOK=0

for i in $(cat $LAYERLIST);
do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Attempt to run Analyze on each layer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdetable -o update_dbms_stats -u sde -p $PASSWORD -t $i &amp;amp;&amp;gt; /tmp/dbstats.out;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Test for errors by grepping for the string "Error"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorsPresent=$(grep Error /tmp/dbstats.out | wc -l)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; let numLayers=$numLayers+1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ $errorsPresent -gt 0 ];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Log the ArcSDE error messages (anything that says "Error")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grep Error /tmp/dbstats.out | tee -a $LOGFILE $SUMMARYFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Log the last line of ArcSDE dbms_stats command output
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # as our indication of success
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tail -n 1 /tmp/dbstats.out &amp;gt;&amp;gt; $LOGFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; let numProcessedOK=$numProcessedOK+1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi
done

echo '----------------------------------------------------------------' | tee -a -a $SUMMARYFILE
echo 'Done.'
echo $numProcessedOK layers out of $numLayers analyzed OK. | tee -a $SUMMARYFILE $LOGFILE
echo 'Analyze operation completed' $(date) | tee -a $SUMMARYFILE $LOGFILE

if [ "$SEND_EMAIL" == "true" ];
then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUBJECT="$SERVER_NAME Analyze log for $(date +%F)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EMAIL=$ADMIN_EMAIL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EMAILMESSAGE=$SUMMARYFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /bin/mail -s "$SUBJECT" "$EMAIL" &amp;lt; $EMAILMESSAGE
fi

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;___________________________________________________&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Seth Peery&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Senior GIS Architect, Enterprise GIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Tech Geospatial Information Sciences&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Polytechnic Institute and State University&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Dec 2021 20:06:19 GMT</pubDate>
    <dc:creator>sspeery</dc:creator>
    <dc:date>2021-12-10T20:06:19Z</dc:date>
    <item>
      <title>Batch update_dbms_stats?</title>
      <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2297#M153</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I manage an ArcSDE installation at a large US research university in which feature class data for a single SDE instance is distributed across several dozen Oracle schema owners, enabling some measure of decentralized responsibility for data management within each of my academic and administrative departments.&amp;nbsp; I would like to improve my workflow for the DBMS statistics updates ("Analyze" from ArcCatalog) that need to happen before and after I execute a compress on the database.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm wondering if anyone here has had any luck running &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code jive_text_macro"&gt;sdetable -o update_dbms_stats&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;...in a batch operation for all feature classes in the table registry?&amp;nbsp; It is prohibitively time-consuming to run this command on the hundreds of feature classes that exist across all the departments' ArcSDE accounts - but if I understand the command reference, this command expects a '-t' argument specifying an individual table.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I could imagine wrapping this command in a shell or python script that would open grab a list of all the feature classes known in the repository across all schemas in the Oracle instance (via SQL querying table_registry?&amp;nbsp; by parsing the output of one of the command-line utilities?), then iterate across that list, and run 'analyze' for each. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there something I'm missing here?&amp;nbsp; This seems to be an awfully involved procedure to accomplish something that the documentation suggests needs to happen weekly, before and after each compress.&amp;nbsp; I cannot rely on each individual data-owning department to right click each of their feature classes and select "Analyze" at a time that is convenient for the Enterprise GIS division, so I need some way to automate this and perform analyze operations&amp;nbsp; database-wide, just like I do for compress.&amp;nbsp; The complexity of my proposed solutions suggest to me that I am missing something obvious and simple, which I hope to be the case.&amp;nbsp; If the price to pay for improving transaction efficiency on ArcSDE is to temporarily become the object of ridicule on a forum for overlooking the obvious, sign me up. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance for your help! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;___________________________________________________&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Seth Peery&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Senior GIS Architect, Enterprise GIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Tech Geospatial Information Sciences&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Polytechnic Institute and State University&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Mar 2011 21:06:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2297#M153</guid>
      <dc:creator>sspeery</dc:creator>
      <dc:date>2011-03-16T21:06:24Z</dc:date>
    </item>
    <item>
      <title>Re: Batch update_dbms_stats?</title>
      <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2298#M154</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Seth-&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's Jeremy Hazel, we worked together fall semester in 2009.&amp;nbsp; I'm interested to know if you are using any replication at all or are you only maintaining a single database?&amp;nbsp; I'm having some issues with compressing a replicated database and thought maybe you could help.&amp;nbsp; I've posted a thread on this forum here &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/26048-SDE-compression-and-One-way-replication"&gt;http://forums.arcgis.com/threads/26048-SDE-compression-and-One-way-replication&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We are using the sdetable -o update_dbms_stats within a batch file here before and after our compression operation but are not updating near as many tables as you.&amp;nbsp; We are specifying the tables to update stats on individually.&amp;nbsp; Would it be worth it for you to use python to iterate through the table_registry, grab the name of each table and write it out to the -t option of the sdetable -o update_dbms_stats command in a txt file, appending a new command for each table and then run the resulting txt file as a batch process?&amp;nbsp; Just a thought...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Mar 2011 21:36:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2298#M154</guid>
      <dc:creator>CharlesHarris</dc:creator>
      <dc:date>2011-03-16T21:36:29Z</dc:date>
    </item>
    <item>
      <title>Re: Batch update_dbms_stats?</title>
      <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2299#M155</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Run Script Toad or SQL Developer&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/************************************************* &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*Koray GUNDUZ (Ibb Cbs) - 2010&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*Procedure analyze all index and tables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;SET SERVEROUTPUT ON&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;DECLARE&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CURSOR Owner_Cur IS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT DISTINCT(OWNER) owner&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM sde.table_registry &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY owner;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CURSOR Index_Cur IS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT owner, index_name &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM dba_indexes &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE owner IN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT DISTINCT(owner) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM sde.table_registry) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND INDEX_TYPE = 'NORMAL'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY owner, index_name;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL_STMT VARCHAR2(200);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;BEGIN&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DBMS_OUTPUT.ENABLE (100000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOR IndexRec IN Index_Cur LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL_STMT := ('ALTER INDEX ' || IndexRec.owner || '.' || IndexRec.index_name || ' REBUILD');&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;nbsp;&amp;nbsp; DBMS_OUTPUT.PUT_LINE(SQL_STMT);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXECUTE IMMEDIATE SQL_STMT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;nbsp;&amp;nbsp; DBMS_OUTPUT.NEW_LINE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END LOOP;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOR OwnerRec IN Owner_Cur LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DBMS_OUTPUT.PUT_LINE('Analyzing schema : ' || OwnerRec.owner);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DBMS_STATS.GATHER_SCHEMA_STATS(OwnerRec.owner);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DBMS_OUTPUT.NEW_LINE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END LOOP;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;END;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Mar 2011 19:12:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2299#M155</guid>
      <dc:creator>H__KorayGUNDUZ</dc:creator>
      <dc:date>2011-03-21T19:12:52Z</dc:date>
    </item>
    <item>
      <title>Re: Batch update_dbms_stats?</title>
      <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2300#M156</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks to all who responded.&amp;nbsp; After considering your replies and advice, I wrote the following bash shell script to perform the batch analyze operation.&amp;nbsp; I've tested it on my ArcSDE instance of ~1300 objects, and found that it works pretty well in my environment.&amp;nbsp; I'm releasing what I've created back to the community in hopes that someone else will find it useful.&amp;nbsp;&amp;nbsp; I've tried to generalize the script as much as possible to facilitate reuse by allowing users to configure the necessary input parameters up front.&amp;nbsp; If this is the wrong place for this (ArcScripts, perhaps?) I can post it elsewhere.&amp;nbsp; Any comments and suggestions for improvement are welcome.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

#!/bin/bash

##########################################################################
# Batch analyze script
# Query ArcSDE to get a list of all datasets in the database, then
# iterate through each owner.dataset to update DBMS statistics (ANALYZE).
# Output is logged to a file and optionally, a summary may be e-mailed to
# the ArcSDE administrator.
# Tested to work with ArcSDE/Oracle on RHEL 5.
# Author: Seth Peery, Virginia Polytechnic Institute and State University
# E-mail: sspeery@vt.edu
# Last Modified 2011-04-15
# Licensed under a Creative Commons Attribution 3.0 Unported License
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://creativecommons.org/licenses/by/3.0/
##########################################################################

# PREREQUISITE:
# Set the following variables to match your environment
# N.B. be sure to chmod the referent of PASSWORDFILE to 600!
OUT_DIR=/path/to/script/output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # logfile destination
PASSWORDFILE=$OUT_DIR/sdepass.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # a single-line file with sde password
SERVER_NAME="myserver.example.com"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # hostname of SDE server
DBMS_INSTANCE="my_TNS_entry"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # TNS entry for SDE's Oracle Instance
SEND_EMAIL=true&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # set to true to send $SUMMARYFILE
ADMIN_EMAIL="foo@example.com"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # admin's e-mail address
LAYERLIST=/tmp/allsdelayers.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # no real need to change this

# Now, process the above to set password and output location variables.
PASSWORD=$(cat $PASSWORDFILE | head -n 1)
LOGFILE=$OUT_DIR/analyze_log_$(date +%F)
SUMMARYFILE=$OUT_DIR/analyze_summary_$(date +%F)

# Write the opening banner.&amp;nbsp; Note that the first line truncates
# any existing logfile with the same name.
# If you want this to operate silently,
# replace 'tee -a' with '&amp;gt;&amp;gt;' and 'tee' with '&amp;gt;'.
echo '********************************************' | tee&amp;nbsp; $SUMMARYFILE $LOGFILE
echo '******* ArcSDE Batch Analyze Utility *******' | tee -a $SUMMARYFILE $LOGFILE
echo '********************************************' | tee -a $SUMMARYFILE $LOGFILE
echo 'Analyze operation initiated ' $(date) | tee -a $SUMMARYFILE $LOGFILE
echo "Logging output to $LOGFILE" | tee -a $SUMMARYFILE

# Here's the SQL command we send to SQL*PLUS
# to get a list of all the objects in sde.table_registry
{
echo "set pagesize 0";
echo "set feedback off";
echo "select owner || '.' || table_name from table_registry order by owner, table_name;";
} | sqlplus -s sde/$PASSWORD@$DBMS_INSTANCE &amp;gt; $LAYERLIST;

echo 'Processing' $(cat $LAYERLIST | wc -l ) 'layers...' | tee -a $SUMMARYFILE
echo 'Any errors encountered during this process will be listed below.' | tee -a $SUMMARYFILE
echo '----------------------------------------------------------------' | tee -a $SUMMARYFILE


# Iterate through the layer list and run sdetable -o update_dbms_stats.
numLayers=0
numProcessedOK=0

for i in $(cat $LAYERLIST);
do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Attempt to run Analyze on each layer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdetable -o update_dbms_stats -u sde -p $PASSWORD -t $i &amp;amp;&amp;gt; /tmp/dbstats.out;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Test for errors by grepping for the string "Error"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorsPresent=$(grep Error /tmp/dbstats.out | wc -l)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; let numLayers=$numLayers+1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ $errorsPresent -gt 0 ];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Log the ArcSDE error messages (anything that says "Error")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grep Error /tmp/dbstats.out | tee -a $LOGFILE $SUMMARYFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Log the last line of ArcSDE dbms_stats command output
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # as our indication of success
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tail -n 1 /tmp/dbstats.out &amp;gt;&amp;gt; $LOGFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; let numProcessedOK=$numProcessedOK+1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi
done

echo '----------------------------------------------------------------' | tee -a -a $SUMMARYFILE
echo 'Done.'
echo $numProcessedOK layers out of $numLayers analyzed OK. | tee -a $SUMMARYFILE $LOGFILE
echo 'Analyze operation completed' $(date) | tee -a $SUMMARYFILE $LOGFILE

if [ "$SEND_EMAIL" == "true" ];
then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUBJECT="$SERVER_NAME Analyze log for $(date +%F)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EMAIL=$ADMIN_EMAIL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EMAILMESSAGE=$SUMMARYFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /bin/mail -s "$SUBJECT" "$EMAIL" &amp;lt; $EMAILMESSAGE
fi

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;___________________________________________________&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Seth Peery&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Senior GIS Architect, Enterprise GIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Tech Geospatial Information Sciences&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Polytechnic Institute and State University&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 20:06:19 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2300#M156</guid>
      <dc:creator>sspeery</dc:creator>
      <dc:date>2021-12-10T20:06:19Z</dc:date>
    </item>
    <item>
      <title>Re: Batch update_dbms_stats?</title>
      <link>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2301#M157</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Jeremy,&amp;nbsp; I'm not currently using replication, but would be happy to discuss this with you further offline to keep the current thread on-topic.&amp;nbsp; Send me an e-mail directly if you're still interested and we can chat further.&amp;nbsp; You can find all my contact information at &lt;/SPAN&gt;&lt;A href="http://gis.vt.edu"&gt;http://gis.vt.edu&lt;/A&gt;&lt;SPAN&gt;. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;___________________________________________________&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Seth Peery&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Senior GIS Architect, Enterprise GIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Tech Geospatial Information Sciences&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Virginia Polytechnic Institute and State University &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Hi Seth-&lt;BR /&gt;&lt;BR /&gt;It's Jeremy Hazel, we worked together fall semester in 2009.&amp;nbsp; I'm interested to know if you are using any replication at all or are you only maintaining a single database?&amp;nbsp; I'm having some issues with compressing a replicated database and thought maybe you could help.&amp;nbsp; I've posted a thread on this forum here &lt;A href="http://forums.arcgis.com/threads/26048-SDE-compression-and-One-way-replication"&gt;http://forums.arcgis.com/threads/26048-SDE-compression-and-One-way-replication&lt;/A&gt;.&lt;BR /&gt;&lt;BR /&gt;We are using the sdetable -o update_dbms_stats within a batch file here before and after our compression operation but are not updating near as many tables as you.&amp;nbsp; We are specifying the tables to update stats on individually.&amp;nbsp; Would it be worth it for you to use python to iterate through the table_registry, grab the name of each table and write it out to the -t option of the sdetable -o update_dbms_stats command in a txt file, appending a new command for each table and then run the resulting txt file as a batch process?&amp;nbsp; Just a thought...&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Apr 2011 19:02:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/batch-update-dbms-stats/m-p/2301#M157</guid>
      <dc:creator>sspeery</dc:creator>
      <dc:date>2011-04-15T19:02:36Z</dc:date>
    </item>
  </channel>
</rss>

