Instrução
As instruções fornecidas descrevem como produzir a ordem de reconciliação recomendada usando SQL no Oracle. A saída da consulta é a ordem em que as versões devem ser reconciliadas com o sde. DEFAULT antes de executar uma compactação. Ao reconciliar as versões na ordem retornada pela consulta, ele permite que o comando compress mova quantas linhas forem necessárias de cada tabela delta de classe versionada para as tabelas base.
Usar a abordagem SQL é o mesmo que usar a interface ArcObjects IVersionedWorkspace2::RecommendedReconcileOrder para obter uma enumeração de nomes de versão.
A criação de uma tabela temporária global e um procedimento armazenado, bem como a execução de uma instrução SQL, é necessária para retornar a lista de versões na ordem de reconciliação recomendada.
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
As versões devem então ser reconciliadas com o ArcGIS em relação à versão DEFAULT. Para cada versão reconciliada, mais linhas serão movidas das tabelas delta para as tabelas base.
ID do Artigo: 000010376
Obtenha ajuda de especialistas do ArcGIS
Baixe o Aplicativo de Suporte da Esri