728x90
반응형

전체 글 768

[MSSQL] 트랜잭션(Transaction)

이번에 설명한 내용을 MSSQL의 Transaction입니다. 설명에 앞서 우리가 사용하는 MSSQL 데이터베이스에 대해서 생각해 본다면 SQL 서버에 그림과 같이 데이터 베이스가 생성되어 있고 사용자가 데이터베이스에 조회 요청을 하면 일반적으로 사용자는 아래의 그림과 같이 결과를 전달 받는다고 생각합니다. 논리적 데이터 베이스 구조 이것은 우리가 논리적으로 생각하는 데이터 베이스의 모습입니다. 하지만 데이터라면 어딘가에 저장되어 있어야 합니다. 물리적인 데이터 베이스는 어떻게 구성되어 있을까요? 버전별로 다르겟지만 "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA" 위치로 이동하게 되면 mdf, ldf 파일이 존재하는 것을 확인..

IT/SQLD 2023.10.23

MSSQL 대량 데이터 삭제 요령

아래글은 SQL Server 대량 데이터 삭제 · GitHub 에서 갖고왔습니다. 이글은 MS SQL Server에서 수백만건의 데이터 행을 삭제할때 성능감소를 낮게 유지하기 위함을 위한 가이드이다. 전제조건은 다음과 같다. 특정테이블 ‘ExampleTable’ 에 있는 수백만건이 있다. TRUNCATE 문을 권한불충분이나 다른 문제로 수행할 수 없는 조건이다. 이때 당신이 단일 트랜잭션에서 테이블에 있는 모든 행을 제거하려만 다음과 같이 해야 한다. DELETE FROM ExampleTable 위 구문을 수행하는 순간 SQL서버는 트랜잭션을 처리하기 위하여 트랜잭션 로그에 모든 변경 사항을 작성하고, 완전한 테이블 잠금을 수행할 것이다. 위 설명은 잠재적으로 큰 문제를 몇가지 가지고 있다. 트랜잭션 로..

IT/SQLD 2023.10.23

MSSQL 로그파일 트랜잭션 내용 정리 (오류 해결 :트랜잭션 로그가 꽉 찼습니다.)

