• [20181219]script使用小技巧.txt


    [20181219]script使用小技巧.txt

    --//前几天在使用strace时遇到问题,它的输出使用标准错误句柄.
    --//我在想平时使用sqlplus如果输出字段很多,屏幕看起来一片混乱.
    --//是否可以通过使用script记录操作,通过shell一些命令的功能实现更好的显示.通过例子说明:

    1.环境:
    --//首先启动scripts,加入-f参数的主要目的是马上输出,避免缓存的影响.
    -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'.

    2.演示一:
    --//session 1:
    $ script -f /tmp/a.txt
    Script started, file is /tmp/a.txt

    --//登录数据库会话窗口,设置linesize大一些.
    SCOTT@book> set linesize 20000
    SCOTT@book> set pagesize 0

    --//打开另外的终端窗口,执行:
    --//session 2:
    $ tail --line=500 -f /tmp/a.txt

    --//这样就能看到刚才输入的命令.
    --//千万注意不要执行script的会话终端查看/tmp/a.txt,这样会导致/tmp/a.txt迅速增大,相当于一个环.而且自己清楚那个窗口是输入命令,
    --//那个是使用tail查看的窗口.
    --//session 2:
    $ tail --line=500 -f /tmp/a.txt | cut -c1-200

    --//回到打开session 1:
    SCOTT@book> set numw 12
    SCOTT@book> select * from v$database;

    --//session 2:
    SCOTT@book> select * from v$database;
            DBID NAME                 CREATED             RESETLOGS_CHANGE# RESETLOGS_TIME      PRIOR_RESETLOGS_CHANGE# PRIOR_RESETLOGS_TIM LOG_MODE     CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROL CONTROLF
    ------------ -------------------- ------------------- ----------------- ------------------- ----------------------- ------------------- ------------ ------------------ --------------- ------- --------
      1337401710 BOOK                 2018-11-29 11:32:09            925702 2015-11-24 09:11:12                       1 2013-08-24 11:37:30 ARCHIVELOG          13816048396     13815976887 CURRENT 2018-11-

    --//CONTROLFILE_CREATED字段被截断了,适当调出输出宽度就比较看到了.

    3.演示二:
    --//演示一仅仅显示前面一段也许不是我需要的信息.可以通过cut过滤输出特定的字段.
    --//session 1:
    SCOTT@book> set colsep |
    --//这样就可以实现显示使用字符"|"分割.假设我现在要显示v$database视图中supp开头的字段.可以进行如下操作.

    --//session 2:
    $ tail --line=500 -f /tmp/a.txt | grep --binary-files=text SUPP
    --//注意:grep 一定要加入--binary-files=text,因为typescript文件grep把它看成二进制文件,要把它当文本文件对待.
    --//回到session 1:
    SCOTT@book> @desc v$database
    --//切换到session 2,看到如下输出:
       30      SUPPLEMENTAL_LOG_DATA_MIN                VARCHAR2(8)
       31      SUPPLEMENTAL_LOG_DATA_PK                 VARCHAR2(3)
       32      SUPPLEMENTAL_LOG_DATA_UI                 VARCHAR2(3)
       40      SUPPLEMENTAL_LOG_DATA_FK                 VARCHAR2(3)
       41      SUPPLEMENTAL_LOG_DATA_ALL                VARCHAR2(3)
       51      SUPPLEMENTAL_LOG_DATA_PL                 VARCHAR2(3)

    --//这样可以确定显示字段的位置是30,31,32,41,50.奇怪SUPPLEMENTAL_LOG_DATA_MIN长度是8.按ctrl+c退出tail命令,打入如下:
    $ tail --line=500 -f /tmp/a.txt | cut -d"|" -f1,2,30,31,32,40,41,51

    --//回到session 1,执行如下:
    SCOTT@book> select * from v$database;

    --//session 2,看到如下:
    SCOTT@book> select * from v$database;
            DBID|NAME                |SUPPLEME|SUP|SUP|SUP|SUP|SUP
    ------------|--------------------|--------|---|---|---|---|---
      1337401710|BOOK                |NO      |NO |NO |NO |NO |NO

    --//另外有一些版本带有scriptreplay,可以参考链接:http://blog.itpub.net/267265/viewspace-1276764/
    --//总之通过shell一些过滤命令显示自己需要的信息.
    --//另外退出script后定期清理script的输出文件.

  • 相关阅读:
    ASP.NET 使用 X509Certificate2 系统找不到指定的文件
    SQL2000中TOP后不能使用变量
    补丁生成与应用工具 V1.5.4
    检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信API:"SOCKETS"。检测到错误的位置:""。检测到错误的通信函数:"gethostbyname"。协议特定的错误代码:"*"、"11004"、"*"。 SQLST
    CLR 无法从 COM 上下文 0x1a2740 转换为 COM 上下文 0x1a28b0,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作
    Chart 控件 for vs2008的安装
    SqlServer孤立用户解决——"因为该用户存在对象,所以不能删除该用户。"
    函数 replace 的参数 1 的数据类型 text 无效。
    安装SqlServer2000出现"有挂起的操作"提示的解决
    DB2、ORACLE SQL写法的主要区别
  • 原文地址:https://www.cnblogs.com/lfree/p/10150071.html
Copyright © 2020-2023  润新知