ArcSDE를 사용한 버전 관리로 게시 된 편집 내용을 취소하거나 거부 할 수있는 경우


28

ArcGIS 9.3.1을 사용하고 있으며 이미 버전으로 등록 된 SDE 지오 데이터베이스 (하나의 다각형 피쳐 클래스 포함)로 작업하려고합니다. 나는 버전 관리를 처음 사용하고 여전히 기본 기능 중 일부를 알아 내려고 노력하고 있습니다. 지금까지 특정 수정 사항이 상위 버전에 게시 된 후 '취소'또는 '거부'가능한지 여부를 알 수 없었습니다.

예를 들어, 버전으로 등록 될 때 생성 된 원래 SDE.DEFAULT, 기본 버전의 SDE.QA (품질 보증의 경우) 및 QA의 하위 버전 인 SDE의 세 가지 버전이 있다고 가정합니다. .Edit1 (편집이 처음 발생하는 위치). SDE.Edit1의 특정 기능을 편집 한 경우 (예 : 간단하게하기 위해 하나의 다각형이 추가되고 하나가 제거되었다고 가정하자) SDE.Edit1이 SDE.QA와 조정 된 후 SDE.QA에 게시 된 경우 나중에이 변경 사항을 취소 할 수있는 방법이 있습니까? 이 질문에 이어 일부 변경 만 거부 할 수 있습니까? 예를 들어, 첫 번째 폴리를 추가 할 수 있지만 두 번째 폴리는 제거하지 않겠습니까?

내가 알 수있는 한, 수정 사항이 상위 버전에 게시되면 이러한 모든 변경 사항이 이제 상위 버전의 "영구적"(더 나은 단어가 없음) 부분입니다. 이러한 변경 사항이 모두 "ADD"및 "DELETE"테이블 (종종 "델타"테이블이라고 함) 내에 기록되며 실제로 원래 FC 자체를 변경하지는 않는다는 사실을 알고 있습니다. 이 델타 테이블을 수동으로 변경하는 것을 고려했지만 올바른 솔루션이 아니라는 것을 알기 위해 충분한 사람들이 경고했습니다.

어쩌면 일부 작업이 필요한 버전 관리에 대한 나의 이해 일 수도 있지만 변경 사항을 게시하거나 게시 한 후에 변경 사항을 거부하거나 취소하는 방법을 찾지 못했습니다. 오류가 포함 된 게시물을 취소 할 수있는 방법이 없다는 것을 의미하기 때문에 이것은 나에게 이상하게 보입니다. 또한 이러한 버전의 계보를 추적하는 방법을 찾지 못하는 것 같습니다 (즉, 어떤 버전이 어떤 부모의 자식인지). 제가이 주제에 대해 설명하는 동안 ArcSDE에 대한 나의 이해에 도움이 될 수있는 특히 유용한 ArcSDE 참고 자료 (링크, 기사, 서적 등)에 대해 아는 사람이라면 누구나 감사하겠습니다. !


지금까지 답변이 도움이되었지만 (링크에 감사드립니다) 여전히 내 질문의 핵심에 대한 답변을 찾을 수 없습니다. 다시, 그것은 아마도 상황에 대한 내 자신의 오해 일 것입니다. 내가 알고 싶은 것은 다음과 같습니다.

당신은 (역, I 평균에 의해 되돌릴 수 취소 가 상위 버전 하위 버전에서 제작 된 후 게시물)? 이 시나리오에서 부모는 SDE.DEFAULT 버전 일 수 있지만 반드시 그럴 필요는 없습니다. 더 좋은 점 은 게시 한 후 게시물 의 일부 (예 : 다각형의 단일 편집 사항)를 되돌릴 수 있는지 알고 싶습니다 . 또한 충돌을 감지하지 않고도이 작업을 수행 할 수 있는지 알고 싶습니다.

이 질문에 대한 명확한 대답을 찾을 수 없다는 사실 (예 : "예"또는 "아니오")은 ArcSDE의 버전 관리와 관련하여 중요한 내용이 누락되었다고 생각합니다. 또한 A 및 D 테이블을 수동으로 조작하지 않는 것이 좋습니다.


? 버전 및 RDBMS 도움이 될
브래드 Nesom에게

답변:


53

어. 대답은 실제로 많은 ArcSDE 배경이 필요한 복잡한 답변이므로 가능한 한 간략하게 노력하겠습니다.

