2008-12-02 1 views
2

은 내가 오라클 데이터베이스를 업데이트하기 위해 사용하고이 코드asp.net에서 Oracle을 업데이트 할 때 "Commit"이 필요합니까?

protected void btnUpdateAddress_Click(object sender, EventArgs e) 
    { 
     sdsAddressComparison.Update(); 
    } 

에게 있습니다. SQL Navigator에서 update sql 코드를 실행할 때 "Commit"을 입력하거나 커밋 버튼을 눌러야합니다.

ASP.NET 어딘가에 "커밋"코드를 작성해야합니까? 그렇다면 어떻게 그리고 어디서 할 수 있습니까?

답변

4

일반적으로 커밋이 필요하지 않습니다.

그러나 트랜잭션을 사용하도록 코드를 작성할 수 있으며 트랜잭션이 완료되면 커밋을 호출 할 수 있습니다.

E.G. (정기) :

try { 
        // Open connection 
        dbConn.Open(); 
        //DB Update Code Here 
    } 
    catch (Exception ex) { 
        throw; 
    } 
    finally { 
        // Close database connection 
        dbConn.Close(); 
    } 

예를 들어, (트랜잭션으로) :

try { 
        // Open connection & begin transaction 
        dbConn.Open(); 
        dbTran = dbConn.BeginTransaction(); 
        
     //DB Update Code Here 
        // Commit transaction 
        dbTran.Commit(); 
    } 
    catch (Exception ex) { 
        // Rollback transaction 
        dbTran.Rollback(); 
        throw; 
    } 
    finally { 
        // Close database connection 
        dbConn.Close(); 
    } 
0

그냥 해명 .... 내가 SQL 서버 트랜잭션에 대해 이야기하고 있지 않다 .... 나는 중 하나를 사용할 때 일반적으로 커밋 명령을 필요로 오라클 업데이트에 대해 이야기하고있다 SQL 탐색기 또는 SQL Plus

SQL Navigator에서이 데이터를 업데이트 할 수 있지만 ASP.NET을 사용할 때 업데이트하지 않기 때문에 내가 게시하는 이유가 있습니다.

+0

그래, 당신도 오라클에서 거래를 할 수 있습니다. –

+0

나는 거래를 할 수 있다는 것을 알고 있지만 ..... 나는 거래에 대해 묻지 않는다. 오라클 테이블을 업데이트하는 방법에 대해 묻습니다. 커밋이 필요한 경우, 그렇다면 어떻게해야합니까? –

+0

트랜잭션은 SQL Server (또는 다른 RDBMS)와 관련된 기능이 아니라 일반적인 개념입니다. DML (select/insert/update/delete) 문과 동일합니다. –

3

기본적으로 ASP.Net 코드와 데이터베이스 (ODBC, OLE DB, JDBC 등)에 대한 대부분의 다른 클라이언트 API는 자동 커밋 모드로 실행됩니다. 즉, 명령문이 성공적으로 실행될 때마다 결과가 확약됩니다. 이러한 종류의 기본 모드에서 실행중인 경우 업데이트를 명시 적으로 커밋 할 필요가 없습니다.

반면에 명시 적 트랜잭션에 업데이트를 적용하는 것이 일반적으로 중요합니다. 하나의 논리적 비즈니스를 변경하기 위해 여러 업데이트를 실행해야하는 경우 기본 자동 커밋 모드 매우 가난한 사람입니다. 여기에있는 전형적인 예는 50 달러를 인출하기 위해 A 계정을 업데이트 한 다음 50 달러를 예금하기 위해 B 계정을 업데이트하고 자동 커밋이 활성화되어 있기 때문에 두 개의 다른 트랜잭션이 끝나면 첫 번째 트랜잭션이 성공할 가능성이 있습니다 트랜잭션이 실패하고 시스템은 $ 50의 트랙을 잃습니다.

그래서 일반적으로 Brian이 트랜잭션을 사용하고 명시 적 커밋을 수행 한 위치와 유사한 코드를 작성하려고합니다. 그러나 기본적으로 업데이트 할 필요가 없으며 업데이트가 자동 커밋됩니다.

+0

+1 : 그렇습니다. 자동 커밋은 아주 나쁜 것 같습니다. 관련 문제가 아직 명확하지 않은 경우 오라클의 성능에도 영향을 미친다 고 덧붙입니다. –

0

SQL Navigator에서 보이는 동작은 아마도 옵션 설정에 의해 결정됩니다.

나는 SQL Navigator을 사용하지 않았지만 Quest Software에서도 사용하는 TOAD을 사용합니다. 옵션 대화 상자에는보기 -> 두꺼비 옵션 ...과 Oracle-> 트랜잭션 노드가 있습니다.

다음과 같은 관련 설정있다

:

  • [] 모든 문 (체크 박스)

  • 연결을 닫은 후 커밋 : (라디오 선택)

    • ()
    • 커밋
    • () 롤백
    • () 변경 사항이 감지되면 커밋/롤백하거나 dmbs_transaction에 대한 권한 부족으로 인해 검색을 수행 할 수 없습니다.

그래서 당신은 커밋 버튼을 누르면 (또는 "커밋"을 입력) 할 필요가 없습니다 있도록 설정을 변경할 수 있지만 커밋 이후 일반적으로 나쁜 관행 것은 명시 적으로해야 뭔가 (또는 명시 적으로 롤백).

0

자동 커밋은 SQL * Plus에서도 사용할 수 있습니다.

SET AUTOCOMMIT ON 
SET AUTOCOMMIT OFF 

또는

SET AUTOCOMMIT 100 

사용 SHOW의 AUTOCOMMIT 현재 설정을 볼 수 있습니다.

하지만 ...이 설정이 싫습니다. 의미심장 한 작업 단위의 끝에서 커밋하지 않습니다.

관련 문제