一、本人环境描述
      1、oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0
      2、Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上
      3、win7上装有ftp服务

二、功能实现描述
      用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志。

三、步骤
      1、在centos中安装oracle客户端并配置环境变量

2、在centos中安装ftp客户端

3、编写shell,实现查询oracle数据库表,并写到本地txt文件

4、编写shell,实现上传文件到ftp

5、修改shell,打印执行日志
        打印日志函数如下:    

function loginfo {
time_flag=`date +"%Y-%m-%d %H:%M:%S"`
echo "[${time_flag}] [INFO] -- $1"
}

  

  6、所有shell代码

    数据表结构见【编写shell,实现查询oracle数据库表,并写到本地txt文件

    A、把打印日志函数封装成testLog.sh,代码如下:

#!/bin/bash
######################################################################################
#功能:定义日志打印函数
#用法:loginfo “日志内容”
#版本:0.1 #作者:crazyMyWay #日期:
#说明:建立初版
###################################################################################### function loginfo {
time_flag=`date +"%Y-%m-%d %H:%M:%S"`
echo "[${time_flag}] [INFO] -- $1"
}

    B、通过ftp上传文件代码封装成testFtptool.sh,如下:

#!/bin/bash
######################################################################################
#功能:ftp上传/下载文件
#用法:第一个参数put(上传)还是get(下载)文件,第二个参数为FTP服务器IP,第三、四个参数分别是用户名和密码
# 第五个参数是FTP上的工作目录,第六个是本地的目录,第七个是操作的文件名
#例子:testFtptool.sh put|get ip_address ftp_user ftp_password ftp_dir local_dir filename
#版本:0.1 #作者:crazyMyWay #日期:
#说明:建立初版
######################################################################################
E_NOTROOT=67 #输出帮助信息,用法:./testFtptool.sh -h
if [ $# -eq 1 -a "$1" = "-h" ]
then
echo "Usage: $0 put|get ip_address ftp_user ftp_password ftp_dir local_dir filename"
echo "Example:
$0 put|get ftp服务ip ftp用户名 ftp密码 ftp目录 本地目录 文件名"
exit $E_NOTROOT
fi #如果参数不等于7
if [ $# != 7 ]
then
echo "Param error: Usage: $0 put|get ip_address ftp_user ftp_password ftp_dir local_dir filename"
exit $E_NOTROOT
fi #进行ftp操作,ftp命令解释请查阅相关资料
ftp -v -n <<!
open $2 21
user $3 $4
prompt
epsv4 off
cd $5
bin
lcd $6
$1 $7
quit
!

    C、主要代码testStudent.sh,如下:

#!/bin/bash
######################################################################################
#功能:从oracle中查询数据(t_student),并写到txt文件中,以student_yyyymmdd.txt命名,
# 最后上传到ftp
#用法:定时调度执行,每天凌晨2点执行(或直接执行)
# 注意修改:user/password@service、
# 引入testLog.sh和testFtptool.sh的路径、
# ftp-ip、ftp-username、ftp-password、ftp上传目录、本地目录
#
#版本:0.1 #作者:crazyMyWay #日期:2015-03-29
#说明:建立初版
###################################################################################### #加入用户环境变量,如果不执行这句,那么在用cron命令时,
#不会自动加载用户的环境变量,如果用到sqlplus之类命令,因此会出错
. ~/.bash_profile #定义文件后缀名称yyyymmdd
filename_postfix=`date +"%Y%m%d"` #定义相关变量
oracle_user="centos"
oracle_pass="centos"
oracle_id="win7orcl" current_file_dir="/ljxd/shell-demo/oracle/"
current_file_name="student_${filename_postfix}.txt"
common_file_dir="/ljxd/shell-demo/oracle/" ftp_ip="192.168.56.101"
ftp_user="student"
ftp_pass="student"
ftp_upload_path="/student" #引入log文件
. ${common_file_dir}testLog.sh loginfo "generate data start........"
#连接到oracle,设置相关参数,并输出数据到txt文件
sqlplus -s ${oracle_user}/${oracle_pass}@${oracle_id} <<EOF >${current_file_dir}${current_file_name}
set pages 0
set feed off
set heading off
set feedback off
set verify off
set linesize 1000
select t.id||'###'||t.name||'###'||to_char(t.birthday,'yyyy-mm-dd hh24:mi:ss') from t_student t;
EOF #推数据到ftp
loginfo "transfer data to ftp......."
. ${common_file_dir}testFtptool.sh put ${ftp_ip} ${ftp_user} ${ftp_pass} ${ftp_upload_path} ${current_file_dir} ${current_file_name} #end
loginfo "generate data end........."

    注意目录结构,修改相关参数,运行./testStudent.sh即可  

    测试结果如下:

      

7、crontab命令实现定时任务

    crontab -e|-l|-r

    -e|-l|-r分别为编辑、查看、删除定时任务,每个用户下会有一个crontab配置文件,详细说明请查阅相关资料。

    每天凌晨2点定时调度执行,并把输出日志追加到student.log文件中,crontab命令如下:

    

    保存并退出编辑器,定时器立即生效。    

    

【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp的更多相关文章

  1. shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上

    shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上 naonao_127关注2人评论19401人阅读2012-06-08 11:26:16         生产环境下脚本自动备份脚本是 ...

  2. Crontab定时执行Oracle存储过程

    Crontab定时执行Oracle存储过程 需求描述 我们有一个Oracle的存储过程,里面是每个月需要执行一下,生成报表,然后发送给业务部门,这一个功能我们有实现在系统的前台界面(如图1-1),但是 ...

  3. spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)

    一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...

  4. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  5. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  6. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  7. CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中(转)

    http://www.jb51.net/article/58843.htm 一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程 ...

  8. 打包成apk,生成apk文件,上传到网站服务器提供链接下载

    Android开发把项目打包成apk: 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android ...

  9. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

随机推荐

  1. 汉语转拼音pinyin4j

    分享一个将汉语转成拼音的工具包:pinyin4j-2.5.0.jar,下载地址:http://download.csdn.net/detail/abc_key/7629141 使用例如以下代码 imp ...

  2. ios开发——实战OC篇&SQLite3的实际应用

    SQLite3的实际应用 前面的文章中介绍了SQlite,并且介绍了他的各种语法及使用方法. 但是没有正在项目中使用特,今天就开始做一个小小的实例,就是使用SQLite3来实现数据库的相应操作并且把他 ...

  3. jQuery中要注意的一些函数

    has()方法 或 :has选择器 :是过滤子类含有的,并不是过滤当前选择器选择的元素或对象含有的

  4. spring Transaction Management --官方

    原文链接:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html 12.  ...

  5. 仿简书、淘宝等等App的View弹出效果

    昨天用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑,所以我就尝试写了一个,和简书App上的效果基本一致了: 下面开始讲解: 1.首先我们要知道这个页面有几个View?这个页面其实有四 ...

  6. 自定义控件(视图)1期笔记01:View 和 ViewGroup

    1.View 和 ViewGroup 图解关系: 2. View 和 ViewGroup 关系和作用: (1) 关系: • 继承关系 • 组合关系 (2) 作用:      • View的作用: 提供 ...

  7. 【技巧】centos6.5_yum本地安装mysql

    环境:centos6.5 .64位.mysql5.6.3 有鉴于此前在网上得来的Yum换源安装mysql,成功是可以成功,就是会受网速等影响,有时候会因为yum下载rpm包很慢以致超时失败. 而且考虑 ...

  8. C#前端頁面判斷控件

    var chbClass = document.getElementById("<%=DDL_CheckboxUserClass1.ClientID %>" + &qu ...

  9. 【Objective-C】3 -self关键字

    一.Java中的this只能用在动态方法中,不能用在静态方法中 1.在动态方法中使用this关键字 1 public class Student { 2 private int age; 3 publ ...

  10. php xml常用函数的集合(比较详细)

    1.DOM 函数 a.DOMDocument-<load()作用:加载xml文件用法:DOMDocument-<load( string filename )参数:filename,xml ...