HOW TO
In den bereitgestellten Anweisungen wird beschrieben, wie die empfohlene Abgleichreihenfolge mithilfe von SQL in Oracle erstellt wird. Die Ausgabe der Abfrage ist die Reihenfolge, in der Versionen mit der "sde.Default-Version" vor dem Ausführen einer Komprimierung abgeglichen werden sollen. Durch den Abgleich der Versionen in der von der Abfrage zurückgegebenen Reihenfolge können mit dem Befehl "compress" so viele Zeilen wie nötig aus den Delta-Tabellen der einzelnen versionierten Klassen in die Basistabellen verschoben werden.
Die Verwendung des SQL-Ansatzes ist identisch mit der Verwendung der ArcObjects-Schnittstelle "IVersionedWorkspace2::RecommendedReconcileOrder" zum Abrufen einer Aufzählung von Versionsnamen.
Das Erstellen einer globalen temporären Tabelle und einer gespeicherten Prozedur sowie das Ausführen einer SQL-Anweisung ist erforderlich, um die Liste der Versionen in der empfohlenen Abgleichreihenfolge zurückzugeben.
Note:
The steps should be performed by the sde administrative user in SQL*Plus.
SQL> DROP TABLE version_order;
DROP TABLE version_order
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> CREATE GLOBAL TEMPORARY TABLE version_order (
2 owner VARCHAR2(32),
3 name VARCHAR2(64),
4 state_id NUMBER(38),
5 ca_state_id NUMBER(38))
6 ON COMMIT PRESERVE ROWS;
Table created.
CREATE OR REPLACE PROCEDURE common_ancestor_exe AS
CURSOR ver_list IS
SELECT name, owner, state_id
FROM sde.versions
WHERE name <> 'DEFAULT'
AND name NOT LIKE 'SYNC_%'
AND name NOT LIKE 'REP_CO_SYNC_%'
ORDER BY state_id;
default_id NUMBER;
default_lin NUMBER;
source_lin NUMBER;
common_ancestor_id NUMBER;
BEGIN
SELECT state_id, lineage_name INTO default_id, default_lin FROM sde.states WHERE state_id =
(SELECT state_id FROM sde.versions WHERE name = 'DEFAULT' AND owner = 'SDE');
DELETE FROM version_order;
FOR ver_info IN ver_list LOOP
SELECT lineage_name INTO source_lin FROM sde.states WHERE state_id = ver_info.state_id;
SELECT MAX(lineage_id) INTO common_ancestor_id FROM
(SELECT lineage_id FROM sde.state_lineages WHERE lineage_name = default_lin AND lineage_id <= default_id
INTERSECT
SELECT lineage_id FROM sde.state_lineages WHERE lineage_name = source_lin AND lineage_id <= ver_info.state_id);
IF common_ancestor_id < default_id THEN
INSERT INTO version_order VALUES (ver_info.owner, ver_info.name, ver_info.state_id, common_ancestor_id);
END IF;
END LOOP;
COMMIT;
END;
/
EXEC sde.common_ancestor_exe;
PL/SQL procedure successfully completed.
SQL> SELECT owner, name
2 FROM version_order
3 ORDER BY ca_state_id, state_id;
OWNER NAME
------------ --------------
RANDY REV_6847258
CHRIS REV_7019237
CLARE REV_7069544
LUCY REV_7043793
SUSAN REV_7069206
Die Versionen müssen dann mit ArcGIS gegen die Default-Version abgeglichen werden. Für jede abgeglichene Version werden weitere Zeilen aus den Delta-Tabellen in die Basistabellen verschoben.
Artikel-ID: 000010376
Unterstützung durch ArcGIS-Experten anfordern
Esri Support App herunterladen