Demonstration of configuring
Oracle schemas to propagate message using Oracle advanced queue through IBM
Websphere.
1.    Configuring
MQ Admin user for client OUTBOUND_CLIENT, INBOUND_CLIENT
1.1        
Granting Queue
propagation privileges to AQ admin user.  
grant connect, resource,
aq_administrator_role, mgw_agent_role, mgw_administrator_role to admin_user;
grant execute on sys.dbms_aqadm to
admin_user;
grant execute on sys.dbms_aq to
admin_user;
--granting dbms_aqin is not in any note
but you may need it
grant execute on sys.dbms_aqin to
admin_user;
grant execute on dbms_transform to
admin_user;
1.2        
Granting QUEUEING
& DEQUEING privileges to the AQ admin user 
EXECUTE
dbms_aqadm.grant_system_privilege('ENQUEUE_ANY','admin_user',FALSE)
EXECUTE
dbms_aqadm.grant_system_privilege('DEQUEUE_ANY','admin_user',FALSE)
Create OUTBOUND_CLIENT QUEUE
Table
BEGIN
dbms_aqadm.create_queue_table(
queue_table => 'OUTBOUND_CLIENT' || '.iai', multiple_consumers => TRUE,
queue_payload_type => 'sys.mgw_basic_msg_t');
dbms_aqadm.create_queue( queue_name =>
'OUTBOUND_CLIENT' || '.iai_queue', queue_table => 'OUTBOUND_CLIENT' || '.iai',
retention_time => 30 );
DBMS_AQADM.START_QUEUE (queue_name =>
' OUTBOUND_CLIENT ' || '.iai_queue');
END;
3.   
Create a new AQ QUEUE table for INBOUND Propagation
BEGIN
dbms_aqadm.create_queue_table(
queue_table => ' INBOUND_CLIENT' || '.igs', multiple_consumers => TRUE,
queue_payload_type => 'sys.mgw_basic_msg_t');
dbms_aqadm.create_queue( queue_name =>
' INBOUND_CLIENT' || '.igs_queue', queue_table => ' INBOUND_CLIENT' || '.igs',
retention_time => 30 );
DBMS_AQADM.START_QUEUE (queue_name =>
' INBOUND_CLIENT' || '.igs_queue');
END;
4.   
Creating Trigger on queue table to monitor propagation details.
(OPTIONAL)
Precreate a
table iai_logger depending upon your application logic. 
CREATE OR REPLACE TRIGGER
OUTBOUND_CLIENT.iai_enqueue_trigger
        AFTER INSERT ON OUTBOUND_CLIENT.iai
       
FOR EACH ROW
BEGIN
       
INSERT INTO OUTBOUND_CLIENT.iai_logger (msgid,quote_name,enq_time) values
(:new.msgid,:new.corrid,to_char(:new.enq_time,'DD-MON-YYYY HH24:MI:SS'));
END;
/
CREATE OR REPLACE TRIGGER
OUTBOUND_CLIENT.iai_dequeue_trigger
       
AFTER UPDATE ON OUTBOUND_CLIENT.iai
       
