2011-02-07 47 views
1

在Oracle 10g上輸出流式錯誤日誌時,日誌不顯示時間戳記字段的值;相反,它只是顯示「時間戳是SYS.TIMESTAMP」作爲舊的和新的值。有沒有辦法配置Oracle流來顯示實際的時間戳值?我們需要這些信息來正確調試這些流式傳輸錯誤的根本原因。Oracle Streams錯誤日誌未顯示時間戳值

例如,執行以下操作:

exec strmadmin.print_errors; 

給了我們這樣(截斷)錯誤日誌:

*************************************************                  
----- ERROR #1                           
----- Local Transaction ID: 10.31.14788721                    
----- Source Database: <REMOVED>                   
----Error Number: 1403                         
----Message Text: ORA-01403: no data found 


--message: 1                            
type name: SYS.LCR$_ROW_RECORD                       
source database: <REMOVED>                     
owner: <REMOVED>                           
object: TPRODUCT                           
is tag null: Y                           
command_type: UPDATE                          
old(1): UIDPK                           
1001110                             
old(2): LAST_MODIFIED_DATE                        
typename is SYS.TIMESTAMP                    

回答

0

如果有人有興趣,我找到了解決這個問題。在會話中,其中print_any程序啓動使用

CREATE OR REPLACE PROCEDURE print_any(data IN ANYDATA) IS 
    tn VARCHAR2(61); 
    str VARCHAR2(4000); 
    chr VARCHAR2(1000); 
    num NUMBER; 
    dat DATE; 
    rw RAW(4000); 
    res NUMBER; 
BEGIN 
    IF data IS NULL THEN 
    DBMS_OUTPUT.PUT_LINE('NULL value'); 
    RETURN; 
    END IF; 
    tn := data.GETTYPENAME(); 
    IF tn = 'SYS.VARCHAR2' THEN 
    res := data.GETVARCHAR2(str); 
    DBMS_OUTPUT.PUT_LINE(SUBSTR(str,0,253)); 
    ELSIF tn = 'SYS.CHAR' then 
    res := data.GETCHAR(chr); 
    DBMS_OUTPUT.PUT_LINE(SUBSTR(chr,0,253)); 
    ELSIF tn = 'SYS.VARCHAR' THEN 
    res := data.GETVARCHAR(chr); 
    DBMS_OUTPUT.PUT_LINE(chr); 
    ELSIF tn = 'SYS.NUMBER' THEN 
    res := data.GETNUMBER(num); 
    DBMS_OUTPUT.PUT_LINE(num); 
    ELSIF tn = 'SYS.DATE' THEN 
    res := data.GETDATE(dat); 
    DBMS_OUTPUT.PUT_LINE(dat); 
    ELSIF tn = 'SYS.TIMESTAMP' THEN 
    res := data.GETTIMESTAMP(dat); 
    DBMS_OUTPUT.PUT_LINE(tn || ':' || to_char(dat,'DD-MON-YYYY HH24:MI:SS.FF')); 
    ELSIF tn = 'SYS.RAW' THEN 
    -- res := data.GETRAW(rw); 
    -- DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_LOB.SUBSTR(rw),0,253)); 
    DBMS_OUTPUT.PUT_LINE(tn || ":RAW"); 
    ELSIF tn = 'SYS.BLOB' THEN 
    DBMS_OUTPUT.PUT_LINE(tn || ":BLOB"); 
    ELSE 
    DBMS_OUTPUT.PUT_LINE('typename is ' || tn); 
    END IF; 
END print_any; 
0

alter session set nls_date_format='HH24:Mi:SS MM/DD/YY'; 
簡單地與下面的版本,其輸出用於時間戳的數據類型的值替換「print_any」存儲過程