飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库

简介:     端午三天假,学习了JRuby,Groovy.最后还是觉得Groovy比较容易上手。用Groovy有点当年写basic的感觉,不再有java那样那么多条条框框。

    端午三天假,学习了JRuby,Groovy.最后还是觉得Groovy比较容易上手。用Groovy有点当年写basic的感觉,不再有java那样那么多条条框框。开发的时候更多的是在用代码描述自己的执行逻辑,而不是为了实现某种逻辑功能去编写大量符合java"定式"的类。    

Groovy给我的感觉就2个字"飘逸",在编码方面很多地方java工作量是非常繁琐而Groovy封装的相当成功,或许AOP的精华也就在此。    

每个月我要对DB2数据库进行Runstatus操作,要备份语句,上传语句到目的机器,并执行。每个月如此,只是每个月要执行的语句会变化,因为表也在不断变化中。这部分工作很机械,以前就像过写一个什么东西自动化一把。可惜没做.... 刚好学了Groovy就用它实现吧

下面贴出Groovy程序      DB2Runstatus.groovy

 

import groovy.sql.Sql

import java.text.SimpleDateFormat 

import telnet.TelnetSample



//实现生成脚本文件

def user="用户名"

def pass="密码"

def schema=this.args[0]

def bartDateFormat = new SimpleDateFormat("yyyy-MMMM-dd-EEEE"); 

def filePath="D:/数据库维护/Runstats/" //这个目录要事先建立好

def fileDir=filePath+bartDateFormat.format(new Date())

def fileName=fileDir+"/"+"${schema}.sql"

def linesp="/n"



def fileObjectDir=new File(fileDir)

//没有目录先创建目录

if(!fileObjectDir.exists())

    fileObjectDir.mkdir()

def sql = Sql.newInstance("jdbc:db2://10.154.144.38:50000/hndpdb", "${user}",

"${pass}", "com.ibm.db2.jcc.DB2Driver")

file1 =new  File(fileName)

//先删除已经存在的文件

if(file1.exists())

    file1.delete()

sql.eachRow("select Rtrim(TABSCHEMA)||'.'||TABNAME AS TABLE from syscat.tables where TABSCHEMA='${schema}'", 

{ 

    file1 << " RUNSTATS ON TABLE ${it.TABLE} ON KEY COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND SAMPLED DETAILED INDEXES ALL  ALLOW WRITE ACCESS ${linesp}"

    file1 << " REORG TABLE  ${it.TABLE} ALLOW READ ACCESS ${linesp}"

    file1 << " REORG INDEXES ALL FOR  TABLE  ${it.TABLE}  ALLOW READ ACCESS ${linesp}"

    file1 << " RUNSTATS ON TABLE ${it.TABLE} ON KEY COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND SAMPLED DETAILED INDEXES ALL  ALLOW WRITE ACCESS ${linesp}"

}

)

sql.close()

//上传脚本文件

def ftpName=fileDir+"/"+"${schema}.ftp"

ftpFile=new File(ftpName)

//先删除已经存在的文件

if(ftpFile.exists())

    ftpFile.delete()

//生成ftp脚本

ftpFile <<"""open 10.154.144.40

${user}

${pass}

cd deep/tmp

prompt

delete ${schema}.sql

put ${fileName}

bye

"""

//执行脚本

def command = "ftp -s:${ftpName}"

def proc = command.execute()                

proc.waitFor()                              

println "输出: ${proc.in.text}"

println "错误信息: ${proc.err.text}"



//远程端执行sql

TelnetSample telnet = new TelnetSample( "10.154.144.40", 

                         "${user}", 

                         "${pass}")

 telnet.sendCommand( "cd deep/tmp" );

  telnet.sendCommand( "db2 connect to hndpdb user ${user} using ${pass}" );

 telnet.sendCommand( "nohup db2 -vf ${schema}.sql &" );



 

 短短60行的代码就实现了从备份到FTP再执行的任务,HOHO~ 执行的方式也很简单,再CLI模式下   groovy DB2Runstatus.groovy [表模式名] 假设我要执行ODS层的runstatus==> groovy DB2Runstatus.groovy ODS

这样在D:/数据库维护/Runstats/ 目录下 会生成一个当前日期的文件夹,文件夹下会生成一个 ODS.sql 文件和 ODS.ftp文件 分别上 执行语句和FTP语句再执行完之后就会自动 telnet 到目标机器 用Nohup挂载 执行( 这里我登陆的是 AIX 所以用nohup 其他的系统自己参考)

然后把完整的调用方式 写成一个bat文件 run.bat

groovy DB2Runstatus.groovy ODS 



groovy DB2Runstatus.groovy DW 



groovy DB2Runstatus.groovy WI 

再配置到windows执行计划里面去 就OK了

执行groovy的环境必须 JDK >=1.5 并且配置好 环境变量%GRROVY_HOME%

 

目录
相关文章
|
3月前
|
数据库 索引 OceanBase
OceanBase数据库设置了二级索引,但查看执行计划,没有反应出来,这种情况是为什么呢?
OceanBase数据库设置了二级索引,但查看执行计划,没有反应出来,这种情况是为什么呢?【1月更文挑战第12天】【1月更文挑战第60篇】
78 2
|
3月前
|
关系型数据库 MySQL 数据库
Windows安装MySQL数据库
本文介绍如何在Windows安装MySQL数据库。
64 0
|
4月前
|
存储 SQL 关系型数据库
Windows server 2016——SQL server 数据库和表的管理
Windows server 2016——SQL server 数据库和表的管理
61 0
|
1月前
|
NoSQL 网络协议 MongoDB
Windows公网远程连接MongoDB数据库【无公网IP】
Windows公网远程连接MongoDB数据库【无公网IP】
|
2月前
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
|
2月前
|
关系型数据库 MySQL Linux
MySQL 数据库安装详解(linux系统和windows系统)
MySQL 数据库是一种广泛使用的开源关系数据库管理系统。在 Linux 和 Windows 系统上安装 MySQL 数据库的步骤略有不同。
92 0
|
2月前
|
NoSQL 关系型数据库 MySQL
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
不同系统下进行MySQL安装、MongoDB安装、Redis安装【2月更文挑战第5天】
444 5
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
|
3月前
|
存储 JSON NoSQL
【MongoDB】<文档型数据库>Windows&Liunx安装MongoDB(无错完整)
【1月更文挑战第26天】【MongoDB】<文档型数据库>Windows&Liunx安装MongoDB(无错完整)
|
3月前
|
Java 数据库 Nacos
spring-gateway基于数据库 + nacos 的动态路由
spring-gateway基于数据库 + nacos 的动态路由
73 0
|
3月前
|
存储 NoSQL MongoDB
第4期 MongoDB数据库安装与启动(Windows)
第4期 MongoDB数据库安装与启动(Windows)
175 0