Краткий обзор редактирования версионных данных с использованием SQL

Чтобы отредактировать версионные данные с помощью SQL-клиента, необходимо редактировать именно версионный вид данных, а не саму рабочую (базовую) таблицу. Версионные таблицы используют для записи изменений две связанные таблицы: таблицу добавлений и удалений (все вместе называемые дельта-таблицами). При редактировании версионных видов таблицы изменения записываются в таблицы добавлений и удалений. Прямое редактирование рабочей таблицы нарушает эти правила и может привести к появлению несвязанных записей и потере данных.

При выполнении SQL-запроса, изменяющего данные в версионном виде, для каждого типа запросов в базе данных происходит следующее:*

*Если редактирование версии DEFAULT (DEFAULT) производится в тот момент, когда она указывает на нулевое состояние, все результаты редактирования немедленно переносятся в основную таблицу.

Имейте в виду, что при выполнении редактирования средствами SQL синхронизация внутренней версии не производится. Следовательно, после завершения редактирования нужно выполнить синхронизацию изменений с родительской версией с помощью ArcGIS for Desktop или скрипта на языке Python.

Модели редактирования

Можно создать новую именованную версию базы геоданных и редактировать ее. Или можно напрямую редактировать версию DEFAULT. Какой именно способ выбрать, зависит от требований в вашей ситуации. Чтобы добиться оптимальной производительности и масштабируемости, очень важно выбрать подходящую модель: либо редактирование именованной версии, либо редактирование версии DEFAULT (DEFAULT).

Редактирование именованной версии

Создавать именованную версию (для редактирования версий видов средствами SQL) стоит в тех случаях, когда в вашей ситуации выполняется любое из перечисленных условий.

  • Несколько редакторов меняют одни и те же данные.
  • Необходим хорошо организованный процесс управления качеством.
  • Не требуется, чтобы изменения были доступны другим пользователям немедленно: они будут храниться отдельно, пока вы не выполните согласование и не опубликуете их.
  • Версионные классы пространственных объектов, которые нужно редактировать, используют формат хранения геометрии SDEBINARY или OGCWKB в базе данных SQL Server или Oracle.
  • Версионные классы пространственных объектов или таблицы, которые нужно редактировать, зарегистрированы как версионные с опцией переноса результатов редактирования в базу.

При редактировании через версионные виды, результаты редактирования записываются в таблицы добавлений и удалений. Результаты редактирования записываются в текущее состояние, соответствующее именованной версии.

Чтобы отредактировать данные в именованной версии, нужно выполнить перечисленные ниже шаги именно в таком порядке:

  1. Создайте версионный вид для версионной таблицы или класса пространственных объектов (если такого вида еще нет).
  2. Создайте версию базы геоданных, которую вы будете редактировать.
  3. Чтобы указать, к какой именно версии вы хотите получить доступ, используйте процедуру set_current_version (Указать текущую версию). Это действие привязывает сеанс редактирования к данному состоянию именованной версии и блокирует версию.
  4. Начните сеанс редактирования с выполнения процедуры Редактировать версию (edit version) или другой подходящей для вашей базы данных функции.
  5. Отредактируйте данные в версионном виде с помощью SQL.
  6. Примените изменения к базе данных или отмените их.
  7. Завершите сеанс редактирования выполнением процедуры Редактировать версию (edit version) или другой подходящей для вашей базы данных функции.
  8. Согласуйте и отправьте ваши изменения через ArcGIS.
  9. Когда все изменения будут отправлены через ArcGIS в родительскую версию, можно будет удалить ту версию, которую вы создавали (в версионном виде) для редактирования.

Редактирование версии DEFAULT (DEFAULT)

Редактировать версию DEFAULT (DEFAULT) средствами SQL стоит в тех случаях, когда в вашей ситуации выполняется одно или несколько из перечисленных ниже условий.

  • Требуемые изменения относятся к типу коротких транзакций.
  • Вам нужно, чтобы изменения, выполняемые через версионный вид, были доступны другим пользователям немедленно.
  • При редактировании версионных классов пространственных объектов для хранения геометрии в базе данных SQL используется пространственный формат, а не формат SDEBINARY или OGCWKB.
  • Таблица классов объектов, которую нужно редактировать, не зарегистрирована как версионная с опцией переноса результатов редактирования в базу.

При редактировании версии DEFAULT результаты редактирования записываются в дельта-таблицы точно так же, как при редактировании именованной версии. Однако, при редактировании версии DEFAULT любой, кто просматривает вид версии DEFAULT, может увидеть внесенные вами изменения.

Каждая операция вставки, обновления и удаления записывается в текущее состояние соответствующей версии DEFAULT. Если версия DEFAULT ссылается на нулевое состояние, каждое изменение применяется непосредственно к версионной таблице или таблице класса пространственных объектов. Когда другой пользователь редактирует версию DEFAULT, она обновляется, чтобы ссылаться на новое состояние. Если такое происходит в процессе выполнения транзакции, в ходе которой к версии DEFAULT применяется серия изменений, результаты редактирования записываются в состояние версии DEFAULT в момент их окончательного применения.

Как только результаты редактирования будут применены, они сразу же станут доступными для:

  • пользователей или приложений, работающие с версионной таблицей и версией DEFAULT;
  • пользователей или приложений, работающих с дочерней версией, имеющей статус родства с текущим состоянием версии DEFAULT.
Более подробноБолее подробно:

В случаях когда строка, изменяемая в версии DEFAULT через версионный вид, была также изменена другой версией в состоянии, зависящем от текущего состояния версии DEFAULT, версионный вид создает новое состояние базы геоданных, обновляет версию DEFAULT так, чтобы она соответствовала новому состоянию, и только после этого выполняет редактирование. Это необходимо для того, чтобы обеспечить защиту от перезаписи изменяемой строки (которая также изменилась в состоянии, зависящем от текущего состояния версии DEFAULT) при выполнении операции сжатия, или при согласовании версии производного состояния с версией DEFAULT.

Не следует задавать версию или начинать сеанс редактирования, если вам необходимо редактировать данные в базе геоданных DEFAULT через версионный вид. Выполните следующие действия:

  1. Создайте версионный вид для версионной таблицы или класса пространственных объектов (если такого вида еще нет).
    ПримечаниеПримечание:

    Если версионный вид создан в более ранней версии, чем ArcGIS 10.1, нужно обязательно создать его заново. Старые версионные виды нельзя редактировать в версии DEFAULT.

  2. Отредактируйте данные в версионном виде с помощью SQL. Вы автоматически будете редактировать текущее состояние версии DEFAULT.
  3. Примените изменения к базе данных или отмените их. Лучше всего применять или отменять изменения после каждого редактирования, пока ваша транзакция открыта, а блокировки держат записи дельта-таблиц. Блокировка действует до завершения транзакции.

Связанные темы

12/10/2012