Java Mailing List Archive

http://www.dba.5341.com/

Home » Home (12/2007) » oracle-l »

Streams Subset-Rule issue

krishna sarabu

2007-07-20

Replies:

Hi,

We are trying to setup a subset rule on source table using 200+ in-list values and experiencing ORA-936 errors, not sure if it is a bug/restriction. Have checked Oracle docs and found no restriction on in-list values in subset rules. Below is the error message: (Please note that the source/destination databases are on 10.2.0.2 and we are planning to use dedicated capture process/queue for this table)

======================================================
-- subset rule with 60+ in-list values..
@setup_subset_rule_test2.sql

DECLARE
*
ERROR at line 1:
ORA-25448: rule STRMADMIN.NTS_DERIVATIVE_TS66 has errors
ORA-00936: missing expression
ORA-06512: at "SYS.DBMS_RULEADM_INTERNAL", line 49
ORA-06512: at "SYS.DBMS_RULE_ADM", line 178
ORA-06512: at "SYS.DBMS_STREAMS_ADM", line 1205
ORA-06512: at "SYS.DBMS_STREAMS_ADM", line 1073
ORA-06512: at line 20
======================================================


From the 10046 trace on above call, seems that the ORA-936 error was due to the sql (attached below) parse issue. The "missing" where condition in "WHERE" clause causing parsing error and returning ORA-936 error. Appear to be a BUG/restriction in Oracle.

====================================================================================
PARSE ERROR #11:len=65 dep=1 uid=0 oct=3 lid=88 tim=9534560440959 err=936
SELECT /*+ cursor_sharing_exact */ count(*) FROM SYS.DUAL WHERE
XCTEND rlbk=1, rd_only=1
EXEC #1:c=440000,e=474860,p=2,cr=519,cu=9,mis=0,r=0,dep=0,og=1,tim=9534560442534
ERROR #1:err=25448 tim=976338989
====================================================================================



Anyways, we have tried using alternate workaround with stored function that validates the given value instead, as mentioned below. But, the stored function call in the rule making it Complex and severely impacting the capture performance (from the tests we noticed that the Capture process is over 8 times slower).

Wondering if any of you have seen similar issue before and if you know any alternate efficient method like using our own evaluation contexts as this capture/ruleset is dedicated for this table. Appreciate your help and time.

====================================================================================

Create Or Replace Function strmadmin.Chk_Val(p_Agi In Number) Return Varchar2 DETERMINISTIC IS
Begin
    If p_Agi In (10,501,502,503,504,505,506,507,508,509,510
        ,511,512,513,514,515,516,517,518,519,520
        ,521,522,523,524,525,526,527,528,529,530
        ,531,532,533,534,535,536,537,538,539,540
        ,541,542,543,544,545,546,547,548,549,550
        ,551,552,553,554,555,556,557,558,559,560
        ,561,562,563,564,565,566,567,568,569,570
        ,571,572,573,574,575,576,577,578,579,580
        ,581,582,583,584,585,586,587,588,589,590
        ,591,592,593,594,595,596,597,598,599,600)
    Then
        Return 'Y' ;
    Else
        Return 'N' ;
    End If;
End;
/

DECLARE
    v_Condn Varchar2(2000) := 'strmadmin.chk_val(DEPTNO) = ''Y''';
BEGIN
    DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
        table_name => 'strms_test.strms_subset_test1',
        dml_condition => v_Condn,
        streams_type => 'CAPTURE',
        streams_name => 'STST_CAPT01',
        queue_name => 'STRMADMIN.CNRTS1_Q');
END;
/

====================================================================================

Thanks for your help in advance.

Regards,
Krishna


Ready for the edge of your seat? Check out tonight's top picks on Yahoo! TV.
©2008 dba.5341.com - Jax Systems, LLC, U.S.A.