1. 程式人生 > >續oracle sqlload 匯入資料檔案細節問題說明

續oracle sqlload 匯入資料檔案細節問題說明

  續上次對oracle中sqlload資料載入的一個說明,由於在工作中實際運用中,遇到一些詳細問題,在不斷的探索中並得到解決,在此做個總結,對sqlload載入資料所能遇到的一些問題及解決方法:

        上次對oracle資料載入工具做了一些詳細介紹:sql loader應用

       常見錯誤:

              ①sql* loader -522: lfipon failed for file

                        說明:無許可權錯誤。

                         解決方法:

                                1.檢查當前使用者是否存在對檔案的建立及其修改許可權。

                                2.檢查載入資料檔案中所要建立檔案的目錄在哪個使用者下,與當前使用者是否一致。

                eg:

                           sqlldr  userid=username/[email protected]服務監聽物件    control=XXXX.ctl   log=xxx.log  bad=xxx.bad 

                           direct =true

                      這個命令即為匯入資料檔案命令列,其中有log日誌檔案的生成,bad日誌在匯入有錯誤時才會建立提示錯誤,而log日誌是在一開始匯入就會進行建立,則通常情況下會指定建立目錄,這時就要注意,log日誌所在目錄,當前登入使用者是否有許可權進行建立檔案。

                   還有一個快速的方法:就是在命令中把log=xxx.log去掉,就是不建立日誌檔案,就避免許可權問題。

                   在上次文章中也說明到,通常工作中都是會寫成指令碼對控制檔案進行自動生成的。

                 如下例子:在/home/use/ftpshell/dir_shell下有如下指令碼:

                            p21_control.sql     所需引數(表名,檔名,生成控制檔案目錄,檔案所在目錄)

                  注意:  通常指令碼是以.sql指令碼結尾

            ②sql * loader/SP2 -0606: cannot create spool file

                    說明:  不能建立輸出檔案

                   通常解決方法:

                             1. 在生成控制檔案的指令碼中避免(在邏輯程式碼中轉義\或者多加一個.)

                        sqlplus  username/[email protected]服務監聽物件(13.1.26.193:1521/ftpdb) @指令碼(p21_control.sql) 

                        表名 檔名  生成控制檔案目錄  資料檔案所在目錄

                       例如:

                       sqlplus  mtb/[email protected]:1521/ftbdb @/home/user/ftpshell/dir_shell/p21_control.sql   c_test_table   test_data.dat   /home/data/dir_ctl/   /home/data/20170517/

                      注意: 1.別漏寫   /     ,不然路徑會錯誤。

                                   2.此處要生成控制檔案,即對該目錄下當前使用者是否有許可權建立,避免出現錯誤。

                         2.在命令中加轉義或.

                                     @/home/user/ftpshell/dir_shell/p21_control..sql

                             或者:  @/home/user/ftpshell/dir_shell/p21_control\.sql

               ③分割符問題

                     為了確保分割符的正確性。一般對分割符采用十六進位制來執行的。

                      意思就是說對於資料檔案我們首先得看一下該檔案採用的是什麼分割符,然後對其轉為十六進位制,修改                      控制檔案。

                     eg: 分割符為:  口

                      獲取其十進位制編碼:  

                                        select  ascii('口') from dual;      結果為: 3

                    轉為十六進位制後:03             X代表十六進位制。

                  即為: 控制檔案進行修改:

                          fields terminated by  X'03'

                   這樣就確保了分割符的正確性。

                ④字符集編碼問題

                     通常就是會出現中文亂碼問題。通常就是資料檔案的字符集編碼格式與oracle字符集編碼不一致導致中文亂碼問題。

             解決方法:

                           可以先在IDE編輯器中檢視資料檔案的字符集編碼。然後對控制檔案進行進行設定字符集編碼。

                    如:資料檔案編碼格式為UTF-8,則控制檔案編碼格式設定為:    characterset  AL32UTF8

          ⑤資料匯入錯誤問題分析

                      通常能遇到載入資料有部分資料載入失敗。則對該類問題進行分析(僅供參考):

               1.檢視bad日誌,看是哪些欄位匯入錯誤,檢視資料庫,檢視該欄位資料型別與要匯入的資料檔案資料是否

                    一致。

               2.日期格式資料匯入錯誤。

                        就是說有些資料是日期格式的,通常對於這類資料都是要在控制檔案中對這類資料的資料格式進行加

                         工後再匯入:  DATA  "YYYY-MM-DD  HH24 MI SS"

              3.其他異常。

                     有些異常比較奇怪,就是在檢視資料發現不了什麼問題,沒有解決思路。

                       這時可以把未匯入的bad日誌修改成要匯入的資料檔案再次進行匯入,這時匯入後再次檢視日誌檔案。

                       如果還是沒有匯入成功的話,就對bad日誌檔案進行分析。檢視是否有資料匯入還是全部未匯入。如果                       有部分匯入成功,可以對剩下的重複之前操作。 如果未全部匯入,則進行修改控制檔案,對所有欄位的

                      資料型別改成char 型別,即全部當成字串處理強行匯入。然後再次對匯入的資料進行分析。有中文亂

                      碼或其他問題即可發現。發現後對其解決,然後再清除資料,對問題進行解決後再次匯入。

   以上僅是個人工作中所發現問題及其解決方法的思路,僅供參考!