로그파일 트랜잭션 오류 해결 방법 모음 1. DB 의 현재 사용량 확인 Use [ DB명] DBCC SQLPERF(LOGSPACE) 로그스페이스 설정값에 대해 확인 SP_HelpDB [DB명] 실제 위치랑 사용량 확인 위에 쿼리 실행시 조회 위에 내용이 조회가 되게 됩니다. 2. MDF (Database File) 파일 용량을 현재 사용량으로 축소 Use [DB명] DBCC SHRINKDATABASE ([DB명], TRUNCATEONLY) 3. MDF (Database File) 파일 용량을 200MB 로 축소 Use [DB명] DBCC SHRINKDATABASE ([DB명], 200) 4. LDF (Log File) 파일 용량을 현재 사용량으로 축소 Use [DB명] DBCC SHRINKFILE ([D..

IT/SQLD 2023.10.23

mssql transaction log 파일 강제 삭제

뭔가 실수로 transaction log가 백업되지 않아 커지는 문제가 발생했다면 ldf 파일을 강제로 줄이는 방법이 있습니다. 2008 버전 정도에서는 backup log [db명] with truncate_only 라는 쿼리를 실행해 ldf 파일을 비울 수 있습니다. 만약 truncate_only' is not a recognized backup option 라는 오류가 발생하는 버전이라면 backup log [db명] to disk='null' 이라는 쿼리를 실행해 ldf 파일을 비울 수 있습니다. 간혹 백업 처리 과정마저도 문제가 발생하는 경우는 Database 백업 모드를 simple로 조정 후 shrinkfile('db log logical name' , 1) 이라는 쿼리를 실행하면 log 파..

IT/SQLD 2023.10.23

[MSSQL] 트랜잭션 로그파일 삭제 및 잘라내기

MSSQL 트랜잭션 로그파일 삭제 및 줄이는 방법 우선 DB와 로그 크기 확인을 위해 아래와 같은 쿼리를 실행해보자. SELECT * FROM sys.master_files WHERE database_id like '%database_name%' 데이터베이스(DB)와 로그(LOG) 크기를 축소하기 위한 쿼리문. 로그는 "데이터베이스명_LOG"으로 대부분 되어 있음. - 로그 백업 및 잘라내기 (잘라내기를 더 권장함) 1. BACKUP LOG 'DB명' TO '디바이스명(장치명)' -- 로그백업 2. BACKUP LOG 'DB명' WITH TRUNCATE_ONLY -- 로그 잘라내기 - 로그 축소하기(TRUNCATEONLY를 더 권장함) 1. DBCC SHRINKFILE('로그파일명', 파일크기) -- 파..

IT/SQLD 2023.10.23

[MSSQL] 트랜잭션 로그 보기

트랜잭션 로그 조회 데이터베이스에서 발생하는 행위들이 저장되는 트랜잭션 로그를 조회해보자 fn_dblog(시작 LSN, 종료 LSN) 시작 LSN, 종료 LSN이 NULL일 경우 트랜잭션 로그 파일의 모든 로그 결과를 반환한다. SELECT * FROM fn_dblog(NULL, NULL) 결과 데이터 특정 테이블의 트랜잭션 로그 AllocUnitName 칼럼에서 테이블의 이름을 확인할 수 있다. SELECT [Current LSN], [Operation], [Transaction ID], [AllocUnitId], [AllocUnitName], [Begin Time], [End TIme] FROM fn_dblog (NULL, NULL) WHERE AllocUnitName = 'dbo.ggmouse' 특..

IT/SQLD 2023.10.23

[MS-SQL] IN / NOT IN

IN / NOT IN IN : 지정된 값이 하위 쿼리 또는 목록의 모든 값과 일치하는지를 확인합니다. NOT IN : 지정된 값이 하위 쿼리 또는 목록의 모든 값과 일치하지 않는지를 확인합니다. 쿼리문 SELECT * FROM A_TABLE WHERE COL1 IN ('VALUE1', 'VALUE2'); -- COL1이 'VALUE1', 'VALUE2'와 일치하는 값을 출력 SELECT * FROM A_TABLE WHERE COL1 NOT IN ('VALUE1', 'VALUE2'); -- COL1이 'VALUE1', 'VALUE2'와 일치하지 않는 값을 출력 출처 : [MS-SQL] IN / NOT IN (tistory.com)

IT/SQLD 2023.10.22

[SQL] (NOT)EXISTS 와 (NOT)IN 비교하기

최근 작업하고 있는 모듈에서 A 테이블과 B 테이블을 비교하여 B 테이블에 없는 값을 A 테이블에서 가져오는 작업을 진행하고 있다. 처음에는 NOT IN 구문을 사용하여 비교하고 가져오고 있었는데, NOT EXISTS 를 사용하면 더 효과적이라는 말을 듣고, 궁금증에 여기저기 검색해보았다. 결론적으로 말하자면 조회 건수가 많지 않은 쿼리에서는 성능이 비슷하지만, 조회 건수가 급격하게 늘어나면 (NOT)EXISTS 구문이 훨씬 효과적이라는 것이다. 초기 데이터 테이블은 rel1 , rel2 테이블을 생성하였다. rel1 rel2 1. (NOT) IN SELECT * FROM rel1 WHERE number IN (SELECT number FROM rel2); SELECT * FROM rel1 WHERE n..

IT/SQLD 2023.10.22

WHERE : 단일 조건식 지정

WHERE절은 SELECT, UPDATE, DELETE문 등에서 특정 레코드에 대한 조건을 설정할 때 사용되는 구문이다. 단순한 조건식은 하나의 컬럼과 특정 컬럼값을 비교하는 식을 들 수 있다. 예를 들어, WHERE ID = 1라는 조건식은 ID가 1인 레코드를 의미한다. 아래는 다양한 단일 조건식들 몇 가지를 예를 들어 본 것이다. 예제 WHERE : 복수 조건식 지정 여러 개의 조건식을 WHERE절에서 표현할 경우는 조건식들을 AND나 OR로 연결한다. 두 조건이 동시에 만족되어야 한다면 WHERE 식1 AND 식2과 같이, 두 조건중 하나만이라도 만족되면 된다면 WHERE 식1 OR 식2과 같이 표현한다. NOT은 해당 조건의 반대 조건을 의미한다. 즉, 식 'NOT 조건1' 은 조건1이 거짓일 ..

IT/SQLD 2023.10.22
728x90
반응형