본문 바로가기

문과 코린이의, [C#] 기록/문과 코린이의, [SQL] 기록

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (백업과 복원, 백업시 초보자 주의사항, MDF, LDF 파일로 복원하기, MDF, LDF 관계 이해, 트랜잭션)

반응형

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (백업과 복원, 백업시 초보자 주의사항, MDF, LDF 파일로 복원하기, MDF, LDF 관계 이해, 트랜잭션)

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (백업과 복원, 백업시 초보자 주의사항, MDF, LDF 파일로 복원하기, MDF, LDF 관계 이해, 트랜잭션)

 


< 참고 강의 영상 >

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.3 대시보드 - 인프런 | 강의 (inflearn.com)

 

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.3 - 인프런 | 강의

데이터베이스 구축에서부터 테이블 생성, 각종 SQL 쿼리문을 사용해서 데이터베이스 내 데이터를 조작, 변경할 수 있는 강의입니다., - 강의 소개 | 인프런...

www.inflearn.com

2022.01.28 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제, 기본키명 직접 지정 방법)

 

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ)

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제, 기본키명 직접 지정 방법) < 참고 강의 영상 > MSSQL Server 20..

vansoft1215.tistory.com

2022.02.16 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (날짜 관련해서 많이 사용하는 업무 처리 문제들, 최종 실습 테이블, 숫자 관련 데이터 타입)

 

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (날짜 관련해서 많이 사용하는 업무 처리 문

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (날짜 관련해서 많이 사용하는 업무 처리 문제들, 최종 실습 테이블, 숫자 관련 데이터 타입) < 참고 강의 영상 > MSSQL Server 20.

vansoft1215.tistory.com

2022.02.17 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용(최종 실습 스크립트 작성하기, 참조 무결성, INSERT for 조인, 뷰 실습)

 

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용(최종 실습 스크립트 작성하기, 참조 무결성,

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용(최종 실습 스크립트 작성하기, 참조 무결성, INSERT for 조인, 뷰 실습) < 참고 강의 영상 > MSSQL Server 2016 기반의 데이터베이스..

vansoft1215.tistory.com


1. 백업과 복원

- 백업시 어느 폴더에 파일이 저장되는가? 

 * .bak

 

- 백업파일이 저장되는 폴더는 '쓰기'권한을 부여해준다.

 * 백업시 뭔가 쓰기 관련 에러가 난다면, 해당 폴더의 쓰기 권한을 체크한다

 * 서버에 악성 바이러스가 올려지는 것을 막기 위해 금지시킨 경우

 

- 서버가 갑자기 사망(접속이 안됨)시, DB 백업과 복원은 어떻게?

 * 먼저 웹 서버 문제인지, DB서버 문제인지 체크한다. (규모가 크지 않은 경우, 웹-DB서버를 함께 운영하는 경우도 존재)

 * 물리적 서버(HDD)에 존재하는 경우, 이를 분리해서 MDF / LDF 파일을 확보해, 복원을 수행한다.

 

 

ex 1. 백업 방법

DB 백업
ok 누르면 백업 완료

 * 백업 파일은 다른 폴더에도 저장 가능함. (제거(Remove) 후, Add(추가)를 통해 가능)

** 그러나 C드라이브 루트 디렉토리 자체에서는 불가능함. (C드라이브의 파일 내에서 진행해야 함) 

백업 파일 확인

 

 

ex 2. 백업 복원

백업 복원
백업 내용 가져오기
ok 누르면 백업 복원 완료

 


2. 백업시 초보자 주의사항

- 다른 폴더로 백업파일 저장시 '쓰기'권한이 없으면, 저장이 안되므로 주의

 ex. C드라이브에 바로 저장하려고 할 경우 => 보통 쓰기권한을 막아놓음.

 * 오류 메시지 자체가 이러한 오류로 표시되서 경고해준다. (액세스 거부)

 

- 기존에 백업해놓은 파일에 덮어쓰기가 가능한가?

 * 기본적으로 덮어쓰기가 가능하다. 

 * 따라서 매번 별도로 백업파일을 만들려고 하지 말고, 그냥 덮어쓰면 된다.

 ** 그러나 덮어쓴 백업파일이, 데이터 변조가 일어날수도 있음. 이러한 상황을 주의할 필요 존재

 


3. MDF, LDF 파일로 복원하기

- 기본적인 백업과 복원 외에도, 파일로 복원하는 방법도 잘 숙지해야 한다.

- 갑작스런 장애 발생시, 최우선적으로 MDF/LDF 파일을 확보하도록 한다.

- 반드시, MDF/LDF 파일 모두를 가지고 복원하도록 한다.

 * 2개 파일을 모두 가지고 복원하는 것이 가장 좋으며, 갑작스러운 장애시 바쁘다고 MDF 파일만 확보하면 안된다.

- 기본적으로 MSSQL 설치폴더 내, DATA폴더에 생성된다.

 ex. 7TO7.mdf / 7TO7_log.ldf

- SSMS에서 복원시에는 '연결' 메뉴를 통해 복원해주면 된다.

 

복사해서 다른 외장하드 등에 안전하게 먼저 확보가 필요
Attach(연결)을 통해 데이터베이스 MDF/LDF파일 연결

 


4. MDF, LDF 관계 이해

- 데이터베이스명.MDF : 실제 물리적 데이터 파일

- 데이터베이스명_log.LDF : 트랜잭션 로그 파일

 * 이 둘의 관계는 트랜잭션의 의미와 개념을 이해하면 쉽게 파악 가능

 * 트랜잭션 (SELECT + INSERT + UPDATE 한번에 진행) => LDF 파일 => MDF 파일 거치기 [데이터 무결성 보장]

 * 문제 발생 X : Commit / 문제 발생 O : Rollback

 ex. 은행 시스템에서의 다운 방지

 

 


5. 트랜잭션 

- Transaction : 어떤 거래 (DB처리)를 할 때, 단계별로 나눠 처리하는 것을 의미.

 * INSERT / UPDATE / DELETE 등의 쿼리문을 복합적으로 수행할 때

 * 정전 등 갑작스런 문제 발생시 되돌릴 수 있음.

 * 즉, 쿼리 처리를 최종 반영(COMMIT)하기 전에, 처음으로 되돌릴 수 있도록 해준다. 이 기능을 롤백(ROLLBACK)이라고 한다.

- ROLLBACK기능을 통해, 복합 쿼리 수행시 완전 처음 상태로 돌아갈 수 있게 해준다.

- COMMIT과 ROLLBACK 기능으로부터, 보다 안정적인 데이터 처리 작업을 할 수 있다.

 ex. 은행 입출금 업무 및 송금처리

- 프로그래밍 언어로 DB연동 프로그램을 개발시에도, 이러한 트랜잭션 처리가 적용되어 운영된다.

- 쿼리 수행시에도, ROLLBACK으로 해놓고, 미리 쿼리 결과를 보면서(PREVIEW) 작업 가능하다. ( COMMIT이 되지 않았기 때문에, 최종 적용된 것은 아니기 때문 - 물리적 실제 파일에 적용 X )

 

SSMS 종료시, 만약 커밋되지 않은 트랜잭션이 있는 경우(전체가 수행되지 못하고 중간에 종료되는 경우), 이러한 메시지가 나타난다.

 

 ex. 

------------------------------------------------------------------
-- 트랜잭션(TRANSACTION)
------------------------------------------------------------------
-- 먼저 SELECT로 데이터 확인

SELECT * FROM dbo.tbl_sales2

-- [1] 명시적 트랜잭션 : 트랜잭션 이름을 명시함.
-- 명시하지 않은 쿼리문들은 사실 내부적으로 AUTO COMMIT이 된다.
-- 트랜잭션 쿼리문 끝에서 세미콜론(;)은 선택적이다.
-- DELETE만 블록 지정해서 실행되면 완전 삭제되니 주의할 필요가 있다.
-- 반드시 트랜잭션 쿼리문 전체를 블록으로 지정하고 실행한다.

-- 트랜잭션 시작 
BEGIN TRANSACTION -- = BEGIN TRAN
	-- 복합 쿼리문 작성 (모두 성공하거나 모두 실패만 됨.)
	DELETE FROM dbo.tbl_sales2 WHERE p_id = 'GS102'
	SELECT * FROM dbo.tbl_sales2
	INSERT INTO dbo.tbl_sales2 VALUES (1003, 2, 'GS105',1,220000);
	SELECT * FROM dbo.tbl_sales2
-- 여기까지만 수행한 후, 종료하고자 하면, 커밋되지 않은 트랜잭션이 있다고 팝업창이 뜸. (COMMIT할 것인지 ROLLBACK할것인지 결정)


/* ROLLBACK은 처리 결과가 되돌려지고, COMMIT은 최종 적용된다. */
-- = ROLLBACK = ROLLBACK TRAN
ROLLBACK TRANSACTION -- LDF파일 기록 후, MDF파일로 가지 않고, 원래 상태로 모두 돌아감 
 -- 즉 출력은 삭제되어 나오겠지만, 다시 보면 삭제가 안 되어 있을 것. (실제 레코드 변경 x)
-- =COMMIT = COMMIT TRAN
COMMIT TRANSACTION -- LDF파일 기록 후, 최종 MDF파일 기록 
-- 트랜잭션 끝

1) AUTO COMMIT

/* 아무것도 써주지 않더라도, 쿼리문 하나마다 AUTO COMMIT이 이루어짐. (앞뒤로 자동으로 트랜잭션이 이뤄진 것) */
-- BEGIN TRANSACTION
SELECT * FROM dbo.tbl_sales2
-- COMMIT TRANSACTION
-- BEGIN TRANSACTION
DELETE FROM dbo.tbl_sales2 WHERE p_id = 'GS102'
-- COMMIT TRANSACTION

2) 트랜잭션 ROLLBACK 기능을 활용하여, 결과 미리보기

