Oracle分割槽資料問題的分析和修復
今天根據同事的反饋,處理了一個分割槽表的問題,也讓我對Oracle的分割槽表功能有了進一步的理解。
首先根據開發同事的反饋,他們在程式批次插入一部分資料的時候,總是會有一部分請求執行失敗,而檢視日誌就是ORA-14400的錯誤,對於這類問題,我有一個很直觀的感覺,分割槽有問題。
> INSERT INTO DY_USER_ANALYSIS_MIN(ID,STAT_TIME,GAME_TYPE,ZONE_ID,GROUP_ID,ONLINE_5CNT)
VALUES(100,to_date('2017-07-12 17:40:00','yyyy-mm-dd HH24:mi:ss'),'pz',to_number(-1),to_number(-1),to_number(0));
INSERT INTO DY_USER_ANALYSIS_MIN(ID,STAT_TIME,GAME_TYPE,ZONE_ID,GROUP_ID,ONLINE_5CNT)
*
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition
而如果把‘pz’修改為另外一個字串'dhsh'就沒問題。
所以這樣一個ORA問題,透過初始資訊我得到一個基本的推論,那就是沒有符合條件的分割槽了。而如果仔細分析,會發現這個問題似乎有些蹊蹺。
一般的分割槽表都是Range分割槽,基本就是數值範圍或者是日期來做範圍分割槽,這個問題該怎麼理解呢,如果按照時間分割槽,那麼另外一個SQL插入也應該失敗才對。
所以帶著疑惑,我檢視了分割槽的情況,發現這個表竟然有預設鍵值maxvlue的分割槽,所以如果說指定的Range分割槽不存在,似乎有些說不通。
這個問題該如果解決呢,一個直觀的地方就是檢視錶的DDL,dbms_metadata.get_ddl即可得到。
得到的DDL一看,我就有些懵了,開發同學怎麼知道這個list分割槽,竟然已經用上了這個還算高階的特性吧,就是Range-list分割槽。
PARTITION BY RANGE ("STAT_TIME")
SUBPARTITION BY LIST ("GAME_TYPE")
SUBPARTITION TEMPLATE (
SUBPARTITION "SP_ABC" values ( 'abc' )
TABLESPACE "TEST_DATA" ,
。。。
SUBPARTITION "SP_OTHER" values ( 'xjzj', 'hij'
) TABLESPACE "TEST_DATA" )
(PARTITION "P_OLD" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
對於這類問題,雖然還是有些陌生,但是還是有一些分割槽表的底子的,所以分析起來也不會有太大的偏差。
按照DDL的格式,我們是要想修改template的子分割槽模板規則。
alter table TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN
set SUBPARTITION TEMPLATE (
SUBPARTITION "SP_ABC" values ( 'abc' )
TABLESPACE "TEST_DATA" ,
。。。
SUBPARTITION "SP_OTHER" values ( 'xjzj', 'hij','pz’)
TABLESPACE "TEST_DATA" )
按照這種方式修改模板就沒有問題了,然後繼續嘗試插入資料,發現還是同樣的錯誤。這個時候是哪裡的問題了呢。
根據錯誤反覆排查,還是指向了分割槽的定義,那麼我們看看其中一個分割槽的情況。
(PARTITION "P_OLD" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NL
S_CALENDAR=GREGORIAN'))
TABLESPACE "TEST_DATA"
( SUBPARTITION "P_OLD_SP_ABC" VALUES ('abc')
TABLESPACE "TEST_DATA",
。。。
SUBPARTITION "P_OLD_SP_OTHER" VALUES ('xjzj', hij', 'pz')
TABLESPACE "TEST_DATA") ,
所以按照分割槽的定義,裡面還是少了這個subpartition的數值範圍資訊。
如果想重新生成一個新的subpartition可以使用如下的方式:
ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MODIFY PARTITION P_OLD add SUBPARTITION P_OLD_SP_OTHER_pz VALUES ('pz');
如果想生成預設的subpartition名稱可以使用如下的方式:
ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MODIFY PARTITION P2017_Q2 add SUBPARTITION VALUES ('pz');
這個時候的subpartition的資訊,我摘錄出一個來簡單看看。
( SUBPARTITION "P2017_Q3_SP_ABC" VALUES ('abc')
TABLESPACE "TEST_DATA",
。。。
SUBPARTITION "P2017_Q3_SP_OTHER" VALUES ('xjzj', 'hij') TABLESPACE "TEST_DATA",
SUBPARTITION "SYS_SUBP22" VALUES ('pz')
TABLESPACE "TEST_DATA") ,
如果依舊覺得不滿意,我們來使用merge subpartitions的方式,當然這個操作還是會有全域性鎖的,會把兩個分割槽整合為一個。
ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MERGE SUBPARTITIONS P2017_Q2_SP_OTHER,SYS_SUBP21 INTO SUBPARTITION P2017_Q2_SP_OTHER;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2141992/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Windows啟動問題修復(重建活動分割槽)Windows
- ORACLE刪除-表分割槽和資料Oracle
- oracle分割槽表和分割槽表exchangeOracle
- 資料恢復記錄:硬碟分割槽損壞修復SqlServer資料庫過程資料恢復硬碟SQLServer資料庫
- oracle分割槽表和非分割槽表exchangeOracle
- 【伺服器資料恢復】XFS檔案系統分割槽分割槽丟失無法訪問的資料恢復案例伺服器資料恢復
- 【北亞資料恢復】伺服器重灌系統後分割槽消失和分割槽不可訪問的資料恢復案例資料恢復伺服器
- 分割槽丟失資料恢復資料恢復
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- Jtti:如何修復Oracle資料庫執行過程的問題JttiOracle資料庫
- 電腦硬碟分割槽表損壞怎麼修復?電腦硬碟分割槽表損壞的修復方法硬碟
- Oracle有沒有MySQL的分割槽DDL遇到的問題OracleMySql
- 分割槽使用與Oracle許可證問題XSOracle
- Oracle日常問題-壞塊修復Oracle
- fdisk 更改分割槽容量遇到問題,還以為是oracle asm的問題OracleASM
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- oracle 更改分割槽表資料 ora-14402Oracle
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- oracle交換分割槽所引起的索引失效問題探究測試Oracle索引
- Oracle查詢Interval partition分割槽表內資料Oracle
- Oracle 資料庫 10g中的分割槽功能(轉)Oracle資料庫
- hive Sql的動態分割槽問題HiveSQL
- 幾種主要的oracle資料庫問題發生後資料恢復的成功概率分析Oracle資料庫資料恢復
- MySql資料分割槽操作之新增分割槽操作MySql
- 資料庫資料恢復—NTFS分割槽損壞如何恢復SqlServer資料庫資料資料庫資料恢復SQLServer
- 調整分割槽後分割槽不見的資料找到方法
- LVM分割槽恢復LVM
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- 伺服器資料恢復-OceanStor儲存xfs分割槽資料丟失的資料恢復案例伺服器資料恢復
- 一起學Hive——使用MSCK命令修復Hive分割槽Hive
- win10系統硬碟分割槽表損壞的修復方法Win10硬碟
- 伺服器資料恢復—伺服器raid5上層分割槽無法訪問的資料恢復案例伺服器資料恢復AI
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 重灌系統導致分割槽丟失的資料恢復案例資料恢復
- ORACLE分割槽表梳理系列Oracle
- 對oracle分割槽表的理解整理Oracle
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維