Kapan Versi dengan ArcSDE dapat memposting hasil edit dibatalkan atau ditolak?

28

Saya menggunakan ArcGIS 9.3.1 dan berusaha untuk bekerja dengan geodatabase SDE (dengan satu kelas fitur poligon) yang telah terdaftar sebagai versi. Saya baru mengenal versi dan saya masih mencoba mencari tahu beberapa fungsi dasar itu. Sejauh ini, saya belum dapat menemukan apakah mungkin untuk "membatalkan" atau "menolak" suntingan tertentu setelah mereka diposting ke versi induk.

Misalnya, katakanlah kita memiliki tiga versi: SDE.DEFAULT asli yang dibuat ketika terdaftar sebagai versi, versi anak dari standar yang disebut SDE.QA (untuk Jaminan Kualitas), dan versi anak dari QA yang disebut SDE .Edit1 (tempat pengeditan pertama kali dilakukan). Jika fitur-fitur tertentu dari SDE.Edit1 diedit (misalnya, untuk membuatnya sederhana, katakanlah satu poligon ditambahkan dan satu telah dihapus) dan kemudian SDE.Edit1 direkonsiliasi dengan SDE.QA dan kemudian diposting ke SDE.QA, apakah akan ada ada cara untuk membatalkan perubahan ini nanti? Menindaklanjuti pertanyaan ini, apakah mungkin untuk menolak hanya beberapa perubahan? Misalnya, menerima penambahan poli pertama, tetapi menolak menghapus poli kedua?

Sejauh yang saya tahu, setelah diedit telah diposting ke versi induk, semua perubahan ini sekarang menjadi bagian "permanen" (karena tidak ada kata yang lebih baik) dari versi induk. Saya menyadari fakta bahwa semua perubahan ini dicatat dalam dua tabel, tabel "ADD" dan "DELETE" (sering disebut sebagai tabel "delta"), dan tidak benar-benar mengubah FC asli itu sendiri. Saya mempertimbangkan untuk mengubah tabel delta ini secara manual, tetapi saya menemukan cukup banyak orang yang memperingatkannya untuk mengetahui bahwa kemungkinan itu bukan solusi yang tepat.

Mungkin pemahaman saya tentang versi yang memerlukan beberapa pekerjaan, tapi sepertinya saya tidak bisa menemukan cara untuk menolak perubahan atau membatalkan perubahan setelah diposting. Ini tampak aneh bagi saya, karena ini berarti bahwa tidak ada cara untuk mengurungkan pos yang berisi kesalahan. Saya juga tidak bisa menemukan cara untuk melacak garis keturunan dari versi-versi ini (yaitu, versi mana yang merupakan anak dari orang tua mana). Sementara saya sedang membahas topik ini, jika ada yang tahu tentang referensi ArcSDE yang sangat berguna (tautan, artikel, buku, dll) yang mungkin membantu dengan pemahaman saya tentang ArcSDE (dan mungkin menjawab beberapa pertanyaan ini), itu akan sangat dihargai !


Meskipun jawaban sejauh ini sangat membantu (terima kasih atas tautannya), saya masih tidak dapat menemukan jawaban atas inti pertanyaan saya. Sekali lagi, mungkin itu kesalahpahaman saya sendiri tentang situasi ini. Inilah yang ingin saya ketahui:

Bisakah Anda membalikkan (secara terbalik, maksud saya membatalkan ) sebuah pos setelah dibuat dari versi anak ke versi induk? Dalam skenario ini, orang tua dapat, tetapi tidak harus, versi SDE.DEFAULT. Bahkan lebih baik, saya ingin tahu apakah Anda dapat membalikkan bagian dari sebuah posting (katakanlah, satu edit ke sebuah poligon), setelah diposkan? Saya juga ingin tahu apakah ini dapat dilakukan tanpa perlu ada konflik yang terdeteksi.

Fakta bahwa saya tidak dapat menemukan jawaban yang jelas untuk pertanyaan ini (yaitu, "ya" atau "tidak") yang didokumentasikan di mana saja membuat saya berpikir saya kehilangan sesuatu yang penting tentang versi di ArcSDE. Saya juga lebih suka menghindari memanipulasi tabel A dan D secara manual.

Sole23
sumber
? versi & rdbms akan membantu
Brad Nesom

Jawaban:

53

Ugh. Jawabannya benar-benar rumit yang membutuhkan banyak latar belakang ArcSDE, jadi saya akan mencoba sesingkat mungkin.

Catatan saya akan merujuk ke beberapa diagram dari kertas putih versi super keren yang dapat Anda temukan di situs ESRI . Jika Anda berurusan dengan versi, saya sangat menyarankan Anda untuk membacanya secara menyeluruh.

