Skip to content

aix

Aix clone cause the user process limit value changed

aix 5以及aix6系统在克隆以后,导致oracle用户的process数量限制初始化为128.在一切ha搭建或者主备机切换过程会导致监听以及中间件,客户端时而可连时而不可连接的状况。

在实施oracle要求中这个参数应该设置为65536或者大于65536.可以通过在root用户中进去smit chgsys修改,当然也可以用命令 chdev -l sys0 -a maxuproc ‘65536’来修改。

最近几个客户在克隆系统后,都遭遇了此类问题。希望对大伙有帮助,能引起注意。

AWK常用语法

关于AWK
1. awk非常适合于结构化的文本文件(行、列数据)复杂处理。相对于sed而言,它可进行复杂的编程处理,并且可以产生复杂的报表输出。
2. awk通常有三个版本,旧awk、nawk(新)、gawk。Solaris下建议用nawk,因为旧awk有很多功能不支持,例如数学运算幂 ^ ,函数getline,system等。
3. 基本语法:awk ‘pattern{action}’ filename 其中action内容可扩充,也可以有多个action。
执行顺序:awk一行行读入输入文件,顺序执行‘’内内容,按模式匹配来采取动作。
其他调用:awk可用内部变量和函数,条件与循环语句,也可执行数学运算和字符串操作。此外,可以使用BEGIN和END来执行处理前预操作和处理后后继 操作。
A. 常用内部变量:NR(当前行数)NF(字段总数)$0(当前整行)$1(第一个记录)
FS(字段分隔符)OFS(输出字段分隔符)ORS(输出记录分隔符)
B.模式 pattern可以是/ /包含的匹配形式,也是条件语句如$3<10
C.BEGIN(处理文件前的action,常包含FS、OFS等)、END(处理文件后的action)
D.条件与循环:if else(next,exit),for do while (continue,break)
E.数学运算符 + – * / % ^;数学函数sin int;字符串函数length index gsub substr等
F.数组与关联数组:a[1]; a[$1]; a[$0]; a[b[i]]
F.输出重定向和管道:> >> | ;awk内部命令:getline、system等
4.awk的三种调用方式: awk ‘pattern{action}’ filename1,filename2
awk –f myscript.awk filename1,filename2
#!/bin/nawk –f … … 执行:myscript.awk filename

