Oracle DBA 的Unix参考手册(二)

9 AIX 下显示 CPU 数量
    # lsdev -C|grep Process|wc -l

10 Solaris 下显示 CPU 数量
#
psrinfo -v|grep "Status of processor"|wc -l
如果是显示结果是中文,可能上面的命令显示有误。可以用 psrinfo -v 来代替。

10 服务器监控

1. 使用 top
使用命令来显示 Unix 服务器的高 CPU 资源占用会话。 top 显示每个 CPU 的使用情况。 top 的输出分两部分。第一部分显示每个处理器的负载情况,第二部分显示使用 CPU 最多的会话信息。
#
top

load averages:  0.23,  0.53,  0.49
64 processes:  1 running, 21 sleeping, 42 idle
CPU states:  7.5% user,  0.0% nice,  2.9% system, 89.4% idle
Memory: Real: 772M/991M act/tot  Virtual: 1965M use/tot  Free: 15M

  PID USERNAME PRI NICE  SIZE   RES STATE   TIME    CPU COMMAND
  837 afis      42    0   34M   29M sleep 128:39 11.70% unixsvr
  824 afis      44    0   10M 1826K sleep  26:40  0.70% dtterm
5121 oracle    42    0  435M   15M sleep   0:01  0.60% oracle
  717 root      44    0   10M 4358K sleep  13:43  0.30% Xdec
5120 root      44    0 5832K 3203K run     0:00  0.10% top
  558 root      44    0 3640K  180K sleep  34:13  0.00% os_mibs
  715 root      42    0   18M   11M sleep   0:02  0.00% smsd
  775 afis      44    0   11M 1843K sleep   0:01  0.00% dtsession
5117 afis      54   10 8248K  565K sleep   0:00  0.00% dtscreen
5097 oracle    44    0  423M 3465K sleep   0:00  0.00% oracle
5101 oracle    44    0  427M 2793K sleep   0:00  0.00% oracle
5105 oracle    44    0  421M 2621K sleep   0:00  0.00% oracle
5103 oracle    44    0  421M 2138K sleep   0:00  0.00% oracle
  562 root      44    0 2960K  851K sleep   0:00  0.00% cpq_mibs
5055 root      44    0 1936K  303K sleep   0:00  0.00% telnetd
作为一个 DBA 应该关心的内容有:
----
Load averages :平均负载。如果大于 1 说明服务器负荷过重。
----CPU states
CPU 信息概要。 7.5% user 的意思是 CPU 7.5% 是用户占用,其他可按字面类推。
----Memory
Free 表明可用的内存数量。本例子中可用内存是 15M
----IDLE
CPU 空闲百分比
2.        使用 sar
sar
SVR4 环境中,例如 HP-UX Solaris 中很普及,在 aix 中也可以用。 Sar 命令可以查看整体 CPU 消耗情况,磁盘、内存、 JFS buffer 使用情况等 。常见的 sar 使用例子:
----sar -u
显示 CPU 活动情况 。例如:
#
sar -u 2 5
AIX TSXJ 2 5 0052E51D4C00    10/09/06

System Configuration: lcpu=2
16:12:10    %usr    %sys    %wio   %idle
16:12:12     100       0       0       0
16:12:14      99       1       0       0
16:12:16      99       0       0       0
16:12:18      41       1      26      31
16:12:20      46       1       0      53

Average       77       1       5      17
上面的命令每 2 秒显示一次 cpu 情况,显示 5 次。
----sar -w
显示交换 (swapping) 活动。例如 5 秒钟显示一次,显示 5 次:
# sar -w 5 5
HP-UX corp-hp1 B.11.00 U 9000/800 08/09/00
19:37:57 swpin/s bswin/s swpot/s bswot/s pswch/s
19:38:02 0.00                 0.0         0.00                 0.0         222
19:38:07 0.00                 0.0          0.00                 0.0          314

