Краткий обзор редактирования версионных данных с использованием 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) средствами SQL стоит в тех случаях, когда в вашей ситуации выполняется одно или несколько из перечисленных ниже условий.

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

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

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

Например, если версия DEFAULT обновляется клиентом ArcGIS в то время, как в нее вносятся изменения в версионном представлении, может оказаться, что изменения, сделанные в версионном представлении, будут относиться к нескольким состояниям.

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

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

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

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

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

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

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

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

9/11/2013