特别注意事项:
———————————————————————————————————————-
A.从window拷贝语法句到Unix中,行结尾可能有不识别的字符会导致语法错误
B.写script文件时,BEGIN或END后必须紧跟{
C.所有action语句必须放在{ }中,否则提示语法错误。例如不可直接写print
D.单独的赋值或pattern条件句没有{ }则默认print $0;例如{ }外面的i=1
E.if条件块必须放在action中,也就是必须要有{ }来包含
F.条件的判断“相等”须用= =,而不是=(赋值);例如,if($1= =100)
G.输出多列须用“,”(逗号)隔开;for循环中间隔符为“;”而不是“,”
实例演练:(filename为以下文件,注意:第二列用“-”隔开而非空格,以避免与FS冲突)
ID Name Age City Country Tel Salary Children
1001 Steven 25 NY U.S.A +01-02-323222 $4900 2
1002 Huang-Yu 30 BJ CHN +86-10-36789966 ¥6000 1
1003 Fish-Mad 27 SG SG +65-67456632 $3000 3
1004 Vale-Kiss 46 LD ENG +44-20-87634321 $6280 3
以下分基础实例:1.无pattern 的action实例 2.有pattern的action实例
3.BEGIN,END,FS,OFS实例 4.if else; for while循环实例
5.数学运算与字符串操作实例
高级实例:6.数组与关联数组运用实例 7.多文件运用NR FNR实例
8.输出重定向和getline实例 1

基 础 篇
1.无pattern的action实例
a.awk ‘{print NR $1 $NF}’ data.txt 打印行号,第一列和最后一列,中间无分隔符
b.awk ‘{print $1,$NF}’ data.txt 打印第一列和最后一列,并且中间有分隔符
c.awk ‘{print $0,$NF+10}’ data.txt 打印整行,并打印 最后一行加上10的结果
2.有pattern的action实例
a.awk ‘/[0-9]/’ data.txt 打印记录中任意列包含数字0-9的行
b.awk ‘/01/||/02/’ data.txt 打印包含01或者02的行
c.awk ‘/01/,/02/’ data.txt 打印既包含01又包含02的行;等同awk ‘/01/&&/02’
d.awk ‘$1= =1001{print $2}’ data.txt 打印符合第一列等于1001的第二列
e.awk ‘$2= =”Steven”{print}’data.txt 打印符合第二列等于Steven的那些行
f.awk ‘$3>20&&$3<30’ data.txt 打印第三列在20到30之间的那些行
g.nawk ‘$3*$NF<100’ data.txt 打印第三列和最后一列乘积小于100的那些行
h.awk ‘$6~/01/{print $2}’ data.txt 打印符合仅仅第六列里包含01那些行的第二列
i.awk ‘NR>3{print $1,$2}’ data.txt 从第四行才开始打印第一列和第二列
3.有BEGIN、END并包含FS、OFS的实例
a.awk –F”+” ‘{print $1}’ data.txt 按+为分隔符来分隔列,并打印第一列
b.nawk –F’[+\t$]’ ‘{print $6,$7,$8,$9}’data.txt 按+或\t或$都可作分隔符,并打印指定列
c.nawk ‘BEGIN{FS=”[\t+$]”}{print $6,$8,$9}’data.txt
按+,\t,$(顺序无所谓)为分割符,并打印指定列
d.nawk ‘BEGIN{FS=”[\t+$]”;OFS=”%”}{print $6,$7,$8,$9}’ data.txt
按+,\t,$为分割符,用%作输出分隔符打印指定列
e.nawk –F‘[ [ ] ]’ ‘{print $1}’ data.txt 按 [ 或 ] 为分隔符,并打印第一列
f.nawk –F‘[ ][ ]’ ‘{print $1}’ data.txt 同上,按[ 或 ] 为分隔符,并打印第一列
关于-F和BEGIN内的FS定义特别注意如下:
A.-F参数后紧跟单个分隔符,则用双引号“”,例如 –F”+”
B.-F参数后紧跟多个分隔符,则用单引号‘ ’并用[ ],中间顺序无所谓,例如-F’[+$]’
C.BEGIN中的FS无论是单个还是多个分隔,均用双引号“”,多个则需加[ ]
例如:nawk ‘BEGIN{FS=”[\t+$]”}{print $6,$8,$9}’data.txt
D.BEGIN中若同时有FS和OFS,则建议中间用分号“;”来分隔开,否则提示出错
例如:nawk ‘BEGIN{FS=”[\t+$]”;OFS=”%”}{print $6,$7,$8,$9}’ data.txt
E.半方括号[ ]也可以作为分隔符,顺序无所谓。例如:-F‘[[]]’ 或 –F‘[][]’
F.在用多个分隔符的时候,为避免语法错误或想得到正确的结果,最好用nawk
4.条件if else和for while循环实例
a.nawk ‘{print($3>25 ? $2“ Old” : $2“ Young”)}’ data.txt
若第三列大于25就打印某某Old;否则打印某某Young
b.awk ‘{if($1>1002)print $2; else print $3}’ data.txt
若第二列大于1002就打印第二列,否则打印第三列
c.awk ‘NR>1{if($3<30)print$2;else if($3<40) print$2”m”;else exit;}END{print 10}’data.txt
从第二行开始判断第三列的值,如果小于30就打印$2,如果大于30而又小于240,打印$2并后跟m,若是都不符合就退出处理行,但是END后的操作仍执行
d.awk ‘BEGIN{ORS=””}{for(i=1;i
打印出每行的前面几列,最后几列不打印。特别注意:默认情况下,print每执行一次时,另起一行打印。因此为避免每打印一列就重新一行,设置ORS为 空,但是在每打印完符合条件的所有列后,需要手工换行(循环外的print起此作用)。
e.awk ‘BEGIN{ORS=””}{i=1; while(i
功能同上,打印出每行的前面几列,最后几列不打印。
5.数学运算和字符串操作实例
a.nawk ‘{print 2^5+sin(2.1)+int(0.9)}’ data.txt 在每一行都打印运算值(32.8632)
b.awk ‘END{print length(“How are you?”)}’ data.txt 打印出字符串的长度(12)
c.awk ‘END{print index(“How are you?”,”you”)}’ data.txt 返回you在字符串中的开始位置(9)
d.nawk ‘{gsub(/ \$/,””);print $0}’ data.txt 把每行的$符号用空替掉,并打印行
e.awk ‘END{print substr(“How are you?”,9,3)}’ data.txt
从字符串的第九个位置开始截出后面3个长度的子字符串
f.nawk ‘{print toupper($2), tolower($2)}’ data.txt
分别打印第二列大写和小写
g.nawk ‘END{print match(“How are you you?”,/you/),RSTART,RLENGTH}’ data.txt
打印you在字符串中第一个匹配的位置以及长度(9,9,3)
h.nawk ‘END{str=”How are you doing?”;sub(/o/,”0”,str);print str}’ data.txt
将字符串变量指定字符中第一个符合含有o的用0替换调
特别注意:sub函数的第三个参数不可直接用字符串,而必须用字符串变量。
i.awk ‘END{print split(“Jan,Feb,Mar,Apr,May”,mymonths,”,”),mymonths[2]}’ data.txt
将字符串用第三个参数分隔符号进行分隔,把分隔的各个元素放在第二个参数的数组中,函数返回分隔得到的元素数目。结果:(5,Feb)

高 级 篇
6.数组与关联数组(a[1],a[$1] a[$0],a[b[i]])
a.awk ‘{for(i=1;i
b.awk ‘{a[$1]=$2}END{for(x in a) print a[x]}’ data.txt
数组a关联到第一列,并将第二列值赋给a,最后打印a中的所有内容。注意:但不是顺序打印。for中的x是随意变量,awk自动确定。
c.awk ‘{b[i]=$1;a[$1]=$2;i++}END{for(j=1;j
实现从第二行开始打印每一行的第一列和第二列的功能。
注意:i从0开始取值,而j从1开始。a为关联数组,b为顺序数组。
7.多输入文件和NR、FNR的实例
a. awk ‘BEGIN{OFS=FS=”:”} NR==FNR{a[$1]=$2} NR>FNR{$2=a[$1];print}’
/etc/shadow /etc/passwd
该语句中第一个模式匹配到第一个输入文件shadow,第二个模式匹配到第二个输入文件passwd,并使用关联数组,实现不同文件关联列的其他列值相互 替换。 3
A.awk对多输入文件的执行顺序是,先将代码作用于第一个文件(一行行读入),然后该重复的代码又作用于第二个文件,再作用于第三个文件。
B.awk对多输入文件的执行顺序产生了行序号的问题。当第一个文件执行完,下次读入第二个文件,那么第二个文件的第一行怎么算呢?如果又计为1的话,那 不就两个1了么?(因为第一个文件也有第一行)。这就是NR和FNR的问题。
NR :全局行数(第二个文件的第一行接着第一个文件尾行数顺序计数)
FNR:当前文件自身的行数(不考虑前几个输入文件的自身行数及总数)
例如:data1.txt中有40行,data2.txt中有50行,那么awk ‘{}’ data1.txt data2.txt
NR 的值依次为:1,2……40,41,42……90
FNR的值依次为:1,2……40, 1, 2……50
8.重定向输出和特别函数getline实例
a.awk ‘{print FILENAME,$0}’ data1.txt data2.txt >data_all.txt
把第一个文件和第二个文件合并到data_all.txt中,新文件第一列为原始文件名,后面列为原始文件内容。
b.awk ‘$1!=fd{close(fd);fd=$1} {print substr($0,index($0,“ ”)+1)>$1}’ data_all.txt
把合并后的新文件data.txt重新拆开成原来的两个子文件,依照新文件的第一列来产生新文件名。生成一个完整子文件后,关闭之;再生成下一个子文件。
A.getline从整体上来说,应这么理解它的用法:
当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量 var 或$0(无变量);应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 当其左右有重定向符 | 或 < 时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第 一行,而不是隔行。 B.getline用法大致可分为三大类(每大类又分两小类),即总共有6种用法。代码如下: nawk ‘BEGIN{“cat data.txt”|getline d; print d}’ data2.txt nawk ‘BEGIN{“cat data.txt”|getline; print $0}’ data2.txt nawk ‘BEGIN{getline d < “data.txt”; print d}’ data2.txt nawk ‘BEGIN{getline < “data.txt”; print $0}’ data2.txt 以上四行代码均实现“只打印data.txt文件的第一行”(若打印全部行,用循环) eg. nawk ‘BEGIN{FS=”:”;while(getline<”/etc/passwd”>0){print $1}}’ data.txt
nawk ‘{getline d; print d”#”$3}’ data.txt
awk首先读入第一行,接着处理getline函数,然后把下一行指定给变量d,再先打印d,由于d后面有换行符,所以后面紧跟的#会覆盖d,后面的$3 同样也会覆盖d。
nawk ‘{getline; print $0”#”$3}’ data.txt
awk首先读入第一行接着处理getline函数,然后把下一行指定给$0,现在的$0已经是下一行内容,后面的#和$3(从$0中取)会覆盖$0的内 容。
c.nawk ‘BEGIN{system(“echo \”input your name:\” ”);getline var; print “\nYour name is”,d,”\n”}’
系统提示输入名字,然后将输入的名字打印出来。特别注意:该awk语句后没有输入文件名,而是利用键盘输入作为文件名。
4

经 典 实 例
1.问题描述
有如下银行帐单部分文本,
200000000000007|shi yan city qi pei bu
202111320000018|hospital
200000000000007|shiyan city renmen road qi bei bu
201602520002941|middle school
200000000000007|mingfeng road qi pei
201602120000113|zhuanghuang factory
201602320000115|liangyou factory
要求:将第一列中重复的合并为一行,其第二列填入最长地址的那列
得到的结果应为:
200000000000007|shiyan city renmen road qi bei bu
202111320000018|hospital
201602520002941|middle school
201602120000113|zhuanghuang factory
201602320000115|liangyou factory
代码:(假设下面代码在文件myawk..sh中)
#!/usr/bin/nawk -f
BEGIN{FS=OFS=”|”; i=1;}
{ if(a[$1]==0){b[i]=$1;a[$1]=$2;i++}
if(length(a[$1])
}
END{for(j=1;j
}
执行:myawk.sh data.txt
比较代码:(实现不全)
awk ‘BEGIN{FS=OFS=”|”} !(length(a[$1])>length($2)){a[$1]=$2} END{for(i in a)print i,a[i]}’ data.txt
解释:此例中,用了两个数组,a用来与$1关联,b用来顺序记录,使得在最后打印时是完全按照$1顺序打印。条件句首先判断数组元素是否是第一次写入,若 非,则比较当前$2值和以前储存的值长度。
功能不全代码不能顺序打印。当$1有重复,而$2长度第一次、第二次、第三次是以递减的方式时,该代码应用得较好。但是,当$2各次得到的长度不确定时, 代码不能实现上述功能。例如:本例中第5行的第二列若比第3行的第二列长度长时,功能不全代码就不能实现要求。 5
2.问题描述:
有两个文件如下:
data1文件内容:
1 0.5 100
10 15 36.5
data2文件内容:
50 10 19
3.2 1 5
要求:得到一个新的文件,内容是data1和data2对应的列数字相加的和,新文件内容:
51 10.5 119
13.2 16 41.5
代码:(假设下面代码在文件myawk..sh中)
#!/usr/bin/nawk -f
{ for(i=1;i< =NF;i++) a[i]=$i; getline < “data2.txt” for(j=1;j printf $NF+a[NF]“\n” } 执行:myawk.sh data1.txt 解释: 上述代码用到了getline同时读入第二个文件的行内容并存入到$0中,最后用printf来实现相加后的打印。注意后面同时紧跟打印了\t和\n,以 用来列之间的分隔和行之间的分隔。此外,也可以用print来实现,但是print每执行完一次都要换行,(当然可以用OFS来进一步处理)。 实际上也可以用另外一种办法来实现,就是用NR、FNR比较,然后分别将两个文件赋值给不同的数组,然后相加。当然代码就没有上述代码简练。 3.问题描述 有两个如下文件: data2.txt 文件内容如下: 01 1111 AAA WW001 $$$$ 1000.00 02 2222 BBB GG001 %%%% 2000.00 03 3333 CCC JJ001 **** 3000.00 04 4444 DDD FF002 &&&& 4000.00 05 5555 EEE RR002 @@@@ 5000.00 06 666 FFF UU003 JJJJ 6000.00 07 777 III II005 PPPP 7000.00 08 8888 TTT TT008 TTTT 8000.00 data1.txt 文件内容如下: AAA 001 1000.00 BBB 001 2000.00 DDD 002 4000.00 EEE 002 5000.00 FFF 003 6000.00 data1的第1列、最后一列和data2的第3列、最后一列是相同的, data1的第2列和data2的第4列的后3位是相同的。 要求:data2中第三列、第四列后3位、第六列完全和data1相同的取出来得到新文件如下内容: 6 01 1111 AAA WW001 $$$$ 1000.00 02 2222 BBB GG001 %%%% 2000.00 04 4444 DDD FF002 &&&& 4000.00 05 5555 EEE RR002 @@@@ 5000.00 06 666 FFF UU003 JJJJ 6000.00 代码: nawk ‘NR<=FNR {a[$1]=$1″x”$2″x”$3} NR>FNR { b=substr($4,3);
c=$3″x”b”x”$6;
if(c==a[$3]) print}’ data1.txt data2.txt
执行:直接执行上述代码
解释:本例巧妙地利用了组合字符串(用x来组合),然后用来比较。
当NR< =FNR时,处理第一个文件,当NR>FNR时,处理第二个文件。

引用参考AWK常用语法

Killed远程登录Oracle的所有进程的方法

此方法用在停应用系统后,清除所有远程登录的客户端进程,特别是在进程过多的情况下。

!!!切忌千万不要在生产端轻易运行,否则后果自负

脚本:killsess.sh

########killsess.sh#########
#author:ludatou@2014/07/24 feigigi@qq.com
#desc:kill all session connect from client
ps -ef | grep LOCAL=NO | grep -v grep|awk '{if($3~/^[0-9]+$/)print $2}' > sessinfo.out
cat sessinfo.out |while read pid
do
  kill -9 $pid
done
cat /dev/null > sessinfo.out

例子:

[root@ludatou ~]# ps -ef | grep LOCAL|grep -v grep
ora10g   22367 22333  0 20:21 ?        00:00:00 oraclelu10g (DESCRIPTION=(LOCAL=NO)(ADDRESS=(PROTOCOL=beq)))
[root@ludatou ~]# chmod +x killsess.sh
[root@ludatou ~]# ./kiilsess.sh
[root@ludatou ~]# ps -ef | grep LOCAL|grep -v grep
[root@ludatou ~]# 

关于Aix上的逻辑卷偏移量

##########################
www.ludatou.com 大头
转载请指明处,否则追责法律责任
##########################

在AIX5.3中,系统支持三种类型的VG,分别是Original VG、Big VG、Scalable VG(AIX5.3的新特性)。
mkvg命令默认将创建Origninal VG:最大支持32 physical volumes and 255 logical volumes
mkvg –B命令将创建Big VG:最大支持128 physical volumes and 512 logical volumes
mkvg –S命令将创建Scalable VG:最大支持1024 physical volumes, 256 logical volumes and 32k physical partitions

应用程序直接访问LVCB是比较危险的,因此在建立数据文件使用的裸设备时,不能从逻辑卷开始位置,而是应该有一个偏移量(offset),偏移量的大小应大于LVCB的大小,一般用一个AIX逻辑块的大小做偏移量,即4096字节。Oracle数据库会自动跳过前 4k不用,这样保证了lvcb不会被覆盖,但这带来了另一个潜在的问题,当 Oracle的db_block_size大于4k的时候,一个Block可能跨在两个PV/LUN/磁盘上(如果做了条带化,那么将总有数据块跨在两个条带上–其实也还是将跨在不同的 PV/LUN/磁盘上。这样当系统崩溃的时候,很有可能造成大量的IO不完整,一个PV上IO写入,另一边可能未完成,启动Oracle的时候将会看到ORA-1578 错误,这几乎是致命的。
原有的带有偏移量的lv类型就叫做DS_LV。未解决上述问题,AIX引进了一种新的LV类,也就是“Z”类型LV,这种类型的LV通过lslv -L lv_name可以看到它的类型为:DS_LVZ。
零偏移量LV的创建:
1.在Origninal VG中,不论是否使用“-T O”参数,创建出来的lv都是DS_LV类型。
2.在Scalable VG中,不论是否使用“-T O”参数,创建出来的lv都是DS_LVZ类型。
3.在Big VG中,使用“-T O”参数,创建出来的lv都是DS_LVZ类型,而不使用则是DS_LV类型。

由此可见,为了解决alert日志中报告的问题,使用scalable VG或是big VG创建DS_LVZ类型的LV(zero offset)即可解决。

检查lv是不是0偏移的裸设备命令:
1、用oracle账户执行:dbfsize /dev/rlv_test
2、lslv -L lvName
案例:

hz@bank:[/home/oracle]#lslv -L lvdata002
LOGICAL VOLUME:     lvdata002              VOLUME GROUP:   datavg02
LV IDENTIFIER:      00cffde300004c000000012157f880d8.81 PERMISSION:     read/write
VG STATE:           active/complete        LV STATE:       opened/syncd
TYPE:               raw                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        256 megabyte(s)
COPIES:             2                      SCHED POLICY:   parallel
LPs:                16                     PPs:            32
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    no
INTRA-POLICY:       middle                 UPPER BOUND:    16
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: off
EACH LP COPY ON A SEPARATE PV ?: no
Serialize IO ?:     NO
DEVICESUBTYPE : DS_LVZ

确认VG的类型,用命令 lsvg 看 MAX PVs 的值—-Normal: 32, Big:128, Scalable:1024 (不一定准确,准确的查询用下面的方法)

lqueryvg -At -g VGID(如00cffde300004c000000012157f8acd7)

10.111.4.1上查看到datavg03的 VG Type:1,0对应的是普通,1对应的是big,2对应的是scale

创建数据库使用的裸设备

mklv -y 'lvxscmxindx004' -T O -w 'n' -s 'n' -r 'n' -t raw datavg 20

关于AIX双网卡的负载均衡与HA冗余

在AIX上一般在开始设计的一套数据库后台系统时候,在Power AIX层面都会考虑到硬件的冗余,比如交换机,网卡,Host DISK,FC卡,FC线等,今日一个朋友提出疑问,在AIX层面做EtherChannel时候是否存在流量的负载均衡以及互备模式,AIX的EtherChannel模式如下,

1.Standard: 在这种模式下EtherChannel使用目标主机的IP地址来决定用哪一块网卡来发送数据。EtherChannel用目标IP的末字节除以成员网卡的个数的余数(模)来决定由哪一块网卡发送数据。比如目标IP是10.10.10.1, EtherChannel中有两块成员网卡, (1 % 2) = 1, 所以第二块网卡被用来发送数据 (网卡编号从0开始)。 网卡编号按照它们在smit界面中列出的顺序排列。对于非IP流量(如ARP), 目标MAC地址的末字节被用来进行计算。 这是默认的运行模式。

2.Round Robin: 在这种模式下各个成员网卡被轮流使用,每轮每个网卡发送一个数据包。

3.Network Interface Backup: 这种模式是用于AIX 5.1和AIX 4.3.3的网卡后备模式。在这种模式下,EtherChannel在任何时刻都只将一块网卡用于负担网络流量。主要用于网卡连接到不同的交换机上,并且通过任何的交换机都可以到达同样的网络的情况下。当检测到某个网卡-交换机连接出现问题时(通过网线检测或选择ping某个IP地址, EtherChannel将停止当前的成员网卡并启动下一个成员网卡。只有这种模式会用到Internet Address to Ping, Number of Retries和Retry Timeout选项。

4.Backup Adapter: 可选项。用于AIX 5.2的EtherChannel后备模式。指定您想要用来后备整个EtherChannel的网卡。

6.Internet Address to Ping: 仅用于网卡后备模式。EtherChannel会ping您在这里指定的IP地址。如果回应超时达到指定的数目,EtherChannel会切换网卡。 Number of Retries: 允许的回应超时的次数,默认是3。

7.Retry Timeout: 回应超时的时限。默认是1秒。

答案已经很明显,Round Robin模式具备此功能,只是这种模式采用轮询的方式,不够智能,所以建议流量负载均衡方面还是需要在网络层去规划。

AIX系统中rootvg镜像遇到的lv未镜像问题

在一次客户的升级过程中,由于对crs目录的扩展碰到如下情况:

# lsvg -l rootvg
rootvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 67 134 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 40 80 2 open/syncd /
hd2 jfs2 24 48 2 open/syncd /usr
hd9var jfs2 16 32 2 open/syncd /var
hd3 jfs2 20 40 2 open/syncd /tmp
hd1 jfs2 16 32 2 open/syncd /home
hd10opt jfs2 16 32 2 open/syncd /opt
hd11admin jfs2 16 32 2 open/syncd /admin
lg_dumplv sysdump 12 12 1 open/syncd N/A
livedump jfs2 16 32 2 open/syncd /var/adm/ras/livedump
fslv00 jfs2 344 344 2 open/syncd /oracle
fslv01 jfs2 60 120 2 open/syncd /crs

# lsvg rootvg
VOLUME GROUP: rootvg VG IDENTIFIER: 00c2f54500004c0000000125351247e2
VG STATE: active PP SIZE: 256 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 1092 (279552 megabytes)
MAX LVs: 256 FREE PPs: 150 (38400 megabytes)
LVs: 14 USED PPs: 942 (241152 megabytes)
OPEN LVs: 13 QUORUM: 1 (Disabled)
TOTAL PVs: 2 VG DESCRIPTORS: 3
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 2 AUTO ON: yes
MAX PPs per VG: 32512
MAX PPs per PV: 1016 MAX PVs: 32
LTG size (Dynamic): 1024 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable

# bootlist -m normal -o
hdisk0 blv=hd5
hdisk1 blv=hd5

鉴定是否lv有镜像的办法:

# lslv -m hd3
hd3:/tmp
LP PP1 PV1 PP2 PV2 PP3 PV3
0001 0224 hdisk0 0269 hdisk1
0002 0289 hdisk0 0270 hdisk1
0003 0290 hdisk0 0271 hdisk1
0004 0291 hdisk0 0272 hdisk1
0005 0292 hdisk0 0273 hdisk1
0006 0293 hdisk0 0274 hdisk1
0007 0294 hdisk0 0275 hdisk1
0008 0295 hdisk0 0276 hdisk1
0009 0296 hdisk0 0277 hdisk1
0010 0297 hdisk0 0278 hdisk1
0011 0298 hdisk0 0279 hdisk1
0012 0299 hdisk0 0280 hdisk1
0013 0300 hdisk0 0281 hdisk1
0014 0301 hdisk0 0282 hdisk1
0015 0302 hdisk0 0283 hdisk1
0016 0303 hdisk0 0284 hdisk1
0017 0387 hdisk0 0506 hdisk1
0018 0388 hdisk0 0507 hdisk1
0019 0389 hdisk0 0508 hdisk1
0020 0390 hdisk0 0509 hdisk1

# lslv -m fslv00
fslv00:/oracle
LP PP1 PV1 PP2 PV2 PP3 PV3
0001 0129 hdisk1
0002 0130 hdisk1
0003 0131 hdisk1
0004 0132 hdisk1
0005 0133 hdisk1
0006 0134 hdisk1
0007 0135 hdisk1
0008 0136 hdisk1
0009 0137 hdisk1

如上可以看到,fslv00是没有镜像的。

可以发现做了镜像的rootvg,两块盘为hdisk0,hdisk1,启动顺序为2块盘都可以启动,那么问题问题在哪里呢?
仔细观察LPs和PPs的数量对比时候,可以发现/crs和/oracle目录所在fslv00,fslv01的LPs=PPs的数量,而其他的文件系统所挂载的PPs=2*LPs,这个说明了系统工程师在创建集群件和数据库目录的时候,没有对相关的lv做镜像,导致了rootvg镜像的意义已经失去了,一旦Hdisk0故障,会导致主机所在的集群和数据库无法运行,无法达到rootvg的镜像效果,更糟糕的问题在于系统工程师在为crs增加空间的时候,把hdisk1的空间加到了crs目录,导致无法对fslv00直接做mirror,这时候有两种办法处理这种潜在的验证风险因子方法:
1)把crs在hdisk1中占用的空间清理之后转移到hdisk1中再对相关的fslv00,fslv01做lv级别的mirror;
参考连接:
链接1:如何处理lv镜像

2)在清理完crs占用hdisk1空间之后,取消hdisk1的mirror,然后重新extened做mirror;
参考连接:
链接2:Aix取消vg镜像,以及重做vg镜像

AIX: fuser的用法

删除一个文件系统或者LV的时候,,需要unmount该文件系统, 可能有一些进程连接在上面,可以用fuser清除后做unmount

fuser 指令
用途
使用文件或文件结构识别进程。
语法
fuser [ -c | -d | -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 …
说明
此 fuser 命令列出了本地进程的进程号,那些本地进程使用File 参数指定的本地或远程文件。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。
每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。
c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其它可装载对象)使用。
进程号被写入标准输出(在进程号之间有空格的行中)。一个换行符被写入标准错误(在每个文件操作数的最后一个输出之后)。其他所有输出被写入标准错误。
此 fuser 命令不会检测有 mmap 区域的进程,其中相关的文件描述符已从此被关闭。
标记
-c 包含 File的文件系统中关于任何打开的文件的报告。
-d 暗示使用了 -c 和 -x 标志。关于任何与文件系统(自父目录删除的)无链接的打开文件的报告。当与 -V 标志一起使用时,它也会报告被删除文件的节点号和大小。
-f 仅对文件的打开实例报告。
-k 将 SIGKILL 信号发送到每个本地进程。仅有根用户能终止另一用户的进程。
-u 为进程号后圆括号中的本地进程提供登录名。
-V 提供详细输出。
-x 与 -c 或 -f 连用,报告除标准 fuser 输出以外的可执行的和可载入的对象。
示例
若要列出使用 /etc/passwd 文件的本地进程的进程号,请输入:
fuser /etc/passwd要列出使用 /etc/filesystems 文件的进程的进程号和用户登录名,请输入:
fuser -u /etc/filesystems要终止全部使用给定的文件系统的进程,请输入:
fuser -k -x -u /dev/hd1 -OR-
fuser -kxuc /home任一命令都列出了进程号和用户名,然后终止每个正在使用 /dev/hd1 (/home) 文件系统的进程。仅有根用户能终止属于另一用户的进程。如果你正在试图卸下 /dev/hd1 文件系统,而一个正在访问 /dev/hd1 文件系统的进程不允许这样,您可能希望使用此命令。
要列出正在使用文件(已从给定文件系统删除的文件)的全部进程,请输入:
fuser -d /usr文件
/dev/kmem 用于系统映象。
/dev/mem 也用于系统映象。
相关信息
killall 命令、mount 命令和 ps 命令。
有关用户识别和认证、任意访问控制、可信计算基础以及审计的更多信息,请参考《AIX 5L V5.2 安全指南》中的『独立的系统安全性』。

AIX夏令时导致应用时间对比异常终端处理

前几天一个客户反应系统时间比现实晚一个小时,导致无法刷卡。因为oracle的时间是通过获取系统当前时间

11月6号。

当时我查了下发现是AIX系统开启夏令时导致的

echo $TZ

beist-8TD

————-

在aix 5.3补丁打齐下可以使用命令

chtz beist-8

修改。

或者直接修改/etc/environment

TZ=Beist-8

或者smit 里修改。

—————————————–

在aix6.1系统中推荐使用后面的2种方法修改,修改后建议重启AIX