Instrução

Como relatar a ordem de reconciliação recomendada usando SQL no Oracle

Last Published: October 11, 2024

Descriçã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.

Solução ou Solução Provisória

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.
  1. Crie a tabela temporária global que será usada pelo procedimento armazenado para registrar o state_id de cada versão e o valor de state_id ancestral comum.

    Descarte a tabela version_order, se ela já existir.
SQL> DROP TABLE version_order;
DROP TABLE version_order
*
ERROR at line 1:
ORA-00942: table or view does not exist
  1. Crie a tabela temporária global.
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.
  1. Crie o procedimento armazenado common_ancestor_exe.
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;
/
  1. Execute o procedimento armazenado e consulte a tabela temporária global para gerar a ordem de reconciliação recomendada.
EXEC sde.common_ancestor_exe;

PL/SQL procedure successfully completed.
  1. Execute a instrução SQL a seguir, que retorna o proprietário e o nome de cada versão com base na ordem de reconciliação recomendada.
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

Receba notificações e encontre soluções para problemas novos ou comuns

Obtenha respostas resumidas e soluções de vídeo do nosso novo chatbot de IA.

Baixe o Aplicativo de Suporte da Esri

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download