【问题标题】:Oracle Streams error logs not showing timestamp valuesOracle Streams 错误日志未显示时间戳值
【发布时间】:2011-02-07 19:36:43
【问题描述】:

在 Oracle 10g 上输出流式错误日志时,日志不显示时间戳字段的值;相反,它只是将“时间戳是 SYS.TIMESTAMP”显示为旧值和新值。有没有办法配置 Oracle 流以显示实际的时间戳值?我们需要这些信息来正确调试这些流错误的根本原因。

例如,执行以下操作:

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                                                                              

【问题讨论】:

    标签: oracle timestamp oracle-streams


    【解决方案1】:

    如果有人感兴趣,我找到了解决这个问题的方法。只需将“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;
    

    【讨论】:

      【解决方案2】:

      在启动 print_any 过程的会话中使用:

      alter session set nls_date_format='HH24:Mi:SS MM/DD/YY';
      

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-20
        相关资源
        最近更新 更多