精华内容
下载资源
问答
  • oracle安装for unix

    2008-04-10 08:28:49
    oracle安装在unix环境下,需要配置的环境变量和目录,这是本人在实际项目中的安装,有一些项目内容,但安装过程完全记录下了,适合对unixoracle有一定了解的人阅读,否则即使看了也不会安装。
  • Oracle DBA on Unix and Linux

    2011-11-11 00:28:06
    Oracle DBA on Unix and Linux,相信描述了oracleunix和linux下的dba的管理工作
  • unix AIX 环境下 exp 备份 Oracle 分区实例
  • oracle AIX Unix

    2015-12-08 14:57:55
    oracle doc for use on aix unix
  • oracle dba的unix袖珍参考手册 oracle 系统管理常用命令
  • Oracle DBA的UNIX 袖珍参考手册
  • Oracle9i在UNIX下的安装

    2008-01-07 09:27:19
    Oracle9i在UNIX下的安装
  • (Oracle)使用unix命令

    2008-04-22 15:37:05
    (Oracle)中使用unix命令
  • 作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易。那么到底我们该怎么入手呢? Donald K Burleson 的《Unix for Oracle DBAs Pocket Reference》这本书就比较详细的...
  • ORACLEUNIX的安装

    2009-03-31 11:13:58
    ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装ORACLEUNIX的安装
  • unixoracle分区导出

    2019-03-24 02:10:31
    NULL 博文链接:https://wjeye.iteye.com/blog/600274
  • Oracle 9i在UNIX下的安装

    2018-02-18 10:06:24
    !!!!!!Oracle 9i在sun solaris下j详细的安装ppt.
  • 本文是Oracle HA 在Unix上双机环境的安装指南。
  • ORACLE&UNIX;常用命令

    2018-01-20 15:25:18
    ORACLE&UNIX;常用命令,ORACLE&UNIX;常用命令,值得一读。
  • oracle AIX unix doc 2

    2015-12-08 15:00:05
    doc of oracle on aix unix
  • 构建Unix命令 Unix服务器环境 进程管理 Server Values 内存和CPU管理 服务器监控 文件管理 磁盘管理 其它杂项
  • Oracle DBA的UNIX袖珍参考手册
  • Oracle时间与Unix时间戳的转换

    万次阅读 2006-04-22 11:20:00
    关键字:Oracle Data Unix Unix时间戳记是从1970-01-01 00:00:00GMT开始的秒数,表现为整数型。Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数(1)从Unix时间戳记转换为Oracle时间create or ...
    关键字:Oracle Data Unix
    Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。
    Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数
    (1)从Unix时间戳记转换为Oracle时间
    create or replace function unix_to_oracle(in_number NUMBER) return date is
    begin 
      return(TO_DATE('19700101','yyyymmdd') + in_number/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24);
    end unix_to_oracle;
    (2)由Oracle时间Date型转换为Unix时间戳记
    create or replace function oracle_to_unix(in_date IN DATE) return number is 
    begin 
      return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600);
    end oracle_to_unix;
    展开全文
  • Oracle Date to Unix Timestamp

    千次阅读 2012-08-02 15:56:52
    SELECT (sysdate - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400) AS dt FROM dual;
     
    
    SELECT (sysdate - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400) AS dt FROM dual;
    
    展开全文
  • 本文介绍了在Unix环境下卸载Oracle表结构文本中的脚本。
  • Oracle DBA Linux And Unix

    2010-03-06 17:37:57
    Oracle DBA Linux And Unix
  • Oracle Unix安装手册

    2010-08-02 01:49:16
    Oracle Unix安装手册,如何安装oracle,企业中必须掌握的。
  • oracle Unix安装指南

    2008-07-17 09:18:04
    oracleUnix上的安装指南
  • oracle ScoUnix下的Oracle安装及命令实践
  • OCI的测试包
  • Oracle DBA的UNIX袖珍参考手册

    千次阅读 2006-12-15 17:37:00
    作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易。那么到底我们该怎么入手呢?Donald K Burleson 的《Unix for Oracle DBAs Pocket Reference》这本书就比较详细的...

    作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易。那么到底我们该怎么入手呢?
    Donald K Burleson 的《Unix for Oracle DBAs Pocket Reference》这本书就比较详细的说明了作为一名Oracle DBA所应该掌握的知识,而且基本上都有例子供实验,因此有选择的翻译出主要的章节:
    3 构建Unix命令

    4 Unix服务器环境

    5 进程管理

    6 Server Values
    7 内存和CPU管理

    10 服务器监控

    11 文件管理

    12 磁盘管理

    13 其它杂项

    3 构建Unix命令  

    有的时候Unix的命令看上去很复杂,其实有可能是多个命令合在一起的。
    1.分解一个复杂的Unix命令:
    ps -ef|grep "ora_"|grep -v grep|awk '{ print $2 }'|xargs kill -9
    乍看这条命令,给人很复杂神秘的感觉。然而,这实际上是通过管道符(|)来合在一起的一组简单命令。写成下面的格式更易懂一些:
    ps -ef
    |
    grep "ora_"
    |
    grep -v grep
    |
    awk '{ print $2 }'
    |
    xargs kill -9
    这条命令总的目的是杀掉所有Oracle的进程。ps -ef 列出所有的进程,而grep "ora_" 只列出ps -ef中的ora_开头的进程;grep -v grep的作用是进程中不列出命令本身,awk '{ print $2 }'的作用是只列出显示的进程的第2部分。xargs 将前面列出的内容传给后面的命令,kill -9命令会强制关闭列出来的进程。
    为了更好的理解这条命令,我们不妨逐步执行这个命令,查看输出结果:
    HBZW> ps -ef
    UID PID PPID C STIME TTY TIME CMD
    root 0 0 1.2 13:48:38 ?? 0:36.18 [kernel idle]
    root 1 0 0.0 13:48:38 ?? 0:00.05 /sbin/init -a
    root 3 1 0.0 13:48:39 ?? 0:00.02 /sbin/kloadsrv
    root 5 1 0.0 13:48:40 ?? 0:00.00 /sbin/hotswapd
    root 53 1 0.0 13:48:56 ?? 0:00.00 /sbin/update
    root 170 1 0.0 13:49:00 ?? 0:00.16 /usr/sbin/evmd
    ......
    oracle 2445 1 0.0 14:48:35 ?? 0:00.36 ora_ckpt_gaxz
    oracle 2447 1 0.0 14:48:35 ?? 0:00.38 ora_smon_gaxz
    oracle 2449 1 0.0 14:48:36 ?? 0:00.07 ora_reco_gaxz
    oracle 2451 1 0.0 14:48:36 ?? 0:00.19 ora_cjq0_gaxz
    oracle 2453 1 0.0 14:48:36 ?? 0:02.20 ora_qmn0_gaxz
    oracle 2455 1 0.0 14:48:36 ?? 0:00.06 ora_s000_gaxz
    oracle 2457 1 0.0 14:48:36 ?? 0:00.07 ora_d000_gaxz

    HBZW> ps -ef|grep "ora_"
    oracle 2439 1 0.0 14:48:35 ?? 0:00.08 ora_pmon_gaxz
    oracle 2441 1 0.0 14:48:35 ?? 0:00.09 ora_dbw0_gaxz
    oracle 2443 1 0.0 14:48:35 ?? 0:00.11 ora_lgwr_gaxz
    oracle 2445 1 0.0 14:48:35 ?? 0:00.40 ora_ckpt_gaxz
    oracle 2447 1 0.0 14:48:35 ?? 0:00.40 ora_smon_gaxz
    oracle 2449 1 0.0 14:48:36 ?? 0:00.07 ora_reco_gaxz
    oracle 2451 1 0.0 14:48:36 ?? 0:00.23 ora_cjq0_gaxz
    oracle 2453 1 0.0 14:48:36 ?? 0:02.46 ora_qmn0_gaxz
    oracle 2455 1 0.0 14:48:36 ?? 0:00.06 ora_s000_gaxz
    oracle 2457 1 0.0 14:48:36 ?? 0:00.07 ora_d000_gaxz
    oracle 2530 2310 0.0 15:10:56 pts/1 0:00.00 grep ora_
    HBZW> ps -ef|grep "ora_"|grep -v grep
    oracle 2439 1 0.0 14:48:35 ?? 0:00.08 ora_pmon_gaxz
    oracle 2441 1 0.0 14:48:35 ?? 0:00.09 ora_dbw0_gaxz
    oracle 2443 1 0.0 14:48:35 ?? 0:00.11 ora_lgwr_gaxz
    oracle 2445 1 0.0 14:48:35 ?? 0:00.41 ora_ckpt_gaxz
    oracle 2447 1 0.0 14:48:35 ?? 0:00.40 ora_smon_gaxz
    oracle 2449 1 0.0 14:48:36 ?? 0:00.07 ora_reco_gaxz
    oracle 2451 1 0.0 14:48:36 ?? 0:00.24 ora_cjq0_gaxz
    oracle 2453 1 0.0 14:48:36 ?? 0:02.53 ora_qmn0_gaxz
    oracle 2455 1 0.0 14:48:36 ?? 0:00.06 ora_s000_gaxz
    oracle 2457 1 0.0 14:48:36 ?? 0:00.07 ora_d000_gaxz
    HBZW> ps -ef|grep "ora_"|grep -v grep|awk '{ print $2 }'
    2439
    2441
    2443
    2445
    2447
    2449
    2451
    2453
    2455
    2457
    HBZW> ps -ef|grep "ora_"|grep -v grep|awk '{ print $2 }'|xargs kill -9
    HBZW>
    2.find命令常用方法
    find命令是一个重要的工具,用来查找文件。下面是列出几个常用的方法:
    ----当前路径下及所有子目录下查找文件名是netmgr的文件
    # find . -name netmgr
    ----在/usr及所有子目录下查找名字是vi的文件
    # find /usr -name vi
    ----在当前目录及所有子目录下查找文件名包含net的文件
    # find ./ -name "net*"
    ----在当前目录及所有子目录查找整个文件名或路径(包含路径)包含特定字符串rdbms 的文件或者路径
    # find ./ -print |grep rdbms
    ----查找当前目录及所有目录下的文件的文件内容中含有特定字符串
    比如我们要查找当前目录下哪个文件的内容里含有good这个单词:
    # find ./ -print|xargs grep -i good
    总而言之,通过管道符|,将一个命令的输出作为另外一个命令的输入,是Unix下Oracle管理中常用的方法。

    4 Unix服务器环境

    本节内容有助于你轻松掌握Unix环境。本节首先介绍当你作为Oracle用户登录到Unix中会自动被执行的命令。在主目录下有一个特殊的文件,这个文件中可以写入一些当该用户登录到系统后就自动运行的命令。如果使用Korn shell,那么文件名就是.profile。如果使用C shell,那么文件名就是.cshrc。
    1.设置标准Unix提示符(ksh)
    将下面的代码放到.profile中,就会得到一个包含服务器名称、数据库名称和当前工作目录的提示符。这样可以防止我们执行误操作。
    PS1=" `hostname`*/${ORACLE_SID}-/${PWD} >"
    下面是具体的效果:
    corphp*PROD-/home/oracle >pwd
    /home/oracle
    corphp*PROD-/home/oracle >cd /u01/oradata/PROD
    corphp*PROD-/u01/oradata/PROD >
    在上面的例子中,corphp是主机名,PROD是Oracle实例名,后面跟的是当前目录。注意,这个方法在ksh下一般都有效,如果是别的shell可能不行。
    2.获取Oracle主目录(ksh):
    $ cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':'
    /poll/oracle/ora92
    3.为Oracle创建有用的unix别名
    alias命令可以用一个短小的名字来代表一长的Unix命令。例如:
    alias log='cd $ORACLE_HOME/$ORACLE_SID/bdump'
    rm命令在删除数据的时候默认不确认,这就非常危险,为了避免误删除,我们可以用下面的办法:
    alias rm='rm -i'
    这样,执行rm的时候相当于执行的rm -i,就会确认是否删除。
    我们可以通过这样的方法,把常用的命令组合用别名来代替,放到.profile文件中。需要调用的时候调用别名即可。下面在.profile中定义了一些常用的别名:
    # Aliases
    #
    alias alert='tail -100/ $ORACLE_HOME/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.lo
    g|more' alias arch='cd $ORACLE_HOME/admin/$ORACLE_SID/arch'
    alias bdump='cd $ORACLE_HOME/admin/$ORACLE_SID/bdump'
    alias cdump='cd $ORACLE_HOME/admin/$ORACLE_SID/cdump'
    alias pfile='cd $ORACLE_HOME/admin/$ORACLE_SID/pfile'
    alias rm='rm -i'
    alias sid='env|grep ORACLE_SID'
    alias admin='cd $ORACLE_HOME/admin'
    4.将SQL*Plus脚本放入Unix shell中
    这个例子中的脚本叫做run_sql.ksh,该脚本调用了SQL*Plus来执行一条SQL语句,然后执行/home/oracle/sql/longscriptl.sql
    #!/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
    !
    然后要用chmod 755 run_sql.ksh来将此脚本改成可执行。接下来就可以直接在提示符下调用了(假设该脚本位于当前目录下):
    # ./run_sql.ksh
    当然,我们也可以在提示符下用下面的命令来执行SQL*Plus脚本:
    # sqlplus system/manager @/home/oracle/sql/longscript.sql
    5.将任务提交到后台执行
    nohup命令可以作为一个后台进程来提交任务。这对长时间执行的Oracle作业尤其有用,因为这可以释放命令提示符,从而你可以进行其他工作。例如:
    nohup run_sql.ksh > logfile.lst 2>&1 &
    上面这条命令中不光nohup,还有其他内容,让我们来了解一下各部分的含义:
    nohup
    将这个任务提交,让其持续运行,甚至你断开终端会话。
    run_sql.ksh
    指定想在后台中运行的Unix脚本
    >logfile.lst
    指定存放输出的文件名
    2>&1
    将标准错误信息输入到标准输出设备上。2代表标准错误信息。1代表标准输出设备。
    &
    在后台运行这条命令,释放提示符。
    通过在nohup命令的最后加一个空格和ampersand(&)字符,这个命令会以后台任务来运行。nohup命令会将常用到,因为它避免了当你退出Unix后程序就终止的问题。
    6.监控后台运行的进程的执行情况
    如果你将后台作业的输出重定向到了一个文件,那么你可以通过tail -f命令来监控后台进程的运行情况。例如:
    tail -f logfile.list
    tail -f命令不断的显示输出文件中的新的行,从而让你很轻松的可以看到进程的执行情况。为了终止tail -f命令,可以随时按下Ctrl-C。
    7.确保合适的参数传递给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。
    8.保证只有Oracle用户可以运行脚本

    #!/bin/ksh
    if [ `whoami` != 'oracle' ]
    then
    echo "Error: You must be oracle to execute."
    exit 99
    fi
    上面的语句只允许oracle用户来执行脚本。虽然unix文件权限可能允许任何用户来执行,但是经验丰富的DBA应该在脚本上加上限制,只允许oracle用户来运行特定的脚本,如关闭数据库等操作。
    9.检查是否传递了正确的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`语句去掉。
    10.理解cat /etc/oratab|grep /^$1:| cut -f1 -d':'|wc -l的含义
    在上面的这个脚本中,对于初次接触unix脚本的人来说最难于理解,所以我们来解释一下。
    cat /etc/oratab|
    grep /^$1:|
    cut -f1 -d':'|
    wc -l
    cat /etc/oratab的作用是显示/etc/oratab的全部内容。
    # cat /etc/oratab
    #
    # This file is used by ORACLE utilities. It is created by root.sh
    # and updated by the Database Configuration Assistant when creating
    ……
    *:/poll/oracle/oracle/OraHome1:N
    *:/poll/oracle/ora92:N
    gaxz:/poll/oracle/ora92:N
    grep /^$1:是在前面的结果中过滤。$1代表第一个传递的参数的值,/^代表要是1行的开头,总的意思就是,要查找一行的开头是$1和:的行。假设$1是gaxz,我们替代一下看看效果:
    # cat /etc/oratab |grep /^gaxz:
    gaxz:/poll/oracle/ora92:N
    cut -f1 -d':' 的作用是去除掉:和:后面的内容:
    # cat /etc/oratab |grep /^gaxz|cut -f1 -d':'
    gaxz
    wc -l 的作用是统计前面的内容出现的次数
    # cat /etc/oratab |grep /^gaxz|cut -f1 -d':'|wc -l
    1
    所以可以看出,如果我们将gaxz作为脚本的参数传递,那么将判断是正确的SID
    11.在UNIX服务器间的循环操作(LOOP)
    Unix的for loop结构可以用来遍历服务器上的某个文件中的所有内容。例如,你可以写一个Unix脚本来读取oratab文件中的所有内容,并且访问文件中的所有列出的数据库。进一步利用这个功能,我们可以访问包含你的数据库名称的文件,遍历每一个服务器。我们可以写一个脚本,访问你的企业环境中的每一个服务器中的每一个数据库。这个脚本在所有的Unix服务器都是可信任(trusted)的,也就是允许远程脚本命令的时候尤其有用。Unix的rsh命令可以提交远程脚本命令。rsh命令通过在.rhosts文件中加入一个条目,允许你访问远程主机。例如,如果你希望你的Oracle用户允许访问一个远程服务器,名字叫做prodwest,那么prodwest服务器中需要在oracle用户的主目录下有.rhosts文件,如何配置这个文件可以和系统DBA联系。一般在这个文件中加入+ +即表示允许其它所有远程用户访问。如果只允许特定的ip地址访问,可以参考我的.rhosts文件:
    # .rhosts
    # allow other server to remotely use this server
    192.168.128.200 +
    192.168.128.201 +
    下面是一个访问各个服务器上的数据库的一个示例,这个脚本并不真正做什么,只是显示每个服务器下的oratab文件中的SID。但是我们可以据此来完善这个脚本。
    # Loop through each host name . . .
    for host in `cat ~oracle/.rhosts|/
    cut -d"." -f1|awk '{print $1}'|sort -u`
    do
    echo " "
    echo "************************"
    echo "$host"
    echo "************************"
    # Loop through each database name
    # /etc/oratab (AIX & HP-UX) or
    # /var/opt/oracle/oratab in Solaris.
    for db in `rsh $host/
    "cat /etc/oratab|egrep ':N|:Y'|/
    grep -v /*|cut -f1 -d':'"`
    do
    # Get the ORACLE_HOME for each database.
    home=`rsh $host "cat /etc/oratab|/
    egrep ':N|:Y'|grep -v /*|grep ${db}|/
    cut -f2 -d':'"`
    echo " "
    echo "database is $db"
    done
    done
    12.在所有的数据库中执行某SQL*Plus脚本
    # Loop through each host name . . .
    for host in `cat ~oracle/.rhosts|/
    cut -d"." -f1|awk '{print $1}'|sort -u`
    do
    echo " "
    echo "************************"
    echo "$host"
    echo "************************"
    # Loop from database to database.
    for db in `cat /etc/oratab|egrep ':N|:Y'|/
    grep -v /*|grep ${db}|cut -f1 -d':'"`
    do
    home=`rsh $host "cat /etc/oratab|egrep/
    ':N|:Y'|grep -v /*|grep ${db}|cut -f2 -d':'"`
    echo "************************"
    echo "database is $db"
    echo "************************"
    rsh $host "

    ORACLE_SID=${db}; export ORACLE_SID;
    ORACLE_HOME=${home}; export ORACLE_HOME;
    ${home}/bin/sqlplus -s /< set pages 9999;
    set heading off;
    select value from v"//""$"parameter
    where name='optimizer_mode';
    exit
    !"
    done
    done
    13.通过Internet Mail发送unix文件
    下面的语句将oracle目录下的.sh_history文件中的内容发给
    turner@itpub.net
    cat ~oracle/.sh_history|mailx -s "DBA Activity Report" turner@itpub.net
    注意,要想让上面的命令正确执行,需要在unix服务器下配置好邮件地址等信息,可以和系统管理员联系。
    14.修改某目录下的所有文件的某字符串
    这个脚本在某路径下查找符合条件的文件,将文件中的特定字符串替换成其它的字符串,替换之前做备份。我们在脚本中用到for loop循环和流编辑器sed。字符串的替换工作是用sed来完成的。这个脚本名字是chg_all.ksh
    #!/bin/ksh
    tmpdir=tmp.$$
    mkdir $tmpdir.new
    for f in $*
    do
    sed -e 's/oldstring/newstring/g'/
    < $f > $tmpdir.new/$f
    done
    # Make a backup first!
    mkdir $tmpdir.old
    mv $* $tmpdir.old/
    cd $tmpdir.new
    mv $* ../
    cd ..
    rmdir $tmpdir.new
    编辑好这个脚本之后,我们来测试一下。
    $ cat abc.sql
    oldstring
    test replace
    oldstring
    $ chg_all.ksh *.sql
    $ cat abc.sql
    newstring
    test replace
    newstring
    $

    5 进程管理

    本节介绍如何在Unix环境下管理oracle进程。我们知道,Oracle实例由一组进程组成,如PMON,SMON,DBWR,LGWn等。此外还有我们需要注意和管理的进程,如果使用了deticated listener,也会生成此监听器的进程。
    1.显示Oracle的Unix进程
    $ ps -ef|grep "ora_"|grep -v grep
    UID PID PPID C STIME TTY TIME CMD
    oracle 898 1 0.0 Sep 22 ?? 0:02.20 ora_pmon_gaxz
    oracle 900 1 0.0 Sep 22 ?? 0:06.11 ora_dbw0_gaxz
    oracle 902 1 0.0 Sep 22 ?? 0:06.90 ora_lgwr_gaxz
    oracle 904 1 0.0 Sep 22 ?? 1:01.29 ora_ckpt_gaxz
    oracle 906 1 0.0 Sep 22 ?? 0:12.56 ora_smon_gaxz
    oracle 908 1 0.0 Sep 22 ?? 0:00.17 ora_reco_gaxz
    oracle 910 1 0.0 Sep 22 ?? 0:28.05 ora_cjq0_gaxz
    oracle 912 1 0.0 Sep 22 ?? 5:28.37 ora_qmn0_gaxz
    oracle 914 1 0.0 Sep 22 ?? 0:00.16 ora_s000_gaxz
    oracle 916 1 0.0 Sep 22 ?? 0:00.07 ora_d000_gaxz
    UID:代表用户
    PID:代表进程
    PPID:父进程。如果父进程是1,则代表该进程是由init进程调用的。
    STIME:启动时间
    CMD:被执行的Unix命令
    2.查看消耗CPU时间最长的进程:
    $ ps -ef|grep oracle|sort +6|tail
    oracle 914 1 0.0 Sep 22 ?? 0:00.19 ora_s000_gaxz
    oracle 908 1 0.0 Sep 22 ?? 0:00.20 ora_reco_gaxz
    oracle 898 1 0.0 Sep 22 ?? 0:02.94 ora_pmon_gaxz
    oracle 900 1 0.0 Sep 22 ?? 0:07.89 ora_dbw0_gaxz
    oracle 902 1 0.0 Sep 22 ?? 0:08.96 ora_lgwr_gaxz
    oracle 906 1 0.0 Sep 22 ?? 0:16.17 ora_smon_gaxz
    oracle 910 1 0.0 Sep 22 ?? 0:37.44 ora_cjq0_gaxz
    oracle 904 1 0.0 Sep 22 ?? 1:18.16 ora_ckpt_gaxz
    oracle 912 1 0.0 Sep 22 ?? 7:01.27 ora_qmn0_gaxz

    sort +6的作用是按照第6列排序。最左边的是第0列,第6列是CPU消耗的时间,但是如果程序运行了1天以上,那么STIME就会包含两列,因此上面的例子实际上第7列是消耗CPU时间:
    ps -ef|grep afis|sort +7|tail
    是第6列还是第7列的确是一个麻烦的问题,没有什么太简单的方法,一般各执行一遍。tail的作用是显示输出的后多少行,默认是10
    另外一个查找高CPU消耗进程的方法是使用Berkeley的ps auxgs命令。这个命令输出的第3列(sort中的+2)名字叫%CPU,显示的是当前每个进程的CPU持有百分比。你可以按照此列排序来获得当前高CPU占用的用户。例如:
    $ ps auxgw|sort +2|tail
    oracle 916 0.0 0.5 424M 4.8M ?? I Sep 22 0:00.07 ora_d000_gaxz
    oracle 912 0.0 1.0 421M 11M ?? I Sep 22 7:03.09 ora_qmn0_gaxz
    root 708 0.0 1.0 18.4M 11M ?? S Sep 22 0:04.90 /usr/sbin/smsd -d
    root 0 0.1 4.1 1.27G 42M ?? R < Sep 22 20:57.87 [kernelidle]
    ……
    我们可以用egrep命令来进一步过滤ps的输出,来从高到底显示高CPU消耗进程。egrep是一个扩展的正则表达式解析器。下面的命令中,egrep的作用是对ps的输出排序过滤。
    $ ps auxgw|egrep "RSS| "|head
    USER PID %CPU %MEM SZ RSS TTY TIME
    root 516 78.9 1.0 16 4 - A Nov 21
    oracle 41616 4.4 1.0 8312 6052 - A 07:00:59
    oracle 20740 2.7 1.0 8140 5888 - A 08:52:32
    oracle 17402 2.4 1.0 8296 6044 - A 07:27:04
    oracle 25754 2.4 1.0 8640 6388 - A 08:10:03
    oracle 13168 1.6 1.0 8196 5760 - A 05:33:06
    oracle 20666 1.0 1.0 8304 6052 - A 08:15:19
    oracle 14922 0.6 1.0 8300 5720 - A 01:01:46
    oracle 44518 0.6 1.0 8080 5828 - A 08:47:47
    head的作用是显示输出的头10行
    3.显示Oracle的活动连接用户数量
    # ps -ef|grep $ORACLE_SID|grep -v grep|grep -v ora_|wc -l
    这个命令由以下几个部分组成:
    ps -ef
    显示所有进程
    grep $ORACLE_SID
    过滤输出结果,只显示内容包含SID的行
    grep -v grep
    将grep行从结果中去掉
    grep -v ora_
    去除输出中的Oracle后台进程
    wc -l
    对输出行计数
    下面是这个命令执行的一个例子:
    $ ps -ef|grep $ORACLE_SID|grep -v grep|grep -v ora_|wc -l
    120
    4.杀掉进程
    基本的kill使用方法是
    kill -9 pid1 pid2 pid3…
    杀掉所有Oracle进程的一个例子:
    ps -ef|grep "ora_"|grep -v grep|awk '{print $2}'|xargs -i kill -9 {}
    5.将Oracle SGA定在内存中
    在HP-UX,Solaris和一些SVR4版本的Unix中,我们可以把Oracle的SGA钉在内存中,这样就永远不会产生page-in,也就是不会因为page-in而带来性能问题。page-in在SGA将内存写入磁盘然后又读回的时候发生。这个方法不能用于AIX。根据系统的不同,我们需要在INIT.ORA中设置不同的参数:
    # For HP-UX, use lock_sga:
    LOCK_SGA=true
    # For Sun Solaris, use USE_ISM.
    # ISM is an acronym for "Intimate
    # Shared Memory".
    USE_ISM=true

    6 Server Values

    Unix有很多系统配置参数值,如核心参数等,例如有的配置值是关于内存、磁盘等的信息。核心参数对Unix操作系统影响非常大,有一些参数对在Unix下安装Oracle非常有用。
    1.显示HP-UX中的服务设备信息
    通过使用lsdev命令,可以显示出连接到服务器上的所有设备信息。包括磁盘驱动器、内存、CPU、总线等等。下面的命令中,lsdev列出了所有的mount到服务器的设备。
    $ lsdev
    Character Block Driver Class
    0 -1 cn pseudo
    3 -1 mm pseudo
    16 -1 ptym ptym
    17 -1 ptys ptys
    27 -1 dmem pseudo
    28 -1 diag0 diag
    46 -1 netdiag1 unknown
    52 -1 lan2 lan
    2.显示aix中的服务器设备信息
    在AIX中也可以使用lsdev命令来查看硬件设备信息。
    $ lsdev -C
    sys0 ... System Object
    sysplanar0 ... System Planar
    pci0 ... PCI Bus
    pci1 ... PCI Bus
    isa0 ... ISA Bus
    sa0 ... Standard I/O Serial Port
    sa1 ... Standard I/O Serial Port
    scsi0 ... Wide SCSI I/O Controller
    hdisk0 ... 16 Bit SCSI Disk Drive
    hdisk1 ... 16 Bit SCSI Disk Drive
    ...
    3.显示HP-UX中的系统核心参数
    我们可以通过kmtune命令来显示HP-UX Version 11以后的所有核心佩值参数。有的核心参数,如semmni和maxusers等,对Oracle能否正确运行来说极其重要。
    $ kmtune
    Parameter Value
    NSTREVENT 50
    NSTRPUSH 16
    NSTRSCHED 0
    STRCTLSZ 1024
    STRMSGSZ 65535
    acctresume 4
    acctsuspend 2
    semmni 200
    semmns 800
    semmnu 30
    semume 10
    semvmx 32767
    ……
    我们当然可以对输出结果用grep来进行过滤,获得我们关心的部分。例如:
    $ kmtune|grep -i shm
    shmem 1
    shmmax 1073741824
    shmmni 500
    shmseg 300
    4.在AIX下查看系统核心参数
    我们需要使用lsattr命令。例如:
    $ lsattr -El sys0
    maxbuf 20 Maximum number of pages in block...
    maxmbuf 0 Maximum Kbytes of real memory al...
    maxuproc 200 Maximum number of PROCESSES allo...
    iostat true Continuously maintain DISK I/O h...
    realmem 3137536 Amount of usable physical mem...
    modelname IBM,9076-WCN Machine name ...
    systemid IBM,010013864 Hardware system ide...
    ...
    这个命令在我们显示max开头的参数很有用,如maxbuf、maxuproc等。
    5.在TRU64下显示核心参数
    TRU64下核心参数文件是/etc/sysconfigtab,是一个可以用vi来编辑的文件。我们可以使用sysconfig命令查看核心参数,例如:
    # sysconfig -q ipc
    ipc:
    msg_max = 8192
    msg_mnb = 16384
    msg_mni = 64
    msg_tql = 40
    shm_max = 4278190080
    shm_min = 256
    shm_mni = 1024
    shm_seg = 1024
    sem_mni = 16
    sem_msl = 2600
    sem_opm = 10
    sem_ume = 10
    sem_vmx = 32767
    sem_aem = 16384
    sem_broadcast_wakeup = 1
    max_kernel_ports = 93728
    ssm_threshold = 8388608
    ssm_enable_core_dump = 1
    shm_allocate_striped = 1
    shm_enable_core_dump = 1
    6.Solaris下核心参数显示
    Solaris下的核心参数是/etc/system,我们可以用cat来显示,也可以用vi来编辑。例如:
    # cat /etc/system |grep sem
    set semsys:seminfo_semmni=100
    set semsys:seminfo_semmns=1024
    set semsys:seminfo_semmsl=256
    set semsys:seminfo_semvmx=32767
    set semsys:shminfo_shmmax=4294967295
    set semsys:shminfo_shmmni=100

    7 内存和CPU管理

    1.显示TRU64下的内存信息:
    $ /bin/vmstat -P | grep "Total Physical Memory"
    Total Physical Memory = 1024.00 M
    Total Physical Memory Use: 130730 / 1021.33M
    2.显示HP-UX下的内存信息:
    grep MemTotal /proc/meminfo
    3.Solaris下显示内存大小:
    /usr/sbin/prtconf | grep "Memory size"
    4.Aix下显示内存大小:
    /usr/sbin/lsattr -E -l sys0 -a realmem
    5.使用Aix的svmon工具
    IBM AIX提供一个叫做svmon的工具。这个工具显示服务器上的所有内存的使用情况,包括页交换和内存使用。例如:
    # svmon
    size inuse free pin virtual
    memory 1048576 961861 86715 115058 165229
    pg space 131072 315
    work pers clnt lpage
    pin 115058 0 0 0
    in use 165244 14559 782058 0
    size:真实内存的帧(frame)大小。在Unix下,一帧等于一页。Unix下页大小一般是4k。
    inuse:使用的frame数量
    free:可用的frame数量
    pin:钉住(pin)的的frame数量
    virtual:总的可用虚拟内存数量
    svmon命令还可以用来查看某具体进程的内存信息,例如:
    # svmon -P 17322
    -------------------------------------------------------------------------------
    Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
    17322 unixsvr 17604 2423 0 14099 N Y N
    Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
    0 0 work kernel seg - 5359 2409 0 5359
    6801a d work shared library text - 4729 0 0 4729
    24669 2 work process private - 3887 2 0 3887
    60678 - clnt /dev/fslv00:1510 - 3090 0 - -
    85e2 1 clnt code,/dev/fslv00:164867 - 398 0 - -
    7107e f work shared library data - 77 0 0 77

    6.Linux下显示内存大小:
    /usr/sbin/dmesg | grep "Physical:"
    7.显示分配的内存段
    # ipcs -pmb
    IPC status from /dev/mem as of Thu May 11 09:40:59 EDT 2000
    T ID KEY ... OWNER GROUP SEGSZ CPID
    Shared Memory:
    m 4096 0x670610c5 ... root system 12 45082
    m 4097 0x680610c5 ... root system 106496 45082
    m 4098 0x78041249 ... root system 777216 47010
    m 4099 0x78061865 ... root system 7536 47880
    m 4 0x0d05014f ... root system 1440 16968
    m 368645 0x0fe2eb3d ...oracle dba 35610624 17760
    m 401414 0x0f97693e ...oracle dba 229863424 61820
    m 274439 0x0fefeae2 ...oracle dba 35610624 21992
    m 184328 0x0fefeb6e ...oracle dba 35610624 46690
    m 151561 0x0fe2eb03 ...oracle dba 4972544 71116
    m 8202 0x0f956d88 ...oracle dba 31117312 72448
    m 143371 0x0f96e941 ...oracle dba 21200896 83662
    8.手动移除内存段分配
    有的情况下内存实例崩溃,但是Oracle的内存段却没释放。可以使用ipcrm来手动完成这个工作。例如:
    ipcrm -m 96
    上面的96是内存段id,我们可以用ipcs命令查到。注意,一定要慎重使用这个命令。这个命令可以很轻松的使Oracle瘫痪。只有在后台进程异常死掉的时候才考虑用这个命令。
    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:oinstall *
    # 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


    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,724
精华内容 39,889
关键字:

oracle的连表unix