| 
		
			| SET_DML_HANDLER for apply process failing [message #75742] | Sun, 12 September 2004 03:27  |  
			| 
				
				
					| bw Messages: 6
 Registered: June 2002
 | Junior Member |  |  |  
	| I'm getting the following error when trying to set the user handler procedure for an apply process: 
 BEGIN
 DBMS_APPLY_ADM.SET_DML_HANDLER(
 object_name => 'RT01.ORDERPDO_ORDER',
 object_type => 'TABLE',
 operation_name => 'UPDATE',
 user_procedure => 'RT01.fbtest_enq_row_lcr');
 END;
 /
 BEGIN
 *
 ERROR at line 1:
 ORA-04047: object specified is incompatible with the flag specified
 ORA-06512: at "SYS.DBMS_UTILITY", line 114
 ORA-06512: at "SYS.DBMS_APPLY_ADM", line 283
 ORA-06512: at line 2
 
 This error started occuring recently on code that used to work OK. There must be something that I've changed in the database configuration but I have no idea what it is.
 
 I have no idea what the error means, either the object or the flag meant in the message is a mystery to me. Can anyone shed light on this or tell me how I might find out more info about the error (debug flags or tracing that might be used?)
 
 Running Oracle 9.2.0.5.0 on Linux (2.6.7 kernel, glibc 2.3.3, Gentoo distribution)
 
 The sql leading up to this is below,
 
 thanks,
 brian wallis...
 
 BEGIN
 DBMS_STREAMS_ADM.SET_UP_QUEUE(
 queue_table=>'RT01.fbtest_table',
 queue_name=>'RT01.fbtest_queue',
 queue_user=>'RT01');
 END;
 BEGIN
 DBMS_RULE_ADM.CREATE_RULE_SET(
 rule_set_name=>'fbtest_rule_set',
 evaluation_context=>'SYS.STREAMS$_EVALUATION_CONTEXT');
 END;
 BEGIN
 DBMS_RULE_ADM.CREATE_RULE(
 rule_name=>'fbtest_rule',
 condition=>':dml.get_command_type() = ''UPDATE''
 AND :dml.get_object_owner() = ''RT01''
 AND :dml.get_object_name() = ''ORDERPDO_ORDER''
 ');
 END;
 BEGIN
 DBMS_RULE_ADM.ADD_RULE(
 rule_name=>'fbtest_rule',
 rule_set_name=>'fbtest_rule_set');
 END;
 BEGIN
 DBMS_RULE_ADM.CREATE_RULE(
 rule_name=>'fbtest_rule_x',
 condition=>'(:dml.get_command_type() = ''INSERT''
 OR :dml.get_command_type() = ''DELETE'')
 AND :dml.get_object_owner() = ''RT01''
 AND :dml.get_object_name() = ''ORDERPDO_ORDER'' ');
 END;
 BEGIN
 DBMS_RULE_ADM.ADD_RULE(
 rule_name=>'fbtest_rule_x',
 rule_set_name=>'fbtest_rule_set');
 END;
 BEGIN
 DBMS_CAPTURE_ADM.CREATE_CAPTURE(
 queue_name    => 'RT01.fbtest_queue',
 capture_name  => 'fbtest_capture',
 rule_set_name => 'fbtest_rule_set');
 END;
 CREATE OR REPLACE PROCEDURE RT01.fbtest_enq_row_lcr(in_any IN SYS.ANYDATA) IS
 enqopt       DBMS_AQ.ENQUEUE_OPTIONS_T;
 mprop        DBMS_AQ.MESSAGE_PROPERTIES_T;
 enq_eventid  RAW(16);
 lcr          SYS.LCR$_ROW_RECORD;
 rc           PLS_INTEGER;
 BEGIN
 rc := in_any.GETOBJECT(lcr);
 mprop.SENDER_ID := SYS.AQ$_AGENT(
 name     => 'fbtest_dq',
 address  => NULL,
 protocol => NULL);
 DBMS_AQ.ENQUEUE(
 queue_name         => 'RT01.NS_LCR_QUEUE',
 enqueue_options    => enqopt,
 message_properties => mprop,
 payload            => sys.anydata.convertobject(lcr),
 msgid              => enq_eventid);
 END;
 BEGIN
 DBMS_APPLY_ADM.CREATE_APPLY(queue_name=>'RT01.fbtest_queue',
 apply_user => 'RT01',
 apply_name=>'fbtest_apply',
 apply_captured=>true);
 END;
 |  
	|  |  | 
	| 
		
			| Re: SET_DML_HANDLER for apply process failing [message #75743 is a reply to message #75742] | Sun, 12 September 2004 06:01   |  
			| 
				
				
					| bw Messages: 6
 Registered: June 2002
 | Junior Member |  |  |  
	| Having a play with this problem. If I modify the failing set_dml_handler call and remove the schema
 name from the user procedure name (ie
 'rt01.fbtest_enq_row_lcr' becomes 'fbtest_enq_row_lcr'
 then the dml handler sets without error. New call is:
 
 BEGIN
 DBMS_APPLY_ADM.SET_DML_HANDLER(
 object_name => 'RT01.ORDERPDO_ORDER',
 object_type => 'TABLE',
 operation_name => 'UPDATE',
 user_procedure => 'fbtest_enq_row_lcr');
 END;
 
 But now my apply process gets an error and aborts:
 
 ORA-06550: line 1, column 12:
 PLS-00302: component 'FBTEST_ENQ_ROW_LCR' must be
 declared
 ORA-06550: line 1, column 7:
 PL/SQL: Statement ignored
 
 Any help appreciated.
 
 brian wallis...
 |  
	|  |  | 
	| 
		
			| Re: SET_DML_HANDLER for apply process failing [message #75744 is a reply to message #75743] | Tue, 14 September 2004 03:32   |  
			| 
				
				
					| bw Messages: 6
 Registered: June 2002
 | Junior Member |  |  |  
	| OK, to talk to myself (which is what usually happens when I use this forum, does anyone else read it?)
 
 Looks like this might be an oracle
 bug/issue/strangeness.
 
 I had a queue in the schema I was running it (schema
 name RT01) with the same name as the schema (ie: the
 queue was called RT01 as well). I have now deleted
 that queue and it is working again. I am not sure
 exactly when this queue was created but it would be
 around the time that I started having these problems
 (there has been a lot of experimentation on this
 system).
 |  
	|  |  | 
	|  |