免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2046 | 回复: 2
打印 上一主题 下一主题

如何将数据库中表的锁方式改为行的方式? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-06 17:30 |只看该作者 |倒序浏览
如何将数据库中表的锁方式改为行的方式?

论坛徽章:
0
2 [报告]
发表于 2005-12-06 18:08 |只看该作者
alter table tablename lock mode(row);

论坛徽章:
0
3 [报告]
发表于 2005-12-07 16:58 |只看该作者
下列shell把数据库中所有用户表改为行锁模式:

#!/usr/bin/ksh
###############################################################################
#
#       Module:         page_locking.sh
#       Author:         Peter R. Schmidt
#       Description:    Change all tables to row level locking
#
#        Argument 1        Database Name
#
#       Change Log
#
#         Date    Name               Description.................
#       07/14/99  Peter R. Schmidt   Start Program
#
###############################################################################

OUTPUT=row_locking.out
TMPFILE=row_locking.tmp
FLAG_FAILED=false
FLAG_RETRY=false
MAX_RETRIES=50

if [ $# != 0 ]
then
        DATABASE=$1
else
        echo "Usage: row_locking.sh [database name] [Retry #]"
        exit 1
fi

if [ $# = 2 ]
then
        FLAG_RETRY=true
        NUM_RETRY=$2
else
        FLAG_RETRY=false
        NUM_RETRY=0
fi

if [ -f $OUTPUT -a $FLAG_RETRY = false ]
then
        rm -f $OUTPUT
fi

if [ -f $TMPFILE ]
then
        rm -f $TMPFILE
fi

UDATE=`date`
echo "----------------------------------------------------------------------" | tee -a $OUTPUT
echo "Convert Informix tables to ROW level locking - $UDATE" | tee -a $OUTPUT
echo "----------------------------------------------------------------------" | tee -a $OUTPUT

if [ $FLAG_RETRY = true ]
then
        UDATE=`date` | tee -a $OUTPUT
        echo "RETRY $NUM_RETRY on $UDATE" | tee -a $OUTPUT
        echo "----------------------------------------------------------------------" | tee -a $OUTPUT
fi

echo "Collecting table info from the systables table..." | tee -a $OUTPUT
        
dbaccess <<-EOF1 2>&1 | tee -a $OUTPUT
        database $DATABASE;
        unload to '$TMPFILE' delimiter "|"
        select tabname
        from systables
        where locklevel <> 'R' and tabid > 99 and tabtype = 'T'
        order by 1;
EOF1

echo "unload completed" | tee -a $OUTPUT

echo "----------------------------------------------------------------------" | tee -a $OUTPUT

for TABLE in `awk '{ print $1 }' FS='|' $TMPFILE`
do

        UDATE=`date +%D-%T`
        echo | tee -a $OUTPUT
        echo "Attempting to alter table $TABLE on $UDATE" | tee -a $OUTPUT
        echo | tee -a $OUTPUT
       
        dbaccess >> $OUTPUT 2>&1 <<-EOF2
                database $DATABASE;
                alter table $TABLE lock mode (ROW);
        EOF2
       
        if [ $? != 0 ]
        then
                        echo "Note: alter on table $TABLE FAILED" | tee -a $OUTPUT
                FLAG_FAILED=true
        else
                        echo "Note: alter on table $TABLE SUCCESSFUL" | tee -a $OUTPUT
        fi

        echo | tee -a $OUTPUT
        echo "----------------------------------------------------------------------" | tee -a $OUTPUT
        done

rm -f $TMPFILE

echo
echo "Program completed - results in $OUTPUT"

if [ $FLAG_FAILED = true ]
then
        UDATE=`date +%D-%T`
        echo "Note: some tables did not get converted to row locking" | tee -a $OUTPUT
        if [ $NUM_RETRY -ge $MAX_RETRIES ]
        then
                echo "Exceeded maximum number of retries of $MAX_RETRIES" | tee -a $OUTPUT
                echo "No more attempts will be made" | tee -a $OUTPUT
        else
                echo "Sleep 10 seconds on $UDATE..." | tee -a $OUTPUT
                sleep 10
                NUM_RETRY=`expr $NUM_RETRY + 1`
                exec $0 $DATABASE $NUM_RETRY
        fi
fi
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP