Тьфу. Відповідь справді складна, що вимагає багато ArcSDE фону, тому я постараюся бути якомога коротшим.
Примітка. Я звернусь до деяких діаграм із надзвичайного білого паперу для версій, який ви можете знайти на веб-сайті ESRI . Якщо ви маєте справу з версіями, я настійно рекомендую вам це прочитати.
Потім вам потрібно зрозуміти, яка взаємозв'язок між станом (тобто вузлом із дерева стану) та названою версією (тобто міткою, що вказує на стан).
Типова база даних може виглядати як діаграма стану нижче:
Тут у базі даних є чотири версії (Версія A, Версія B, Версія C та DEFAULT). Але, можливо, я трохи випереджаю себе. Почнемо з того, що таке держава .
Ви можете думати про стан як про "транзакцію" - логічну одиницю, яка містить кілька змін до однієї - або багатьох - таблиць. Він може включати дві вставки до "FeatureClass A", видалення з "Класу особливостей B" та зміну (фактично видалення + вставка) на "Клас особливості X". Всі згруповані в одне ціле.
Давайте розглянемо невелику, просту діаграму стану ArcSDE, яка починається з ідентифікатора стану 0:
Якщо ви починаєте з стану 0 і ви редагуєте одну або декілька таблиць під час операції редагування, ви створите дочірній стан 1 і зробите для цього поточний ідентифікатор активного стану . Наступна група редагувань створить дочірній стан 2. Якщо ви хочете скасувати скасування, вам не потрібно жодним чином змінювати ідентифікатор стану - все, що вам потрібно зробити, це змінити поточний ідентифікатор активного стану на 1 або 0 (залежно як далеко ти хочеш піти). Повтор - це навпаки - просто перемістіть поточний ідентифікатор активного стану вперед - настільки далеко, як ви хочете піти.
Ось як працює скасування / повторення у версії ArcSDE.
Гаразд, рухаємось далі. Скажіть, що ви хочете зробити редагування постійним (тобто, ви хочете зберегти). Що ти маєш зробити? Ну, заощадження - це просто захопити мітку версії та перенести її вперед до певного стану. Вигляд ніби відбиває її штампом і каже: "Ось як має виглядати Версія А". Тож якщо ви оглянетеся на першу діаграму, то побачите, що вона має чотири названі версії .
- Версія B вказує на ідентифікатор стану 1
- Версія A вказує на стан id 3
- Версія C вказує на ідентифікатор стану 5
Версія "SDE.DEFAULT" вказує на ідентифікатор стану 4
Зверніть увагу , що ця схема, незважаючи на поширену думку, не говорить вам нічого про логічних відносинах батько-дитина , що у них є. Логічні відносини батько-дитина для першої діаграми можуть виглядати так:
Це стосунки батько-дитина, які ви бачите в ArcMap / ArcCatalog. Його мета полягає в обмеженні версій, з якими можна узгодити. У цей момент ви могли (по праву) запитати себе, навіщо, чортве, мені це потрібно? Відповідь полягає у версії робочих процесів . Виявляється, люди користуються версіями вже досить давно, і є декілька бажаних способів їх структурування, але це тема для іншого дня, оскільки я хочу відповісти на ваше запитання сьогодні :)
Жити далі...
Гаразд, і що ще роблять ці названі версії? Ну, вони впливають на те, як поводиться цей процес, який називається компресом .
Стиснення полягає в захопленні проміжних станів, які можуть не знадобитися, та видаленні зайвих, а також їх поєднанні. Ви можете запустити операцію стиснення ArcSDE через ArcCatalog, налаштувати службу, яка робить це кожного за деякий час, а деякі операції редагування ArcMap запускають операції міні-стиснення (тобто лише для невеликих гілок, які використовуються).
Діаграма зліва показує дерево стану перед тим, як воно стискається, а те, що знаходиться праворуч, показує його право після стиснення:
Важлива концепція, яку потрібно зрозуміти (до якої я звернуся, як тільки я нарешті дістану відповідь на ваше запитання), - це те, що кожен штат є потенційним кандидатом для стиснення - за винятком станів, на яких вказані мітки (тобто названі версії).
Ви можете бачити, що перед стисненням є кілька зайвих - непотрібних станів. Насправді всю [3,4,5] гілку видалили. Якби в 5 була названа версія, кінцевий результат був би зовсім іншим.
Операції стиснення існують для економії місця у вашій базі даних, видаляючи записи, які вам більше не потрібні.
Гаразд, рухаємось далі.
Остання концепція, яку потрібно зрозуміти, - це узгодження - це ефективно злиття двох гілок в одну.
Тому повернемося до нашої найпершої діаграми. Скажіть, що ви хочете узгодити Версію A з SDE.DEFAULT.
Давайте резюмуємо: чотири названі версії, що вказують на різні ідентифікатори стану. Отже, перше, що нам потрібно зробити, - це створити дочірню державу під цільовою версією, тому ми створимо дочірню державу під станом id 4, у нашому прикладі я називаю цей стан id 20.
Наступним кроком є підрахунок різниць між обома версіями (деталі занадто довгі для цієї посади, але я можу сказати вам, що вони зроблені з курсорами різниці ), а потім застосувати ці відмінності до цього нового стану id 20 (синя лінія).
Скажіть, що ви вирішили зробити більше змін, або що ви знайшли конфлікти і вибираєте рядки з однієї чи іншої версії. Це не має значення. Це лише нові редагування, які виконуються в межах операції редагування, як дочірня заявка під гілкою, яку ви об’єднали. У цьому прикладі я здійснив ще дві послідовні групи змін після примирення.
Прекрасна.
Тому зараз скажіть, що ви готові " опублікувати " версію. Що це означає? Це просто захопити мітки та вказати їх на той самий ідентифікатор стану. Тут я збираюся опублікувати Версію A на SDE.DEFAULT. Ось як це виглядає:
ТАДААА! Отже, версії A і SDE.DEFAULT вказують на один ідентичний стан стану, і таким чином вони виглядають однаково.
Отже, в даний час я можу , нарешті , відповісти на ваше запитання.
Чи можете ви скасувати публікацію? Документація ArcGIS скаже вам " ні" - не поспішайте з цим. Не робіть цього, тому що ви будете возитися з цією логікою, і якщо ви не знаєте, що робите, ви можете зіпсувати свої дані.
Але насправді, все, що потрібно, - це зробити одне оновлення однієї з таблиць версій ArcSDE - таблиці VERSIONS та змінити запис мітки (він же названа версія). У нашому прикладі вкажіть на ідентифікатор стану 21, і ви просто скасували всю операцію редагування. Встановіть його на 3, і ви просто відміните все узгодження. Встановіть його на 5, і тепер ви перебуваєте в зовсім іншому місці. Існують чи немає конфліктів - не має значення.
Звичайно, це передбачає, що компресу не відбулося. Розглянемо випадок, коли стиснення відбувається прямо в той самий час, коли ви оновлюєте таблицю SDE. Пам'ятайте, якщо ви - або хтось інший - виконує стиснення після публікації, це виглядає дерево:
Чи можете ви скасувати примирення після компресу? Ну, в цьому випадку - ні . Компрес здув всю цю гілку, тому ви не можете скасувати - ці дані видалено. Якби на цій гілці була інша названа версія, тоді компрес не знищив би її. Я сподіваюся, що до цього часу це має сенс.
То ви повинні це зробити? Якщо ви не знаєте, що ви робите, ви можете легко втратити дані після стиснення.