sqlload一次經歷
環境:linux5.6系統、oracle 11.2.0.2版本
一、準備工作:
1、準備要裝載的資料
語言:三個層面要保持一致
(原始檔)因為系統的環境變數和資料庫的字符集都是UTF8,所以要保證資料來源也是UTF8格式。如果不是,可以開啟之後另存為一下(選擇UTF8)
(資料庫)
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
(系統)
[[email protected]
[[email protected] ~]$ echo $NLS_LANG ----------$NLS_LANG變數一般在vi bashrc中,也有人習慣另外儲存
AMERICAN_AMERICA.AL32UTF8
2、格式:由於資料在匯出時,數值以加雙引號的形式儲存的即:
"客戶編號","日期","積分","處理型別","處理型別說明","積分型別","積分型別說明"
因此我用sed進行資料清洗sed -i 's/"//g' 20151231.txt
我的資料來源儲存路徑/home/oracle/sqlload/20151231.txt
======================================================================
二、資料庫中建立表結構:
CREATE TABLE "KETTLE"."消費明細"
("客戶編號" VARCHAR2(200),
"日期" VARCHAR2(200),
"積分" VARCHAR2(200),
"處理型別" VARCHAR2(200),
"處理型別說明" VARCHAR2(200),
"積分型別" VARCHAR2(200),
"積分型別說明" VARCHAR2(200));
=============================================================================================
二、編輯控制檔案
Touch一個檔案如20151231.ctl
Vi進去編輯
Load data
CHARACTERSET AL32UTF8 ----指定字元編碼
infile '/home/oracle/sqlload/20151231.txt'
append
into table消費明細
fields terminated by ','
(客戶編號,日期,積分,處理型別,處理型別說明,積分型別,積分型別說明)
**********************************************************************************************
OPTIONS (skip=1,rows=128) -- sqlldr命令顯示的選項可以寫到這裡邊來,skip=1用來跳過資料中的第一行
LOADDATA
infile 指資料來源檔案 這裡我們省略了預設的 discardfile result.dsc badfile result.bad
INFILE‘/home/oracle/sqlload/20151231.txt’ --指定外部資料檔案,可以是不同格式的資料檔案,如csv、txt都支援 可以寫多個INFILE "another_data_file.csv"指定多個數據檔案。
into table resultxt預設是INSERT,也可以into table 20151231.txt APPEND為追加方式,或REPLACE
*************以下是4種裝入表的方式
APPEND 原先的表有資料就加在後面
INSERT 裝載空表如果原先的表有資料
sqlloader會停止默認值
REPLACE 原先的表有資料原先的資料會全部刪除
TRUNCATE 指定的內容和replace的相同會用truncate語句刪除現存資料
terminatedby ',' 指用逗號分隔
terminated by whitespace 結尾以空白分隔
===============================================================================================
三、匯入資料
引數可以再命令列下輸入sqlldr檢視
有效的關鍵字:
userid -- ORACLE使用者名稱/口令
control -- 控制檔名
log -- 日誌檔名
bad -- 錯誤檔名
data -- 資料檔名
discard -- 廢棄檔名
discardmax -- 允許廢棄的檔案的數目 (全部預設)
skip -- 要跳過的邏輯記錄的數目 (預設 0)
load -- 要載入的邏輯記錄的數目 (全部預設)
errors -- 允許的錯誤的數目 (預設
50)
rows -- 常規路徑繫結陣列中或直接路徑儲存資料間的行數
(預設:常規路徑 64,所有直接路徑)
bindsize -- 常規路徑繫結陣列的大小 (以位元組計)
(預設 256000)
silent -- 執行過程中隱藏訊息 (標題,反饋,錯誤,廢棄,分割槽)
direct -- 使用直接路徑 (預設
FALSE)
parfile -- 引數檔案:包含引數說明的檔案的名稱
parallel -- 執行並行載入 (預設
FALSE)
file -- 要從以下物件中分配區的檔案
skip_unusable_indexes -- 不允許/允許使用無用的索引或索引分割槽
(預設 FALSE)
skip_index_maintenance -- 沒有維護索引,將受到影響的索引標記為無用
(預設 FALSE)
commit_discontinued--提交載入中斷時已載入的行 (預設
FALSE)
readsize -- 讀取緩衝區的大小 (預設
1048576)
external_table -- 使用外部表進行載入; NOT_USED, GENERATE_ONLY,EXECUTE (預設
NO
T_USED)
columnarrayrows -- 直接路徑列陣列的行數 (預設 5000)
streamsize -- 直接路徑流緩衝區的大小 (以位元組計) (預設
256000)
multithreading -- 在直接路徑中使用多執行緒
resumable -- 啟用或禁用當前的可恢復會話 (預設 FALSE)
resumable_name -- 有助於標識可恢復語句的文字字串
resumable_timeout -- RESUMABLE 的等待時間 (以秒計)
(預設 7200)
date_cache -- 日期轉換快取記憶體的大小 (以條目計) (預設
1000)
no_index_errors -- 出現任何索引錯誤時中止載入 (預設
FALSE)
由於我的資料量大,要求快速匯入,因此我的寫法如下:
[[email protected] ~]$sqlldr userid=KETTLE/kettlecontrol=/u01/app/oracle/oradata/oratest/20151231.ctl
log=/u01/app/oracle/oradata/oratest/20151231.logdirect=trueparallel=true
注:
1、當載入大量資料時(大約超過10GB),最好抑制日誌的產生:
SQL>ALTER TABLE 消費明細 nologging;這樣不產生REDOLOG,可以提高效率。
2、使用了direct=true,parallel=true兩個引數時可能報錯:
SQL*Loader-937: parallel load requested and name has enabled triggers or constraints
Cause: A request was made for a parallel direct load, but the object to be loaded has an enabled constraint (check, referential) and/or enabled triggers.
Action: Disable the offending enabled constraints and/or triggers and retry the parallel direct load.
因為對並行的直接路徑匯入有限制,表中不能有check,referential約束和觸發器,所以可以先刪掉表中check。
[[email protected]]$sqlldr userid=KETTLE/kettle control=/u01/app/oracle/oradata/oratest/20151231.ctl log=/u01/app/oracle/oradata/20151231.log
SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr12 10:47:47 2017
Copyright (c) 1982, 2009, Oracle and/or itsaffiliates.All rights reserved.
Load completed - logical record count 2820285.
匯入成功!
相關推薦
sqlload一次經歷
環境:linux5.6系統、oracle 11.2.0.2版本 一、準備工作: 1、準備要裝載的資料 語言:三個層面要保持一致 (原始檔)因為系統的環境變數和資料庫的字符集都是UTF8,所以要保
記錄一次經歷的數據庫從單庫到分庫分表的過程
人力 per 靠譜 img center 沒有 tdd 推出 數據 前言 目前所在的的項目組,由於項目正在處於一個業務爆發期,每天數據的增長量已經給我們數據庫乃至系統造成了很多不確定的因數,前期依靠優化業務和SQL等方式暫時還能夠支撐住。但是最近發現某些表數據達到50
配置Java web的一次經歷
其他人 lib 自己的 http 文件 per 宋體 pack cal 最近在完成數據庫作業,重新拾起了以前學過的Java,講下自己的 Java web 配置過程。 1.安裝 Tomcat 在官網下載 Tomcat7.0版本:https://tomcat.apache.
oracle資料庫塊壞修復的一次經歷
由於備份失誤等各種原因,遇到了磁碟損壞的問題,導致資料庫儲存的資料檔案有問題,從原來伺服器上的資料檔案拷貝出來也是有問題的。 拷貝的資料檔案如下: [[email protected] seelinux]# ls cms6_zgq_data.dbf interact_da
青島理工邀請賽(難受的一次經歷)之顯示屏(按著倍數放大數字)
這是一次慘痛的經歷,三個人照著一個連知識點也沒有聽過的題做了三個小時,把這個水題給放過去了。哇呀呀,難受的一批啊。 題目描述:就是按著放大的倍數放大數字 程式碼如下: #include<iostream> #include<cstdio>
由最近Win10升級事故,回憶一次經歷
微軟進來給WINDOWS10一個大升級,結果據說會導致檔案刪除失敗,撤回。其實類似問題出現多次了,有兩種觀點: 凡是程式總是有BUG,微軟也不例外。 微軟這樣的大公司,頂級技術高手、頂級管理人員、頂級測試,出這樣的問題無法接受。 本人傾向於2。 下面說說自己的一次經
**記錄在win10電腦上使用Duet display的一次經歷**
昨天在一篇文章上面看到了一個iPad上面實用軟體duet,說是可以把電腦上的頁面在iPad上展示,為了使用,我還在我的電腦上下載了duet display。把iPad連線到電腦上玩了一會,發現沒什麼新意,就斷開了電腦和iPad的USB連線。晚上我就發現我電腦上的
一名網工對Linux運維的一次經歷
www. 網工 圖片 linu bre mount 設備 路由器 系統服務 我是一名名副其實的網絡工程師,駐場於某市數字化城鄉管理指揮中心(簡稱數字城管),主要針對中大型網絡系統,路由、交換機、存儲、小型機等設備進行維護,主要工作職責主要分為兩種: 對網絡系統中的網絡設備(
創業碼農被公司套路最慘的一次經歷
2018年馬上就要過去了,把這一件真人真事寫出來,也算是向過去一起努力的兄弟有個交代吧。 關注我部落格的朋友,應該都看過我之前寫的一篇文章《記一次被騙去創業的經歷》。該文章記錄了博主在創業公司裡的一段奮鬥經歷,雖然過程很苦,但是也收穫了滿滿的回憶。尤其是結交了很多生死之交的研發兄弟。這篇文章講的是博主離職之
大四生找工作最慘的一次經歷吧!
找工作千萬不要相信任何的陌生人!!!!!!! 不要太相信在群裡發的招聘資訊!!!!!!!! 一人在外多留個心眼!!!!!!!!! 我想了很久,我還是想讓我的朋友不要像我一樣被騙了,雖然他們沒騙到我一分錢,我還是有損失,損失了車費吧,下面我就講下我在成都這四
db2 遷移 oracle的一次經歷
最近朋友給了個活,將系統的db2轉成Oracle,不大也不小,但之前沒做過。。 具體情況是,表有900多張,儲存過程70多,檢視130多,函式和其他若干。。。。。。。。至於需要移植的資料量,我只知道要全量,具體多大。。。。百萬條應該有吧。 那咱直接就向度娘伸手了。。。。。。
ascii控制字元(不可見字元)和可列印字元(可見字元)------浪費15分鐘的一次經歷
系統工作得好好的, 但某次卻異常, 花了十多分鐘, 才定位出是載入檔案中包含了不可見字元導致的。 最後解決方法是: 增強系統的相容性。 今天我們來聊聊ascii控制字元(不可見字元)和可列印字元(可見字元), 以後碰到類似問題就很敏感了。
Oracle行轉列的一次經歷
需求如下,由於系統專案改造,之前黨員各個月份的成績如下表所示: 存取資料如下: 新專案表結構作了調整,每個黨員每一年一條記錄,12個月份的資料變成了列欄位,主鍵變成由年份和黨員id構成,表結構如下: 月統計得分和季統計得分的資料儲存是有格式要求
mysql開啟檔案數用光的一次經歷
昨天經歷了一次mysql災難,mysqld開啟檔案數用光,導致一系列問題的發生。 一開始是頁面打不開,觀察web伺服器,apache進城掛住,顯然是連線db出問題了,再看mysql,mysql登入,並沒有如以前順暢的登入顯示提示符,而是卡著不動,等了半天,終於進去了。 輸入
記錄一次經歷的資料庫從單庫到分庫分表的過程
前言 目前所在的的專案組,由於專案正在處於一個業務爆發期,每天資料的增長量已經給我們資料庫乃至系統造成了很多不確定的因數,前期依靠優化業務和SQL等方式暫時還能夠支撐住。但是最近發現某些表資料達到500W+以後查詢統計效能嚴重下降,高峰時段出現了很多SQL阻塞的情況例如:
記一次阿裏電面經歷
art 存儲空間 自由 結束 eas 大型 特定 easy col 昨天下午(3/19)三點多鐘,接到了一個杭州的電話,是阿裏的。問我是否方便聊聊。我說我在上課,四點下課。然後他就四點多鐘的時候又打了一次過來。項目經歷上來就問我有無大型項目的經歷。不好意思,我說無。。。又
一次解決虛擬機內的服務不能訪問經歷
不能訪問 recv 被拒 curl with tar 信息 通過 防火墻 一次解決虛擬機內的服務不能訪問經歷 問題是這樣的,在virtualbox中安裝了centos系統,然後部署了一個自己的服務,在虛擬機內通過“127*”地址和“19
zabbix 一次慘痛的分區經歷
zabbix mysql 分區問題今天來到公司,像往常一樣打開zabbix,突然發現沒有數據被收集,於是快速檢查了其他的圖形,發現都沒有數據,於是定位到了服務端的問題,檢查日誌發現:zabbix日誌突然報查詢history和history_uint失敗,分區裏找不到這個 clock?解決過程以下僅是以hist
記一次服務器Tomcat優化經歷
type tomcat優化 ext stream jpg 試用 ros index ctp 博主原創,轉載請註明。 公司需要一臺測試服務器來做測試用,所以花了幾天時間把服務全部部署好,在部署好war包之後,發現Tomcat訪問超級慢。 1、進入Tomcat的bin目錄下,運
記一次springboot啟動不起來的經歷
最新 lips 檢查 boot register cli down 一次 shu 在用eclipse+maven構建一個基本的springboot的web應用時在執行main方法(一個基本的springApplication類)出現Unregistering JMX-exp