몇일전에 회사 디비 테이블에 업데이트 시켰는데
잘못 시켜서 모두 이상한 값으로 되었네요....
update 하기 전 상태로 되돌리는 기능같은것 없나요?
아님 처음에 어떤 기능을 주어서 update 하더라구요 나중에
잘못 되더라도 복원할수 있는 기능같은것 없나요?
너무 초보 같은 질문 했네요...^^
고수님들 답변 부탁합니다.....
결국 전체적인 transaction 이란 개념을 이해하셔야 해결이 될거 같은데요.. 자세히 설명하기엔 너무 길어서 .. ^^ 다른 자료를 참고하시고요 간략히 말씀드리면..
-- •Unchained mode ==> 이상태로 작업을 하신거겠죠..
begin tran 사용하게 되면 마지막에
commit 해야 업데이트 된다는 이야기인가요?
만약 엡데이트가 잘못되면 rollback하면 원상태로
돌아 오는것이 맞나요?
실 예를 들어보면 이게 맞는지 확인 해주세욤~~^^
begin tran
update tb_name set tb_no='1', tb_name='이순자'
where tb_cod='0000'
엔터 치면 update 되는건가요?~
그리고 나서
commit 하면 완료 되는것 맞나요~
commit 하지 않으면 다시 로그하면 원상태로 되어 있나요?
제가 설명하게 맞나요?
사이베이스는 오토컷밋 모드로 작동할수도 있습니다.
클라이언트 세팅이 어떻게되어있는지 알아보세요
set temporary option Auto_Commit = 'OFF'
체인드에 대한건 위에 분이 이야기하신것 같구요.
AUTO_COMMIT이 OFF로 되어있다면 COMMIT 수행전까지는 실제로 업데이트 되지 않습니다.
AUTO_COMMIT이 On로 되어있다면 무조건 COMMIT 이 됩니다.
만약 서버 전체적으로 모드를 바꾸시려면
set option Auto_Commit = 'OFF' 로 해야합니다.
temporary를 쓸경우 현재 세션만 적용됩니다.
예 .. 말씀하신대로 입니다.
update
==> 여기까지는 dirty page 에만 반영이 됨
후에 data 가 잘못되었다면 rollback 을 하시면 데이타에는 변경이 없습니다. 이상이 없다면 commit 을 하시면 되겠죠..
근데 한가지 더 고민을 하셔야 하는 부분은 lock 발생 문제 입니다.
위에서 update 실시후에 다른 user 가 다시 update 를 다른 세션에서
수행을 했다면. 나중에 실시한 세션에선 이전에 처리가 어떻게 되는지
알수 없으므로 이전문장이 rollback 이 되거나 commit 이 될때까지
기다려야 하므로 lock sleep 이 발생하게 됩니다.
관련해서 transaction / lock / isolation level 등을 찾아보시기 바랍니다.