对DBA而言,经常碰到升级数据库或是apply patch,以及有些时候需要运行大量的脚本。对于这些操作我们希望现在在屏幕同时又输出的文件以备后续查询过程中曾经丢失的步骤或错误。Linux下的script命令就是解决这个问题的好帮手。
1、script命令描述
-
script命令会记录所有的操作到文件同时在屏幕上输出,直到终止登陆的会话,或使用CRTL+D,或使用exit退出则停止记录。
-
这个命令对于数据库的升级或是重要设置的情形下使用可以用于后续查询操作成功或失败。
-
用法: $ script [upgrade.log]
-
如果未指定日志文件名的情形,自动生成日志文件名为typescript。
-
如果需要输出到已经存在的日志文件,则使用 -a 参数,再接已经存在日志文件名。
-
如果需要在输出到日志文件的同时,也可以查看日志文件的内容,可以使用 -f 参数。
-
-
-
robin@SZDB:~> man script
-
NAME
-
script - make typescript of terminal session
-
-
SYNOPSIS
-
script [-a] [-c COMMAND] [-f] [-q] [-t] [file]
-
-
DESCRIPTION
-
Script makes a typescript of everything printed on your terminal. It is useful for students who need a hardcopy record of
-
an interactive session as proof of an assignment, as the typescript file can be printed out later with lpr(1).
-
-
If the argument file is given, script saves all dialogue in file. If no file name is given, the typescript is saved in the
-
file typescript.
-
-
Options:
-
-
-a Append the output to file or typescript, retaining the prior contents.
-
-
-c COMMAND
-
Run the COMMAND rather than an interactive shell. This makes it easy for a script to capture the output of a pro-
-
gram that behaves differently when its stdout is not a tty.
-
-
-f Flush output after each write. This is nice for telecooperation: One person does `mkfifo foo; script -f foo' and
-
another can supervise real-time what is being done using `cat foo'.
-
-
-q Be quiet.
-
-
-t Output timeing data to standard error. This data contains two fields, separated by a space. The first field indi-
-
cates how much time elapsed since the previous output. The second field indicates how many characters were output
-
this time. This information can be used to replay typescripts with realistic typing and output delays.
2、script命令用法示例
-
a、script命令后接日志文件名
-
robin@SZDB:~> script test_logfile.log
-
Script started, file is test_logfile.log
-
-
.................
-
-
robin@SZDB:~> exit
-
exit
-
Script done, file is test_logfile.log
-
-
-
robin@SZDB:~> more test_logfile.log
-
Script started on Fri 26 Apr 2013 05:45:23 PM CST
-
robin@SZDB:~> sid
-
bash: sid: command not found
-
robin@SZDB:~> . ~/.bash_profile
-
robin@SZDB:~> sid
-
ORA_CRS_HOME=/opt/oracle/product/10gR2/crs
-
ORACLE_PATH=.:/users/robin/dba_scripts/custom/sql
-
ORA_ASM_HOME=/opt/oracle/product/10gR2/asm
-
ORACLE_SID=SYBO2SZ
-
ORACLE_BASE=/users/oracle
-
ORACLE_HOME=/users/oracle/OraHome10g
-
robin@SZDB:~> sql
-
-
SQL*Plus: Release 10.2.0.3.0 - Production on Fri Apr 26 17:46:12 2013
-
-
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
-
-
Error accessing PRODUCT_USER_PROFILE
-
Warning: Product user profile information not loaded!
-
You may need to run PUPBLD.SQL as SYSTEM
-
-
Connected to:
-
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
-
-
goex_admin@SYBO2SZ> alter session set current_schema=scott;
-
-
Session altered.
-
-
goex_admin@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
---------- -------------- -------------
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
-
goex_admin@SYBO2SZ> exit
-
Disconnected from Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
-
robin@SZDB:~> exit
-
exit
-
-
Script done on Fri 26 Apr 2013 05:46:32 PM CST
-
-
b、script 命下直接跟脚本名的示例
-
robin@SZDB:~> script -c retval.sh
-
Script started, file is typescript
-
7788 SCOTT ANALYST 7566 19870419 00:00:00 3100 20
-
Script done, file is typescript
-
-
-
-
-
-
robin@SZDB:~> more ~/dba_scripts/custom/bin/retval.sh
-
-
RETVAL=`sqlplus -silent scott/tiger <
-
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
-
SELECT * FROM emp WHERE ename='SCOTT';
-
EXIT;
-
EOF`
-
if [ -z "$RETVAL" ]; then
-
echo "No rows returned from database"
-
exit 0
-
else
-
echo $RETVAL
-
fi
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23490154/viewspace-1062424/
,如需转载,请注明出处,否则将追究法律责任。