/* 트랜잭션 ROLLBACK 기능을 활용하여 결과 미리보기*/
BEGIN TRANSACTION;
	SELECT * FROM dbo.tbl_sales2
	DELETE FROM dbo.tbl_sales2 WHERE p_id = 'GS101';
	SELECT * FROM dbo.tbl_sales2
ROLLBACK TRANSACTION;

위는 변화 전, 아래는 변화 후


3) 트랜잭션 카운트 (TRANCOUNT)

BEGIN TRAN
	SELECT @@TRANCOUNT -- 트랜잭션 카운트 화면에 출력 (1 출력)
	UPDATE dbo.tbl_sales2 SET qty = 10 WHERE s2_num=1003
	SELECT * FROM dbo.tbl_sales2
	SELECT @@TRANCOUNT -- 트랜잭션 카운트 화면에 출력 (1 출력)
ROLLBACK -- COMMIT / ROLLBACK으로 마무리 짓지 않으면, 트랜잭션은 계속 남아있음.

SELECT @@TRANCOUNT -- 트랜잭션 카운트 화면에 출력 (0 출력)

4) TRANSACTION : TRY ~ CATCH

- 기본적으로 트랜잭션은 되면 다 되고, 안되면 다 안되게끔 만드는 것이다. 즉, 100% 적용되거나, 100% 적용되지 않도록 보장하는 것이다.