참고 ESRI 사이트에서 찾을 수 있는 매우 훌륭한 버전 화 백서 의 일부 다이어그램을 참조하겠습니다 . 버전 관리를 다루는 경우이를 읽어 보는 것이 좋습니다.

그런 다음 상태 (예 : 상태 트리의 노드)와 명명 된 버전 (예 : 상태를 가리키는 레이블 ) 사이의 관계가 무엇인지 이해해야합니다 .

일반적인 데이터베이스는 아래의 상태 다이어그램처럼 보일 수 있습니다.

전형적인 arcsde 데이터베이스 다이어그램

여기에는 데이터베이스에 버전 A, 버전 B, 버전 C 및 DEFAULT의 네 가지 버전이 있습니다. 그러나 아마도 나는 나보다 조금 앞서고있다. 상태 가 무엇인지부터 시작하겠습니다 .

상태를 "트랜잭션"이라고 생각할 수 있습니다. 하나 또는 여러 개의 테이블에 대한 여러 편집 내용이 포함 된 논리 단위입니다 . 그것은이 개 포함 삽입 "FeatureClass A"로하는 삭제 "기능 클래스 B"과에서 수정 "기능 클래스 X"로 (효과적으로 삭제 + 삽입을). 모두 하나로 그룹화됩니다.

상태 ID 0에서 시작하는 작고 간단한 ArcSDE 상태 다이어그램을 살펴 보겠습니다.

상태 이동

상태 0에서 시작하고 편집 조작에서 하나 이상의 테이블을 편집하는 경우 하위 상태 1을 작성하고이를 현재 활성 상태 id로 만듭니다. 이후의 다른 편집 그룹은 하위 상태 2를 만듭니다. 실행 취소하려는 경우 어떤 방식 으로든 상태 ID를 수정할 필요가 없습니다. 현재 활성 상태 ID를 1 또는 0으로 변경하기 만하면됩니다. 당신이 가고 싶은 거리). 다시 실행은 반대입니다. 현재 활성 상태 ID를 앞으로 이동합니다.

이것이 ArcSDE 버전 관리에서 실행 취소 / 다시 실행 방법입니다.

알았어 수정 사항을 영구적으로 작성하고 싶다고 가정하십시오 (예 : 저장). 무엇을해야합니까? 글쎄, 저장은 버전 레이블을 잡고 특정 상태로 옮기는 것입니다. 스탬프를 찍고 "이것은 버전 A의 모습입니다"라고 말하는 것과 같습니다. 따라서 첫 번째 다이어그램을 다시 살펴보면 네 개의 명명 된 버전 이 있음을 알 수 있습니다 .

  • 버전 B는 상태 ID 1을 가리 킵니다.
  • 버전 A는 상태 ID 3을 가리 킵니다.
  • 버전 C는 상태 ID 5를 가리 킵니다.
  • "SDE.DEFAULT"버전은 상태 ID 4를 가리 킵니다.

    이 다이어그램은 대중적인 믿음에도 불구하고 그들이 가지고 있는 논리적 부모-자식 관계 에 대해서는 아무 것도 말하지 않습니다 . 첫 번째 다이어그램의 논리적 부모-자식 관계는 다음과 같이 효과적 일 수 있습니다.

논리적 버전 구조

이는 ArcMap / ArcCatalog에 표시되는 상위-하위 관계입니다. 목적 은 조정할 수있는 버전 을 제한 하는 것입니다. 이 시점에서 당신은 (정확하게) 스스로에게 물어볼 수 있습니다. 왜 내가 이것을 필요로합니까? 답은 버전 관리 워크 플로에 있습니다. 사람들은 꽤 오랫동안 버전 관리를 사용하고 있으며이를 구성하는 방법에 대한 몇 가지 바람직한 방법이 있지만 오늘 질문에 대답하고 싶은 또 다른 주제입니다. :)

계속 ...

좋아,이 명명 된 버전은 다른 무엇을 하는가? 압축 이라는이 프로세스의 작동 방식에 영향을줍니다 .

압축은 필요하지 않은 중간 상태를 잡아서 불필요한 상태를 제거하고 결합하는 것입니다. ArcCatalog를 통해 ArcSDE 압축 작업을 트리거하고, 한 번에 하나씩 수행하는 서비스를 설정하고, 일부 ArcMap 편집 작업은 미니 압축 작업을 트리거합니다 (예 : 사용중인 작은 분기에 대해서만).

왼쪽의 다이어그램은 압축되기 전의 상태 트리를 나타내고 오른쪽의 다이어그램은 압축 된 직후의 상태 트리를 보여줍니다.