Average 0.00                  0.0          0.00                  0.0          294
上面的输出列的含义:
swpin/s 每秒钟交换进( sawp-in )的进程数量
swpot/s
每秒钟交换出( sawp-out )的进程数量
bswin/s
每秒钟交换进的块数 ( 每块 512 字节 )
bswot/s
每秒钟交换出的块数(每块 512 字节)
pswch/s
每秒钟上下文交换数量

----sar -b
显示 buffer 活动情况        
# sar -b 1 6
HP-UX corp-hp1 B.11.00 U 9000/800 08/09/00  

19:44:53 lread/s %rcache bwrit/s lwrit/s...
19:44:54 91 100 9 19...
19:44:55 0 0 0 5...
19:44:56 6 100 9 8...
19:44:57 30 100 9 20...
19:44:58 1 100 0 3...
19:44:59 1 100 9 4...
Average 22 100 6 10...
%wcache pread/s pwrit/s...
53 0 0...
100 0 0...
0 0 0...
55 0 0...
100 0 0...
0 0 0...
39 0 0...
各个列的含义:        
lread/s
Number of reads per second from the Unix JFS buffer cache
%rcache
Buffer cache hit ratio (for the Unix JFS buffer cache) for read requests
bwrit/s
Number of physical writes to disk per second
lwrit/s
Number of writes per second to the Unix JFS buffer cache
%wcache
Buffer cache hit ratio (for the Unix JFS buffer cache) for write requests
pread/s
Number of reads per second from disk
pwrit/s
Number of writes per second to disk
3.        使用 vmstat
vmstat
是通用的 UNIX 监控工具, vmstat IRIX 操作系统中是 osview vmstat 的第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次 vmstat 不同操作系统输出结果不一样,含义也可能有区别,具体要看 man 帮助。
#
vmstat 3
kthr     memory                cpu
---- ... --------------- ... --------------
r b ... fre re pi sr ... cs us sy id wa
0 0 ... 207 0 1 0 ... 142 18 4 75 4
0 0 ... 187 0 4 0 ... 70 2 1 91 6
0 0 ... 184 0 0 0 ... 99 5 2 89 4
0 0 ... 165 0 0 0 ... 98 1 8 52 40
0 0 ... 150 0 3 0 ... 136 4 2 87 6
0 0 ... 141 0 1 0 ... 192 5 0 91 4
HP-UX AIX vmstat 输出中一些重要的信息:
r
运行队列。当这个值超过 CPU 数量的时候,服务器就有 CPU 瓶颈(可以通过 lsdev -C|grep Process|wc -l 来获取 CPU 数量)
pi
page-in
数量。这个参数非 0 暗示着系统缺少内存,内存被交换到磁盘。然而当程序刚使用的时候也可能导致 page-in 0 。为了找到真正原因,则检查 sr 列。如果 sr 也是非 0 ,那么的确意味着缺少内存。
sr
扫描速率。如果扫描速率持续增加,那么页交换后台程序忙于分配内存页。
下面是 CPU 的一些信息 :
us
用户占用 CPU 的百分比
sy
系统占用 CPU 的百分比
id
空闲 CPU 百分比
wa
等待 CPU 的百分比
用户和系统百分比之和 (us+sy) 接近 100 时,说明 CPU 繁忙,但并不意味着 CPU 过载。 sr 超过 CPU 数量的时候意味着 CPU 过载。当 CPU 等待 (wa) 超过 20 的时候,那么 20% 或者更多的处理时间在等待资源,通常是 I/O 。通常在备份或者导出等 I/O 操作的时候这个百分比比较大;但如果正常的时候这个值一直挺高则也可能有 I/O 瓶颈。
4.AIX
下显示交换区 (Swap) 使用情况
lsps -a
可用来显示交换使用情况。之前我们讨论过, Oracle 数据库在消耗过多的服务器内存的时候有可能产生很多交换,而 PGA 的内存需求引起内存移动到交换盘的操作。
#
lsps -a
Page Space  Physical Volume  Volume Group   Size %Used Active  Auto  Type
hd6             hdisk0         rootvg     512MB  1     yes   yes    lv
上面 %Used 1 ,说明有 1% 的交换。
5.
显示 HP-UX 下的交换区使用情况
#
swapinfo -tam
Mb Mb Mb...
TYPE                 AVAIL         USED         FREE...
dev     1024      25     999...
reserve -       999    -999...
memory   3966    3547    419...
total   4990     4571    419...
... PCT Mb
... USED RESERVE PRI NAME
... 2% 1 /dev/vg00/lvol2
...
... 89%
... 92% 0 -  
6.
显示服务器平均负载情况( w 命令)。
Unix
w 命令用来显示高资源会话简单的信息。大多数的有经验的 Oracle DBA 都会首先用这个命令来快速查看一下服务器负载情况,因为 w 命令在几乎所有的 Unix 下都可以用。
#
w
10:02AM up 60 days, 18:46, 3 users,
load average: 0.32, 0.39, 0.43
User         tty         login@         idle         JCPU         PCPU            what
Oracle         pts/0 08:17AM         0                 80:18         80:16         w
oracle  pts/1 09:15AM        5                 2                 0                    ftp
miltonrv pts/2 01May                009days 0                 0          -ksh
上面的输出中的 load average 分别是过去 1 分钟、 5 分钟、 15 分钟的负载情况。 如果大于 1 说明 CPU 紧张。
7. 使用 iostat
iostat 显示物理磁盘 I/O 情况。下面的 3 表明 3 秒钟显示一次
#
iostat 3
System configuration: lcpu=2 disk=5
tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait
          0.0        1302.0               1.8      0.6       89.3       8.3
Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk0           0.4       2.8       0.7      15919  15112048
dac0             0.0       0.8       0.2     643384   3730076
dac0-utm         0.0       0.0       0.0          0         0
hdisk1           0.0       0.8       0.2     643384   3730076
cd0              0.0       0.0       0.0          0         0

tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait
          0.3        3176.3               0.7      1.8       64.3      33.2

Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk0          71.0     501.3     123.7          0      1504
dac0             0.0       0.0       0.0          0         0
dac0-utm         0.0       0.0       0.0          0         0
hdisk1           0.0       0.0       0.0          0         0
cd0              0.0       0.0       0.0          0         0
上面比较重要的列:
Kb_read :过去的时间区间内读取得 K 字节数。(第一个显示的是历史总计,因此要看变化情况,应该看其它的时间区间。)
Kb_wrtn:
过去的时间区间内写入得 K 字节数。

11 文件管理

1 列出最近动过( touched )的文件
作为一个 DBA ,你经常会需要查看最近被动过的文件。当 Oracle 文件被读或者写的时候都是被动过。 ls 命令可以查看那些文件是最近被动过的。注意,使用 head 是为了限制输出数量,只输出最近动过的文件(默认 10 个)
$
ls -alt|head
total 29837
-rw-------   1 afis     system        592 Oct 10 10:12 .sh_history
-rw-r--r--   1 afis     system         75 Oct 10 10:08 errlog.txt
-rwxr-xr-x   1 afis     system       1467 Oct  9 09:48 .profile
drwxr-x--x  11 afis     system       8192 Oct  8 13:21 .
drwxr-xr-x   2 afis     system       8192 Sep 26 13:21 unixsvr20060925
drwxr-xr-x   2 afis     system       8192 Sep 25 16:59 unixsvr20060921
-rw-r--r--   1 afis     system         15 Sep 22 16:52 logfile.txt
-rw-------   1 afis     system         15 Sep 22 15:15 nohup.out
-rw-r--r--   1 afis     system        506 Sep 22 11:32 .dxhanziim780.tmp
-l
选项显示文件的详请,包括修改时间, -t 选项会让结果按照被动过的日期排序,但是显示中的时间仍然是修改时间。 -t 会按照被动过的时间倒排序,因此用 head -a 选项显示你目录下的所有文件。        
2
.显示最近修改过的文件
$
ls -alc|tail
total 3
-rw-r--r--   1 afis     system         2 Oct 10 10:34 1.txt
-rw-r--r--   1 afis     system         2 Oct 10 10:35 2.txt
-rw-r--r--   1 afis     system         2 Oct 10 10:35 3.txt
3
.删除未修改的文件
例如, 删除 5 天以上未修改的归档文件:
/usr/bin/find $DBA/$ORACLE_SID/arch/arch_prod*.arc        -ctime +5 -exec rm {} /
注意,试验上面的命令的时候要慎重。另外也要检查路径是否的确存在。
4
.显示文件大小( 512 字节块)
有的时候我们需要快速找到比较大的 trace 或者 core dump 文件。通过使用 du 命令,可以显示文件的大小,单位是 512 字节。如果要以 kb 来显示,那么可以用 -k 参数
#
du -s * |sort -n|tail
31288 archlog269.arc.Z
34000 archlog253.arc.Z
34480 archlog256.arc.Z
35464 archlog252.arc.Z
36696 archlog255.arc.Z
37400 archlog258.arc.Z
37456 archlog263.arc.Z
38576 archlog270.arc.Z
39248 archlog267.arc.Z
102408 archlog272.arc.Z
如果我们要查看某个目录的总大小,可以用 du -sk 命令。例如
#
du -sk /home/oracle
2353
5
.定位包含特定字符串的文件
可以通过使用 find grep 命令来查找文件中含有特定字符串的文件。例如,假设你想查脚本中含有 v$session 的文件。你可以执行下面的命令, Unix 将会在你当前目录和所有子目录下在扩展名是 sql 的文件中查找:
HBZW>
find . -name "*.sql" -print|xargs grep -i v/$session
./script/test.sql:select * from v$session;
下面是这条命令的解释:
find .
在当前目录和所有子目录下查找
-name "*.sql"
   
