django oracle clob,记一次clob字段损坏导致的01555错误
這個(gè)專(zhuān)題講一些日常運(yùn)維的異常處理
1. 現(xiàn)象
開(kāi)發(fā)人員找說(shuō)應(yīng)用連接不上,報(bào)ORA-01555錯(cuò)誤
2. 原因查找
2.1 查看undo使用率等情況
第一反應(yīng)當(dāng)然是查詢是否undo表空間不足
通過(guò)如下命令查詢
SELECT round(((SELECT (NVL(SUM(bytes), 0))FROM dba_undo_extents
WHERE tablespace_name =
(select value from v$parameter
where lower(name) = 'undo_tablespace')
AND status IN ('ACTIVE', 'UNEXPIRED')) * 100) /
(SELECT SUM(bytes) FROM dba_data_files
WHERE tablespace_name =
(select value from v$parameter
where lower(name) = 'undo_tablespace')), 2) PCT_INUSE
FROM dual
使用率很低,而且數(shù)據(jù)庫(kù)重啟過(guò),我們暫時(shí)排除
2.2 檢查表的情況
我們首先執(zhí)行手動(dòng)執(zhí)行該語(yǔ)句,在sqlplus中運(yùn)行也是報(bào)錯(cuò)
在plsql中執(zhí)行顯示value error
字段是clob字段,看來(lái)這就是原因了,是由于clob字段損壞導(dǎo)致
因?yàn)镃LOB字段的undo信息是存儲(chǔ)在clob塊中的,其保留策略通過(guò)PCTVERSION(百分比)?和RETENTION(時(shí)間)字段控制
2.3 檢查clob損壞情況
我們通過(guò)如下語(yǔ)句查詢?cè)揷lob字段是否有損壞
將替換成value error的字段名
將替換成該字段所在的表名
set serverout on
exec dbms_output.enable(100000);
declare
page number;
len number;
c varchar2(10);
charpp number := 8132/2;
begin
for r in (select rowid rid, dbms_lob.getlength () len
from ) loop
if r.len is not null then
for page in 0..r.len/charpp loop
begin
select dbms_lob.substr (, 1, 1+ (page * charpp))
into c
from
where rowid = r.rid;
exception
when others then
dbms_output.put_line ('Error on rowid ' ||R.rid||' page '||page);
dbms_output.put_line (sqlerrm);
end;
end loop;
end if;
end loop;
end;
/
這時(shí)我們查出來(lái)有三行,我們記住其rowid
2.4 跟蹤01555錯(cuò)誤
我們可以利用如下語(yǔ)句對(duì)該錯(cuò)誤進(jìn)行跟蹤,當(dāng)發(fā)生錯(cuò)誤時(shí)alert日志會(huì)有記錄并生成trace文件
alter system set events '1555 trace name errorstack level 3';
2.5 expdp排查clob損壞的行
如果在導(dǎo)出的話,clob字段損壞會(huì)導(dǎo)致失敗,這時(shí)我們可以使用如下參數(shù)跳過(guò)指定的行
expdp \"/ as sysdba\" tables="ISUGDP"."TEXT_FOR_ECP" directory=DROPZONE dumpfile=table.dmp logfile=table.log QUERY=\"WHERE rowid NOT IN \(SELECT CORRUPTED_ROWID FROM CORRUPTED_ROWS\)\"
3. 解決方法
知道了原因后,如果這幾行數(shù)據(jù)很重要,則需要?jiǎng)e的恢復(fù)手段將其恢復(fù)(RMAN)
如果不需要這幾行數(shù)據(jù)我們可以將其刪除
delete from table where rowid='AAAV1RAAEAAD5dGAAC';
之后問(wèn)題解決
4. 參考連接
總結(jié)
以上是生活随笔為你收集整理的django oracle clob,记一次clob字段损坏导致的01555错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦战是什么手游(梦战)
- 下一篇: oracle开发方案,oracle報表開