Oracle-to-Oracle Database Resynchronization Script

Use a maintenance user ID in the replicate Oracle to apply this script which replaces the hds_oracle_new_setup_ for_replicate.sql script.

drop table rs_info; 
commit;
 
create table rs_info (rskey varchar2 (20), rsval varchar2 (20));
commit;

insert into rs_info values ('charset_name', 'iso_1');
commit;
 
insert into rs_info values ('sortorder_name', 'bin_iso_1'); 
commit; 

drop public synonym rs_lastcommit;
commit;

drop table rs_lastcommit;
commit;
 
create table rs_lastcommit( 
		origin number(8),origin_qid char(72 byte),
		secondary_qid char(72 byte),  
		origin_time date,
		dest_commit_time date,
		conn_id number default 0);
commit;

grant all on rs_lastcommit to public;
commit;

create public synonym rs_lastcommit for rs_lastcommit;
commit;

CREATE OR REPLACE PROCEDURE RS_UPDATE_SEQUENCE
(
	SequenceName VARCHAR2,
	SequenceValue NUMBER,
	Increment NUMBER
) 
AS 
	CurrentID NUMBER; 
	LastID NUMBER; 
	SeqCursor INTEGER; 
	SQLStmt VARCHAR2(1024); 
	Result NUMBER;
BEGIN 
	SQLStmt := 'SELECT ' || SequenceName || '.NEXTVAL FROM DUAL'; 
	SeqCursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(SeqCursor,
							 SQLStmt,
							 DBMS_SQL.NATIVE);
	DBMS_SQL.DEFINE_COLUMN(SeqCursor, 
				   1, 
				   LastID); 
	Result := DBMS_SQL.EXECUTE_AND_FETCH(SeqCursor); 
	DBMS_SQL.COLUMN_VALUE(SeqCursor,1,CurrentID);
	LOOP 
		IF ( Increment < 0 ) THEN 
			EXIT WHEN CurrentID <= SequenceValue;  
			EXIT WHEN CurrentID > LastID; 
		ELSE  
			EXIT WHEN CurrentID >= SequenceValue;
			EXIT WHEN CurrentID < LastID; 
		END IF;
		LastID := CurrentID; 
		Result := DBMS_SQL.EXECUTE_AND_FETCH(SeqCursor); 
		DBMS_SQL.COLUMN_VALUE(SeqCursor,1,CurrentID);
	END LOOP;
	DBMS_SQL.CLOSE_CURSOR(SeqCursor);
END; 
/

grant all on RS_UPDATE_SEQUENCE to public;
commit;

DROP sequence rs_ticket_seq;

CREATE sequence rs_ticket_seq;

Drop table rs_ticket_history;

CREATE TABLE rs_ticket_history (
		cnt numeric(8,0), 
		h1 varchar(10), 
		h2 varchar(10), 
		h3 varchar(10), 
		h4 varchar(50), 
		pdb varchar(30), 
		prs varchar(30), 
		rrs varchar(30), 
		rdb varchar(30), 
		pdb_t varchar(128), 
		exec_t varchar(128), 
		dist_t varchar(128), 
		rsi_t varchar(128), 
		dsi_t varchar(128), 
		rdb_t varchar(128) default current_date, 
		exec_b numeric(22,0), 
		rsi_b numeric(22,0), 
		dsi_tnx numeric(22,0), 
		dsi_cmd numeric(22,0), 
		ticket varchar(1024),  
		conn_id number NULL); 
	 
create unique index rs_ticket_idx on rs_ticket_history(cnt); 
 
create or replace trigger rs_ticket_tri  
before insert on rs_ticket_history  for each row  
begin  
	if :new.cnt  is null then 
		select rs_ticket_seq.nextval into :new.cnt  from dual; 
	end if;
end rs_ticket_tri;
/

grant all on rs_ticket_history to public;
commit;

create or replace package RS_TRIGGER_CONTROL 
as 
	procedure ENABLE; 
	function IS_ENABLED 
		return boolean; 
	end; 
/

create or replace package body RS_TRIGGER_CONTROL 
as 
	fire_trigger   boolean := TRUE; 
	function IS_ENABLED return boolean as 
	begin 
		if fire_trigger then 
			return FALSE;  
		else 
			return TRUE;  
		end if; 
	end IS_ENABLED; 
 
procedure ENABLE  
as  
	begin  
		fire_trigger := FALSE; 
	end ENABLE;  
	 
procedure DISABLE  
as 
	begin  
		fire_trigger := TRUE;  
	end DISABLE;  
end RS_TRIGGER_CONTROL; 
/ 
 
grant all on rs_trigger_control to public;
 
drop public SYNONYM rs_trigger_control;
 
create public SYNONYM rs_trigger_control for rs_trigger_control;
commit; 
 
CREATE OR REPLACE PROCEDURE rs_send_repserver_cmd(rs_api IN VARCHAR2) 
AS  
	cmd VARCHAR2 (4000); 
	plsql_block VARCHAR2(50);  
	BEGIN 
		if (instr(lower(rs_api), 'rs_rcl') > 0) then  
			DBMS_OUTPUT.put_line('The Replication Server command should not contain the keyword ''rs_rcl''');  
			return;  
		end if;  
		cmd := 'rs_rcl ''' ||  replace(rs_api, '''', '''''')  || ''' rs_rcl';  
		if ('rs_rcl' !=  substr(cmd, length(cmd) - 5)) then 
			DBMS_OUTPUT.put_line('The Replication Server command is too long.');   
			DBMS_OUTPUT.put_line('Please split it into two or more commands');  
			return;  
		end if;  
		plsql_block := 'begin rs_marker(:a); end;';  
		EXECUTE IMMEDIATE plsql_block USING cmd;  
	END;  
/ 
 
drop public SYNONYM rs_send_repserver_cmd; 
 
create public SYNONYM rs_send_repserver_cmd for rs_send_repserver_cmd;
commit;