2011-02-07 44 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”存储过程