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;