ORA-03113,ORA-07445

在9.2.0.1.0版本的Oracle数据库中,通过DBLink从9201访问9206时,在存储过程内部执行查询需指定对象所有者,否则会出现ORA-03113错误。错误伴随着TRC文件产生,文件显示内部或致命错误(ORA-07445)。问题发生在使用不带所有者前缀的表名时,而直接的SELECT语句则正常。已尝试检查权限、SGA参数和空间,但问题依然存在。

我們有2個數據庫之間用DBLink訪問,遠端DB是9206,本地是9201,以前本地訪問遠端都是好好的.現在出現了一個問題,直接用select語句訪問沒有什麼問題,但是把這個Select語句放在Procedure裡面,就必須在訪問的對象前面加owner,否則就會報ORA-03113的錯誤,並產生TRC文件.

舉個例子:
下面這兩句都可以正常執行:

SELECT * FROM aa1@mptr11iprod

DECLARE
v_test VARCHAR2(100);
BEGIN
SELECT TO_CHAR(COUNT(1))   INTO V_TEST FROM mhr.aa1@mptr11iprod WHERE ROWNUM=1;
END;

但是下面這個語句就回報ORA-03113的錯:
DECLARE
v_test VARCHAR2(100);
BEGIN
SELECT TO_CHAR(COUNT(1))   INTO V_TEST FROM aa1@mptr11iprod WHERE ROWNUM=1;
END;

不知道大家有沒有遇到這個問題,該如何解決.

補充一下:
就那上面的例子,aa1是遠端DB mhr用戶下面的一個表,本地dblink直接連過去的用戶是遠端的用戶scott,scott有select any table的權限, aa1在scott下面建了一個別名也叫aa1.

它有測試環境,測試環境卻很正常.


部分TRC文件內容如下:

/export/home/webora/admin/WEBPROD/udump/webprod_ora_19266.trc
Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
ORACLE_HOME = /export/home/webora/product/9.0.1
System name:        SunOS
Node name:        MPSSDB04
Release:        5.9
Version:        Generic_112233-07
Machine:        sun4u
Instance name: WEBPROD
Redo thread mounted by this instance: 1
Oracle process number: 318
Unix process pid: 19266, image: oracle@MPSSDB04 (TNS V1-V3)

*** SESSION ID297.13547) 2008-06-05 14:09:58.129
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0x50, PC: [0x100975b14, 0000000100975B14]
*** 2008-06-05 14:09:58.146
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [0000000100975B14] [SIGSEGV] [Address not mapped to object] [0x000000050] [] []
Current SQL statement for this session:
DECLARE
v_test VARCHAR2(100);
BEGIN
SELECT TO_CHAR(COUNT(1))   INTO V_TEST FROM aa1@mptr11iprod WHERE ROWNUM=1;
END;
----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
ksedmp()+328         CALL     ksedst()+0           FFFFFFFF7FFF3C60 ?
                                                   000000000 ? 000000000 ?
                                                   00000003E ?
                                                   FFFFFFFF7FFF44F8 ?
                                                   103060868 ?
ssexhd()+604         CALL     ksedmp()+0           000000000 ? 000103400 ?
                                                   000103460 ? 000102C00 ?
                                                   103460000 ? 103460D70 ?
sigacthandler()+44   PTR_CALL 0000000000000000     103468000 ?
                                                   FFFFFFFF7FFF5490 ?
                                                   000000000 ? 000000001 ?
                                                   103465F08 ? 00000000B ?
kkdlgob()+4884       PTR_CALL 0000000000000000     00000000B ?
                                                   FFFFFFFF7FFF5490 ?
                                                   FFFFFFFF7FFF51B0 ?
                                                   386264778 ? 38FD93B18 ?
                                                   000000001 ?
qcsfgob()+208        CALL     kkdlgob()+0          38C912DE0 ? 000000002 ?
                                                   000000000 ? 000000000 ?
                                                   000000001 ? 386264778 ?
qcsprfro()+432       CALL     qcsfgob()+0          FFFFFFFF7FFF6108 ?
                                                   38C912DE0 ? 000000001 ?

分析過程:

1.望:先看看日誌,TRC文件看看問題是否碰到過,然後用最快速的辦法看能否解決(其實就是baidu+google啦),答案是未果,網上說差不多07445與BUG有關.

2.聞:登錄到這個機器上,df -k,show sga,show一些常見的參數,看看等待事件,改寫一下SQL看看是否是parse的BUG,只是發現了某一個目錄的空間達到100%,sqlplus執行就發生了ora-09817的錯誤,解決了這個錯誤,問題還是沒解決.

3.問:問問當事人問題發生的時間,再那段時間內是否做過什麼動作,回答沒有.問問其他同事最近有沒有在該DB上做過什麼事情,也沒.

4.切:這下子要動真格了.一般我的習慣是,自己摸索+問別人雙管齊下,問別人就是在itpub上發帖或者metalink上查.自己摸索呢,那就要18般武藝都要用上了.

A.根據別人的反應,以前都是正常的,是最近才出的問題,那對比一下V$parameter看看,發現有部份參數兩邊不一樣,但是這些參數不會影響大局.

B.查看一下SGA的參數,發現遠端DB的SGA中shared_pool有1.8G,PGA有8G,這兩個參數會不會影響到呢,暫放一邊

C.用SQL Trace跟蹤這個執行過程所用到SQL

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值