HOW TO
Die SDE.STATE_LINEAGES-Tabelle wird analysiert, wenn die Tabelle während der ArcSDE-Installation oder eines Upgrades erstellt wird. Ab diesem Zeitpunkt analysiert ArcSDE die Tabelle nicht, sondern der DBA ist dafür zuständig.
Wenn die Datenbank in einer Produktionsumgebung verwendet wird, kann die Anzahl an Zeilen in der Tabelle erheblich zunehmen.
Sind die Datenbankstatistiken für die Tabelle nicht aktuell und genau, wählt der Oracle-Optimierer möglicherweise einen Ausführungsplan zum Abrufen von Zeilen aus, der nicht optimal ist. Das kann sich negativ auf alle Versionsabfragen auswirken, da die Abfrage eine Auswahl in der Tabelle vornimmt, um die Lineage für eine Version zu ermitteln. Daher muss die state_lineages-Tabelle je nach Häufigkeit der Bearbeitungsoperationen während des Tages möglicherweise täglich analysiert werden.
Die Lösung besteht darin, einen Oracle-Datenbankauftrag zu verwenden, der die Tabelle in Zeiten mit geringer Auslastung analysiert.
Stellen Sie sicher, dass ein SNP-Prozess läuft, um Aufträge in der Warteschlange im Hintergrund auszuführen. SNP-Prozesse werden regelmäßig aktiviert und führen Aufträge in der Warteschlange aus. SNP-Hintergrundprozesse unterscheiden sich von anderen Oracle-Hintergrundprozessen dahingehend, dass der Fehler eines SNP-Prozesses nicht dazu führt, dass die Instanz fehlschlägt. Schlägt ein SNP-Prozess fehl, startet Oracle ihn neu.
SNP-Hintergrundprozesse führen keine Aufträge aus, wenn das System im eingeschränkten Modus gestartet wurde. Sie können diese Verhalten jedoch mit der ALTER SYSTEM-Anweisung wie folgt aktivieren und deaktivieren:
Code:
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM DISABLE RESTRICTED SESSION;
Zur Erstellung des Datenbankauftrags müssen zwei Schritte ausgeführt werden: das Erstellen der gespeicherten Prozedur, die vom Auftrag ausgeführt werden soll, und das Erstellen des Auftrags, der die Prozedur ausführt.
In SQL*Plus erstellen Sie als SDE-Benutzer die gespeicherte Prozedur, die der Datenbankauftrag ausführt:
Code:
CREATE OR REPLACE PROCEDURE s_lineage_analyze IS
sqlstm VARCHAR2(64);
BEGIN
sqlstm := 'ANALYZE TABLE state_lineages COMPUTE STATISTICS';
EXECUTE IMMEDIATE sqlstm;
END;
/
Sie können die neue gespeicherte Prozedur einfach ausführen, wenn die Statistiken der Tabelle aktualisiert werden müssen.
Code:
EXECUTE s_lineage_analyze;
Code:
VARIABLE jobno number;
Code:
BEGIN
DBMS_JOB.SUBMIT
(:jobno,
'sde.s_lineage_analyze;',
trunc(sysdate) + 1,
'SYSDATE + 1');
COMMIT;
END;
/
Nach dem Senden können Sie den Wert der jobno-Variablen drucken.
Code:
PRINT jobno;
Code:
EXECUTE dbms_job.run(jobno);
Alternativ können Sie aus "user_jobs" die relevanten Informationen für den Auftrag auswählen:
Code:
SELECT job, next_date, interval, failures, broken FROM user_jobs;
Hinweis:
Dieser Artikel stammt teilweise aus der Oracle-Dokumentation. Er soll die Oracle-Dokumentation nicht ersetzen. Weitere Informationen und Erläuterungen finden Sie in der Oracle-Dokumentation.
Hilfe von ArcGIS-Expert*innen erhalten
Die Esri Support-App herunterladen