Q&A

  • Commit 한 데이타가 없어집니다..
안녕하십니까 델가족 여러분



너무도 답답해서 질문을 합니다.

오라클8i를 사용합니다 개발툴은 델파이5 고요

데이타베이스 인스펙터중 트랜솔루션은 tiDirtyRead을 선택 했습니다.



사례1.



데이타를 한건 입력하기전 데이타베이스 스타트트랜잭션을 걸고

한건 입력하면서 데이타베이스 Commit 을 합니다.

그렇게 여러건이 입력되죠...

그러다 사용중인컴(노트북)이 에러를 내면서 다운되면 지금까지 10여분간 입력한

데이타(서버에저장된)가 모두 날아갑니다.



사례2.

현재 서버에 있는데이타를 불러와서 출력작업을 합니다

그런중에 출력하던 컴(노트북)이 에러를 내면서 다운이 됩니다.

그러면 Select해온 데이타(서버에저장된)가 날아갑니다.



고수님들 왜 이런 현상이 발생 될까요...쩝

Delete 명령도 없는데... 왜 에러난다고 데이타가 삭제되고... Select 한데이타가

삭제되고.... 오라클버그인가요?....

계약 끝기게 생겼습니다...



다음은 입력시 코드입니다.

main.DBAmedia.startTransaction;

try

with Datamd.SQLpm do begin

close;

sql.clear;

sql.add('insert into pmdb');

sql.add('(pm_pmyy, pm_pmmm, 중략.. pm_bigo)');

sql.add('values');

sql.add'(:p_pmyy, :p_pmmm, 중략..:p_bigo)');

ParamByName('p_pmyy').asstring := ac_bmyy.text; //년

ParamByName('P_pmmm').asstring := ac_bmmm.text;

중 략...

ParamByName('p_bigo').asstring := Mg_bigo.text;

execsql;

close;

end;

main.DBAmedia.commit;

Except

begin

main.DBAmedia.rollback;

showmessage('입력실패.!');

Exit;

end;

end;

ac_bmyy.SetFocus;

2  COMMENTS
  • Profile
    마으미 2001.06.22 10:43
    ApplyUpdates가 없네요..

    CommitUpdates도 없고요..



    Apply는 실재 DB에 write하는 역활을 하고요..

    Commit은 섰던 버퍼를 비우는 역활을 합니다.



    노트북이 따운된 것은 아무래도

    commit을 안해줘서 따운된거 같은데.. (아닐수도 있구요..)



    그럼 ..



    아폴론 wrote:

    > 안녕하십니까 델가족 여러분

    >

    > 너무도 답답해서 질문을 합니다.

    > 오라클8i를 사용합니다 개발툴은 델파이5 고요

    > 데이타베이스 인스펙터중 트랜솔루션은 tiDirtyRead을 선택 했습니다.

    >

    > 사례1.

    >

    > 데이타를 한건 입력하기전 데이타베이스 스타트트랜잭션을 걸고

    > 한건 입력하면서 데이타베이스 Commit 을 합니다.

    > 그렇게 여러건이 입력되죠...

    > 그러다 사용중인컴(노트북)이 에러를 내면서 다운되면 지금까지 10여분간 입력한

    > 데이타(서버에저장된)가 모두 날아갑니다.

    >

    > 사례2.

    > 현재 서버에 있는데이타를 불러와서 출력작업을 합니다

    > 그런중에 출력하던 컴(노트북)이 에러를 내면서 다운이 됩니다.

    > 그러면 Select해온 데이타(서버에저장된)가 날아갑니다.

    >

    > 고수님들 왜 이런 현상이 발생 될까요...쩝

    > Delete 명령도 없는데... 왜 에러난다고 데이타가 삭제되고... Select 한데이타가

    > 삭제되고.... 오라클버그인가요?....

    > 계약 끝기게 생겼습니다...

    >

    > 다음은 입력시 코드입니다.

    > main.DBAmedia.startTransaction;

    > try

    > with Datamd.SQLpm do begin

    > close;

    > sql.clear;

    > sql.add('insert into pmdb');

    > sql.add('(pm_pmyy, pm_pmmm, 중략.. pm_bigo)');

    > sql.add('values');

    > sql.add'(:p_pmyy, :p_pmmm, 중략..:p_bigo)');

    > ParamByName('p_pmyy').asstring := ac_bmyy.text; //년

    > ParamByName('P_pmmm').asstring := ac_bmmm.text;

    > 중 략...

    > ParamByName('p_bigo').asstring := Mg_bigo.text;

    > execsql;

    ApplyUpdates;

    > main.DBAmedia.commit;

    CommitUpdates;



    > close;

    > end;

    > Except

    > begin

    > main.DBAmedia.rollback;

    > showmessage('입력실패.!');

    > Exit;

    > end;

    > end;

    > ac_bmyy.SetFocus;

  • Profile
    아폴론 2001.06.22 19:21
    몇Page나 지난 내용을 답해 주셔서 감사 합니다.



    제가 알기론 Commit은 데이타를 오라클DB에 저장하는 명령어로 알고 지금껏 그렇게

    사용하고 있습니다.

    아래 구문으로 한건을 입력하고 다른컴에서 조회 해 보면 입력된 한건이 서버에 잘 저장이 되어있습니다.

    먼저번 사례에서도 10분간 50건을 입력하면 50건이 서버에 잘 저장이 된 상태입니다.

    그러다 사용중인 프로그램을 종료 하지 않은 상태에서 컴이 에러를내면서 다운되면

    입력되어 있던 50건이 모두 삭제됩니다.



    그러면 저 50건은 결국 서버에 저장이 않되었었다는 결론이 되나요?

    그렇지는 안은것 같아요 다른컴에서 서버데이타를 읽어서 조회 해보면 저장되어 있거든요



    두번째 사례에서도 몇일전에 입력된 서버에 있는 데이타를 불러 출력 하려다 컴이 다운되면 Select한 데이타가 삭제 됩니다.



    제 상식으로는 이해 할 수 없는 그런사례입니다.



    제가 쓰지 않았던 아래구문요... 일반적으로 쓰는구문인가요?

    한번도 써보지 않은 구문인데 ... 시간되시면 한번더 설명 부탁 드립니다..



    감사 합니다.

    execsql;

    ApplyUpdates;

    main.DBAmedia.commit;

    CommitUpdates;





    > ApplyUpdates가 없네요..

    > CommitUpdates도 없고요..

    >

    > Apply는 실재 DB에 write하는 역활을 하고요..

    > Commit은 섰던 버퍼를 비우는 역활을 합니다.

    >

    > 노트북이 따운된 것은 아무래도

    > commit을 안해줘서 따운된거 같은데.. (아닐수도 있구요..)

    >

    > 그럼 ..

    > >

    > > 다음은 입력시 코드입니다.

    > > main.DBAmedia.startTransaction;

    > > try

    > > with Datamd.SQLpm do begin

    > > close;

    > > sql.clear;

    > > sql.add('insert into pmdb');

    > > sql.add('(pm_pmyy, pm_pmmm, 중략.. pm_bigo)');

    > > sql.add('values');

    > > sql.add'(:p_pmyy, :p_pmmm, 중략..:p_bigo)');

    > > ParamByName('p_pmyy').asstring := ac_bmyy.text; //년

    > > ParamByName('P_pmmm').asstring := ac_bmmm.text;

    > > 중 략...

    > > ParamByName('p_bigo').asstring := Mg_bigo.text;

    > > execsql;

    > ApplyUpdates;

    > > main.DBAmedia.commit;

    > CommitUpdates;

    > > close;

    > > end;

    > > Except

    > > begin

    > > main.DBAmedia.rollback;

    > > showmessage('입력실패.!');

    > > Exit;

    > > end;

    > > end;

    > > ac_bmyy.SetFocus;