您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關數據庫中導入報錯記錄超長怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
我們在從Oracle或者其他數據庫遷移數據到達夢數據庫時(含使用DTS),以及甚至平時,自己平時插入數據時,都可能碰到一個錯誤:
記錄超長
碰到這種問題,我們怎么解決呢?
有三個方法
? 考慮更加合適的頁大小(擴大),重新初始化實例后,重新導入數據
? 對表啟用超長列存儲功能,重新導入(或者插入)數據
? 把很長的varchar類型,考慮使用CLOB重建表后,再進行插入
處理方法一:合適的頁大小
在達夢數據庫的底層存儲中,關于【頁】的詳細情況,可以參考達夢官方手冊(DBA手冊)的“章節1.2.3頁” 的介紹,這是達夢數據庫的最小IO單元,類似于Oracle的塊大小。
這里我們強調兩個點:
1. 對于數據庫實例的頁大小,在數據庫實例生命周期內,無法更改
2. 我們可以簡單理解為,對于任何表的一行記錄(不包括大字段),他們的總長達(字節大小),不能超過頁大小的一半。(也就是所謂的行內數據,對于LOB字段,絕大部分都是行外數據)
這個計算非常嚴格,哪怕只超過一丁點,都會報錯,例如:
Update set number_col=23.8 where number_col=23
這個sql語句,都有可能碰到 記錄超長 的這個錯誤
3. 我們可選的頁大小有:4KB、 8KB、 16KB 或者 32KB(默認為 8KB),該值在初始化實例時一次性指定,在數據庫實例生命周期內,都不可更改。——對應的,一行記錄(不包括大字段)的總長度,限制為 2、4、8、16 KB。
如何查看當前數據庫實例的頁大小:
`select page`
也就是說,如果我們的頁大小是8KB,插入數據報錯“記錄超長”,那么我們如果是16KB的實例,那么我們就不一定報錯。且對于從Oracle進行遷移的實例,我們建議的頁大小為16KB。
處理方法二:啟用超長列
超長列的功能就是針對這個問題實現的功能,這里講如何啟用超長列:
1. 圖形化界面(manager客戶端)的方式
在模式下面,找到對應表,通過鼠標右鍵,打開菜單欄,通過菜單欄里的 存儲選項à啟用超長記錄 完成設置
2. 通過SQL語句啟用某個表的超長列
3. 在建表的時候,設置啟用超長列的屬性
處理方法三:使用大字段CLOB,重建表
這個就是說的,本來我們一個表 test1(v1 int,…,vx int,vy varchar(8000)),插入數據時報錯了,這個是我們:
Alter table test1 rename to test1_modify;
Create table test1(v1 int,…,vx int,vy clob);
Insert into test1 select * from test1_modify;commit;
然后,在進行相關操作,就不會碰到記錄超長的問題了。
說明:
1. 這個方法可能會涉及到代碼改造,比如對應字段在應用端的處理,varchar類型和CLOB類型的處理方式存在區別。
2. CLOB字段也可以直接like,但和 CLOB_LIKE_MAX_LEN 該參數有關系,注意學習下達夢配置文件(dm.ini 參考DBA手冊 正解 2.1.1):
CLOB_LIKE_MAX_LEN 默認值為 31 靜態參數 LIKE 語句中 CLOB 類型的最大長度,單位 KB,有效值范圍(8~102400) |
備注:
- 要注意和字符串截斷報錯問題的區別,字符串截斷,只是純粹的精度不夠,如varchar(400),是可以放400個字節的字符串,我們讓它要放入401個,就會報錯字符串截斷。字符串截斷和數據溢出,是一個類型的錯誤,數據溢出就是非字符串類型,精度不足。
感謝各位的閱讀!關于“數據庫中導入報錯記錄超長怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。