自動更新資料庫資料的shell
和以前自動ftp,load data的那個shell相比,沒有多大長進。只有兩點新東西
[@more@]1)從資料庫檢索資料,賦值給shell變數(注意 -s 引數)
LOG_ROWS=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET FEED OFF
SET TERM OFF
SET HEAD OFF
SELECT count(*)
FROM refresh_log
WHERE user_name='$USERNAME'
AND obj_name='$TABLE_NAME';
EOF`
2)截掉字串的最後一串。比如將 eden_flat_ord_cmpt_fr.sql 截為 eden_flat_ord_cmpt
>aaa='aa_bb_cc_dd_ee.sql'
>echo ${aaa%_*}
aa_bb_cc_dd
該shell位於~p482/script目錄下,呼叫~p482/sql目錄下的sql檔案更新表中的資料
shell指令碼:
#####################################################################
#
# Purpose: This script is to refresh tables, and log refresh
# information both in table and OS file
#
# Usage: refresh_table FILE_NAME
#
# Global varialbles
# FILE_NAME: the file needed by refresh
# USERNAME: database login ID
# PASSWORD: password for database user
# DATABASE: service name of database
# TABLE_NAME: the table to be refreshed
# START_TIME: when refresh begins
# END_TIME: when refresh ends
# BEFORE_ROWS: rows before refresh
# AFTER_ROWS: rows after refresh
# REFRESH_SEQ: the refresh sequence number for the table
#LOG_FILE: the file to store log information
# LOG_ROWS: a mid_stage parameter
#
# by ******
# 2004-12-03
#
#####################################################################
#!/usr/bin/bash
rfsh_env()
{
START_TIME=`date "+%Y-%m-%d %H:%M:%S"`
LOG_FILE=refreshlog.log
USERNAME=******
PASSWORD=******
DATABASE=dbname
}
rfsh_refresh()
{
TABLE_NAME=`echo ${1%_*}|cut -d"/" -f 3`
LOG_ROWS=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET FEED OFF
SET TERM OFF
SET HEAD OFF
SELECT count(*)
FROM refresh_log
WHERE user_name='$USERNAME'
AND obj_name='$TABLE_NAME';
EOF`
if [ $LOG_ROWS -eq 0 ]; then
REFRESH_SEQ=1
else
REFRESH_SEQ=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET FEED OFF
SET TERM OFF
SET HEAD OFF
SELECT max(refresh_num+1)
FROM refresh_log
WHERE user_name='$USERNAME'
AND obj_name='$TABLE_NAME';
EOF`
fi
BEFORE_ROWS=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET FEED OFF
SET TERM OFF
SET HEAD OFF
select count(*) from $TABLE_NAME;
EOF`
START_TIME=`date "+%Y-%m-%d %H:%M:%S"`
sqlplus -s $USERNAME/$PASSWORD@$DATABASE>/dev/null<
INSERT INTO refresh_log(user_name,obj_name,obj_type,refresh_num,starttime,rows_b4_refresh)
VALUES('${USERNAME}','${TABLE_NAME}','T',${REFRESH_SEQ},sysdate,${BEFORE_ROWS} );
COMMIT;
spool /tmp/$TABLE_NAME.out
@$FILE_NAME
spool off
UPDATE refresh_log
SET endtime=sysdate
WHERE obj_name='$TABLE_NAME'
AND refresh_num=$REFRESH_SEQ;
COMMIT;
EXIT;
EOF
END_TIME=`date "+%Y-%m-%d %H:%M:%S"`
ERRORMSG=`cat /tmp/eden_flat_ord_cmpt.out|grep ORA-|grep -v ORA-00942|grep -v ORA-01418|head -n 1`
COUNT=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET TERM OFF
SET HEAD OFF
SET FEED OFF
SELECT count(*) FROM user_tables WHERE table_name=upper('$TABLE_NAME');
EOF`
if [ $COUNT -eq 1 ]; then
REFRESH_STATUS='Y'
else
REFRESH_STATUS='N'
fi
AFTER_ROWS=`sqlplus -s $USERNAME/$PASSWORD@$DATABASE<
SET FEED OFF
SET TERM OFF
SET HEAD OFF
select count(*) from $TABLE_NAME;
EOF`
sqlplus -s $USERNAME/$PASSWORD@$DATABASE>/dev/null<
UPDATE refresh_log
SET status='$REFRESH_STATUS',
total_time=(endtime-starttime)*3600*24,
rows_after_refresh=$AFTER_ROWS,
error='$ERRORMSG'
WHERE obj_name='$TABLE_NAME'
AND refresh_num=$REFRESH_SEQ;
COMMIT;
EXIT;
EOF
echo "owner: "$USERNAME>>$LOG_FILE
echo "table name: "$TABLE_NAME>>$LOG_FILE
echo "start time: "$START_TIME>>$LOG_FILE
echo "end time: "$END_TIME>>$LOG_FILE
echo "rows before refresh: "$BEFORE_ROWS>>$LOG_FILE
echo "rows after refresh: "$AFTER_ROWS>>$LOG_FILE
echo "refresh succeed(Y/N): "$REFRESH_STATUS>>$LOG_FILE
echo "error messages if any: "$ERRORMSG>>$LOG_FILE
echo " ">>$LOG_FILE
echo " ">>$LOG_FILE
}
#################################
##
#################################
if [ $# -lt 1 ]; then
echo " "
echo "Usage: refresh_table SQL_FILE_NAME"
echo " "
exit 1
fi
FILE_NAME=../sql/$1
if [ ! -e $FILE_NAME ]; then
echo " "
echo "File $FILE_NAME does NOT exist."
echo "Please specify an existed SQL file."
echo " "
exit 1
fi
rfsh_env
rfsh_refresh $FILE_NAME
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-783733/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- 資料庫-SHELL資料庫
- 資料庫自動重連資料庫
- 資料庫自動備份資料庫
- 資料庫自動啟動關閉資料庫
- shell 操作mysql資料庫MySql資料庫
- 動態更新資料庫指令碼——Mysql資料庫指令碼MySql
- 資料庫-批次更新資料庫
- 資料庫-批量更新資料庫
- ios Coredata 關聯 UITableView 資料自動更新iOSUIView
- Mysql資料庫自動備份MySql資料庫
- 自動備份Oracle資料庫Oracle資料庫
- 【博文推薦】用shell指令碼自動化備份資料庫指令碼資料庫
- 《關於工程帶資料庫打包(3)―自動安裝備份資料庫資料》 (轉)資料庫
- 資料庫自動收縮造成的阻塞資料庫
- Ibatis批量更新資料(mysql資料庫)BATMySql資料庫
- 4 配置Oracle資料庫自動啟動Oracle資料庫
- oracle資料庫開機自動啟動Oracle資料庫
- [shell]shell指令碼實現每天自動抽取資料插入hive表指令碼Hive
- Android資料自己主動更新庫DataAutoRefreshAndroid
- 觸發器實現表資料自動更新觸發器
- flask如何更新資料庫Flask資料庫
- 每天自動備份Oracle資料庫Oracle資料庫
- MySQL資料庫自動補全命令MySql資料庫
- mysql資料庫語句自動生成MySql資料庫
- Flutter 資料監聽Widget 自動更新你的UIFlutterUI
- Android的ListView,資料更新後自動scroll到底部。AndroidView
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- IndexedDB 建立資料庫時使用自增的Key 更新資料庫遇到的問題的一點記錄Index資料庫
- 資料庫自動維護任務的管理資料庫
- 自管理的資料庫:自動效能診斷資料庫
- ListView動態更新資料View
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- 氣象資料實時自動更新(CIMSS - West Pacific)
- shell監控mysql 8.0資料庫MySql資料庫
- shell監控mysql 5.7資料庫MySql資料庫
- ansible自動化運維資料庫運維資料庫
- 第8章 理解自動資料庫管理資料庫