Ugh. Odpowiedź jest naprawdę skomplikowana i wymaga dużo tła ArcSDE, więc postaram się być jak najkrócej.
Uwaga Odwołam się do niektórych diagramów z super niesamowitej białej księgi wersji, którą można znaleźć na stronie ESRI . Jeśli masz do czynienia z wersjonowaniem, bardzo zachęcam do lektury.
Następnie musisz zrozumieć, jaki jest związek między stanem (tj. Węzłem z drzewa stanów) a nazwaną wersją (tj. Etykietą wskazującą na stan).
Typowa baza danych może wyglądać jak na poniższym diagramie stanu:
Tutaj masz cztery wersje w bazie danych (wersja A, wersja B, wersja C i DOMYŚLNE). Ale może trochę wyprzedzam. Zacznijmy od stanu .
Możesz myśleć o stanie jak o „transakcji” - logicznej jednostce, która zawiera kilka edycji jednej lub wielu tabel. Może zawierać dwie wstawki do „FeatureClass A”, usunięcie z „Feature Class B” i modyfikację (w rzeczywistości usunięcie + insert) do „Feature Class X”. Wszystko zgrupowane w jednym.
Spójrzmy na mały, prosty diagram stanu ArcSDE, który zaczyna się od stanu id 0:
Jeśli zaczniesz od stanu 0 i dokonasz edycji jednej lub wielu tabel w operacji edycji, utworzysz stan podrzędny 1 i uczynisz go bieżącym identyfikatorem stanu aktywnego . Kolejna kolejna grupa edycji utworzy stan podrzędny 2. Jeśli chcesz cofnąć, nie musisz w żaden sposób modyfikować identyfikatora stanu - wystarczy zmienić bieżący stan aktywnego identyfikatora na 1 lub 0 (w zależności jak daleko chcesz się cofnąć). Ponowienie jest odwrotne - wystarczy przesunąć bieżący identyfikator aktywnego stanu do przodu - tak daleko, jak chcesz.
Tak działa cofanie / ponawianie w wersjach ArcSDE.
OK, idziemy dalej. Powiedz, że chcesz zrobić edycję na stałe (tzn. Chcesz zapisać). Co masz do zrobienia? Oszczędność polega tylko na pobraniu etykiety wersji i przeniesieniu jej do określonego stanu. Coś w rodzaju wytłoczenia go i powiedzenia „tak musi wyglądać wersja A”. Więc jeśli spojrzysz wstecz na pierwszy schemat, zobaczysz, że ma on cztery nazwane wersje .
- Wersja B wskazuje na stan id 1
- Wersja A wskazuje na stan id 3
- Wersja C wskazuje na stan id 5
Wersja „SDE.DEFAULT” wskazuje na stan id 4
Pamiętaj, że ten schemat, pomimo powszechnego przekonania, nie mówi ci nic o logicznej relacji rodzic-dziecko. Logiczna relacja rodzic-dziecko dla pierwszego diagramu może wyglądać tak:
Jest to relacja rodzic-dziecko widoczna w ArcMap / ArcCatalog. Jego celem jest ograniczenie wersji, z którymi można się pogodzić. W tym momencie możesz (słusznie) zadać sobie pytanie, dlaczego, do diabła, potrzebuję tego? Odpowiedź leży w przepływie pracy wersji . Okazuje się, że ludzie używają wersjonowania już od dłuższego czasu i istnieją pewne preferowane sposoby ich strukturyzacji, ale to temat na kolejny dzień, ponieważ chcę dziś odpowiedzieć na twoje pytanie :)
Iść dalej...
OK, więc co jeszcze robią te nazwane wersje? Wpływają na to, jak zachowuje się ten proces zwany kompresją .
Kompresja polega na przechwytywaniu stanów pośrednich, które mogą nie być konieczne, usuwaniu niepotrzebnych oraz łączeniu ich. Możesz uruchomić operację kompresji ArcSDE poprzez ArcCatalog, skonfigurować usługę, która robi to co jakiś czas, a niektóre operacje edycji ArcMap wyzwalają operacje mini-kompresji (tj. Tylko w przypadku małych oddziałów, które są używane).
Schemat po lewej pokazuje drzewo stanu przed jego skompresowaniem, a ten po prawej pokazuje je zaraz po skompresowaniu:
Ważną koncepcją, którą należy zrozumieć (do której odniosę się, gdy w końcu będę mógł odpowiedzieć na twoje pytanie), jest to, że każdy stan jest potencjalnym kandydatem do skompresowania - z wyjątkiem stanów, które wskazują na nie etykiety (tj. Nazwane wersje).
Widać, że przed kompresem występują dodatkowe - niepotrzebne stany. W rzeczywistości cała gałąź [3,4,5] została usunięta. Gdyby istniała nazwana wersja na 5, wynik końcowy byłby zupełnie inny.
Operacje kompresji pozwalają zaoszczędzić miejsce w bazie danych poprzez usunięcie rekordów, których już nie potrzebujesz.
OK, idziemy dalej.
Ostatnią koncepcją, którą musisz zrozumieć, jest uzgadnianie - które skutecznie łączy dwie gałęzie w jedną.
Wróćmy więc do naszego pierwszego schematu. Powiedz, że chcesz pogodzić wersję A z SDE.DEFAULT.
Podsumujmy: cztery nazwane wersje wskazujące na różne identyfikatory stanu. Pierwszą rzeczą, którą musimy zrobić, jest utworzenie stanu potomnego pod wersją docelową, więc tworzymy stan potomny pod stanem id 4, w naszym przykładzie nazywam ten stan id 20.
Następnym krokiem jest obliczenie różnic między obiema wersjami (szczegóły są za długie dla tego postu, ale mogę powiedzieć, że zostały one wykonane za pomocą kursorów różnic ), a następnie zastosowanie tych różnic do tego nowego stanu id 20 (niebieska linia).
Powiedz, że decydujesz się na więcej edycji lub znalazłeś konflikty i wybierasz wiersze z jednej lub drugiej wersji. To nie ma znaczenia Są to tylko nowe edycje, które są wykonywane w ramach operacji edycji, jak stwierdza dziecko pod gałęzią, którą scaliłeś. W tym przykładzie wykonałem dwie kolejne grupy zmian po uzgodnieniu.
Śliczny.
Więc teraz powiedz, że jesteś gotowy „ opublikuj ” wersję. Co to znaczy? To tylko chwytanie etykiet i kierowanie ich do tego samego identyfikatora stanu. Tutaj zamierzam opublikować wersję A na SDE.DEFAULT. Tak to wygląda:
TADAAA! Więc teraz wersja A i SDE.DEFAULT wskazują na ten sam identyfikator stanu, a zatem wyglądają tak samo.
OK, teraz mogę w końcu odpowiedzieć na twoje pytanie.
Czy możesz cofnąć post? Dokumentacja ArcGIS powie ci nie - nie zadzieraj z tym. Nie rób tego, ponieważ będziesz bałaganić tą logiką, a jeśli nie wiesz, co robisz, możesz uszkodzić swoje dane.
Ale tak naprawdę wystarczy wykonać jedną aktualizację jednej z tabel Wersji ArcSDE - tabeli VERSIONS i zmodyfikować wpis etykiety (zwanej także wersją nazwaną). W naszym przykładzie wskaż stan 21, a właśnie cofnąłeś całą operację edycji. Ustaw na 3, a ty po prostu cofniesz cały pogodzenie. Ustaw na 5, a teraz jesteś w zupełnie innym miejscu. To, czy są konflikty, czy nie, nie ma znaczenia.
Oczywiście zakłada to, że kompres nie nastąpił. Rozważmy przypadek, w którym kompres odbywa się dokładnie w momencie aktualizacji tabeli SDE. Pamiętaj, że jeśli ty lub ktoś inny wykonuje kompres po opublikowaniu, drzewo wygląda następująco:
Czy można cofnąć uzgodnienie po kompresie? Cóż, w tym przypadku nie . Kompres zdmuchnął całą gałąź, więc nie można cofnąć - dane zostały usunięte. Gdyby w tej gałęzi była inna nazwana wersja, kompres nie zniszczyłby tej gałęzi. Mam nadzieję, że do tej pory ma to sens.
Więc powinieneś to zrobić? Jeśli nie wiesz, co robisz, możesz samodzielnie stracić dane po kompresji.