반응형
mssql은 특정 테이블을 select 하는 도중에 해당 테이블에 update문이나 insert문, delete문을 실행할 수 없다.
당연한 것 처럼 들리지만, oracle은 select와 상관없이 수행이 가능하다.
트랜잭션이 많은 업무시스템에서는 치명적으로 다가 올 수 있다.
가령, 테이블 몇개를 join 하여 통계 형태의 화면을 만들었다고 가정하고, 사용자가 그 화면을 자주 많이 조회한다면, 해당 테이블은 조회가 끝날때 까지 insert, update, delete를 할 수 없게 된다. 반대로 테이블에 insert, update, delete 가 완료되지 않을 경우 select를 할 수가 없다. 업무가 느려질테고, 타 시스템과 인터페이스 이후 데이터를 업데이트 및 select 한다고 했을때, timeout이 발생하여 데이터가 유실 될 수도 있다.
mssql로 프로젝트를 수행한다면 DBA와 협의하여 아래 옵션으로 oracle과 유사하게 동작하도록 할 수 있다.
2005버전이후 부터 가능
-- 데이터베이스 정보 확인 (0은 OFF, 1은 ON상태를 의미)
SELECT
NAME, SNAPSHOT_ISOLATION_STATE,
SNAPSHOT_ISOLATION_STATE_DESC,
IS_READ_COMMITTED_SNAPSHOT_ON
FROM SYS.DATABASES
-- SNAPSHOT 모드 사용 활성화
ALTER DATABASE [DATABASENAME] SET ALLOW_SNAPSHOT_ISOLATION ON;
-- READ COMMITTED SNAPSHOT 모드 활성화
ALTER DATABASE [DATABASENAME] SET READ_COMMITTED_SNAPSHOT ON;
PS. DB에 접속한 사용자가 많을 경우 위 명령 실행 시 오래 걸리거나 무한정 기다릴 수 있다. 접속하지 않은 새벽시간에 하던가 아니면 SSMS(SQL Server Management Studio)를 사용하면 좋다.
https://docs.microsoft.com/ko-kr/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server
반응형
'개발 > database' 카테고리의 다른 글
[oracle] 오라클 컬럼 추가 수정 삭제 (0) | 2021.01.17 |
---|---|
[toad] 테이블명, 컬럼명 자동완성 (Ctrl+T) (1) | 2021.01.17 |
[mssql] 오라클의 LISTAGG 를 mssql에서 사용 (0) | 2021.01.17 |
[mssql] CONVERT 날짜 변환표 (0) | 2021.01.17 |
[mssql] 테이블 목록 조회 (0) | 2021.01.17 |
댓글