[20190412]bash显示日期相减.txt
--//别人的系统前一段时间大量出现log file switch (checkpoint incomplete),我想了解日志大概的切换情况.
--//结果对方数据库控制文件已经重建,无法通过一些视图了解具体情况.我想alert文件里面保存这些信息.
--//在自己的系统测试看看,如何获得日志切换的时间间隔.
1.过滤切换日志时的时间:
$ grep -B1 "(LGWR switch)" alert_hrp430.log | grep "^... Apr 0[789].*2019$"
Sun Apr 07 01:11:04 2019
Sun Apr 07 10:54:46 2019
Sun Apr 07 19:00:34 2019
Mon Apr 08 01:11:04 2019
Mon Apr 08 08:29:24 2019
Mon Apr 08 11:05:25 2019
Mon Apr 08 18:06:26 2019
Tue Apr 09 01:11:04 2019
Tue Apr 09 08:00:42 2019
Tue Apr 09 08:57:09 2019
Tue Apr 09 10:01:06 2019
Tue Apr 09 11:31:46 2019
Tue Apr 09 15:50:09 2019
Tue Apr 09 17:49:43 2019
--//简单1点把这个结果导入数据库表中再计算容易许多.
2.转化为1970/1/1开始的秒数:
$ grep -B1 "(LGWR switch)" alert_hrp430.log | grep "^... Apr 0[789].*2019$" | xargs -I{} date -d "{}" "+%s"
1554570664
1554605686
1554634834
1554657064
1554683364
1554692725
1554717986
1554743464
1554768042
1554771429
1554775266
1554780706
1554796209
1554803383
--//验证看看是否转化正确
$ date -d "1970-01-01 00:00:00 UTC 1554570664 seconds" +"%Y-%m-%d %T"
2019-04-07 01:11:04
3.如何实现上下相减呢?
$ grep -B1 "(LGWR switch)" alert_hrp430.log | grep "^... Apr 0[789].*2019$" | xargs -I{} date -d "{}" "+%s" | awk 'NR==1{a=$1} NR>1{print $1-a;a=$1}'
35022
29148
22230
26300
9361
25261
25478
24578
3387
3837
5440
15503
7174
--//这样就能获得切换的时间(单位秒),验证看看.
SYS@hrp430> select (to_date('Apr 07 10:54:46 2019','MON DD HH24:MI:SS YYYY')-to_date('Apr 07 01:11:04 2019','MON DD HH24:MI:SS YYYY'))*86400 N10 from dual ;
N10
---------------------
35022
--//OK完全正确.再修改看看:
$ grep -B1 "(LGWR switch)" alert_hrp430.log | grep "^... Apr 0[789].*2019$" | xargs -I{} date -d "{}" "+%Y-%m-%d:%T %s" | awk 'NR==1 {a=$1;b=$2} NR>1 {print $1,"-",a,$2-b;a=$1;b=$2}'
2019-04-07:10:54:46 - 2019-04-07:01:11:04 35022
2019-04-07:19:00:34 - 2019-04-07:10:54:46 29148
2019-04-08:01:11:04 - 2019-04-07:19:00:34 22230
2019-04-08:08:29:24 - 2019-04-08:01:11:04 26300
2019-04-08:11:05:25 - 2019-04-08:08:29:24 9361
2019-04-08:18:06:26 - 2019-04-08:11:05:25 25261
2019-04-09:01:11:04 - 2019-04-08:18:06:26 25478
2019-04-09:08:00:42 - 2019-04-09:01:11:04 24578
2019-04-09:08:57:09 - 2019-04-09:08:00:42 3387
2019-04-09:10:01:06 - 2019-04-09:08:57:09 3837
2019-04-09:11:31:46 - 2019-04-09:10:01:06 5440
2019-04-09:15:50:09 - 2019-04-09:11:31:46 15503
2019-04-09:17:49:43 - 2019-04-09:15:50:09 7174
--//这样就比较好观察了.再贴一个我们生产系统30分钟定时切换的情况:
$ grep -B2 "(LGWR switch)" alert_fyhis1.log | grep "^... Apr 12.*2019$" | xargs -I{} date -d "{}" "+%Y-%m-%d:%T %s" | awk 'NR==1 {a=$1;b=$2} NR>1 {print $1,"-",a,$2-b;a=$1;b=$2}'
2019-04-12:00:31:22 - 2019-04-12:00:01:22 1800
2019-04-12:01:01:22 - 2019-04-12:00:31:22 1800
2019-04-12:01:13:44 - 2019-04-12:01:01:22 742
2019-04-12:01:43:46 - 2019-04-12:01:13:44 1802
2019-04-12:02:13:47 - 2019-04-12:01:43:46 1801
2019-04-12:02:43:46 - 2019-04-12:02:13:47 1799
2019-04-12:03:13:49 - 2019-04-12:02:43:46 1803
2019-04-12:03:31:05 - 2019-04-12:03:13:49 1036
2019-04-12:04:01:13 - 2019-04-12:03:31:05 1808
2019-04-12:04:31:13 - 2019-04-12:04:01:13 1800
...
--//注这台机器没有使用实时传输日志,要修改参数为-B2,不然无法显示时间信息.
--
Fri Apr 12 08:31:16 2019
LGWR: Standby redo logfile selected for thread 1 sequence 45458 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 45458 (LGWR switch)
--