[20260506]写一个脚本验证ipcs -m的shmid值.txt

[20260506]写一个脚本验证ipcs -m的shmid值.txt

--//前几天在11g,21c下分别测试ipcs -m输出的shmid值。根据前面测试得到的公式写一个测试脚本,验证是否正确。
--//11g  2^15 *(B+S+1)  B:前次相乘因子开始0, S=前次启动需要共享内存段数量,开始0.
--//21c  2^16 *(B+S/2)  B:前次相乘因子 开始0,S 前次启动共享内存段数量, 开始0.

--//上午bash shell脚本中使用bc,开始就不想使用bc,脑子没转过弯来,实际上将公式修改如下:
--//21c  2^15 *(2B+S)  B:前次相乘因子 开始0,S 前次启动共享内存段数量, 开始0.

--//下次计算使用2*B的值,这样一定是整形,就可以避开使用bc。
--//修改使用变量B2表示2*B

$ cat shmid21c.sh
#! /bin/bash
B2=${1:-0}
S=${2:-0}
echo START B2=$B2 , S=$S
#for i in $(seq 16 64 1056)
#for i in $(seq 1056 -64 16)
for i in $(shuf -i 1-17 | awk '{print $1 * 64}')
do
    #echo $i
    sudo -E sysctl -w kernel.shmmax=$((i*1024*1024))
    sqlplus -s -l / as sysdba < /dev/null
        startup nomount force
        quit
EOF

    B2=$[ B2+S ]                        #21c
    value2=$[ 2**15*B2 ]                #21c

    value1=$(ipcs -m | grep -m 1 ^0x | awk '{print $2}')
    S=$(ipcs -m | grep  -c ^0x)
    echo -n MIDDLE B2=$B2 , S=$S ,

    if [ "$value1" = "$value2" ];then
        echo "Actual Value = " $value1 , "Calculated Value =" $value2 , "Ok"
    else
        echo "Actual Value = " $value1 , "Calculated Value =" $value2 , "Fail"
    fi
done
echo END B2=$B2 , S=$S

--//测试结果如下:
$ . shmid21c.sh 231 5
START B2=231 , S=5
kernel.shmmax = 67108864
MIDDLE B2=236 , S=20 ,Actual Value =  7733248 , Calculated Value = 7733248 , Ok
kernel.shmmax = 201326592
MIDDLE B2=256 , S=9 ,Actual Value =  8388608 , Calculated Value = 8388608 , Ok
kernel.shmmax = 134217728
MIDDLE B2=265 , S=12 ,Actual Value =  8683520 , Calculated Value = 8683520 , Ok
kernel.shmmax = 738197504
MIDDLE B2=277 , S=5 ,Actual Value =  9076736 , Calculated Value = 9076736 , Ok
kernel.shmmax = 268435456
MIDDLE B2=282 , S=8 ,Actual Value =  9240576 , Calculated Value = 9240576 , Ok
kernel.shmmax = 939524096
MIDDLE B2=290 , S=5 ,Actual Value =  9502720 , Calculated Value = 9502720 , Ok
kernel.shmmax = 335544320
MIDDLE B2=295 , S=7 ,Actual Value =  9666560 , Calculated Value = 9666560 , Ok
kernel.shmmax = 1073741824
MIDDLE B2=302 , S=5 ,Actual Value =  9895936 , Calculated Value = 9895936 , Ok
kernel.shmmax = 469762048
MIDDLE B2=307 , S=6 ,Actual Value =  10059776 , Calculated Value = 10059776 , Ok
kernel.shmmax = 1006632960
MIDDLE B2=313 , S=5 ,Actual Value =  10256384 , Calculated Value = 10256384 , Ok
kernel.shmmax = 1140850688
MIDDLE B2=318 , S=4 ,Actual Value =  10420224 , Calculated Value = 10420224 , Ok
kernel.shmmax = 671088640
MIDDLE B2=322 , S=5 ,Actual Value =  10551296 , Calculated Value = 10551296 , Ok
kernel.shmmax = 603979776
MIDDLE B2=327 , S=5 ,Actual Value =  10715136 , Calculated Value = 10715136 , Ok
kernel.shmmax = 805306368
MIDDLE B2=332 , S=5 ,Actual Value =  10878976 , Calculated Value = 10878976 , Ok
kernel.shmmax = 536870912
MIDDLE B2=337 , S=6 ,Actual Value =  11042816 , Calculated Value = 11042816 , Ok
kernel.shmmax = 402653184
MIDDLE B2=343 , S=6 ,Actual Value =  11239424 , Calculated Value = 11239424 , Ok
kernel.shmmax = 872415232
MIDDLE B2=349 , S=5 ,Actual Value =  11436032 , Calculated Value = 11436032 , Ok
END B2=349 , S=5

--//开始的B2很容易确定,21c使用shmid值除以2^15.


请使用浏览器的分享功能分享到微信等