通常需要删除测试数据库来清理环境(在夜间或定时计划),以便 QA 或开发团队可以根据最新的实际数据验证或调试架构和应用程序更改。但是,如果某库正在被使用时,将无法被删除。需要反复询问,才能找到使用者。为了解决这一问题,可以通过下面的脚本完成此功能。
# Lock timeout
SECONDS=60
# Exit "dbaccess" on error
export DBACCNOIGN=1
# Wait for any DIRTY READ sessions
export IFX_DIRTY_WAIT=$SECONDS
if [ $# != 1 ]
then
echo "Usage: $0 database" 1>&2
exit 1
fi
if [ "$(whoami)" != "gbasedbt" ]
then
echo "$0: must be run as gbasedbt" 1>&2
exit 2
fi
(
echo "SET LOCK MODE TO WAIT $WAIT;"
echo "DELETE FROM sysusers WHERE username != USER;"
echo "CLOSE DATABASE;"
echo "DROP DATABASE $1;"
) | dbaccess -e $1 &
PID=$! ; sleep 1
SID=$(onstat -g ses | awk '$4 == PID {print $1}' PID=$PID)
for i in $(onstat -g sql | fgrep " $1 " | cut -d" " -f1)
do
[ "$i" != "$SID" ] && onmode -z $i
done
wait