Краткий обзор редактирования версионных данных с использованием SQL
Чтобы отредактировать версионные данные с помощью SQL-клиента, необходимо редактировать именно версионный вид данных, а не саму рабочую (базовую) таблицу. Версионные таблицы используют для записи изменений две связанные таблицы: таблицу добавлений и удалений (все вместе называемые дельта-таблицами). При редактировании версионных видов таблицы изменения записываются в таблицы добавлений и удалений. Прямое редактирование рабочей таблицы нарушает эти правила и может привести к появлению несвязанных записей и потере данных.
При выполнении SQL-запроса, изменяющего данные в версионном виде, для каждого типа запросов в базе данных происходит следующее:*
- Insert (Вставка). В таблицу добавлений, связанную с рабочей таблицей, добавляется запись, а идентификатор объекта для новой записи генерируется автоматически.
- Update (Обновление). Эта команда удаляет исходную запись и добавляет новую, содержащую уже новую информацию. Следовательно, при выполнении команды Update (Обновление) в каждую из таблиц, связанных с рабочей, добавляется по одной записи: и в таблицу добавлений и в таблицу удалений.
- Delete (Удалить). Добавляется запись в дельта-таблицу основной таблицы.
*Если редактирование версии DEFAULT (DEFAULT) производится в тот момент, когда она указывает на нулевое состояние, все результаты редактирования немедленно переносятся в основную таблицу.
Имейте в виду, что при выполнении редактирования средствами SQL синхронизация внутренней версии не производится. Следовательно, после завершения редактирования нужно выполнить синхронизацию изменений с родительской версией с помощью ArcGIS for Desktop или скрипта на языке Python.
Модели редактирования
Можно создать новую именованную версию базы геоданных и редактировать ее. Или можно напрямую редактировать версию DEFAULT. Какой именно способ выбрать, зависит от требований в вашей ситуации. Чтобы добиться оптимальной производительности и масштабируемости, очень важно выбрать подходящую модель: либо редактирование именованной версии, либо редактирование версии DEFAULT (DEFAULT).
Редактирование именованной версии
Создавать именованную версию (для редактирования версий видов средствами SQL) стоит в тех случаях, когда в вашей ситуации выполняется любое из перечисленных условий.
- Несколько редакторов меняют одни и те же данные.
- Необходим хорошо организованный процесс управления качеством.
- Не требуется, чтобы изменения были доступны другим пользователям немедленно: они будут храниться отдельно, пока вы не выполните согласование и не опубликуете их.
- Версионные классы пространственных объектов, которые нужно редактировать, используют формат хранения геометрии SDEBINARY или OGCWKB в базе данных SQL Server или Oracle.
- Версионные классы пространственных объектов или таблицы, которые нужно редактировать, зарегистрированы как версионные с опцией переноса результатов редактирования в базу.
При редактировании через версионные виды, результаты редактирования записываются в таблицы добавлений и удалений. Результаты редактирования записываются в текущее состояние, соответствующее именованной версии.
Чтобы отредактировать данные в именованной версии, нужно выполнить перечисленные ниже шаги именно в таком порядке:
- Создайте версионный вид для версионной таблицы или класса пространственных объектов (если такого вида еще нет).
- Создайте версию базы геоданных, которую вы будете редактировать.
- Чтобы указать, к какой именно версии вы хотите получить доступ, используйте процедуру set_current_version (Указать текущую версию). Это действие привязывает сеанс редактирования к данному состоянию именованной версии и блокирует версию.
- Начните сеанс редактирования с выполнения процедуры Редактировать версию (edit version) или другой подходящей для вашей базы данных функции.
- Отредактируйте данные в версионном виде с помощью SQL.
- Примените изменения к базе данных или отмените их.
- Завершите сеанс редактирования выполнением процедуры Редактировать версию (edit version) или другой подходящей для вашей базы данных функции.
- Согласуйте и отправьте ваши изменения через ArcGIS.
- Когда все изменения будут отправлены через 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 через версионный вид. Выполните следующие действия:
- Создайте версионный вид для версионной таблицы или класса пространственных объектов (если такого вида еще нет). Примечание:
Если версионный вид создан в более ранней версии, чем ArcGIS 10.1, нужно обязательно создать его заново. Старые версионные виды нельзя редактировать в версии DEFAULT.
- Отредактируйте данные в версионном виде с помощью SQL. Вы автоматически будете редактировать текущее состояние версии DEFAULT.
- Примените изменения к базе данных или отмените их. Лучше всего применять или отменять изменения после каждого редактирования, пока ваша транзакция открыта, а блокировки держат записи дельта-таблиц. Блокировка действует до завершения транзакции.