Kemudian, Anda perlu memahami apa hubungan antara keadaan (yaitu simpul dari pohon negara) dan versi bernama (yaitu label yang menunjuk ke keadaan).

Database tipikal mungkin terlihat seperti diagram-negara di bawah ini:

diagram basis data khas arcsde

Di sini, Anda memiliki empat versi dalam basis data (Versi A, Versi B, Versi C dan DEFAULT). Tapi mungkin, saya sedikit lebih maju. Mari kita mulai dengan apa itu negara .

Anda bisa menganggap negara sebagai "transaksi" - unit logis yang berisi beberapa pengeditan untuk satu - atau banyak - tabel. Ini mungkin termasuk dua sisipan untuk "FeatureClass A", penghapusan dari "Feature Class B" dan yang memodifikasi (secara efektif sebuah delete + a insert) ke "Feature Class X". Semua dikelompokkan menjadi satu.

Mari kita lihat diagram state ArcSDE kecil dan sederhana yang dimulai dengan state id 0:

negara bergerak

Jika Anda mulai pada status 0 dan Anda mengedit ke satu atau banyak tabel dalam operasi edit, Anda akan membuat status anak 1 dan menjadikannya sebagai status keadaan aktif saat ini . Grup pengeditan berikutnya berikutnya akan membuat status anak 2. Jika Anda ingin membatalkan, Anda tidak perlu mengubah status id dengan cara apa pun - yang perlu Anda lakukan adalah mengubah status keadaan aktif saat ini menjadi 1, atau 0 (tergantung seberapa jauh ke belakang Anda ingin pergi). Redo adalah kebalikannya - cukup gerakkan id keadaan aktif saat ini - sejauh yang Anda inginkan.

Itulah cara undo / redo bekerja dalam versi ArcSDE.

Oke, lanjutkan. Katakan, bahwa Anda ingin membuat edit permanen (yaitu, Anda ingin menyimpan). Apa yang harus Anda lakukan? Ya, menabung hanya mengambil label versi dan memajukannya ke kondisi tertentu. Agak suka mencapnya dan mengatakan "Versi seperti apa yang harus terlihat". Jadi jika Anda melihat kembali diagram pertama, Anda akan melihat bahwa ia memiliki empat versi bernama .

  • Versi B menunjukkan status id 1
  • Versi A menunjukkan status id 3
  • Versi C menunjukkan status id 5
  • Versi "SDE.DEFAULT" menunjuk ke status id 4

    Harap perhatikan bahwa diagram ini, terlepas dari kepercayaan populer, tidak memberi tahu Anda apa pun tentang hubungan logis orang tua-anak yang mereka miliki. Hubungan logis orangtua-anak untuk diagram pertama dapat terlihat seperti ini:

struktur versi logis

Ini adalah hubungan orangtua-anak yang Anda lihat di ArcMap / ArcCatalog. Tujuannya adalah untuk membatasi versi mana yang dapat Anda rekonsiliasi. Pada titik ini, Anda dapat (secara sah) bertanya pada diri sendiri, mengapa saya membutuhkan ini? Jawabannya, terletak pada versi alur kerja . Ternyata, orang-orang telah menggunakan versi untuk beberapa waktu dan ada beberapa cara yang lebih disukai bagaimana menyusun ini, tapi itu adalah topik untuk hari lain sejak saya ingin menjawab pertanyaan Anda hari ini :)

Bergerak...

OK, jadi apa lagi yang dilakukan versi bernama ini? Ya, mereka memengaruhi bagaimana proses yang disebut kompres ini berperilaku.

Kompres adalah tentang meraih status perantara yang mungkin tidak diperlukan, dan menghapus yang tidak perlu serta menggabungkannya. Anda dapat memicu operasi kompres ArcSDE melalui ArcCatalog, mengatur layanan yang melakukannya setiap saat, dan beberapa operasi edit ArcMap akan memicu operasi kompres mini (yaitu hanya untuk cabang kecil yang sedang digunakan).

Diagram di sebelah kiri menunjukkan pohon keadaan sebelum dikompresi, dan yang di sebelah kanan menunjukkannya tepat setelah dikompresi:

diagram kompres

Konsep penting untuk dipahami (yang akan saya rujuk kepada Anda begitu saya akhirnya bisa menjawab pertanyaan Anda) adalah bahwa setiap negara bagian adalah kandidat potensial untuk dikompresi - kecuali negara yang memiliki label (yaitu versi yang disebutkan) menunjuk pada mereka.