압축 다이어그램

이해해야 할 중요한 개념 (마지막으로 질문에 대답하면 참조 할 것임)은 레이블 (예 : 명명 된 버전) 이있는 상태를 제외하고 모든 단일 상태가 압축 될 수있는 잠재적 후보 라는 점입니다.

압축하기 전에 불필요한 추가 상태가 있음을 알 수 있습니다. 실제로 전체 [3,4,5] 지점이 제거되었습니다. 5시에 명명 된 버전이 있었다면 최종 결과는 매우 달라졌을 것입니다.

더 이상 필요하지 않은 레코드를 제거하여 데이터베이스의 공간을 절약하기 위해 압축 조작이 있습니다.

알았어

마지막으로 이해해야 할 개념은 조정 입니다. 효과적으로 두 분기를 하나로 병합합니다.

첫 번째 다이어그램으로 돌아가 봅시다. SDE.DEFAULT에 대해 버전 A를 조정한다고 가정하십시오.

다양한 상태 ID를 가리키는 4 개의 명명 된 버전을 살펴 보겠습니다. 먼저해야 할 일은 대상 버전에서 자식 상태를 만드는 것이므로 상태 ID 4에서 자식 상태를 만듭니다.이 예에서는 상태 ID 20이라고합니다.

화해하다

다음 단계는 두 버전 사이의 차이점을 계산하는 것입니다 (세부 사항이 너무 길지만 차이점 커서 로 완료되었음을 알 수 있습니다 ). 그러한 차이점을 새 상태 ID 20 (파란색 선)에 적용하십시오.

푸시 조정

더 많은 편집을하기로 결정했거나 충돌을 발견하여 한 버전 또는 다른 버전에서 행을 선택한다고 가정하십시오. 중요하지 않습니다. 그것들은 새로운 편집일 뿐이며 병합 한 브랜치 아래에 자식 상태가 있기 때문에 편집 작업 내에서 수행됩니다. 이 예에서는 조정 후 두 번의 추가 편집 그룹을 추가로 수행했습니다.

조정 후 수정

아름다운.

이제 버전을 " 게시 " 할 준비가되었다고 말합니다 . 그게 무슨 뜻이야? 그것은 단지 레이블을 잡고 동일한 상태 ID를 가리 키는 것입니다. 여기서는 버전 A를 SDE.DEFAULT에 게시하려고합니다. 이것은 다음과 같습니다

전기

타다 아아! 따라서 버전 A와 SDE.DEFAULT는 동일한 상태 ID를 가리 키므로 동일하게 보입니다.

자, 이제 마침내 귀하의 질문에 대답 할 수 있습니다.

게시물을 취소 할 수 있습니까? ArcGIS 문서는 아무 말도 하지 않습니다. 이 논리를 어지럽히 기 때문에 수행하지 마십시오. 수행중인 작업을 모르면 데이터가 손상 될 수 있습니다.

그러나 실제로 필요한 것은 ArcSDE 버전 관리 테이블 중 하나 인 VERSIONS 테이블 을 한 번 업데이트 하고 레이블 항목 (일명 이름이 지정된 버전)을 수정하는 것입니다. 이 예에서는 상태 ID 21을 가리키고 전체 편집 작업을 취소했습니다. 3으로 설정하면 전체 조정이 취소됩니다. 5로 설정하면 이제 완전히 다른 위치에 있습니다. 충돌이 있는지 없는지 여부는 관련이 없습니다.

물론 이것은 압축이 발생하지 않았다고 가정합니다. SDE 테이블을 업데이트하는 것과 동시에 압축이 수행되는 경우를 고려하십시오. 게시 한 후 압축을 실행하면 트리가 다음과 같습니다.

포스트 후 압축

압축 후 조정을 취소 할 수 있습니까? 글쎄요,이 경우에는 아닙니다 . 압축이 전체 브랜치를 날려 버렸으므로 취소 할 수 없습니다. 해당 데이터가 제거되었습니다. 해당 브랜치에 다른 이름의 버전이 있었으면 압축이 해당 브랜치를 파괴하지 않았을 것입니다. 지금까지 이것이 의미가 있기를 바랍니다.

그래서 당신은 이것을해야합니까? 자신이하는 일을 모르는 경우 압축 후 데이터를 쉽게 잃을 수 있습니다.


4
큰 대답 라기! SDE 버전 관리는 복잡한 짐승입니다.
blah238

2
감사. ArcObjects에서 조정 코드를 3 년 동안 유지 / 확장하여 다양한 ArcGIS 릴리스에서이 동작을 조정했습니다. 개념을 단순화하기 위해 몇 가지를 생략했습니다. 나는 그것이 대답으로 충분히 명확하기를 바랍니다.
Ragi Yaser Burhum

2
매우 철저한 답변 감사합니다, 라기! 나는 이제 내가 겪고있는 것을 더 잘 이해하고 있다고 생각한다. 변경을 "실행 취소"하는 메커니즘으로 다른 상태 id를 가리키는 것에 대한 설명 (또는 "뒤로 물러 서기"가 더 적절한 설명 임)이 합리적입니다. 제공 한 ArcSDE 버전 관리 표 링크를 계속 탐색하고 있습니다. 어쨌든, 나는 당신의 조언을 받아 조심스럽게 진행할 것입니다. 시간을내어 단계별로 진행해 주셔서 다시 한 번 감사드립니다!
Sole23

2
+1이 북마크. 나는 그것이 대부분의 사람들이 왜 SDE 버저 닝 테이블을 다루지 말아야하는지 보여주고 있다고 생각합니다.
Jay Cummins

2
와우, 당신은 내 질문 중 하나에 댓글을 달았고 나는 지난 몇 시간 동안 당신이 대답 한 모든 질문을 읽고 읽었습니다. 대단해, 고마워
ianbroad

7

ArcCatalog의 플러그인 인 Geodatabase Toolset (GDBT)라는 도구가 있습니다. 상태 Linage 및 버전을 시각화합니다.

여기에서 GDBT를 다운로드하십시오


고마워, 스테판 이것은 내가 존재하기를 바랐던 종류입니다! 이를 통해 SDE FC의 계보를보다 쉽게 ​​시각화하고 추적 할 수 있습니다.
Sole23

2
또한 대부분의 사람들은 이것을 알지 못하지만 (상태가 완전히 압축되지 않은 한) 여전히 유효한 상태 ID에 대해 VERSIONS 테이블에 항목을 추가 한 다음 arcgis를 사용하여 행복하게 탐색, 편집 할 수 있습니다 표준 ArcGIS 도구를 사용하여 해당 버전을 조정하십시오. 버전은 상태 ID에 대한 레이블 일 뿐이며 ArcSDE가 해당 상태를 유지하도록합니다.
Ragi Yaser Burhum

더 정교하게 대답하겠습니다.
Ragi Yaser Burhum

3

버전과 db를 알지 못한다. 여기 당신을 도울 몇 가지 초기 정보가 있습니다.
기본 관리자
다음은 recpost 에 대한 정보입니다.
따라서 이러한 개념을 적용하고 version changes 명령 을 사용 하면 rec 및 post로 기본값을 게시 할 때 해당 변경 사항을 거부 할 수 있습니다.

동일한 데이터베이스의 사본이 3 개 없습니다.
버전이있는 사본 하나가 있습니다.
이 DB를 관리하는 경우 시간을 투자하고 돈을 지불해야 하며이 모든 것에 익숙해 져야합니다. 다중 사용자 지오 데이터베이스에 대한
esri 클래스 Versioned Editing Workflows 는 무료이며 도움이 될 것입니다.
그러나 전체 몬테는 모든 버전의 sde 편집 워크 플로우를 관리하는 사람에게 권장되는 것입니다.
그 수업은 훌륭합니다! 다중 사용자 지오 데이터베이스의 버전 편집 워크 플로우 를 이해 합니다.


답변 주셔서 감사합니다, 브래드 추천 한 링크와 수업을 살펴 ​​보겠습니다!
Sole23

이 링크는 SQL Server 용이지만 다른 rdbms 도움말 파일이이 파일과 매우 가깝습니다.
브래드 네섬

1
나는 당신이 추천 한 Esri 세미나의 무료 기록을 보았습니다 : 다중 사용자 지오 데이터베이스를위한 버전 편집 워크 플로우 . 나는 그것이 정말로 도움이되고 그것을 보는 데 걸리는 시간 (~ 1 시간)의 가치가 있다고 생각했다. 추천 해 주셔서 다시 한 번 감사드립니다. 또한 세미나 기간 동안 답변 할 시간이 없었던 추가 질문에 대한 답변을 볼 수있는 링크를 찾았 습니다 .
Sole23

3

