採用sqlldr定時將文字檔案載入進入資料庫
需求:每個小時前臺生成一個追蹤檔案,檔名格式為yyyymmddhh,存放在linux伺服器上,要求每小時將上一個小時生成的檔案匯入資料庫
解決方案:
採用sqlldr可以快速的將外部文字檔案載入到資料庫中,根據要求建立控制檔案和shell指令碼,其中控制檔案如下
[root@justin justin]# more control.ctl
load data
characterset UTF8
infile '/justin/source_file.csv'
append into table abc
fields terminated by ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
"ID" sequence(MAX,1),
"desc" char(4000),
"TIME" DATE "YYYY-MM-DD HH24:MI:SS"
)
由於要採用直接路徑載入,所以必須在控制檔案中就定義好字符集(需要同資料庫保持一致),否則sqlldr會採用OS的字符集載入,中文出現亂碼;
文字檔案中沒有主鍵ID,需要在載入的時候就要為其生成,所以採用sequence(MAX,1)函式
#!/bin/bash
ORACLE_HOME=/data/oracle/product/10205/db1
export ORACLE_HOME
folder=/justin/--檔案儲存路徑
#get the past time value
date1=`date --date='1 hour ago' +%Y%m%d%H`
date2=`date --date='15 day ago' +%Y%m%d%H`
#rename the file generated one hour ago to source_file.csv, which would be called by control.ctl
mv "$folder""$date1" "$folder"source_file.csv--因為每次載入的檔名稱都不一樣,所以需要其重新命名成一個固定的檔案,名字需要跟control.ctl中的保持一致
#call sqlldr, with control as control.ctl
$ORACLE_HOME/bin/./sqlldr userid=justin/***** control="$folder"control.ctl readsize=500000 rows=2000 direct=true log="$folder""$date1"-51
#rename bad file if generated
if [ -f "$folder"source_file.bad ]; then
mv "$folder"source_file.bad "$folder""$date1"-51.bad
fi
#roll back the rename operation
mv "$folder"source_file.csv "$folder""$date1"
#if the file generated by 15 days ago still exist, then drop them
if [ -f "$folder""$date2" ]; then--刪除過期檔案
rm "$folder""$date2"
fi
if [ -f "$folder""$date2"-51.log ]; then
rm "$folder""$date2"-51.log
fi
if [ -f "$folder""$date2"-51.bad ]; then
rm "$folder""$date2"-51.bad
fi
最後將這個shell指令碼加入至crontab設定每小時執行一次即可
解決方案:
採用sqlldr可以快速的將外部文字檔案載入到資料庫中,根據要求建立控制檔案和shell指令碼,其中控制檔案如下
[root@justin justin]# more control.ctl
load data
characterset UTF8
infile '/justin/source_file.csv'
append into table abc
fields terminated by ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
"ID" sequence(MAX,1),
"desc" char(4000),
"TIME" DATE "YYYY-MM-DD HH24:MI:SS"
)
由於要採用直接路徑載入,所以必須在控制檔案中就定義好字符集(需要同資料庫保持一致),否則sqlldr會採用OS的字符集載入,中文出現亂碼;
文字檔案中沒有主鍵ID,需要在載入的時候就要為其生成,所以採用sequence(MAX,1)函式
#!/bin/bash
ORACLE_HOME=/data/oracle/product/10205/db1
export ORACLE_HOME
folder=/justin/--檔案儲存路徑
#get the past time value
date1=`date --date='1 hour ago' +%Y%m%d%H`
date2=`date --date='15 day ago' +%Y%m%d%H`
#rename the file generated one hour ago to source_file.csv, which would be called by control.ctl
mv "$folder""$date1" "$folder"source_file.csv--因為每次載入的檔名稱都不一樣,所以需要其重新命名成一個固定的檔案,名字需要跟control.ctl中的保持一致
#call sqlldr, with control as control.ctl
$ORACLE_HOME/bin/./sqlldr userid=justin/***** control="$folder"control.ctl readsize=500000 rows=2000 direct=true log="$folder""$date1"-51
#rename bad file if generated
if [ -f "$folder"source_file.bad ]; then
mv "$folder"source_file.bad "$folder""$date1"-51.bad
fi
#roll back the rename operation
mv "$folder"source_file.csv "$folder""$date1"
#if the file generated by 15 days ago still exist, then drop them
if [ -f "$folder""$date2" ]; then--刪除過期檔案
rm "$folder""$date2"
fi
if [ -f "$folder""$date2"-51.log ]; then
rm "$folder""$date2"-51.log
fi
if [ -f "$folder""$date2"-51.bad ]; then
rm "$folder""$date2"-51.bad
fi
最後將這個shell指令碼加入至crontab設定每小時執行一次即可
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-688368/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python如何將資料寫入本地txt文字檔案Python
- 教你如何將二進位制檔案匯入到資料庫資料庫
- python——將excel檔案寫入mysql資料庫中PythonExcelMySql資料庫
- 雲資料庫將進入企業級百萬IOPS時代資料庫
- 大文字資料,匯入匯出到資料庫資料庫
- python資料視覺化-matplotlib入門(6)-從檔案中載入資料Python視覺化
- 【Python】將網格資料寫入到VTK檔案Python
- golang寫入檔案時,覆蓋前檔案(將前檔案清空)Golang
- 載入常量-從檔案中載入
- 用nodejs刪除檔案,資料夾(採用webpack打包時必用)NodeJSWeb
- 如何將 EXCEL 資料寫入資料庫Excel資料庫
- PHP:檔案載入PHP
- 阿里李飛飛:資料庫將全面進入雲原生分散式時代阿里資料庫分散式
- 將Xml檔案遞迴載入到TreeView中XML遞迴View
- 資料載入、儲存及檔案格式知識圖譜-《利用Python進行資料分析》Python
- 高效整合:聚水潭採購入庫資料匯入MySQL案例MySql
- 將資料庫中資料匯入至solr索引庫資料庫Solr索引
- 如何將Excl內資料匯入資料庫?資料庫
- 優炫資料庫入圍中海油信創資料庫軟體採購專案資料庫
- yii框架,掃描目錄下檔案入資料庫框架資料庫
- 從cmd中匯入.SQL檔案並建立資料庫SQL資料庫
- 直播平臺開發,載入網頁、html檔案顯示載入進度網頁HTML
- properties檔案載入器
- giflib載入GIF檔案
- WKWebView載入本地檔案WebView
- MyBatis載入配置檔案MyBatis
- laravel 載入公共檔案Laravel
- Springboot載入配置檔案Spring Boot
- JavaScript 檔案載入方式JavaScript
- java資料list寫入檔案Java
- SQLSERVER匯出TXT文字檔案,ORACLE SQL LOADER匯入TXT文字檔案SQLServerOracle
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- Oracle OCP(55):SQLLDR—CTL檔案OracleSQL
- gis pro中將shp檔案轉為/匯入地理資料庫有什麼好處?資料庫
- 阿里資料庫進入全網秒級實時監控時代阿里資料庫
- 分久必合?資料庫進入“超”融合時代 | 愛分析調研資料庫
- spring 載入不了jdbc.properties檔案的資料問題SpringJDBC
- 將 crt 檔案匯入到 jks 檔案 -cg
- Mysql資料庫使用Navicat Mysql匯入sql檔案報錯MySql資料庫