查找扩展名是 sql 的文件
-print
   
实际显示文件列表。输出被 piped xargs
xargs
   
将每个文件的内容传给后面的命令
grep -i v/$session
   
过滤文件内容,只显示含有 v$sessoin 的行, -i 选项的含义是不区分大小写。
6
.查找最近创建的文件
下面的命令查找 1 天内创建的文件。
HBZW>  
find . -mtime -1 -print
./script
./script/test.sql
./script/watch.sql
./script/haha.txt
举一反三,如果想查 1 天以上创建的文件,就用 +1 选项
7
.查找系统中的大文件
下面的命令 查找大于 10000 字节的文件:
# find . -size +10000c -print
如果不加 c ,那么就是查文件大于 10000 个块( 512 字节)的文件。有的 Unix 下可以加 k ,单位就是 kb
8
.查找大小在某个区间内的文件:
例如, 查找大小在 100 120 个字节的文件
# find . -size +100c -size -120c -print

如果要查找大小正好是多大的文件,可以这样:
#
find . -size 100c -print
上面的命令查找大小正好是 100 个字节的文件。
9
批量删除修改时间大于 7 天的文件
find . -mtime +7 -exec rm {} /;
10 批量删除过期的 trace 文件和审计文件脚本 (deltrcandaudit.ksh)
#!/bin/ksh
for ORACLE_SID in `cat /etc/oratab|/
egrep ':N|:Y'|grep -v /*|cut -f1 -d':'`
do
ORACLE_HOME=`cat /etc/oratab|/
grep ^$ORACLE_SID:|cut -d":" -f2`
DBA=`echo $ORACLE_HOME | sed -e/
's:/product/.*::g'`/admin
find $DBA/$ORACLE_SID/bdump -name "*.trc" /
-mtime +14 -exec rm {} /;
find $DBA/$ORACLE_SID/udump -name /
"*.trc" -mtime +14 -exec rm {} /;
find $ORACLE_HOME/rdbms/audit -name /*.aud /
-mtime +14 -exec rm {} /;
done
上面的脚本在所有的实例中查找符合条件的 trc 文件并删除。
11
.生成空文件 (touch)
touch
命令可以用来生成空文件,例如:
#
touch test.txt
12
.修改默认的文件访问权限( Permissions
使用 umask 命令来设置默认的文件访问权限。掩码的值是服务器默认值(通常是 777 或者 644 )和实际的 Unix 用户默认文件权限的差值。例如,如果系统默认 777 ,用户创建文件的时候访问权限是 755 ,那么掩码就是 022 。下面让我们先来理解 Unix 下文件访问权限。
Unix
下文件访问权限分为 3 部分。每一部分代表不同类别用户的访问权限。这三类用户是:
----
文件所有者
----
和文件所有者在同一个组中的成员
----
其它的 Unix 用户
因此,如果一个文件的访问权限是 751 ,那么 7 分配给所有者, 5 分配给和所有者在同一个组中的其他成员, 1 分配给其他用户。那么,这些数字到底代表什么意思呢?
访问权限值         含义
4       
读权限
2       
写权限
1       
执行权限
通过上表我们可以推算出, 7 代表全部权限, 5 代表读和执行权限,以此类推。下面,让我们来看一个文件的具体权限。
$
ls -l test.txt
-rwxr-x--x   1 oracle   system         0 Oct 10 16:45 test.txt
这个例子中 test.txt 的文件访问权限就是 751 ,但是显示的确是字母 -rwxr-x--x 。下面我们来解释一下。
-----
表明这是一个 plain 文件。如果是 d 则表明是路径
----rwx
文件所有者拥有读、写、执行的权限
----r-x
同组的其他成员拥有读、执行的权限
------x
其它用户拥有执行的权限。
----
13
.不同的 umask 的效果
假设系统默认的用户权限是 777 ,而我们不希望这样,就应该设置合适的 umask 。下面是不同的 umask 的效果。
系统默认         777        666        777
umask
        022        022        143
新的文件访问权限         755        644        634
设置 umask 的例子:
#
umask 022
14
.修改文件所有者
Unix
chown 命令可以修改文件的所有者。例如:
#
chown oracle install *
# ls -al
-rw------- 1 oracle oinstall ... .bash_history
drwxr-xr-x 11 oracle oinstall ... .dt
-rwxr-xr-x 1 oracle oinstall ... .dtprofile
-rwxr-xr-x 1 oracle oinstall ... .profile
-rwxr-xr-x 1 oracle oinstall ... .profile_old
-rw------- 1 oracle oinstall ... .sh_history
drwx------ 2 oracle oinstall ... .solregis
-rw------- 1 oracle oinstall ... .TTauthority
-rw------- 1 oracle oinstall ... .Xauthority
上面的命令将文件所有者改成 oracle ,所属的组改成 oinstall 。如果想将所有子目录及其下面的都改掉,那么用 -R 选项。
15
.修改文件的访问权限
Unix
chmod 命令可以修改文件的访问权限。例如:
#
chmod 755 *
# chmod +x *
# chmod -r *
同样,如果想带子目录修改所有权限,也可以用 -R 选项

12 磁盘管理

1 .在 HP-UX 下列出所有逻辑卷
#
df -k
/home(/dev/vg00/lvol5): 20166 total allocated Kb
                        4945 free allocated Kb
                        15221 used allocated Kb
                        75 % allocation used
/opt (/dev/vg00/lvol6):615914 total allocated Kb
                        227403 free allocated Kb
                        388511 used allocated Kb
                        63 % allocation used
/tmp (/dev/vg00/lvol4):64215 total allocated Kb
                        20564 free allocated Kb
                        43651 used allocated Kb
                        67 % allocation used
/u01 (/dev/vg01/u01 ):17580720 total allocated Kb
                        12117048 free allocated Kb
                        5463672 used allocated Kb
                        31 % allocation used
df -k
命令是比较通用的查看逻辑卷信息的命令,在 tru64 aix 下都可以使用。
2
.在 HP-UX 下显示卷的具体信息:
#
lvdisplay /dev/vg00/u01
--- Logical volumes ---
LV Name /dev/vg00/lvol3
VG Name /dev/vg00
LV Permission read/write
LV Status available/syncd
Mirror copies 1
Consistency Recovery MWC
Schedule parallel
LV Size (Mbytes) 140
Current LE 35
Allocated PE 70
Stripes 0
Stripe Size (Kbytes) 0
Bad block off
Allocation strict/contiguous
IO Timeout (Seconds) default
3
.一个根据不同的 Unix 使用不同的命令来查看磁盘挂接位置的脚本
HP-UX
下查看磁盘 mount 位置可用 bdf 命令,而其他好多版本都可以用 df -k 命令。我们这个脚本的名字就叫做 dialect_df.ksh
#!/bin/ksh
#**************************************************
# Set up the dialect changes for
# HP-UX and AIX (df -k) vs (bdf)
#**************************************************
os=`uname -a|awk '{ print $1 }'`
if [ $os = "OSF1" ]
then
df -k
fi
if [ $os = "AIX" ]
then
df -k
fi

if [ $os = "IRIX64" ]
then
df -k
fi
if [ $os = "HP-UX" ]
then
bdf
fi

13 其它杂项

1 .创建软连接
Unix
下的所有文件或者目录都可以创建软连接,访问这个软连接实际上就是访问真正的文件 / 目录。可以用 ln -s 来创建软连接。例如:
#
ln -s /poll/PU-AFIS30 PU-AFIS30
上面的命令中,软连接文件是 PU-AFIS30 ,指向 /poll/PU-AFIS30 。可以用 file 命令看出来:
$
file PU-AFIS30
PU-AFIS30:      symbolic link to /poll/PU-AFIS30
2
.根据日期创建目录:
$
date
Wed Oct 11 14:38:07 CST 2006
$
mkdir `date|awk '{print $6$2$1}'`
$
ls -l
total 8192
drwxr-xr-x   2 oracle   system      8192 Oct 11 14:38 2006OctWed
3
.用 crontab 来创建计划任务
大多数 Unix 都支持一个叫做 cron 的实用程序。术语 cron chronological 的缩写。 cron 实用程序可以用来创建定期运行的任务。 cron 有两个主要的命令:
----crontab -l
显示现有的任务
----crontab -e
编辑修改 crontab 文件。
4 .查看现有的执行计划
#
crontab -l
#************** # Daily Cleanup Tasks of old trace, # audit, and log files #****
00 6 2 * * /usr/local/bin/scripts/cleanup.ksh > /usr/local/bin/scripts/cleanup.log
#********************************** # Shutdown of Oracle APPS#**********
00 2 * * * /usr/local/bin/scripts/apps_stop.ksh PROD > /usr/local/bin/scripts/logs/apps_stop_PROD
05 2 * * * /usr/local/bin/scripts/apps_stop.ksh TEST > /usr/local/bin/scripts/logs/apps_stop_TEST
#*********** # Shutdown of Oracle Databases #*************
30 2 * * * /usr/local/bin/scripts/database_stop.ksh PROD > /usr/local/bin/scripts/logs/db_stop_PROD
40 2 * * * /usr/local/bin/scripts/db_stop.ksh TEST > /usr/local/bin/scripts/logs/database_stop_TEST
我们来分析一下下面这句话:
00 6 2 * * /usr/local/bin/scripts/cleanup.ksh > /usr/local/bin/scripts/cleanup.log
这一行中共 6 组,前面有 5 组数字,分别代表不同的时间。按照顺序含义如下:
minute :分钟。 1 60
hour
:小时。 0 23
monthday
:每个月的第多少天。 1 31
monthday
:每年的第几个月。 1 12
weekday
:每周的星期几。 0 6 0 代表 Sunday
第六组是要执行的程序。因此这条命令的意思就是每个月的 2 号早 6 点执行 cleanup.ksh 脚本,并且写入日志。
5
.编辑定时任务:
# crontab -e 按照规则来编辑即可。
6
删除定时任务:
#crontab -r

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值