文章詳情頁
oracle里面使用臨時(shí)表解決表沖突一例(轉(zhuǎn)貼)
瀏覽:136日期:2023-11-16 12:47:02
平臺:windows 2000 server sp3數(shù)據(jù)庫:Oracle 9.0.1.1.1 現(xiàn)場描述:用戶抱怨不能同時(shí)對多個(gè)單位進(jìn)行數(shù)據(jù)處理,執(zhí)行出現(xiàn)的錯(cuò)誤信息為:SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行:ORA-02055: 分布式更新操作失效;要求回退ORA-06502: PL/SQL: 數(shù)字或值錯(cuò)誤 :; 字符串緩沖區(qū)太小ORA-06512: 在'SIDB.SP_HYB_DA_RYXX_DWBH_TEST', line 55ORA-06502: PL/SQL: 數(shù)字或值錯(cuò)誤 :; 字符串緩沖區(qū)太小ORA-06512: 在'SIDB.SP_HYB_DA_RYXX', line 145ORA-06502: PL/SQL: 數(shù)字或值錯(cuò)誤 :; 字符串緩沖區(qū)太小ORA-06512: 在'SIDB.SP_HYB_DA_RYXX_YZ1', line 25ORA-20901: 過程SP_HYB_DAXX出錯(cuò);grbh = 1000607288 ORA-02049: 超時(shí):分布式事務(wù)處理等待鎖定請聯(lián)系系統(tǒng)治理員;1ORA-06512: 在line 1 經(jīng)檢查后發(fā)現(xiàn)是后臺存儲過程中使用了‘臨時(shí)’表,這些臨時(shí)表用于臨時(shí)保存部分正式表的數(shù)據(jù),應(yīng)用程序存儲過程的代碼形如DELETE <TEMP TABLE>;INSERT INTO <TEMP TABLE> SELECT *FROM <NORMAL TABLE> WHERE …;這種方法造成了在同時(shí)執(zhí)行的時(shí)候由于對<TEMP TABLE>鎖定的等待而只能同時(shí)進(jìn)行一個(gè)單位的數(shù)據(jù)處理。可以通過使用Oracle真正意義上的臨時(shí)表消除對臨時(shí)表的鎖定。臨時(shí)表的基本定義是:數(shù)據(jù)庫中的所有會(huì)話均可以訪問臨時(shí)表,但只有插入數(shù)據(jù)到臨時(shí)表中的會(huì)話才能看到本身插入的數(shù)據(jù)。可以把臨時(shí)表指定為事務(wù)相關(guān)(默認(rèn))或者是會(huì)話相關(guān):ON COMMIT DELETE ROWS:指定臨時(shí)表是事務(wù)相關(guān)的,Oracle在每次提交后截?cái)啾怼N COMMIT PRESERVE ROWS:指定臨時(shí)表是會(huì)話相關(guān)的,Oracle在會(huì)話中止后截?cái)啾?。通過使用Oracle的臨時(shí)表后可以并行的對數(shù)據(jù)進(jìn)行處理,有效的提高了數(shù)據(jù)處理的速度。 附:創(chuàng)建臨時(shí)表的例子 CREATE GLOBAL TEMPORARY TABLE <TEMP TABLE>ASSELECT *FROM <NORMAL TABLE> WHERE 1 = 2;CREATE INDEX <INDEX NAME> ON <TEMP TABLE> (<COLUMN NAME>);
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