相關推薦

oracle sqlload 匯入資料檔案細節問題說明

  續上次對oracle中sqlload資料載入的一個說明,由於在工作中實際運用中,遇到一些詳細問題,在不斷的探索中並得到解決,在此做個總結,對sqlload載入資料所能遇到的一些問題及解決方法:  

12c容器資料庫匯入操作_筆記(Linux/oracle借用shell工具匯入資料檔案操作)

Linux/oracle借用shell工具匯入資料檔案操作 一、使用shell工具,遠端連線到Linux下的oracle資料庫服務上 Xshell 6 (Build 0095) Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved

Oracle匯入資料檔案注意事項

(ps:電腦的oracle不是自己裝的引發的各種問題啊啊啊啊)在網上找了好多資料。然後加上一點自己的理解,在下面貼出:(以下博文參考自https://www.cnblogs.com/JackieADBM/p/5987091.html)不能直接建立使用者,然後就直接匯入。要建立

Oracle備份之資料檔案等的轉移,遷移

如果原盤快滿了,要把dbf檔案轉移到新的大的盤,可以做如下操作: 測試環境:redhat 5.5,oracle 12g r2 測試移動資料檔案 CREATE TABLESPACE tbs_test1219 DATAFILE  '/opt/oracle/oradata/ORCL/te

oracle rman恢復資料檔案路徑不一致

編輯恢復指令碼:vi recover.txt run{allocate channel c1 type sbt;allocate channel c2 type sbt;allocate channel c3 type sbt;allocate channel c4 type sbt;allocate ch

用excl匯入資料檔案並用matplotlib畫箱線圖和提琴圖

import matplotlib.pyplot as plt import xlrd import numpy as np import time one_time =time.time() plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中

solr5.5.0連線oracle資料庫匯入資料

1、將oracle的驅動包匯入到【D:\search\apache-tomcat-8.0.39\webapps\solr\WEB-INF\lib】下,再將【D:\search\solr-5.5.0\dist】下的solr-dataimporthandler-5.

Oracle表空間資料檔案大小設定

Oracle資料檔案預設大小上限是32G,如果要資料檔案大於32G,需要在資料庫建立之初就設定好。    表空間資料檔案容量與DB_BLOCK_SIZE有關,在初始建庫時,DB_BLOCK_SIZE要根據實際需要,設定為 4K,8K、16K、32K、64K等幾種大小,ORAC

oracle表空間 資料檔案 使用者的建立及刪除

oracle資料庫:資料庫物件以及表資料都儲存在表空間中,建立使用者時可以指定對應的表空間。這樣使用者可以在各自的表空間中操作資料,互不干擾。 1. 表空間建立 若不清楚表空間對應檔案的路徑,可以

如何檢視oracle表空間資料檔案位置

 在oracle的日常維護中,要經常檢視oracle資料庫表空間的資料檔案存放位置, 以便能檢視磁碟佔用情況,避免對資料庫造成效能困擾。 如何快速的檢視oracle表空間資料檔案位置呢? 下面簡單介紹一下。 

ORACLE 11G匯入資料報ORA-12154錯誤解析

      在Windows 7 (64 bits)安裝ORACLE資料庫,作為資料庫伺服器端,一般會安裝下面幾個部分。     (1)安裝 ORACLE 11G資料庫64位伺服器端。    (2)安裝 ORACLE 11G資料庫32位客戶端。    (3)安裝 insta

SQLLOAD資料檔案的欄位超出最大長度錯誤

SQLLOAD資料的時候,建表給的欄位給夠了,建表已經給到VHARCHAR2(1024)了,實際資料是VHARCHAR2(256).載入報錯"資料檔案的欄位超出最大長度"查了半天,發現問題在於,前人CTL檔案為了圖方便,以 LOAD #INFILE '#/aps_userl

sqlload匯入txt檔案

1、建立表  create table dm_ip_class   (    ipstart             varchar2(50),        ipend               varchar2(50),        country        

Oracle-sqlplus匯入sql檔案

使用PLSQL Developer匯入insert語句,資料量過大會死掉,所以直接使用命令列的方式匯入insert語句 命令列進入sqlplus: sqlplus 使用者名稱/密碼@127.0.0.1:1521/tiger sql>@full_path/test.sq

oracle體系結構+資料檔案+控制檔案+重做日誌檔案+邏輯儲存結構+表空間

oracle體系結構 1:物理儲存結構 由儲存在磁碟的作業系統檔案組成,這些檔案主要是資料檔案(*.dbf),控制檔案(*.ctl),重做日誌檔案(*.log) 2:邏輯儲存結構 一物理儲存結構

Oracle imp匯入資料指定表空間

假設資料使用者USER1使用預設表空間TS1,使用者USER2使用預設表空間TS2,現在將USER1的資料匯入到USER2,要求使用表空間TS2。通過IMP命令引數tablespaces指定表空間是不行的,其他複雜方法要修改配額什麼的,麻煩。整理了一下,大致有以下幾種方法可以:1. 有一個簡單的方法,適用於

oracle imp匯入資料到另一個表空間

 資料庫中使用者try的資料一直放在system表空間中;今天把該使用者的所有資料exp到檔案try.dmp中,準備再匯入到另一個測試資料資料中的test使用者中,同時放在test表空間中。 1、在第一個資料庫匯出資料:exp try/try wner=try file=/t

oracle資料庫工作筆記之遷移oracle的dbf資料檔案

可能你在搭建資料庫的時候沒有考慮的很周全,數量的迅速增大,裝置效能的跟不上,這個時候可能會需要考慮將資料庫的資料檔案等一些檔案放到效能比較高的儲存上時就會涉及到以下的知識,希望能夠幫到你。 首先用oracle使用者執行sqlplus / as sysdba,進

oracle RAC 11g sqlload 生產表匯入資料(ORA-12899)

背景:由於即將來臨的雙十一,業務部門(我司是做京東,天貓的簡訊服務),簡訊入庫慢,需要DBA把資料庫sqlload進資料庫。 表結構如下: MRS VARCHAR2(100), STATUS VARCHAR2(8), STATUSTJ VARCHAR2(8), MMDD VARCHAR2(6), SN

解決問題:1.Oracle資料庫匯入備份DMP檔案&使用管理員許可權登入&匯入資料命令

第一步:首先確保你的Oracle資料庫能連服務能起。同時sqlplus環境配置好了。 第二步:建立你需要的使用者表: --建立表空間 CREATE TABLESPACE test (建立表空間的名稱)