您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)數(shù)據(jù)庫中導(dǎo)入報錯記錄超長怎么辦的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
我們在從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è)置
2. 通過SQL語句啟用某個表的超長列
3. 在建表的時候,設(shè)置啟用超長列的屬性
處理方法三:使用大字段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é)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(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)容。