Manual MQ_REORG
search cancel

Manual MQ_REORG

book

Article ID: 95566

calendar_today

Updated On:

Products

CA Automic Workload Automation - Automation Engine

Issue/Introduction

A how-to article on how to disable the automatic MQREORG and manually run it from the Database during off peak hours.

When it appears the Automic Workload Automation slows down during the UC_Reorg process, an option is to disable it and run manually from the DB during off peak hours.

Environment

Release: Automic Workload Automation-Base Edition 12.x and 21.0.x 
Component: Automation Engine

Cause

Configuration

Resolution

1. Log in as the Admin in Client 0
2. Edit the UC_SYSTEM_SETTINGS
3. Disable the automatic MQ_REORG by setting the MQ_CHECK_TIME=0
4. Have the DBA run this stored procedure manually from the database during off peak hours:

Create 
OR 
replace PROCEDURE uc_reorg (v_table_name varchar2) AS v_row_move varchar2(30);v_tablespace    varchar2(30);v_assm          varchar2(30);v_seclob        varchar2(3);v_upper_table   varchar2(30);v_long_lock     varchar2(3) := 'NO';NO_LOCK_GRANTED exception;v_iot           varchar(30);PRAGMA exception_init(no_lock_granted, -54);BEGIN
  v_upper_table := upper(v_table_name); 
  begin 
    EXECUTE immediate 
      'alter session set ddl_lock_timeout = 10'; 
    exception 
  WHEN others THEN 
    dbms_output.put_line('Unable to set DDL_LOCK_TIMEOUT to 10 - '||sqlerrm); 
  end; 
  begin 
    SELECT row_movement, 
           tablespace_name, 
           iot_type 
    INTO   v_row_move, 
           v_tablespace, 
           v_iot 
    FROM   user_tables 
    WHERE  table_name = v_upper_table; 
     
    exception 
  WHEN others THEN 
    dbms_output.put_line('TABLE not found - '||sqlerrm); 
    v_row_move := 'DISABLED'; 
    v_tablespace := ''; 
  end; 
  if v_iot IS NULL THEN 
  BEGIN 
    SELECT segment_space_management 
    INTO   v_assm 
    FROM   user_tablespaces 
    WHERE  tablespace_name=v_tablespace; 
     
    exception 
  WHEN others THEN 
    dbms_output.put_line('TABLESPACE not found - '||sqlerrm); 
    v_assm := 'NONE'; 
  end; 
endIF;IF v_row_move = 'ENABLED' 
AND 
v_assm = 'AUTO' 
AND 
v_iot IS NULL then 
BEGIN 
  EXECUTE immediate 
    'alter table ' || v_upper_table ||' enable row movement'; 
  exception 
WHEN no_lock_granted THEN 
  dbms_output.put_line('ALTER TABLE failed due to no lock granted - '||sqlerrm); 
  v_long_lock := 'YES'; 
when others THEN 
  dbms_output.put_line('ALTER TABLE failed - '||sqlerrm); 
  v_long_lock := 'YES'; 
end;ENDIF;IF v_iot = 'IOT' 
AND 
v_long_lock = 'NO' then 
BEGIN 
  EXECUTE immediate 
    'alter table ' || v_upper_table || ' move ONLINE'; 
  exception 
WHEN others THEN 
  dbms_output.put_line('ALTER IOT TABLE MOVE failed - '||sqlerrm); 
end;ENDIF;IF v_row_move = 'ENABLED' 
AND 
v_assm = 'AUTO' 
AND 
v_long_lock = 'NO' then 
BEGIN 
  EXECUTE immediate 
    'alter table ' || v_upper_table || ' shrink space compact'; 
  exception 
WHEN others THEN 
  dbms_output.put_line('ALTER TABLE SHRINK SPACE COMPACT failed - '||sqlerrm); 
end;BEGIN 
  EXECUTE immediate 
    'alter table ' || v_upper_table || ' shrink space'; 
  exception 
WHEN others THEN 
  dbms_output.put_line('ALTER TABLE SHRINK SPACE failed - '||sqlerrm); 
END;BEGIN 
  SELECT securefile 
  INTO   v_seclob 
  FROM   user_lobs 
  WHERE  table_name = v_upper_table; 
   
  exception 
WHEN no_data_found THEN 
  v_seclob := 'YES'; 
when others THEN 
  dbms_output.put_line('TABLE not found - '||sqlerrm); 
  v_seclob := 'YES'; 
END;IF v_seclob = 'NO' then 
FOR a IN 
( 
       SELECT column_name 
       FROM   user_tab_cols 
       WHERE  table_name = v_upper_table 
       AND    data_type = 'BLOB' ) 
loop 
BEGIN 
  EXECUTE immediate 
    'alter table ' || v_table_name || ' modify lob (' || a.column_name || ') (shrink space)'; 
  exception 
WHEN others THEN 
  dbms_output.put_line('ALTER TABLE SHRINK LOB '|| a.column_name || ' failed - '||sqlerrm); 
end;END 
loop;ENDIF;ENDIF;BEGIN 
  EXECUTE immediate 
    'alter session set ddl_lock_timeout = 0'; 
  exception 
WHEN others THEN 
  dbms_output.put_line('Unable to set DDL_LOCK_TIMEOUT to 0 - '||sqlerrm); 
END;END;; 

Additional Information

This stored procedure can be found in the DB folder of an AE installation image -> uc_ddl.sql