oracle 儲存過程執行報錯ORA-12828
作業系統:windows server 2008R2
資料庫版本:oracle 11.2.0.3 單例項
今天,一開發同事找來,說他的儲存過程在龍巖地市執行報錯ORA-12828,說程式碼執行到如下程式碼塊的時候報錯退出:
EXECUTE IMMEDIATE 'ALTER TABLE FACT_COSTS TRUNCATE PARTITION P_FACT_COSTS_'||PRM_MONTH||' update global indexes';
檢視oracle聯機文件對ORA-12828的解釋:
[oracle@se31 ~]$ oerr ora 12828
12828, 00000, "Can't start parallel transaction at a remote site"
// *Cause: PDML transaction cannot be started because we are not in the
// coordinator site of the distributed transaction.
// *Action: Do not use PDML at remote sites.
[oracle@se31 ~]$
查詢oracle support知識庫,有篇文件(ID 1535660.1)與ORA-12828相關
APPLIES TO:
Oracle Database - Enterprise Edition - Version 11.2.0.1.0 to 11.2.0.4 [Release 11.2]Information in this document applies to any platform.
SYMPTOMS
The remote parallel index rebuild runs serial even if enabling parallel replication propagation at the database link level. For example if a database link is created for a particular destination database, and enabling parallel propagation for a database link, then Oracle uses multiple parallel slave processes to replicate to the corresponding destination. But it doesn't work while parallel index rebuild remotely through a procedure. In detail:
CAUSE
As the Bug 14684769 states, this works as expected and it is not supported to parallelize the index by using the dblink.
SOLUTION
The dblink is not supported to parallelize the rebuild index.
As per the fix for Bug 2166879, create index will not be compiled for parallel execution if it is being executed in a distributed txn.
REFERENCES
BUG:14684769 - REMOTE PARALLEL INDEX REBUILD RUNS SERIALBUG:2166879 - ORA-12828 WHEN INDEX CREATED IN PARALLEL MODE THROUGH REMOTE PROCEDURE
檢視開發同事提供的程式碼並沒有使用到dblink,根據oracle官方(ID 1535660.1)提示,ORA12828與索引重建有關,
讓開發同事嘗試去掉update global indexes子句重新執行,可成功執行。其實更新表資料同步更新索引,是防止分割槽表分割槽索引失效。
於是,建議他將索引重建子句去除,另外在儲存過程中新增專門的索引重建語句(經他測試,可以執行)。
另外,根據他提供的資訊該程式碼並不是在所有地市都報錯,只有目前的龍巖windows server 2008R2 oracle 11.2.0.3單例項下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2147300/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 應用儲存過程執行報錯解決方案儲存過程
- 【Oracle】-【show_space和show_space_asm】-執行儲存過程報錯OracleASM儲存過程
- MySQL 建立儲存過程報錯MySql儲存過程
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程
- oracle 如何終止儲存過程的執行Oracle儲存過程
- 查詢儲存過程報錯資訊儲存過程
- oracle 執行儲存過程 ora00131Oracle儲存過程
- (轉)如何oracle除錯儲存過程Oracle除錯儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- /*動態執行儲存過程DEMO*/儲存過程
- 利用oracle儲存過程執行作業系統命令Oracle儲存過程作業系統
- Oracle中執行儲存過程call和exec區別Oracle儲存過程
- jdbc使用call呼叫儲存過程報錯JDBC儲存過程
- Oracle儲存過程Oracle儲存過程
- oracle 執行普通方式及除錯debug方式儲存過程效能區別Oracle除錯儲存過程
- oracle儲存過程(procedure)中執行動態SQL小記Oracle儲存過程SQL
- 檢視正在執行的儲存過程儲存過程
- 執行Sybase儲存過程並返回ResultSet儲存過程
- 使用ADO執行儲存過程 (轉)儲存過程
- 使用Command執行儲存過程 (轉)儲存過程
- pl/sql developer除錯儲存過程報錯處理SQLDeveloper除錯儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- 【Database】Oracle10g檢視正在執行的儲存過程DatabaseOracle儲存過程
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- [MSSQL]sql 儲存過程定時執行方法SQL儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- Oracle儲存過程學習Oracle儲存過程
- oracle的儲存過程格式Oracle儲存過程