Anda dapat melihat bahwa sebelum kompres ada beberapa kondisi tambahan yang tidak perlu. Bahkan, seluruh cabang [3,4,5] dihilangkan. Seandainya ada versi bernama di 5, hasil akhirnya akan sangat berbeda.

Operasi kompres ada untuk menghemat ruang pada basis data Anda dengan menghapus catatan yang tidak Anda butuhkan lagi.

Oke, lanjutkan.

Konsep terakhir yang perlu Anda pahami adalah berdamai - yang secara efektif menggabungkan dua cabang menjadi satu.

Jadi mari kita kembali ke diagram pertama kita. Katakan bahwa Anda ingin merekonsiliasi Versi A dengan SDE.DEFAULT.

Mari kita rekap: empat versi bernama menunjuk ke berbagai id negara. Jadi hal pertama yang harus kita lakukan, adalah membuat status anak di bawah versi target, jadi kita membuat status anak di bawah status id 4, dalam contoh kita, saya sebut status id 20.

mulai berdamai

Langkah selanjutnya adalah menghitung perbedaan antara kedua versi (detailnya terlalu panjang untuk posting ini, tetapi saya dapat memberitahu Anda bahwa mereka selesai dengan kursor perbedaan ) dan kemudian menerapkan perbedaan tersebut ke id keadaan baru 20 (garis biru).

rekonsiliasi push

Katakanlah Anda memutuskan untuk melakukan lebih banyak pengeditan atau menemukan konflik dan memilih baris dari satu versi, atau yang lain. Itu tidak masalah. Itu hanya suntingan baru, dan dilakukan di dalam operasi edit, saat anak menyatakan di bawah cabang yang Anda gabungkan. Dalam contoh ini, saya telah melakukan dua kelompok suntingan berturut-turut setelah rekonsiliasi.

edit setelah rekonsiliasi

Menyenangkan.

Jadi sekarang katakan bahwa Anda siap " memposting " versi. Apa artinya? Itu hanya meraih label dan mengarahkannya ke status yang sama. Di sini, saya akan memposting Versi A ke SDE.DEFAULT. Seperti inilah tampilannya:

posting

TADAAA! Jadi sekarang Versi A dan SDE.DEFAULT menunjuk ke state id yang sama, dan dengan demikian mereka terlihat sama.

Oke, jadi sekarang saya akhirnya bisa menjawab pertanyaan Anda.

Bisakah Anda membatalkan kiriman? Dokumentasi ArcGIS akan memberi tahu Anda tidak - jangan macam-macam dengan itu. Jangan lakukan itu, karena Anda akan mengacaukan logika ini, dan jika Anda tidak tahu apa yang Anda lakukan, Anda dapat merusak data Anda.

Namun sebenarnya, yang diperlukan hanyalah melakukan satu pembaruan dari salah satu tabel Versi ArcSDE - tabel VERSI, dan memodifikasi entri label (alias versi yang disebutkan). Dalam contoh kami, arahkan ke status id 21, dan Anda baru saja membatalkan seluruh operasi edit. Atur ke 3, dan Anda hanya membatalkan unduhan seluruh rekonsiliasi. Atur ke 5, dan sekarang Anda berada di tempat yang sama sekali berbeda. Apakah ada atau tidak ada konflik tidak relevan.

Tentu saja, ini mengasumsikan bahwa kompres belum terjadi. Mari kita perhatikan kasus di mana kompres terjadi tepat pada saat yang sama Anda memperbarui tabel SDE. Ingat, jika Anda - atau orang lain - mengeksekusi kompres setelah Anda mengeposkannya, seperti inilah struktur pohonnya:

kompres setelah posting

Bisakah Anda membatalkan rekonsiliasi setelah kompres? Nah, dalam hal ini, tidak . Kompres telah menghapus seluruh cabang, jadi Anda tidak dapat membatalkan - bahwa data telah dihapus. Jika ada versi bernama lain di cabang itu, maka kompres tidak akan menghancurkan cabang itu. Saya harap sekarang ini masuk akal.

Jadi, haruskah Anda melakukan ini? Terserah Anda, jika Anda tidak tahu apa yang Anda lakukan, Anda dapat dengan mudah kehilangan data setelah kompres.

