Store Proc 检查存在即删除

本文提供了一个简单的T-SQL脚本示例,用于检查指定的存储过程是否存在,并在存在的情况下将其删除。此脚本适用于数据库管理员和开发人员,有助于了解如何管理数据库中的存储过程。
if exists (select 1 from sysobjects where id= OBJECT_ID('PROC Name') )
drop procedure PROC Name
#! /bin/sh # Monitor and store core dumps of crashing processes # default configuration COREBASEDIR=/ext/faults MINFREESPACE=3000 MAXCOREDUMPS=20 LOCKDIR=/tmp/faultmonitor.lock UPLOADSERVER="" UPLOADTIMEOUT=60 MAXLOGENTRIES=100 get_config_dm() { params=$(ubus call ProcessFaults _get) if [ -n "$params" ]; then local value="" value=$(jsonfilter -s "$params" -e '@[@].MaxProcessFaultEntries') [ -n "$value" ] && MAXCOREDUMPS=$value value=$(jsonfilter -s "$params" -e '@[@].StoragePath') [ -n "$value" ] && COREBASEDIR=$value value=$(jsonfilter -s "$params" -e '@[@].MinFreeSpace') [ -n "$value" ] && MINFREESPACE=$value fi } get_config_dm if [ -z "$COREBASEDIR" ]; then exit 0 fi # Basic characteristics of the fault PID=$1 SIGNAL=$2 TIME=$3 if [ ! -z "$4" ]; then PID=$4 fi # For systems where the arguments are seperated by null bytes, translate # those in semi-colons (;). CMDLINE=$(tr \\0 ";" < /proc/$PID/cmdline) # Do not handle crash dumps of ourself if grep -q faultmonitor /proc/$PID/cmdline; then exit 0 fi # Compute the crash id and store the count of crashes mkdir -p $COREBASEDIR while ! mkdir $LOCKDIR 2> /dev/null; do # poor mans busy waiting mutex sleep 0 done COUNTFILE=$COREBASEDIR/count CRASHID=0 if [ -e $COUNTFILE ]; then CRASHID=$(cat $COUNTFILE) fi COUNT=$(expr $CRASHID + 1) # Store counter/crash id echo $COUNT > $COUNTFILE rmdir $LOCKDIR # Store in log FAULTSLOG=$COREBASEDIR/log LOGENTRIES=0 if [ -f $FAULTSLOG ]; then LOGENTRIES=$(wc -l $FAULTSLOG |awk '{print $1}') if [ $LOGENTRIES -ge $MAXLOGENTRIES ]; then # remove the oldest entries sed -i "1d" $FAULTSLOG fi fi # Compute local core dump path and check limits # note: those checks are racy COREDUMPPATH=$COREBASEDIR/dump/$CRASHID/ FREESPACE=$(\df -k $COREBASEDIR | tail -f -n 1 | awk "{ print \$4 }") if [ $FREESPACE -lt $MINFREESPACE ]; then COREDUMPPATH="" fi if [ $MAXCOREDUMPS -eq 0 ]; then COREDUMPPATH="" fi echo "$CRASHID $PID $SIGNAL $TIME $CMDLINE" >> $FAULTSLOG # Store details if ! test -z "$COREDUMPPATH" then ubus call ProcessFaults.ProcessFault _add "\ {\"parameters\":\ {\"Reason\": $SIGNAL,\ \"ProcessName\": \"$CMDLINE\",\ \"FaultLocation\": \"$COREDUMPPATH\",\ \"ProcessID\": \"$PID\",\ \"TimeStamp\": \"$TIME\"}}" mkdir -p $COREDUMPPATH for i in wchan maps smaps fdinfo "stat*"; do echo cp -r /proc/$PID/$i $COREDUMPPATH cp -r /proc/$PID/$i $COREDUMPPATH done ls -l /proc/$PID/fd/ > $COREDUMPPATH/fd-listing.txt gzip -c > $COREDUMPPATH/core.gz fi 上面这个脚本文件的作用逐行分析
09-13
ot@prplOS:/data/faults# cat /usr/lib/amx-faultmonitor/amx-faultmonitor_record .sh #! /bin/sh # Monitor and store core dumps of crashing processes # default configuration COREBASEDIR=/data/faults MINFREESPACE=3000 MAXCOREDUMPS=20 LOCKDIR=/tmp/faultmonitor.lock UPLOADSERVER="" UPLOADTIMEOUT=60 MAXLOGENTRIES=100 get_config_dm() { params=$(ubus call ProcessFaults _get) if [ -n "$params" ]; then local value="" value=$(jsonfilter -s "$params" -e '@[@].MaxProcessFaultEntries') [ -n "$value" ] && MAXCOREDUMPS=$value value=$(jsonfilter -s "$params" -e '@[@].StoragePath') [ -n "$value" ] && COREBASEDIR=$value value=$(jsonfilter -s "$params" -e '@[@].MinFreeSpace') [ -n "$value" ] && MINFREESPACE=$value fi } get_config_dm if [ -z "$COREBASEDIR" ]; then exit 0 fi # Basic characteristics of the fault PID=$1 SIGNAL=$2 TIME=$3 if [ ! -z "$4" ]; then PID=$4 fi # For systems where the arguments are seperated by null bytes, translate # those in semi-colons (;). CMDLINE=$(tr \\0 ";" < /proc/$PID/cmdline) # Do not handle crash dumps of ourself if grep -q faultmonitor /proc/$PID/cmdline; then exit 0 fi # Compute the crash id and store the count of crashes mkdir -p $COREBASEDIR while ! mkdir $LOCKDIR 2> /dev/null; do # poor mans busy waiting mutex sleep 0 done COUNTFILE=$COREBASEDIR/count CRASHID=0 if [ -e $COUNTFILE ]; then CRASHID=$(cat $COUNTFILE) fi COUNT=$(expr $CRASHID + 1) # Store counter/crash id echo $COUNT > $COUNTFILE rmdir $LOCKDIR # Store in log FAULTSLOG=$COREBASEDIR/log LOGENTRIES=0 if [ -f $FAULTSLOG ]; then LOGENTRIES=$(wc -l $FAULTSLOG |awk '{print $1}') if [ $LOGENTRIES -ge $MAXLOGENTRIES ]; then # remove the oldest entries sed -i "1d" $FAULTSLOG fi fi # Compute local core dump path and check limits # note: those checks are racy COREDUMPPATH=$COREBASEDIR/dump/$CRASHID/ FREESPACE=$(\df -k $COREBASEDIR | tail -f -n 1 | awk "{ print \$4 }") if [ $FREESPACE -lt $MINFREESPACE ]; then COREDUMPPATH="" fi if [ $MAXCOREDUMPS -eq 0 ]; then COREDUMPPATH="" fi echo "$CRASHID $PID $SIGNAL $TIME $CMDLINE" >> $FAULTSLOG # Store details if ! test -z "$COREDUMPPATH" then ubus call ProcessFaults.ProcessFault _add "\ {\"parameters\":\ {\"Reason\": $SIGNAL,\ \"ProcessName\": \"$CMDLINE\",\ \"FaultLocation\": \"$COREDUMPPATH\",\ \"ProcessID\": \"$PID\",\ \"TimeStamp\": \"$TIME\"}}" mkdir -p $COREDUMPPATH for i in wchan maps smaps fdinfo "stat*"; do echo cp -r /proc/$PID/$i $COREDUMPPATH cp -r /proc/$PID/$i $COREDUMPPATH done ls -l /proc/$PID/fd/ > $COREDUMPPATH/fd-listing.txt gzip -c > $COREDUMPPATH/core.gz fi oot@prplOS:/data/faults# ls count log 没有dump
最新发布
11-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值