生產環境遭遇ORA-01410: invalid rowid。分析
一個過程報錯:ORA-01410: invalid rowid。
這個過程以前都沒有出現過這個錯誤。當時正在rebuild online索引。懷疑是這個原因導致的。
錯誤模擬:
1)session1,建立一個表T1,ID為主鍵。執行一個比較耗時的SQL,強制讓這個SQL用上索引。
drop table t1;
create table t1 as
select
rownum id,
rpad(rownum,10) v1,
rpad('x',100) v2
from
all_objects
where
rownum <= 10000 ;
;
alter table t1 add constraint t1_pk primary key(id);
execute dbms_stats.gather_table_stats(user,'t1')
declare
m_v1 varchar2(10);
begin
for r in (select /*+ index(t1) */
v1
from t1
where id > 0) loop
m_v1 := r.v1;
dbms_lock.sleep(0.01);
end loop;
end;
/
2)session2執行如下語句:
DROP TABLE ttt;
alter index t1_pk rebuild online;
CREATE TABLE ttt AS select * from dba_objects;
session2會很快完成,這個時候檢視session1,報錯了ORA-01410: invalid rowid。
解釋如下:
1)rebuild索引的時候,會現在一個臨時段去建立。建立完成後,會釋放老索引段的空間。比較權威的原話如下:
if you rebuild an index (whether or not you use the online option) Oracle will copy the index contents from one location to another and,
when the copy is complete, free up the space that held the original index contents.
2)如果你在rebulid之前執行了一個比較長的查詢,這查詢將繼續使用老索引。Oracle introduced a form. of ‘cross-DDL read consistency’ many years
ago to make partition maintenance operations possible, and that’s the feature that allows your query to carry on running.
3)那麼這種情況下怎麼辦呢?一個表需要擴充套件或者一個索引需要擴充套件或者一個新表需要建立,那麼老索引的空間就有可能被填充,那麼你之前的長查詢還在依賴這個
老索引空間,這種情況一出現,就有可能出現錯誤ORA-01410: invalid rowid。
如果實驗裡建立表TTT的表空間不跟索引T1_PK在一個表空間,就不會報錯。
不理解的再看下這篇文章:
打不開的用這個中轉一下:
[ 本帖最後由 wei-xh 於 2010-12-9 10:53 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-681330/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決ORA-01410:Invalid ROWID的一般步驟
- redmine生產環境搭建
- Django生產環境搭建Django
- 公有云(AWS)上的生產環境效能分析案例
- Webpack(開發、生產環境配置)Web
- Yarn生產環境核心引數Yarn
- 操作生產環境的規範
- 用 Spring 區分開發環境、測試環境、生產環境Spring開發環境
- 【kamus】Oracle ERP產品環境克隆的詭異遭遇Oracle
- 生產環境sqlldr載入效能問題及分析之一SQL
- 生產環境sqlldr載入效能問題及分析之二SQL
- kafka生產環境規劃-kafka 商業環境實戰Kafka
- docker 生產環境基礎應用Docker
- 生產環境的 ElasticSearch 安裝指南Elasticsearch
- Vue生產環境除錯的方法Vue除錯
- 生產環境nginx平滑升級演示Nginx
- laravel生產環境下新增欄位Laravel
- Eureka:生產環境優化總結。優化
- Yarn 生產環境多佇列配置Yarn佇列
- zt_ORA-01410: invalid ROWID 分析
- 生產環境使用10053分析Oracle的執行計劃Oracle
- Nuxt.js中配置生產環境和開發環境APIUXJS開發環境API
- webpack4生產環境和開發環境的對比Web開發環境
- vue-element-admin部署生產環境Vue
- Oracle生產環境RMAN備份指令碼Oracle指令碼
- 生產環境備份shell指令碼薦指令碼
- 生產環境搭建MySQL複製的教程MySql
- 一次生產環境OOM排查OOM
- 面試-JS Web API-Webpack生產環境面試JSWebAPI
- mirrord:輕鬆地將流量從生產環境映象到開發環境開發環境
- 使用 IBM 效能分析工具解決生產環境中的效能問題IBM
- JDK1.8 JVM生產環境引數配置JDKJVM
- 搭建 sentry 追蹤 Laravel 生產環境 bugLaravel
- Elasticsearch叢集搭建教程及生產環境配置Elasticsearch
- 使用 Webpack 進行生產環境配置(附 Demo)Web
- 生產環境中MySQL複製的搭建KPMySql
- 在Grammarly的生產環境中執行LispLisp
- MySQL資料庫生產環境安全規範MySql資料庫