Ragi Yaser Burhum
sumber
4
Jawaban bagus Ragi! Versi SDE adalah binatang yang kompleks.
blah238
2
Terima kasih. Saya mempertahankan / memperpanjang kode rekonsiliasi di ArcObjects selama tiga tahun sehingga saya bermain menyesuaikan perilaku ini di berbagai rilis ArcGIS. Saya menghilangkan beberapa hal untuk mencoba menyederhanakan konsep. Saya harap ini cukup jelas sebagai jawaban.
Ragi Yaser Burhum
2
Terima kasih atas jawaban yang sangat teliti, Ragi! Saya merasa sekarang saya memiliki pemahaman yang lebih baik tentang apa yang saya hadapi. Penjelasan Anda tentang menunjuk ke id keadaan yang berbeda sebagai mekanisme untuk "membatalkan" perubahan (atau mungkin "mengambil langkah mundur" akan menjadi deskripsi yang lebih memadai) masuk akal. Saya masih menjelajahi tautan Tabel Versi ArcSDE yang Anda berikan. Bagaimanapun, saya akan mengikuti saran Anda dan melanjutkan dengan hati-hati. Sekali lagi terima kasih telah meluangkan waktu untuk menjalani langkah-demi-langkah ini!
Sole23
2
+1 Menandai yang ini. Saya pikir itu menggambarkan mengapa kebanyakan orang tidak boleh bermain-main dengan tabel versi SDE dan saya akan mengirimkan tautan ke jawaban ini ketika saya mengetahui orang-orang yang memikirkannya!
Jay Cummins
2
Wow, Anda mengomentari salah satu pertanyaan saya dan saya telah menghabiskan beberapa jam terakhir melewati dan membaca semua pertanyaan yang telah Anda jawab. Hal yang luar biasa, terima kasih.
ianbroad
7

Ada alat yang disebut Geodatabase Toolset (GDBT), yang merupakan plugin untuk ArcCatalog. Ini memvisualisasikan garis keturunan negara dan versi:

Unduh GDBT di sini

Stefan
sumber
Terima kasih, Stefan. Ini persis hal yang kuharapkan ada! Ini membuatnya lebih mudah untuk memvisualisasikan dan melacak garis turunan SDE FC saya.
Sole23
2
Juga, sebagian besar orang tidak mengetahui hal ini, tetapi (selama negara bagian belum sepenuhnya dimampatkan), Anda dapat menambahkan entri ke tabel VERSI untuk id keadaan apa pun yang masih valid, dan kemudian menggunakan arcgis untuk menelusuri, mengedit, dengan senang hati , dan bahkan merekonsiliasi versi itu menggunakan alat ArcGIS standar. Versi hanyalah label untuk menyatakan id yang memaksa ArcSDE untuk menjaga status tersebut tetap hidup.
Ragi Yaser Burhum
Oke, izinkan saya membuat jawaban yang lebih rumit.
Ragi Yaser Burhum
3

Tidak mengetahui versi dan db. berikut adalah beberapa informasi awal yang akan membantu Anda.
Admin dasar
Berikut adalah beberapa info tentang rec dan post.
Jadi jika Anda menerapkan konsep-konsep ini dan menggunakan perintah perubahan versi, Anda masih memiliki kesempatan untuk menolak perubahan-perubahan itu ketika Anda rec dan memposting ke default.

Anda tidak memiliki tiga salinan dari database yang sama.
Anda memiliki satu salinan dengan versi.
Jika Anda mengelola db ini, Anda benar-benar harus menghabiskan waktu (bahkan mungkin uang) dan menjadi akrab dengan semua ini.
Alur kerja Pengeditan Berversi kelas esri untuk Multiuser Geodatabase gratis dan akan membantu beberapa orang.
Tetapi monte penuh akan menjadi apa yang saya rekomendasikan untuk seseorang yang mengelola segala jenis alur kerja pengeditan sde versi.
Kelas itu Luar Biasa! untuk memahami Alur Kerja Pengeditan Berversi untuk Geodatabase Multiuser .

Brad Nesom
sumber
Terima kasih atas tanggapan Anda, Brad. Saya akan melihat tautan dan kelas yang Anda rekomendasikan!
Sole23
tautan ini untuk server sql - tetapi ada file bantuan rdbms lain yang sangat dekat dengan ini.
Brad Nesom
1
Saya menyaksikan rekaman gratis seminar Esri yang Anda rekomendasikan: Alur Kerja Pengeditan Berversi untuk Geodatabase Multiuser . Saya pikir itu sangat membantu dan tentu saja sepadan dengan waktu yang dibutuhkan untuk menontonnya (~ 1 jam). Terima kasih lagi untuk rekomendasinya. Saya juga menemukan tautan untuk melihat jawaban yang mereka miliki untuk pertanyaan tambahan yang mereka tidak punya waktu untuk menjawab selama seminar di sini .
Sole23
3

Saya punya cara "cepat dan kotor". Beralihlah ke versi default dan edit sesuatu tentang poligon yang telah dihapus. Kemudian ketika Anda berdamai dengan default Anda akan mendapatkan konflik. Klik kanan konflik dan katakan untuk menggunakan kondisi pra-rekonsiliasi. Ini bekerja untuk saya.

