#!/bin/bash table='v\$sql' log="./tmp/shell/oracle_log.txt" if [ -e $log ] then rm -f $log fi su - oracle -c "sqlplus -S qgtg/qgtg << END set linesize 500 set pagesize 100 set term off verify off feedback off tab off set numwidth 5 set space 0 set colsep ' | ' column sql_text format a20 column module format a10 column parsing_schema_name format a20 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY LAST_LOAD_TIME DESC) NUMS,SQL_TEXT,FIRST_LOAD_TIME,LAST_LOAD_TIME,PARSING_SCHEMA_NAME,MODULE FROM $table WHERE TO_DATE(LAST_LOAD_TIME,'YYYY-MM-DD hh24:mi:ss') > TRUNC(SYSDATE-1) ORDER BY LAST_LOAD_TIME DESC) WHERE NUMS < 100; quit; END" >> ./tmp/shell/oracle_log.txt if [ ! -e $log ]; then echo "failed" exit 1 fi echo "successed"解释一下脚本
时间: 2024-04-06 15:32:27 浏览: 146
Born:我的一些来自 ~bin 的 shell 脚本很有趣
这个脚本是一个 Bash 脚本,主要功能是连接 Oracle 数据库,查询最近一天内执行过的 SQL 语句,并将查询结果写入日志文件。具体解释如下:
1. `table='v\$sql'`:定义了一个变量 `table`,存储了要查询的表名,这里使用了转义字符 `$`,因为 `$` 符号在 Bash 中有特殊含义,需要转义。
2. `log="./tmp/shell/oracle_log.txt"`:定义了一个变量 `log`,存储了日志文件的路径。
3. `if [ -e $log ]`:判断日志文件是否存在,如果存在则删除。
4. `su - oracle -c "sqlplus ..."`:切换到 Oracle 用户,执行 SQLPLUS 命令,查询数据库,并将查询结果追加到日志文件中。
5. `if [ ! -e $log ]; then ...`:如果日志文件不存在,则输出 `failed`,并退出脚本。
6. `echo "successed"`:输出 `successed`,表示脚本执行成功。
总的来说,这个脚本实现了一个比较简单的数据库查询功能,并将结果写入日志文件,适用于一些简单的数据处理和分析任务。
阅读全文