採用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 文字檔案用sqlldr工具匯入到oracel資料庫中SQL資料庫
- Oracle工具之sqlldr的使用--如何將文字檔案或Excel中的資料匯入資料庫OracleSQLExcel資料庫
- 用Oracle sqlldr匯入文字檔案TXT 總結OracleSQL
- 文字檔案的資料裝載工具sqlldrSQL
- 【sqlldr載入資料】SQL
- 通過mysqlimport定時將遠端文字檔案匯入mysqlMySqlImport
- oracle 載入文字檔案Oracle
- 教你如何將二進位制檔案匯入到資料庫資料庫
- 使用oracle sqlldr匯入文字資料的例子OracleSQL
- python如何將資料寫入本地txt文字檔案Python
- 定時將表資料匯出到文字檔案的初步解決方案,求改進
- 網頁檔案自動下載入庫指令碼_shell_sqlldr網頁指令碼SQL
- 測試TOM=SQLLDR載入日期資料SQL
- 使用sqlldr載入外部檔案中的資料到Oracle中(轉)SQLOracle
- 使用sqlldr匯入文字資料到oracleSQLOracle
- 【實驗】【SQL*Loader】使用SQLLDR將Linux的使用者檔案passwd匯入資料庫SQLLinux資料庫
- 資料匯入SQLLDRSQL
- sqlldr 載入資料 OGG 是否會同步SQL
- oracle資料庫使用sqlldr命令匯入txt資料Oracle資料庫SQL
- python——將excel檔案寫入mysql資料庫中PythonExcelMySql資料庫
- ORACLE 的載入工具SQLLDR應用OracleSQL
- 【實驗】【SQL*Loader】使用SQLLDR將資料載入到CLOB欄位SQL
- 將informix匯出的文字資料匯入oracle資料庫ORMOracle資料庫
- 利用SQLLDR載入包含LOB物件的資料(三)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(二)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(一)SQL物件
- 測試TOM==SQLLDR載入固定格式資料SQL
- 測試TOM=SQLLDR使用函式載入資料SQL函式
- 採用POI技術進行大資料匯入大資料
- PHP 匯入資料庫 sql 檔案PHP資料庫SQL
- 資料庫遠端檔案匯入資料庫
- sqlldr 匯入資料範例SQL
- 將某資料庫的ACL資訊寫入檔案將其作為附件寄出資料庫
- vfp匯入文字檔案
- 測試TOM=SQLLDR載入內嵌換行符資料SQL
- 通過SQLLDR匯入LOB資料SQL
- 將XML匯入資料庫XML資料庫
- 大文字資料,匯入匯出到資料庫資料庫