FOR EACH ROW
WHEN (new.deq_time is not null)
BEGIN
UPDATE iai_logger set deq_time = to_char(:new.deq_time,'DD-MON-YYYY
HH24:MI:SS') where msgid = :new.msgid;
END;
/
5.   
Create AQ gateway Link (OUTBOUND_CLIENT)
Use the IBM Websphere MQ
username,password,port,Channel, queue manager name etc ..that is configured for
your case.
declare
     
v_options sys.mgw_properties;
     
v_prop    sys.mgw_mqseries_properties;
   
begin
     
v_prop := sys.mgw_mqseries_properties.construct();
     
v_prop.max_connections := 1;
     
v_prop.username := 'queue0x';     
     
v_prop.password := 'password';      
     
v_prop.hostname := 'mq_hostname'; 
     
v_prop.port     := 12345;           
     
v_prop.channel  := 'OUTBOUND.Q.COMPANY';
     
v_prop.outbound_log_queue := 'OUTBOUND.QL.EQUOTES.LOG'; 
     
v_prop.queue_manager := 'Q00';    
     
dbms_mgwadm.create_msgsystem_link(
          linkname => 'OUTBOUND_CLIENT' || '_mqlink',
          properties => v_prop,           
          options => v_options );         
   
end;
   
/
6.   
Create Non oracle Queue & Register (OUTBOUND_CLIENT)
declare
     
v_options sys.mgw_properties;
   
begin
     
dbms_mgwadm.register_foreign_queue(
          name           => 'non_oracle_queue',         
          linkname       => 'OUTBOUND_CLIENT' || '_mqlink',      
          provider_queue => 'OUTBOUND_CLIENT.QL.EQUOTES',        
          domain         => dbms_mgwadm.DOMAIN_QUEUE, 
        
 options        => v_options);
   
end;
   
/
7.   
Add Subscriber (OUTBOUND_CLIENT)
BEGIN
     
dbms_mgwadm.add_subscriber(
       
subscriber_id    => 'OUTBOUND_CLIENT'
|| '_sub_iai_export',    
       
propagation_type => dbms_mgwadm.outbound_propagation,
       
queue_name       => 'OUTBOUND_CLIENT'
|| '.iai_queue',
       
destination      => 'non_oracle_queue@'
|| 'OUTBOUND_CLIENT' || '_mqlink');
   
END;
   
/
8.   
Scheuling the propagation (OUTBOUND_CLIENT)
BEGIN
     
dbms_mgwadm.schedule_propagation(
      
 schedule_id      => 
'OUTBOUND_CLIENT' || '_sch_iai_export',
       
propagation_type => dbms_mgwadm.outbound_propagation, 
       
source           => 'OUTBOUND_CLIENT'
|| '.iai_queue', 
       
destination      => 'non_oracle_queue@'
|| 'OUTBOUND_CLIENT' || '_mqlink');
   
END;
   
/
9.   
Setup INBOUND_CLIENT for Inbound Queue
10.
Create Queue Table (INBOUND_CLIENT)
BEGIN
dbms_aqadm.create_queue_table(
queue_table => 'INBOUND_CLIENT' || '.igs', multiple_consumers => TRUE,
queue_payload_type => 'sys.mgw_basic_msg_t');
dbms_aqadm.create_queue( queue_name =>
'INBOUND_CLIENT' || '.igs_queue', queue_table => 'INBOUND_CLIENT' || '.igs',
retention_time => 30 );
DBMS_AQADM.START_QUEUE (queue_name =>
'INBOUND_CLIENT' || '.igs_queue');
END
11.
 Create Gateway Link for Inbound
Queue
declare
     
v_options sys.mgw_properties;
     
v_prop    sys.mgw_mqseries_properties;
   
begin
     
v_prop := sys.mgw_mqseries_properties.construct();
     
v_prop.max_connections := 1;
     
v_prop.username := 'mq0x';        
     
v_prop.password := 'password';        
     
v_prop.hostname := 'hostname';       
     
v_prop.port     := 12345;             
     
v_prop.channel  := 'IN.Q.COMPANY';  
     
v_prop.inbound_log_queue := 'IN.Q.FT.LOG';
     
v_prop.queue_manager := 'IQ00';    
     
dbms_mgwadm.create_msgsystem_link(
          linkname => 'INBOUND_CLIENT_IGS'
|| '_mqlink',   
          properties => v_prop,                   
          options => v_options );                 
   
end;
   
/
12.
 Create Non oracle queue &
Register (INBOUND_CLIENT)
declare
     
v_options sys.mgw_properties;
   
begin
       
dbms_mgwadm.register_foreign_queue(
          name           => 'non_oracle_queue',         
          linkname       => 'INBOUND_CLIENT_IGS' || '_mqlink',
          provider_queue => 'IQ.QL.FT.TRIGGER',        
          domain         => dbms_mgwadm.DOMAIN_QUEUE,   
          options        => v_options);
   
end;
   
/
13.
Add subscriber (INBOUND_CLIENT)
BEGIN
     
dbms_mgwadm.add_subscriber(
        
subscriber_id    => 'INBOUND_CLIENT'
|| '_sub_igs_notify',      
        
propagation_type => dbms_mgwadm.inbound_propagation, 
        
queue_name       => 'NON_ORACLE_QUEUE@INBOUND_CLIENT_IGS_MQLINK',
        
destination      => 'INBOUND_CLIENT.IGS_QUEUE');
   
END;
14.
Start Propagation (INBOUND_CLIENT)
BEGIN
     
dbms_mgwadm.schedule_propagation(
       
schedule_id      =>  'INBOUND_CLIENT' || '_sch_igs_export',  
       
propagation_type => dbms_mgwadm.inbound_propagation, 
       
source           => 'NON_ORACLE_QUEUE@INBOUND_CLIENT_IGS_MQLINK',
       
destination      => 'INBOUND_CLIENT.IGS_QUEUE');
   
END;
15. Testing the propagation
Send a message through
queue, that might be XML, LOB.
Following query should show
some data and disappears once message gets propagated through IBM Queue.
select Q_NAME,ENQ_TIME,DEQ_TIME,USER_DATA
from OUTBOUND_CLIENT.iai;
Check how many messages been
propagated/failure etc
select subscriber_id, Status,
Propagated_msgs, Failures, Last_Error_Msg from mgw_subscribers;
16.
Some useful MQ VIEWS
select * from SYS.MGW_MQSERIES_LINKS ;
select * from MGW_LINKS;
select * from MGW_SUBSCRIBERS;
select * from MGW_SCHEDULES;
select * from MGW_FOREIGN_QUEUES;
select * from MGW_GATEWAY;
select * from SYS.MGW$_MQSERIES_LINKS;
select * from SYS.MGW_RECV_LOG_QT;
select * from SYS.MGW_SEND_LOG_QT;
 
 
No comments:
Post a Comment