- TRY...CATCH 구문은 데이터베이스 연결을 닫지 않는 모든 실행 오류 catch한다.

- TRY 블록 다음에는, 곧바로 연결된 CATCH 블록이 이어져야 한다.

- TRY...CATCH구문은 여러 일괄 처리에 걸쳐서 사용할 수 없다. 즉 여러 Transact-SQL 블록에 걸쳐 있을 수 없다.

-- 데이터 확인
SELECT * FROM dbo.tbl_sales2

BEGIN TRY
	BEGIN TRANSACTION;
		INSERT INTO dbo.tbl_sales2 VALUES(1004,1,'GS104',1,220000);
		INSERT INTO dbo.tbl_sales2 VALUES(1004,2,'GS105',1,500000);
		SELECT * FROM dbo.tbl_sales2

		-- TRY~CATCH구문을 통해 오류를 잡아서 롤백시키지 않으면, 위 쿼리들이 적용되어 버림.
		SELECT 1/0; -- ERROR발생

	COMMIT TRANSACTION;
END TRY
BEGIN CATCH
	ROLLBACK TRANSACTION; -- 오류를 발생시킨 거래(트랜잭션) 자체를 모두 롤백해라.
END CATCH

SELECT @@TRANCOUNT -- 0개 나옴

* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형