1、 程序目录结构
/home/oracle/IRS_OUT/.(根目录)
│ IRS_DATA_OUT_CTL.sh
│ yesterday.sh
│
├─OUT_DATA(生成的数据文件路径)
│ IRS_CUSTOMER_20101111.dat
│ IRS_CUST_RATING_RESULT_20101111.dat
│ IRS_DEBT_RATING_RESULT_20101111.dat
│ ............
├─RUN_LOG(日志路径)
│ IRS_OUT_20101111.log
│ ............
└─SQL_SHELL(批程序及spool语句路径)
batch_CUSTOMER.sh
batch_CUST_RATING_RESULT.sh
batch_DEBT_RATING_RESULT.sh
............
spool_CUSTOMER.sql
spool_CUST_RATING_RESULT.sql
spool_DEBT_RATING_RESULT.sql
............
2、 取昨天日期函数的shell
Cat yesterday.sh
#!/bin/bash # Var Declare #!/bin/sh # ydate: A Bourne shell script that # prints yestarday's date # Output Form: Month Day Year # Set the current month day and year. month=`date +%m` day=`date +%d` year=`date +%Y` # Add 0 to month. This is a # trick to make month an unpadded integer. month=`expr $month + 0` # Subtract one from the current day. day=`expr $day - 1` # If the day is 0 then determine the last # day of the previous month. if [ $day -eq 0 ]; then # Find the preivous month. month=`expr $month - 1` # If the month is 0 then it is Dec 31 of # the previous year. if [ $month -eq 0 ]; then month=12 day=31 year=`expr $year - 1` # If the month is not zero we need to find # the last day of the month. else case $month in 1|3|5|7|8|10|12) day=31;; 4|6|9|11) day=30;; 2) if [ `expr $year % 4` -eq 0 ]; then if [ `expr $year % 400` -eq 0 ]; then day=29 fi else day=28 fi ;; esac fi fi echo $year${month}${day}
3、 总控调度程序
Cat IRS_DATA_OUT_CTL.sh
export yesterday=`sh /home/oracle/IRS_OUT/yesterday.sh` export cur_time=`date '+%Y%m%d %T'` echo 当前时间是[$cur_time],开始[$yesterday]数据的卸载...>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo 开始删除/home/oracle/IRS_OUT/OUT_DATA/目录下的上日存留数据!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log rm /home/oracle/IRS_OUT/OUT_DATA/IRS_* echo 开始数据卸载的跑批...>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_CUSTOMER.sh echo 表CUSTOMER的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_CUST_RATING_RESULT.sh echo 表CUST_RATING_RESULT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_DEBT_RATING_RESULT.sh echo 表DEBT_RATING_RESULT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_BLANCE_SHEET_NEW.sh echo 表ENT_CADRE_BLANCE_SHEET_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_BLANCE_SHEET_OLD.sh echo 表ENT_CADRE_BLANCE_SHEET_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_CASH_FLOW_NEW.sh echo 表ENT_CADRE_CASH_FLOW_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_CASH_FLOW_OLD.sh echo 表ENT_CADRE_CASH_FLOW_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_INCOME_ACC_NEW.sh echo 表ENT_CADRE_INCOME_ACC_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_INCOME_ACC_OLD.sh echo 表ENT_CADRE_INCOME_ACC_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_BLANCE_SHEET_NEW.sh echo 表ENT_UNIT_BLANCE_SHEET_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_BLANCE_SHEET_OLD.sh echo 表ENT_UNIT_BLANCE_SHEET_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_CASH_FLOW_NEW.sh echo 表ENT_UNIT_CASH_FLOW_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_CASH_FLOW_OLD.sh echo 表ENT_UNIT_CASH_FLOW_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_INCOME_ACC_NEW.sh echo 表ENT_UNIT_INCOME_ACC_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_INCOME_ACC_OLD.sh echo 表ENT_UNIT_INCOME_ACC_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_LOAN_CONTRACT.sh echo 表LOAN_CONTRACT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_UT_BLANCE_SHEET.sh echo 表UT_BLANCE_SHEET的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo 开始将DAT文件传送到目标机器!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log ftp -n<<! open 10.172.45.5 user dft_user dft_user prompt off bin cd /ODS-DATA/UPLOAD/DFT lcd /home/oracle/IRS_OUT/OUT_DATA/ mput IRS_* quit ! echo DAT文件传送完成,跑批正常结束!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo DAT文件传送完成,跑批正常结束!
4、 批调度处理程序示例
Cat batch_CUSTOMER.sh
export yesterday=`sh /home/oracle/IRS_OUT/yesterday.sh` sqlplus IRSADMIN/IRSADMIN @/home/oracle/IRS_OUT/SQL_SHELL/spool_CUSTOMER.sql mv /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER.dat /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER_$yesterday.dat
5、 Spool程序示例
Cat spool_CUSTOMER.sql
set echo off set feedback off set trimspool on set linesize 5000 set pagesize 0 set newpage 0 set heading off set term off set termout off set timing off set verify off spool /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER.dat; SELECT CUST_ID || '|' || TO_CHAR(CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') || '|' || CUST_NAME || '|' || POINT_CMIS_ID || '|' || CUST_ORG_CODE || '|' || REG_ADDRESS || '|' || BELONG_INDUSTRY || '|' || INDUSTRY_CODE || '|' || IS_LOW_RISK || '|' || IS_SUPPLY_CHAIN || '|' || IS_PROJECT_FINANCING || '|' || ENP_PROP || '|' || IS_TRADE_FINANCING || '|' || IS_PURE_ASSURER || '|' || EMP_NUM || '|' || SALES_INCOMING || '|' || ASSET_AMOUNT || '|' || CUST_STATUS || '|' || CUST_TYPE || '|' || ZJ_TYPE || '|' || ZJ_NO || '|' || JBJG_NO || '|' || MAIN_CUST_MANAGER || '|' || AREA || '|' || PROP_ATTRIBUTE || '|' || IS_GOV_FINANCING_PLATFORM FROM CUSTOMER; spool off; exit;
6、 输出日志文件样式
Cat IRS_OUT_20101111.log
当前时间是[20101112 11:06:37],开始[20101111]数据的卸载... 开始删除/home/oracle/IRS_OUT/OUT_DATA/目录下的上日存留数据! 开始数据卸载的跑批... 表CUSTOMER的[20101111]数据卸载完成! 表CUST_RATING_RESULT的[20101111]数据卸载完成! 表DEBT_RATING_RESULT的[20101111]数据卸载完成! 表ENT_CADRE_BLANCE_SHEET_NEW的[20101111]数据卸载完成! 表ENT_CADRE_BLANCE_SHEET_OLD的[20101111]数据卸载完成! 表ENT_CADRE_CASH_FLOW_NEW的[20101111]数据卸载完成! 表ENT_CADRE_CASH_FLOW_OLD的[20101111]数据卸载完成! 表ENT_CADRE_INCOME_ACC_NEW的[20101111]数据卸载完成! 表ENT_CADRE_INCOME_ACC_OLD的[20101111]数据卸载完成! 表ENT_UNIT_BLANCE_SHEET_NEW的[20101111]数据卸载完成! 表ENT_UNIT_BLANCE_SHEET_OLD的[20101111]数据卸载完成! 表ENT_UNIT_CASH_FLOW_NEW的[20101111]数据卸载完成! 表ENT_UNIT_CASH_FLOW_OLD的[20101111]数据卸载完成! 表ENT_UNIT_INCOME_ACC_NEW的[20101111]数据卸载完成! 表ENT_UNIT_INCOME_ACC_OLD的[20101111]数据卸载完成! 表LOAN_CONTRACT的[20101111]数据卸载完成! 表UT_BLANCE_SHEET的[20101111]数据卸载完成! 开始将DAT文件传送到目标机器! DAT文件传送完成,跑批正常结束!
7、 总结说明:
(1)、ftp模式下,并没有rm命令的,而是有与之相对应delete和mdelete命令,不可混淆。
(2)、在进行mput的时候,一定要进入到本地的源目录及远端的目的目录,如:
ftp -n<<!
open 10.172.45.5
user dft_user dft_user
prompt off
bin
cd /ODS-DATA/UPLOAD/DFT
lcd /home/oracle/IRS_OUT/OUT_DATA/
mput IRS_*
quit
!
而不可:
mput /home/oracle/IRS_OUT/OUT_DATA/IRS_*
这样的话,ftp下mput就回报错。
(3)、计算当前时间的时候,如果想让显示的时间标准化,可以如下格式:
export cur_time=`date '+%Y%m%d %T'`
(4)、本次spool导出,采用坚线分隔符形式;此方式的好处是,简单易用,数据文件占用空间小。
(5)、oracle数据导出,还可以采用另一种方式,采用UTL_FILE包来导出。