복붙노트

[SQL] 합니까 오라클 롤 오류에 트랜잭션을?

SQL

합니까 오라클 롤 오류에 트랜잭션을?

바보 같은 질문 같은이 Feel로는,하지만 난 트랜잭션 관리의 Oracle 개념 가이드에서 다음을 참조하십시오

오전 나는 오류가있는 쿼리를 실행하면, 트랜잭션이 롤백 얻을 것이라는 점을 의미하는 마지막 점을 해석하는?

해결법

  1. ==============================

    1.이러한 맥락에서 "사용자 프로세스는"오라클의 연결을 생성하는 클라이언트 시스템에서 실행중인 프로세스를 참조한다. 오라클에 연결하는 응용 프로그램 A (SQL * 플러스, 두꺼비 등)을 사용하는 경우 즉, 사용자 프로세스 등 SQL * 플러스, 두꺼비, 경우 해당 사용자 프로세스 다이 당신은 중간에있는 동안 트랜잭션은 그 트랜잭션이 롤백됩니다. 이것은 클라이언트가 오라클은 단지에서 명령을 실행되지 않도록 사용자 프로세스에서 사용자 프로세스의 실패를 구별하는 것이 항상 사소한 아니다으로 .. 조금 걸릴 수 사망했다고 PMON의 발견하여 즉시 일어날 것입니다 순간.

    이러한 맥락에서 "사용자 프로세스는"오라클의 연결을 생성하는 클라이언트 시스템에서 실행중인 프로세스를 참조한다. 오라클에 연결하는 응용 프로그램 A (SQL * 플러스, 두꺼비 등)을 사용하는 경우 즉, 사용자 프로세스 등 SQL * 플러스, 두꺼비, 경우 해당 사용자 프로세스 다이 당신은 중간에있는 동안 트랜잭션은 그 트랜잭션이 롤백됩니다. 이것은 클라이언트가 오라클은 단지에서 명령을 실행되지 않도록 사용자 프로세스에서 사용자 프로세스의 실패를 구별하는 것이 항상 사소한 아니다으로 .. 조금 걸릴 수 사망했다고 PMON의 발견하여 즉시 일어날 것입니다 순간.

  2. ==============================

    2.이 흥미로운 질문입니다!

    이 흥미로운 질문입니다!

    오라클 오류가 발생하면 현재 명령문이 아닌 트랜잭션을 롤백합니다. 성명은 어떤 최상위 명령, 그것은 SQL 문 (INSERT, UPDATE ...) 또는 PL / SQL 블록이 될 수 있습니다.

    성명 (예를 들어 자바에서 호출 PL / SQL 프로 시저) 오류를 반환 할 때, 오라클은 호출 이전과 동일한 논리 상태로 거래를 넣어 것이 의미합니다. 이것은 대단히 도움이 될 것입니다, 당신은 반 실행 절차 (**)에 대해 걱정할 필요가 없습니다.

    AskTom에이 스레드는 동일한 주제를 다루고 있습니다 :

    begin
       savepoint foo;
       <<your statement>>
    exception
       when others then rollback to foo; 
                        RAISE;
    end;
    

    이 기능은, 내 의견으로는, 그것은 쓰기 데이터베이스 코드에 훨씬 쉽게 이유 (*)에서 PL / SQL 다른 언어보다.

    물론 오라클 DB와 상호 작용, 나는 다른 DBMS의 기본 절차 언어를 가정하는 것이 (*) 코드와 유사한 기능을 가지고 있습니다.

    DDL은 오라클의 트랜잭션하지 않기 때문에 (**)에만 DML은에 관한 것이다. 또한 데이터 사전 (예 : DBMS_STATS 등), 그들은 종종 변화와 문제 커밋 DDL-좋아해요 업데이트하는 것이 어떤 DBMS 패키지에주의하십시오. 의심의 경우 설명서를 참조하십시오.

    업데이트 :이 동작은 PL / SQL에서 가장 중요한 개념 중 하나입니다, 나는 PL / SQL 문장의 자성을 보여주기 위해 작은 예제를 제공합니다 :

    SQL> CREATE TABLE T (a NUMBER);
    
    Table created
    
    SQL> CREATE OR REPLACE PROCEDURE p1 AS
      2  BEGIN
      3     -- this statement is successful
      4     INSERT INTO t VALUES (2);
      5     -- this statement will raise an error
      6     raise_application_error(-20001, 'foo');
      7  END p1;
      8  /
    
    Procedure created
    
    SQL> INSERT INTO t VALUES (1);
    
    1 row inserted
    
    SQL> EXEC p1;
    
    begin p1; end;
    
    ORA-20001: foo
    ORA-06512: at "VNZ.P1", line 5
    ORA-06512: at line 2
    
    SQL> SELECT * FROM t;
    
             A
    ----------
             1
    

    오라클은 (P1)를 호출하기 전에 지점으로 트랜잭션을 롤백하고있다. 수행에는 반 일이 없다. 이 프로 시저 (P1)가 호출되지 않았던 것처럼입니다.

  3. ==============================

    3.나는 저스틴과 그의 통찰력이 올바른지 동의합니다. 추가 정보를 추가 : 오류가 발생하는 경우 응용 프로그램 개발자, 사용자가 명시 적으로 롤백 명령을 호출해야합니다. 이 방법은 또한 적절한 트랜잭션 블록으로 그룹화 문을 고려해야한다. 트랜잭션 블록과 롤백이 다른 기술에 의해 다르게 처리됩니다, 일부 연구는 당신이 잘 이해할 수 있도록하는 가치입니다.

    나는 저스틴과 그의 통찰력이 올바른지 동의합니다. 추가 정보를 추가 : 오류가 발생하는 경우 응용 프로그램 개발자, 사용자가 명시 적으로 롤백 명령을 호출해야합니다. 이 방법은 또한 적절한 트랜잭션 블록으로 그룹화 문을 고려해야한다. 트랜잭션 블록과 롤백이 다른 기술에 의해 다르게 처리됩니다, 일부 연구는 당신이 잘 이해할 수 있도록하는 가치입니다.

  4. from https://stackoverflow.com/questions/1468116/does-oracle-roll-back-the-transaction-on-an-error by cc-by-sa and MIT license