Oracle Text Scheduling-Sync auf einzelnen Index
-
28-09-2019 - |
Frage
Ich brauche ein Orakel Textindex zu synchronisieren. Aber Auftrag nicht erstellen:
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'alter index NAME_IDX rebuild parameters (''sync'');',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
oder zu laufen:
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'CTX_DDL(''NAME_IDX'');',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
Aber wenn ich eine dieser Arbeiten auszuführen:
alter index NAME_IDX rebuild parameters ('sync');
call CTX_DDL('NAME_IDX');
Jede Idee, die richtige Syntax?
Danke.
PD: Ive gesucht, aber die einzige Antwort fand ich meine Anforderungen doesnt passen. Ich entschuldige mich auch für mein Englisch.
Lösung
Sie können einen anonymen Block laufen, AUFRUF nicht in PL / SQL ist, ALTER INDEX DDL ist, und Sie müssen angeben, welche Verfahren in CTX_DDL Sie ausführen möchten:
WHAT => 'BEGIN EXECUTE IMMEDIATE ''alter index NAME_IDX rebuild parameters (''''sync'''')''; CTX_DDL.sync_index(''NAME_IDX''); END',
Allerdings persönlich ziehe ich es in einem Verfahren zur Einkapselung (oder, noch besser, ein Paket) und rufen Sie die Prozedur aus dem Job:
CREATE PROCEDURE rebuild_name_idx IS
BEGIN
EXECUTE IMMEDIATE 'alter index NAME_IDX rebuild parameters (''sync'')';
CTX_DDL.sync_index('NAME_IDX');
END;
/
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'rebuild_name_idx;',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
Auch, ich bin ziemlich sicher, dass Sie tatsächlich den Index nicht wieder aufbauen müssen -. Sie nur auf Anruf CTX_DDL.sync_index
müssen sie von jedem DML auf die Tabelle aktualisieren