programing

종료 시 SQL*Plus가 커밋되는 이유는 무엇입니까?

subpage 2023. 7. 28. 22:06
반응형

종료 시 SQL*Plus가 커밋되는 이유는 무엇입니까?

확실히 이것은 세션 종료와 동일해야 하며 롤백이 발생해야 합니까?제가 보기에 그것은 가장 비오라클적인 것 같습니다.저는 사실 이것이 이런 일을 한다는 것을 알았을 때 충격을 받았습니다.

더 중요한 것은 오라클이 종료 시 롤백으로 변경한 경우 이의를 제기할 사람이 있습니까?

놀랍게도 이번 주(2009-09-03) 11gR2 릴리즈에서 SQL*Plus는 종료 시 커밋 또는 롤백 옵션을 제공합니다.여기에 문서

앞으로 몇 주 또는 몇 달 안에 현재 데이터베이스에 대해 사용하고 원하는 동작을 얻을 수 있는 11gR2 Instant Client가 출시될 것으로 예상됩니다.

주의해야 할 주의 사항입니다.다른 세션에 연결을 끊거나 연결을 끊어도 해당 세션은 여전히 암묵적으로 트랜잭션을 커밋합니다(문서에 따름).

이는 Oracle이 20년 이상 전에 결정한 것으로 추정됩니다.이것은 제가 사용했을 디자인이 아닙니다.기본 OCI가 아닌 SQL*Plus의 속성으로 보입니다.

세션이 갑자기 종료되면 예상대로 세션이 롤백됩니다.따라서 예를 들어 누군가 SIGKILL을 SQL Plus로 보낸 경우 세션의 트랜잭션을 롤백해야 합니다. 그러나 SQL Plus 세션이 정상적으로 종료되면(EOF 또는 종료 명령), SQL*Plus는 무한한 지혜로 지금까지 수행한 모든 작업을 커밋하기로 결정합니다.

왜인지에 대해 - 저는 이론이 있습니다.SQL 표준 데이터베이스에서는 SELECT 문만 수행한 경우에도 항상 트랜잭션 상태에 있습니다.커밋하지 않으면 변경 내용이 롤백됩니다.스크립트 작업의 끝에 커밋을 추가하는 것을 잊기 쉬우므로 커밋을 기본 동작으로 설정하면 누군가가 데이터베이스를 변경하기 위해 스크립트를 실행한 다음 두 번째 스크립트를 실행하여 변경 사항이 올바르게 적용되었는지 여부를 확인할 수 있습니다.다른 DBMS는 각 문이 완료 시 자동으로 커밋되는 독립 실행형 트랜잭션인 'auto-commit'과 같은 모드를 사용하여 이 작업을 수행할 필요가 없습니다.그것은 유용한 작동 방식입니다.다른 시스템은 명시적인 BEGIN WORK 문을 실행할 때까지 자동 커밋 모드를 제공하며, 따라서 (물론) 해당 COMMIT 또는 ROLBOLLBACK까지 트랜잭션에 있습니다.저는 'MODE ANSI' 데이터베이스에 의해 자주 커밋되지 않아 중요한 시점에 커밋되는지 확인하지 못했지만, 제가 사용하는 소프트웨어(Oracle이 아닌)는 여전히 커밋되지 않은 작업을 자동으로 커밋하지 않고 롤백합니다. 그렇지 않으면 작동하도록 변경될 수 없습니다.(구성 가능한 기본값은 괜찮을 수도 있습니다. 롤백을 커밋하지 않은 것이 더 나은 기본값이라고 생각합니다. 롤백은 모르는 사람들에게는 성가신 일이기 때문입니다. 실수로 데이터베이스가 손상될 위험이 적으며, 이는 저에게 가장 중요합니다.)

(기한 통지:이것은 다른 DBMS 공급업체에서 일하는 사람의 간접적인 정보입니다.그러나 제가 알기로는 정확하며, 10년 이상의 기간 동안 그리고 다양한 포럼에서 관련 질문을 한 후 축적된 정보를 기반으로 합니다.)

오라클에 문의해야 합니다!

제가 이것을 처음 발견했을 때 놀랐다는 것을 인정해야 합니다. 롤백을 하는 것이 더 보수적인 접근 방식을 필요로 할 것이라고 생각하기 때문입니다.

COMMIT가 가장 가능성이 높은/기본 작업으로 간주된다는 것을 짐작할 수 있을 뿐입니다. 그래서 SQL*Plus가 그렇게 하는 것일까요?

좋은 질문입니다.

저는 메탈링크를 살펴보았는데 1998년에 정상 종료 시 발생하는 기본 동작에 대한 버그(또는 변경 요청)가 제기되었습니다.금속 잉크에 액세스할 수 있는 경우 버그 633247을 찾습니다.

Oracle 드라이버를 사용하는 jdbc 연결이 연결을 닫을 때 txn을 암묵적으로 커밋하는 방식과 일치합니다.

저는 그 약속이 좋은 생각이라고 생각하고 저스틴과 빌리가 이 스레드에 쓴 것에 동의합니다. http://forums.oracle.com/forums/thread.jspa?messageID=3611345&#3611345

안녕, 롭.

일반적으로 출구에서 커밋하는 것은 논리적인 것으로 보입니다.ROLLBACK예외적으로, 우리는 무언가 잘못되었을 때 롤백하고, 당신이 데이터를 삽입, 업데이트 또는 삭제할 때, 당신은 이것을 의미합니다.COMMIT.

언급URL : https://stackoverflow.com/questions/1368092/why-does-sqlplus-commit-on-exit

반응형