溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦

發(fā)布時間:2022-01-15 11:12:30 來源:億速云 閱讀:1256 作者:小新 欄目:數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

現(xiàn)象描述

我們在從Oracle或者其他數(shù)據(jù)庫遷移數(shù)據(jù)到達(dá)夢數(shù)據(jù)庫時(含使用DTS),以及甚至平時,自己平時插入數(shù)據(jù)時,都可能碰到一個錯誤:

記錄超長

碰到這種問題,我們怎么解決呢?

有三個方法

考慮更加合適的頁大?。〝U(kuò)大),重新初始化實(shí)例后,重新導(dǎo)入數(shù)據(jù)

對表啟用超長列存儲功能,重新導(dǎo)入(或者插入)數(shù)據(jù)

把很長的varchar類型,考慮使用CLOB重建表后,再進(jìn)行插入

處理方法

處理方法一:合適的頁大小

在達(dá)夢數(shù)據(jù)庫的底層存儲中,關(guān)于【頁】的詳細(xì)情況,可以參考達(dá)夢官方手冊(DBA手冊)的“章節(jié)1.2.3頁” 的介紹,這是達(dá)夢數(shù)據(jù)庫的最小IO單元,類似于Oracle的塊大小。

這里我們強(qiáng)調(diào)兩個點(diǎn):

1.      對于數(shù)據(jù)庫實(shí)例的頁大小,在數(shù)據(jù)庫實(shí)例生命周期內(nèi),無法更改

2.      我們可以簡單理解為,對于任何表的一行記錄(不包括大字段),他們的總長達(dá)(字節(jié)大小),不能超過頁大小的一半。(也就是所謂的行內(nèi)數(shù)據(jù),對于LOB字段,絕大部分都是行外數(shù)據(jù))

這個計算非常嚴(yán)格,哪怕只超過一丁點(diǎn),都會報錯,例如:

Update set number_col=23.8 where number_col=23

這個sql語句,都有可能碰到 記錄超長 的這個錯誤

3.      我們可選的頁大小有:4KB、 8KB、 16KB 或者 32KB(默認(rèn)為 8KB),該值在初始化實(shí)例時一次性指定,在數(shù)據(jù)庫實(shí)例生命周期內(nèi),都不可更改。——對應(yīng)的,一行記錄(不包括大字段)的總長度,限制為 2、4、8、16 KB。

如何查看當(dāng)前數(shù)據(jù)庫實(shí)例的頁大?。?/strong>

 `select page`

也就是說,如果我們的頁大小是8KB,插入數(shù)據(jù)報錯“記錄超長”,那么我們?nèi)绻?6KB的實(shí)例,那么我們就不一定報錯。且對于從Oracle進(jìn)行遷移的實(shí)例,我們建議的頁大小為16KB。

處理方法二:啟用超長列

超長列的功能就是針對這個問題實(shí)現(xiàn)的功能,這里講如何啟用超長列:

1.      圖形化界面(manager客戶端)的方式

在模式下面,找到對應(yīng)表,通過鼠標(biāo)右鍵,打開菜單欄,通過菜單欄里的 存儲選項à啟用超長記錄  完成設(shè)置

 數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦

2.      通過SQL語句啟用某個表的超長列

數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦

3.      在建表的時候,設(shè)置啟用超長列的屬性

 數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦

處理方法三:使用大字段CLOB,重建表

這個就是說的,本來我們一個表 test1(v1 int,…,vx int,vy varchar(8000)),插入數(shù)據(jù)時報錯了,這個是我們:

Alter table test1 rename to test1_modify;

Create table test1(v1 int,…,vx int,vy clob);

Insert into test1 select * from test1_modify;commit;

然后,在進(jìn)行相關(guān)操作,就不會碰到記錄超長的問題了。

說明:

1.      這個方法可能會涉及到代碼改造,比如對應(yīng)字段在應(yīng)用端的處理,varchar類型和CLOB類型的處理方式存在區(qū)別。

2.      CLOB字段也可以直接like,但和 CLOB_LIKE_MAX_LEN 該參數(shù)有關(guān)系,注意學(xué)習(xí)下達(dá)夢配置文件(dm.ini 參考DBA手冊 正解 2.1.1):

CLOB_LIKE_MAX_LEN    默認(rèn)值為 31 靜態(tài)參數(shù)

LIKE 語句中 CLOB 類型的最大長度,單位 KB,有效值范圍(8~102400)

備注:

-          要注意和字符串截斷報錯問題的區(qū)別,字符串截斷,只是純粹的精度不夠,如varchar(400),是可以放400個字節(jié)的字符串,我們讓它要放入401個,就會報錯字符串截斷。字符串截斷和數(shù)據(jù)溢出,是一個類型的錯誤,數(shù)據(jù)溢出就是非字符串類型,精度不足。

感謝各位的閱讀!關(guān)于“數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI