문제

재난 후 Oracle 인스턴스를 복구해야한다고 가정하십시오. 시퀀스가 초기 상태 또는 마지막으로 저장된 상태로 재설정 되나요? 아니면 캐시 된 값이 보존됩니까?

매우 감사합니다. :-)

도움이 되었습니까?

해결책

SeqUnce 값은 System.seq $ (생각) 테이블에 저장되며 캐시는 사용할 다음 값을 메모리하여 유지 관리하며 해당 캐시의 크기는 시퀀스의 캐시 값에 따라 다릅니다.

캐시가 소진되면 seq $ 테이블이 새 값으로 업데이트됩니다 (즉, 사용자 세션의 Transacton 컨트롤이 적용되지 않으면) 다음 100 값 (Cache = 100 인 경우)은 메모리에서 읽습니다. .

캐시 크기가 20 인 시퀀스를 사용하고 있다고 가정 해 봅시다. 시퀀스 (1400)에서 특정 값을 선택하면 Seq $ 테이블은 1420의 값으로 업데이트됩니다. 거래 롤백을하더라도 SEQ $ 다음 20 개의 시퀀스 값이 사용될 때까지 여전히 해당 값이 있습니다.이 시점에서 Seq $는 1440으로 업데이트됩니다. 값 1423을 사용하고 인스턴스 충돌이 발생하면 시스템이 다음 값을 다시 시작할 때 Sequnce는 1440이 될 것입니다.

그렇습니다. 예, 시퀀스의 무결성은 보존되고 숫자는 "재발행"되지 않습니다. 동일하게 우아한 종료에 적용됩니다. 다시 시작하면 위의 예에서 새 값 1440을 얻게됩니다. 이러한 이유로 시퀀스는 실제로 갭이없는 것으로 보장되지 않습니다 (또한 값을 사용하고 롤백하는 것은 해당 값을 캐시로 복원하지 않기 때문에).

다른 팁

나는 이것에 대한 경험이 없다는 것은 아니지만, 일관된 시스템 변경 번호 상태로의 복구가 서열을 마지막으로 저장된 상태로 반환 할 것이라고 가정합니다. 회복 측면에서 다른 것은 상당히 쓸모가 없습니다.

캐시 된 값의 경우, 인스턴스가 순서대로 정연한 방식으로 종료되는 경우에도 손실 될 수 있습니다. 인스턴스가 예약 한 미사용 시퀀스 값은 "사라질"수 있으며 순서대로 간격이 남을 수 있습니다.

(*) 8i 문서화는 이것이 병렬 인스턴스 (RAC)에서 발생할 수 있다고 언급하며,이 경우 시퀀스는 엄격하게 오름차순이 아니지만 (여전히 고유 한), 10G 문서는 인스턴스 고장시 발생한다고 말합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top