Linux script 命令記錄(資料庫)操作步驟

us_yunleiwang發表於2013-12-05

   對DBA而言,經常碰到升級資料庫或是apply patch,以及有些時候需要執行大量的指令碼。對於這些操作我們希望現在在螢幕同時又輸出的檔案以備後續查詢過程中曾經丟失的步驟或錯誤。Linux下的script命令就是解決這個問題的好幫手。

 

1、script命令描述

  1. script命令會記錄所有的操作到檔案同時在螢幕上輸出,直到終止登陸的會話,或使用CRTL+D,或使用exit退出則停止記錄。  
  2. 這個命令對於資料庫的升級或是重要設定的情形下使用可以用於後續查詢操作成功或失敗。  
  3. 用法: $ script [upgrade.log]  
  4. 如果未指定日誌檔名的情形,自動生成日誌檔名為typescript。  
  5. 如果需要輸出到已經存在的日誌檔案,則使用 -a 引數,再接已經存在日誌檔名。  
  6. 如果需要在輸出到日誌檔案的同時,也可以檢視日誌檔案的內容,可以使用 -f 引數。  
  7.   
  8. # script 幫助描述  
  9. robin@SZDB:~> man script  
  10. NAME  
  11.      script - make typescript of terminal session  
  12.   
  13. SYNOPSIS  
  14.      script [-a] [-c COMMAND] [-f] [-q] [-t] [file]  
  15.   
  16. DESCRIPTION  
  17.      Script makes a typescript of everything printed on your terminal.  It is useful for students who need a hardcopy record of  
  18.      an interactive session as proof of an assignment, as the typescript file can be printed out later with lpr(1).  
  19.   
  20.      If the argument file is given, script saves all dialogue in file.  If no file name is given, the typescript is saved in the  
  21.      file typescript.  
  22.   
  23.      Options:  
  24.   
  25.      -a      Append the output to file or typescript, retaining the prior contents.  
  26.   
  27.      -c COMMAND  
  28.              Run the COMMAND rather than an interactive shell.  This makes it easy for a script to capture the output of a pro-  
  29.              gram that behaves differently when its stdout is not a tty.  
  30.   
  31.      -f      Flush output after each write. This is nice for telecooperation: One person does `mkfifo foo; script -f foo' and  
  32.              another can supervise real-time what is being done using `cat foo'.  
  33.   
  34.      -q      Be quiet.  
  35.   
  36.      -t      Output timeing data to standard error. This data contains two fields, separated by a space. The first field indi-  
  37.              cates how much time elapsed since the previous output. The second field indicates how many characters were output  
  38.              this time. This information can be used to replay typescripts with realistic typing and output delays.  

2、script命令用法示例

  1. a、script命令後接日誌檔名  
  2. robin@SZDB:~> script test_logfile.log        #啟用script  
  3. Script started, file is test_logfile.log  
  4.   
  5.   .................#中間操作省略  
  6.     
  7. robin@SZDB:~> exit    #停止script  
  8. exit  
  9. Script done, file is test_logfile.log  
  10.   
  11. #檢視剛剛生成的日誌檔案  
  12. robin@SZDB:~> more test_logfile.log   
  13. Script started on Fri 26 Apr 2013 05:45:23 PM CST  
  14. robin@SZDB:~> sid    
  15. bash: sid: command not found  
  16. robin@SZDB:~> . ~/.bash_profile  
  17. robin@SZDB:~> sid  
  18. ORA_CRS_HOME=/opt/oracle/product/10gR2/crs  
  19. ORACLE_PATH=.:/users/robin/dba_scripts/custom/sql  
  20. ORA_ASM_HOME=/opt/oracle/product/10gR2/asm  
  21. ORACLE_SID=SYBO2SZ  
  22. ORACLE_BASE=/users/oracle  
  23. ORACLE_HOME=/users/oracle/OraHome10g  
  24. robin@SZDB:~> sql       
  25.   
  26. SQL*Plus: Release 10.2.0.3.0 - Production on Fri Apr 26 17:46:12 2013  
  27.   
  28. Copyright (c) 19822006, Oracle.  All Rights Reserved.  
  29.   
  30. Error accessing PRODUCT_USER_PROFILE  
  31. Warning:  Product user profile information not loaded!  
  32. You may need to run PUPBLD.SQL as SYSTEM  
  33.   
  34. Connected to:  
  35. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  36.   
  37. goex_admin@SYBO2SZ> alter session set current_schema=scott;  
  38.   
  39. Session altered.  
  40.   
  41. goex_admin@SYBO2SZ> select * from dept;  
  42.   
  43.     DEPTNO DNAME          LOC  
  44. ---------- -------------- -------------  
  45.         10 ACCOUNTING     NEW YORK  
  46.         20 RESEARCH       DALLAS  
  47.         30 SALES          CHICAGO  
  48.         40 OPERATIONS     BOSTON  
  49.   
  50. goex_admin@SYBO2SZ> exit  
  51. Disconnected from Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  52. robin@SZDB:~> exit  
  53. exit  
  54.   
  55. Script done on Fri 26 Apr 2013 05:46:32 PM CST    
  56.   
  57. b、script 命下直接跟指令碼名的示例  
  58. robin@SZDB:~> script -c retval.sh  
  59. Script started, file is typescript  
  60. 7788 SCOTT ANALYST 7566 19870419 00:00:00 3100 20  
  61. Script done, file is typescript  
  62.   
  63. #被執行的shell指令碼的內容  
  64. # Author : Robinson  
  65. # Blog   : http://blog.csdn.ner/robinson_0612  
  66.   
  67. robin@SZDB:~> more ~/dba_scripts/custom/bin/retval.sh  
  68. #!/bin/bash  
  69. RETVAL=`sqlplus -silent scott/tiger <
  70. SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF  
  71. SELECT * FROM emp WHERE ename='SCOTT';  
  72. EXIT;  
  73. EOF`  
  74. if [ -z "$RETVAL" ]; then  
  75.   echo "No rows returned from database"  
  76.   exit 0  
  77. else  
  78.   echo $RETVAL  
  79. fi  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062424/,如需轉載,請註明出處,否則將追究法律責任。

相關文章