飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库
来源:互联网 发布:阿里云销售 区域经理 编辑:程序博客网 时间:2024/05/16 17:57
端午三天假,学习了JRuby,Groovy.最后还是觉得Groovy比较容易上手。用Groovy有点当年写basic的感觉,不再有java那样那么多条条框框。开发的时候更多的是在用代码描述自己的执行逻辑,而不是为了实现某种逻辑功能去编写大量符合java"定式"的类。
Groovy给我的感觉就2个字"飘逸",在编码方面很多地方java工作量是非常繁琐而Groovy封装的相当成功,或许AOP的精华也就在此。
每个月我要对DB2数据库进行Runstatus操作,要备份语句,上传语句到目的机器,并执行。每个月如此,只是每个月要执行的语句会变化,因为表也在不断变化中。这部分工作很机械,以前就像过写一个什么东西自动化一把。可惜没做.... 刚好学了Groovy就用它实现吧
下面贴出Groovy程序 DB2Runstatus.groovy
import groovy.sql.Sqlimport 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/tmppromptdelete ${schema}.sqlput ${fileName}bye"""//执行脚本def command = "ftp -s:${ftpName}"def proc = command.execute() proc.waitFor() println "输出: ${proc.in.text}"println "错误信息: ${proc.err.text}"//远程端执行sqlTelnetSample 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%
- 飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库
- groovy的动态性
- java执行groovy的示例
- Groovy&Java动态编译执行
- 基于Groovy实现Spring Bean的动态加载
- groovy
- groovy
- Groovy
- Groovy
- Groovy
- groovy
- groovy
- Groovy
- Groovy
- Groovy
- Groovy
- groovy
- Groovy
- 云蒙山游记
- C#读取INI
- asp.net调用WebService
- 比较经典的一些话
- 关于EXT 动态异步加载Tree
- 飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库
- C# 读取TXT文件程序
- 解决IIS目录权限问题[Microsoft OLE DB Provider for ODBC Drivers (0x80004005)]
- C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)
- JAVA字符编码2
- IP地址显示在图片上
- .net 2008中在html源码中的《script》可以添加c#后台的源代码。下面是MSDN中的例子
- C#由汉字生成拼音码,很实用的类
- 北京房价降了 北京开发商终于松口