Ron
sumber
1

Ya, Anda bisa melakukan ini, tetapi Anda harus melakukannya menggunakan SQL.

SAYA TIDAK MELAKUKAN INI, LAKUKAN RISIKO ANDA SENDIRI. SELALU KEMBALI DATA ANDA SEBELUM MENGEDIT SDE MANUAL.

Anda dapat meminta tabel sde.versions untuk mendapatkan state_id dari versi yang Anda posting dengan perubahan yang ingin Anda batalkan. Kemudian Anda bisa pergi ke tabel A dan D dan menghapus entri yang cocok dengan state_id.

    SELECT *
    FROM SDE.VERSIONS
    WHERE NAME = 'Version of interest';

Sekarang Anda memiliki state_id yang menarik. Sekarang Anda perlu menemukan tabel A dan D untuk kelas fitur. Anda melakukan ini dengan menanyakan table_registry. Nilainya akan menjadi registration_id. Jadi untuk mendapatkan tabel A dan D, tambahkan saja pendaftaran_id ke A dan D.

    REGISTRATION_ID = 1
    A table would be A1
    D table would be D1

Kemudian cukup kueri tabel A dan D dan hapus entri yang memiliki state_id dari kueri di atas.

Untuk mengetahui lebih lanjut tentang hubungan orangtua dan anak, cukup kueri dari tabel sde berikut.

    state_lineages
    versions
    states

Ini semua memiliki hubungan dan harus membantu Anda mengikuti bola memantul.

Jamie
sumber
1

Tidak mungkin untuk membatalkan pengeditan setelah diedit dari versi anak ke versi induk. Lihat: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00270000001s000000.htm

Operasi pos tidak dapat diurungkan, karena Anda menerapkan perubahan pada versi yang saat ini tidak Anda edit.

Anda dapat meninjau hasil edit yang dilakukan di setiap versi selama proses rekonsiliasi - ini adalah kesempatan Anda untuk menolak suntingan tertentu. Proses rekonsiliasi dijelaskan di sini .

Casey
sumber
1

Ya, seperti yang dikatakan orang lain, jawaban singkatnya adalah tidak.

Versi SDE sangat menjanjikan tetapi sangat disayangkan bahwa alur kerjanya hanya mengasumsikan perubahan fitur.

Versi fitur lengkap di SDE akan menawarkan alat yang-

  • Mengizinkan (tingkat fitur) rollback dan terima / tolak
  • Akan memungkinkan undo
  • Dan akan memungkinkan undo dari status sebelumnya (yaitu mulai dari stat 3, batalkan perubahan dari status 1 tetapi simpan perubahan dari status 2).

Ini akan menjadi seperti sistem versi kontrol kode sumber SVN tetapi untuk fitur spasial.

David
sumber
Hai David, ya, itulah yang ada dalam pikiran saya ketika saya melihat ke versi. Sayangnya, alur kerja saat ini tidak cukup banyak menawarkan fleksibilitas, tapi saya kira itu adalah pekerjaan yang sedang berjalan dan mungkin akhirnya akan berhasil.
Sole23
1
Nah, jika data tidak pernah dikompres maka secara teori Anda dapat kembali sebanyak yang Anda inginkan. Masalahnya adalah bahwa database bergabung menjadi sangat lambat dan sistem perlahan-lahan menurun menjadi tidak dapat digunakan. Masalahnya berbeda dari manajemen kontrol sumber di mana repo sumber git besar seperti kernel linux saat ini ~ 175MB. Dalam geo, itu akan menjadi masalah yang jauh lebih besar. Namun demikian, orang yang benar-benar pintar sedang memikirkan masalah ini sekarang. Lihat Geogit: blog.opengeo.org/tag/geogit
Ragi Yaser Burhum
0

Jawaban sederhananya adalah TIDAK.

Tujuan memposting versi adalah untuk melakukan pengeditan tersebut ke versi target.

Kembalikan dilakukan dengan tidak memposting versi (dan merupakan praktik yang baik untuk menghapus versi yang ditinggalkan tersebut).

Saat mengedit versi, aplikasi pengeditan (misalnya ArcMap) dapat memberikan berbagai tingkat 'undo' dan pengguna dapat memilih untuk menyimpan / tidak menyimpan hasil edit tersebut untuk versi yang sedang diedit.

Tetapi setelah memposting ke target (mis. Sde.default) satu-satunya cara untuk membatalkan adalah melalui hacks ke tabel sistem sde.

nef001
sumber