"빠르고 더러운"방법이 있습니다. ove를 기본 버전으로 전환하고 삭제 된 다각형에 대한 내용을 편집하십시오. 그런 다음 기본값으로 조정하면 충돌이 발생합니다. 충돌을 마우스 오른쪽 단추로 클릭하고 조정 전 상태를 사용하도록 지시하십시오. 그것은 나를 위해 작동합니다.


1

예,이 작업을 수행 할 수 있지만 SQL을 사용하여 수행해야합니다.

본인은 이에 대한 책임을지지 않습니다. SDE를 수동으로 편집하기 전에 항상 데이터를 백업하십시오.

sde.versions 테이블을 쿼리하여 실행 취소하려는 변경 사항으로 게시 한 버전에서 state_id를 가져올 수 있습니다. 그런 다음 A 및 D 테이블로 이동하여 state_id와 일치하는 항목을 삭제할 수 있습니다.

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

이제 관심있는 state_id가 있습니다. 이제 피쳐 클래스의 A 및 D 테이블을 찾아야합니다. table_registry를 쿼리하여이 작업을 수행합니다. 값은 registration_id가됩니다. 따라서 A와 D 테이블을 얻으려면 registration_id를 A와 D에 추가하십시오.

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

그런 다음 A와 D 테이블을 모두 쿼리하고 위 쿼리에서 state_id가있는 항목을 삭제하십시오.

부모 및 자식 관계에 대한 자세한 내용을 보려면 다음 sde 테이블에서 쿼리하십시오.

    state_lineages
    versions
    states

이들은 모두 관계가 있으며 튀는 공을 따르는 데 도움이됩니다.


1

하위 버전에서 상위 버전으로 게시 된 편집 내용은 실행 취소 할 수 없습니다. 참조 : http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00270000001s000000.htm

현재 편집하고 있지 않은 버전에 변경 사항을 적용하고 있으므로 게시 작업을 취소 할 수 없습니다.

조정 과정에서 각 버전의 수정 사항을 검토 할 수 있습니다. 특정 수정 사항을 거부 할 수 있습니다. 조정 프로세스가 여기 에 설명되어 있습니다 .


1

예, 다른 사람들이 대답했듯이 짧은 대답은 아니요입니다.

SDE 버전 관리는 매우 유망하지만 워크 플로가 기능의 앞으로 만 변경한다고 가정하는 것은 유감입니다.

SDE의 모든 기능을 갖춘 버전은 다음과 같은 도구를 제공합니다.

  • (기능 수준) 롤백 및 수락 / 거부 허용
  • 실행 취소 허용
  • 그리고 이전 상태를 취소 할 수 있습니다 (예 : 통계 3부터 시작하여 상태 1의 변경 사항은 취소하지만 상태 2의 변경 사항은 유지).

이것은 SVN 소스 코드 제어 버전 관리 시스템과 같지만 공간적 특징입니다.


안녕 데이비드, 그래, 내가 버전 관리를 볼 때 내가 생각했던 것입니다. 불행히도 현재의 워크 플로는 그다지 유연하지는 않지만 진행중인 작업이고 결국에는 가능할 것입니다.
Sole23

1
글쎄, 데이터가 압축되지 않으면 이론적으로 원하는만큼 되돌릴 수 있습니다. 문제는 데이터베이스 조인이 실제로 느려지고 시스템이 서서히 사용할 수 없게 저하된다는 것입니다. 문제는 리눅스 커널과 같은 거대한 자식 소스 저장소가 현재 ~ 175MB 인 소스 제어 관리와 다릅니다 . 지리적으로는 그게 훨씬 더 큰 문제 일 것입니다. 그럼에도 불구하고, 정말 똑똑한 사람들은 지금이 문제에 대해 생각하고 있습니다. Geogit 참조 : blog.opengeo.org/tag/geogit
Ragi Yaser Burhum

0

간단한 대답은 아니오입니다.

버전을 게시하려는 목적은 해당 편집 내용을 대상 버전 에 커밋 하는 것입니다.

롤백은 버전을 게시 하지 않고 수행됩니다 (그리고 포기 된 버전을 삭제하는 것이 좋습니다).

버전을 편집하는 동안 편집 응용 프로그램 (예 : ArcMap)은 다양한 수준의 '실행 취소'를 제공 할 수 있으며 사용자는 편집중인 버전에 이러한 편집 내용을 저장 / 저장하지 않도록 선택할 수 있습니다.

그러나 대상 (예 : sde.default)에 게시 한 후 실행 취소하는 유일한 방법은 sde 시스템 테이블에 대한 해킹입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.