Monday, February 2, 2009

dba常用用的系统命令

dba常用用的系统命令



1、#ps -ef|grep "ora_"|grep -v grep|awk '{ print $2 }'|xargs kill –9 杀掉所有Oracle的进程

2、# find ./ -print |grep rdbms 在当前目录及所有子目录查找整个文件名或路径(包含路径)包含特定字符串rdbms 的文件或者路径

3、# find ./ -print|xargs grep -i good 当前目录下哪个文件的内容里含有good这个单词。

4、PS1=" `hostname`*\${ORACLE_SID}-\${PWD} >"

5、$ cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':' 获取Oracle主目录(ksh)

6、将SQL*Plus脚本放入Unix shell
#!/bin/ksh
#请用正确的sid替换下面的sidname
ORACLE_SID=sidname
export ORACLE_SID
ORACLE_HOME=`cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':'`
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH
export PATH
$ORACLE_HOME/bin/sqlplus system/manager<SELECT name FROM v\$datafile;
@/home/oracle/sql/longscript.sql
exit
!

7、我们也可以在提示符下用下面的命令来执行SQL*Plus脚本:
# sqlplus system/manager @/home/oracle/sql/longscript.sql

8、将任务提交到后台执行 nohup命令可以作为一个后台进程来提交任务:
nohup run_sql.ksh > logfile.lst 2>&1 &

9、监控后台运行的进程的执行情况 tail -f logfile.list

10、确保合适的参数传递给Oracle Shell脚本
下面的代码展示怎样阻止不合适的参数传递给Oracle的shell脚本。你可以利用此技术来防止意外的破坏。在这个例子中,check_param.ksh脚本需要两个参数:一个Oracle SID和一个大于100的数字值。if语句的作用是条件不满足的时候退出脚本。
# Exit if no first parameter $1.
if [ -z "$1" ]
then
echo "Usage: check_parms.ksh \
<#_days> (where value is > 100)"
exit 99
fi
# Exit if no second parameter $2.
if [ -z "$2" ]
then
echo "Usage: check_parms.ksh \
<#_days> (where value is > 100)"
exit 99
fi
# Exit if parm is not greater than 100.
tmp=`expr $2` # Convert string to number.
if [ $tmp -lt 101 ]
then
echo
echo "Argument two is less than 100.\
Aborting Script."
echo
exit 99
fi
echo "Right para"
在这个脚本中,$1和$2代表第一个和第二个传递给脚本的参数。if语句中的-z参数检查是否返回null参数,也就是是否没有输入参数。头两个if检查是否传递了参数,第3个if检查第二个参数是否大于100。

11、保证只有Oracle用户可以运行脚本
#!/bin/ksh
if [ `whoami` != 'oracle' ]
then
echo "Error: You must be oracle to execute."
exit 99
fi
上面的语句只允许oracle用户来执行脚本。虽然unix文件权限可能允许任何用户来执行,但是经验丰富的DBA应该在脚本上加上限制,只允许oracle用户来运行特定的脚本,如关闭数据库等操作。

12、检查是否传递了正确的SID
这个脚本显示了怎样检查传递的Oracle SID是否有效。这个脚本假设第一个参数是 传入的SID,然后检查是否是有效的SID。接下来脚本会检查/etc/oratab文件,这个文件中会存有有效的SID。
#!/bin/ksh
# Exit if no first parameter $1 passed.
if [ -z "$1" ]
then
echo "Please pass a valid ORACLE_SID\
to this script"
exit 99
fi
# Validate the Oracle database name with
# lookup in /etc/oratab.
TEMP=`cat /etc/oratab|grep \^$1:| cut -f1 -d':'|wc -l`
tmp=`expr TEMP` # Convert string to number.
if [ $tmp -ne 1 ]
then
echo "Your input $1 is not a valid ORACLE_SID."
exit 99
fi
这个脚本可以检查传递的参数是否是有效的Oracle SID。注意,如果你使用Solaris,那么oratab参数文件将是/var/opt/oratab。另外,有的unix中可能不需要转换TEMP变量。如果上面的脚本不能运行,那么将tmp=`expr TEMP`语句去掉。

13、查看消耗CPU时间最长的进程:
$ ps -ef|grep oracle|sort +6|tail
$ps -ef|grep afis|sort +7|tail
$ ps auxgw|sort +2|tail

14、显示Oracle的活动连接用户数量
# ps -ef|grep $ORACLE_SID|grep -v grep|grep -v ora_|wc -l

15、Linux下显示内存大小: /usr/sbin/dmesg | grep "Physical:
显示分配的内存段 # ipcs -pmb

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

17、使用vmstat
vmstat是通用的UNIX监控工具,vmstat在IRIX操作系统中是osview。vmstat的第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次。vmstat不同操作系统输出结果不一样,含义也可能有区别。

18、使用iostat iostat显示物理磁盘I/O情况。

19、$ ls -alt|head
使用head是为了限制输出数量,只输出最近动过的文件(默认10个)

20、显示最近修改过的文件 $ ls –alc|tail

21、删除未修改的文件
例如,删除5天以上未修改的归档文件
/usr/bin/find $DBA/$ORACLE_SID/arch/arch_prod*.arc -ctime +5 -exec rm {} \

22、批量删除过期的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文件并删除。

No comments: