database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1022 게시물 읽기
No. 1022
update 후 롤백 기능같은것 없나요?
작성자
초보
작성일
2004-11-25 10:44
조회수
7,179

몇일전에 회사 디비 테이블에 업데이트 시켰는데

잘못 시켜서 모두 이상한 값으로 되었네요....

update 하기 전 상태로 되돌리는 기능같은것 없나요?

 

아님 처음에 어떤 기능을 주어서 update 하더라구요 나중에

잘못 되더라도 복원할수 있는 기능같은것 없나요?

 

너무 초보 같은 질문 했네요...^^

 

고수님들 답변 부탁합니다.....

이 글에 대한 댓글이 총 4건 있습니다.

결국 전체적인 transaction 이란 개념을 이해하셔야 해결이 될거 같은데요..  자세히 설명하기엔 너무 길어서 .. ^^ 다른 자료를 참고하시고요 간략히 말씀드리면..

 

--  Unchained mode  ==> 이상태로 작업을 하신거겠죠..

트랜잭션 후 자동 commit 이 수행
트랜잭션 복구를 위해 반드시 begin tran 을 명시해야 한다.
ASE의 default  transaction mode
 
-- Chained mode
묵시적으로 begin tran 수행
반드시 commit tran 또는 rollback tran 을 표시해야 한다.
 
advantage 에서 중요 update 작업시 begin tran 을 명시하고 작업을 하시고 확인이 끝나면 commit 을 해주시면 되겠네요..
 
이미 commit 이 끝난 data 인데 과거로 돌리고 싶다면,
2가지가 선행이 되어 있어야 됩니다.
 
1. backup 받은 데이타가 있어야 합니다..
2. dump database 를 통해 backup 을 받아 놓으셨다면,
잘못된 update 발생한 시점을 정확하게 알고
 
dump transaction 으로 tran log 를 받으신후 다시 새로운 database 를 만드셔서  ( 이런 상황이라면 아주 위급 상황이겠죠.. )
 
load transaction with until time option 을 사용하여 update 이전시간 까지의 database 상태로 복구가 가능하긴 합니다.. ^^
 
예 )
load transaction db from "*.dmp"
with until_time = "Mar 26 1997 12:35:59: 650PM"
 
새로운 database 를 만들어서 data 를 복구하신후 기존에 변경된 data 를 다시 복구하는 방법이 있을거 같네요..
coolrock님이 2004-11-25 13:55에 작성한 댓글입니다. Edit

begin tran  사용하게 되면 마지막에

commit 해야 업데이트 된다는 이야기인가요?

만약 엡데이트가 잘못되면 rollback하면 원상태로

돌아 오는것이 맞나요?

 

실 예를 들어보면 이게 맞는지 확인 해주세욤~~^^

 

begin tran

update tb_name set tb_no='1', tb_name='이순자'

where tb_cod='0000'

엔터 치면 update 되는건가요?~

그리고 나서

 

commit 하면 완료 되는것 맞나요~

commit 하지 않으면 다시 로그하면 원상태로 되어 있나요?

 

제가 설명하게 맞나요?

 

 

 

 

 

 

 

 

초보님이 2004-11-25 15:51에 작성한 댓글입니다. Edit

사이베이스는 오토컷밋 모드로 작동할수도 있습니다.

 

클라이언트 세팅이 어떻게되어있는지 알아보세요

 

       set temporary option Auto_Commit = 'OFF'

 

체인드에 대한건 위에 분이 이야기하신것 같구요.

 

AUTO_COMMIT이 OFF로 되어있다면 COMMIT 수행전까지는 실제로 업데이트 되지 않습니다.

AUTO_COMMIT이 On로 되어있다면 무조건 COMMIT 이 됩니다.

만약 서버 전체적으로 모드를 바꾸시려면

       set  option Auto_Commit = 'OFF' 로 해야합니다.

temporary를 쓸경우 현재 세션만 적용됩니다.

 

 

장종훈(장종훈)님이 2004-11-25 18:02에 작성한 댓글입니다.

예 .. 말씀하신대로 입니다.

 

begin tran

 

update

 

==> 여기까지는 dirty page 에만 반영이 됨

 

후에 data 가 잘못되었다면 rollback 을 하시면 데이타에는 변경이 없습니다. 이상이 없다면 commit 을 하시면 되겠죠..

 

근데 한가지 더 고민을 하셔야 하는 부분은 lock 발생 문제 입니다.

위에서 update 실시후에 다른 user 가 다시 update 를 다른 세션에서

수행을 했다면. 나중에 실시한 세션에선 이전에 처리가 어떻게 되는지

알수 없으므로 이전문장이 rollback 이 되거나 commit 이 될때까지

기다려야 하므로 lock sleep 이 발생하게 됩니다.

 

관련해서 transaction / lock  / isolation level 등을 찾아보시기 바랍니다.

 

coolrock님이 2004-11-25 21:35에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1027표준편차 구하는 Function은 SYBASE에 없는걸까요? [1]
박문구
2004-12-06
5075
1026테이블추가에 대한 질문
초보
2004-12-03
4602
1023날짜를 기본으로하여 조건검색부분 [1]
안진숙
2004-11-25
6054
1022update 후 롤백 기능같은것 없나요? [4]
초보
2004-11-25
7179
1020웹에서 동일 sp호출했으나 결과가... [2]
초보
2004-11-16
4025
1019사이베이스에서 오라클로 마이그레이션하는데요... [1]
최순구
2004-11-16
5057
1018[질문] SQL Advantage 사용시 Grid 로 출력된 결과물 클릭시 종료되는 현상 [1]
감자
2004-11-15
3853
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다