blob: 494b22dc94169fb07d65c198199cdde926da8576 [file] [log] [blame]
#!/bin/sh
# @@@ START COPYRIGHT @@@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# @@@ END COPYRIGHT @@@
#
# This scripts is called by USAS.sh only.
# 1. Arguments 1-3 are the catalog, schema, and table.
# Argument 4 is the object type ('BT' or 'MV').
# Argument 5 is a number.
# 2. Convert names from internal to external format:
# Double all double quotes and surround with double quotes.
# 3. Run update statistics against table with NECESSARY keyword.
# 4. Update USTAT_AUTO_TABLE with current time, status (0 if no errors),
# and error string. When performing update, the SQL command must have all
# single quotes within the internal format names doubled.
if [[ "$2" = "" || "$6" != "" ]]; then
echo "Usage: $0 <cat> <sch> <tbl> <objtype> <id>"
exit
fi
cat="$1"
sch="$2"
tbl="$3"
objtype=$4
id=$5
if [ `uname` != "Linux" ]; then
if [[ $mxcidir != "" && $mxlibdir != "" ]]; then
# This is test debug environment. Set vars accordingly
MXCI="$mxcidir/mxci"
autoloc="$mxlibdir"
else
# This is a production environment.
MXCI="/usr/tandem/sqlmx/bin/mxci"
autoloc="/usr/tandem/mx_ustat"
fi
sys=$1 # The system name
else
export SQLMX_TERMINAL_CHARSET=UTF8
MXCI=sqlci
autoloc=$TRAF_HOME/export/lib/mx_ustat
alias print=echo
sys=NSK
fi
AUTODIR="$autoloc/autodir"
runlog="$AUTODIR/USTAT_RUNLOG${id}"
progressDir="$AUTODIR/USTAT_AUTO_PROGRESS"
# Print process ID to run${id} file so that StopAutoStats can kill.
# (Note: this will not necessarily kill update stats).
print "$$" > ${progressDir}/run${id}
# 1. Incoming names must be correctly capitalized.
# 2. Convert names to external format.
extcat=$(print "$cat" | sed 's/"/""/g')
extsch=$(print "$sch" | sed 's/"/""/g')
exttbl=$(print "$tbl" | sed 's/"/""/g')
extName="\"$extcat\".\"$extsch\".\"$exttbl\""
print "Runlog${id}: Received args: cat=$1, sch=$2, tbl=$3, type=$4, id=$5" > $runlog
print "Runlog${id}: Running ustats for table (external format name):" >> $runlog
print " $extName." >> $runlog
print "MXCI=$MXCI" >> $runlog
print "autoloc=$autoloc" >> $runlog
autoTable="MANAGEABILITY.HP_USTAT.USTAT_AUTO_TABLES"
# 3. Run update statistics
if [[ $objtype = "BT" ]]; then objtype="TABLE"; fi
query="CONTROL QUERY DEFAULT USTAT_AUTOMATION_INTERVAL '0';"
query="$query MAINTAIN $objtype $extName, UPDATE STATISTICS 'ON NECESSARY COLUMNS';"
errs=$(print "$query" | $MXCI | grep "\*\*\* ERROR" | sed -n '1p')
# 4. Update USTAT_AUTO_TABLE
# Get errors
errnum=0
errtext=""
if [[ "$errs" != "" ]]; then
# Get errors.
errnum=$(print "$errs" | cut -d" " -f2) # Get rid of text
errnum=${errnum#"ERROR["} # Get rid of surrounding word and brackets.
errnum=${errnum%"]"}
errtext=${errs#"*** ERROR[$errnum]"}
print "Runlog${id}: Ustat err: $errnum, $errtext" >> $runlog
else
print "Runlog${id}: Ustat: No errors." >> $runlog
fi
# Internal name must have single quotes duped for queries
intcat=$(print "$cat" | sed "s/'/''/g")
intsch=$(print "$sch" | sed "s/'/''/g")
inttbl=$(print "$tbl" | sed "s/'/''/g")
if [[ $mxcidir != "" && $mxlibdir != "" ]]; then
# This is test debug environment. Set time to a value for testing.
time="1776-07-04 12:00:00"
else
time=$(date +"%Y-%m-%d %H:%M:%S")
fi
update="UPDATE $autoTable SET
LAST_RUN_GMT = TIMESTAMP '$time',
LAST_RUN_LCT = TIMESTAMP '$time',
RUN_STATUS = $errnum,
ERROR_TEXT = _UCS2'$errtext'
WHERE CAT_NAME = _UCS2'$intcat' AND
SCH_NAME = _UCS2'$intsch' AND
TBL_NAME = _UCS2'$inttbl';"
# Update USTAT_AUTO_TABLE with update stats output and assign
# output to 'errs' variable.
errs=$(print "$update" | $MXCI | grep "\*\*\* ERROR" | sed -n '1p')
# Check for errors from update and log the result.
errnum=0
errtext=""
if [[ "$errs" != "" ]]; then
# Get errors.
errnum=$(print "$errs" | cut -d" " -f2) # Get rid of text
errnum=${errnum#"ERROR["} # Get rid of surrounding word and brackets.
errnum=${errnum%"]"}
errtext=${errs#"*** ERROR[$errnum]"}
print "Runlog${id}: Update auto table err: $errnum, $errtext" >> $runlog
else
print "Runlog${id}: Update auto table: No errors." >> $runlog
fi