본문 바로가기
프로그래밍/DB

MSSQL 운영 DB에서 개발 DB로 데이터 이관

by @GodWin 2024. 12. 15.

-

 

-

MSSQL에서 운영 DB에서 개발 DB로 데이터를 이동할 때, "그냥 데이터만 옮기면 되겠지?" 하고 생각할 수 있지만, 실제로는 몇 가지 중요한 점검 사항이 필요합니다.
데이터 이동 후 시스템이 정상적으로 작동하고 성능도 최적화될 수 있도록 하는 과정을 살펴볼게요.
이 글에서는 데이터 이동 후 반드시 점검해야 할 주요 단계를 쉽고 간단하게 설명할 거예요.

1. 데이터 삭제 및 초기화

먼저, 데이터를 옮기기 전에 기존 데이터를 삭제해야 합니다.
DELETE문을 사용하면 데이터를 삭제할 수 있지만, 외래 키 관계가 있을 때는 외래 키 제약을 먼저 비활성화하는 것이 좋아요.
삭제 후에는 외래 키를 다시 활성화하는 걸 잊지 마세요.

-- 외래 키 비활성화
ALTER TABLE 테이블명 NOCHECK CONSTRAINT ALL;

-- 데이터 삭제
DELETE FROM 테이블명;

-- 외래 키 재활성화
ALTER TABLE 테이블명 CHECK CONSTRAINT ALL;

이렇게 외래 키를 비활성화한 후 데이터를 삭제하면, 다른 테이블과의 연결이 깨지지 않도록 할 수 있어요.

 

2. 자동 증가값 수동 처리 설정

운영 DB에서 개발 DB로 데이터를 옮길 때, 자동 증가값(IDENTITY)을 제대로 처리하는 것이 중요합니다.
보통 자동 증가값은 MSSQL에서 자동으로 관리하지만, IDENTITY_INSERT를 사용해 수동으로 관리할 수도 있어요.
데이터를 삽입한 후에는 IDENTITY_INSERT를 반드시 OFF로 설정해야 해요.

-- 자동 증가값 수동 설정 ON
SET IDENTITY_INSERT 테이블명 ON;

-- 데이터 삽입 후 자동 증가값 수동 설정 OFF
SET IDENTITY_INSERT 테이블명 OFF;

이렇게 하면 데이터 삽입 시 자동 증가값이 충돌하지 않게 되고, 이후 자동 증가값은 자연스럽게 동작하게 됩니다.

 

3. 자동 증가값 초기화 확인

데이터를 삽입한 후, 자동 증가값이 제대로 초기화되었는지 꼭 확인해야 해요.
DBCC CHECKIDENT 명령어를 사용해서 자동 증가값을 리셋할 수 있습니다.
보통 0부터 시작되도록 설정하는 것이 좋습니다.

-- 자동 증가값 초기화 (시드를 0으로 설정)
DBCC CHECKIDENT ('테이블명', RESEED, 0);

이렇게 하면 자동 증가값이 올바르게 리셋되었는지 확인할 수 있어요.

 

4. 참조 무결성 및 외래 키 관계 확인

외래 키 제약은 데이터의 무결성을 보장하는 중요한 요소예요.
데이터 옮긴 후, 외래 키가 제대로 설정되었는지 확인해야 합니다.
외래 키 관계가 깨지면 데이터 무결성이 훼손될 수 있기 때문에, 꼭 점검해야 합니다.

-- 외래 키 관계 확인
SELECT 
    fk.name AS FK_name,
    tp.name AS Parent_table,
    ref.name AS Referenced_table
FROM 
    sys.foreign_keys fk
    INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id
    INNER JOIN sys.tables ref ON fk.referenced_object_id = ref.object_id;

외래 키를 다시 설정하려면 아래와 같이 할 수 있습니다.

-- 외래 키 제약 설정
ALTER TABLE 자식테이블
ADD CONSTRAINT fk_제약_이름 FOREIGN KEY (자식컬럼) REFERENCES 부모테이블(부모컬럼);

 

5. 테이블 트리거 점검

트리거는 데이터가 삽입되거나 수정될 때 자동으로 실행되는 스크립트입니다.
데이터 이동 후 트리거가 제대로 동작하는지 확인해야 해요.
예를 들어, 트리거가 중복되거나, 잘못 동작할 경우에는 데이터를 제대로 처리할 수 없을 수 있거든요.

-- 트리거 확인
SELECT name 
FROM sys.triggers 
WHERE parent_id = OBJECT_ID('테이블명');

-- 트리거 비활성화
DISABLE TRIGGER 트리거명 ON 테이블명;

-- 트리거 활성화
ENABLE TRIGGER 트리거명 ON 테이블명;

트리거가 비활성화된 상태에서 데이터 이동 후, 트리거를 다시 활성화해 주세요.

 

6. 인덱스 및 통계 재생성

대량의 데이터를 삽입하면, 인덱스와 통계가 효율적으로 작동하지 않을 수 있어요.
이 경우, 인덱스를 재구성하고 통계를 갱신해야 성능을 최적화할 수 있습니다.

인덱스 재구성

-- 모든 인덱스 재구성
ALTER INDEX ALL ON 테이블명 REBUILD;

통계 재생성

-- 모든 테이블의 통계 업데이트
UPDATE STATISTICS 테이블명;

이렇게 하면 쿼리 성능이 빨라질 수 있어요!

 

7. 트랜잭션 로그 및 데이터베이스 백업

데이터 이동 후에는 트랜잭션 로그와 데이터베이스 백업을 꼭 해두는 것이 좋아요.
예기치 않은 상황에서 데이터를 복구할 수 있도록 준비하는 것이죠.

트랜잭션 로그 백업

BACKUP LOG 데이터베이스명 TO DISK = '백업파일경로\로그백업.trn';

전체 데이터베이스 백업

BACKUP DATABASE 데이터베이스명 TO DISK = '백업파일경로\전체백업.bak';

백업을 하고 나면, 트랜잭션 로그 파일을 축소할 수도 있어요.

-- 트랜잭션 로그 축소
DBCC SHRINKFILE (로그파일명, 1);

이렇게 하면 로그 파일을 최적화할 수 있습니다.

 

8. 데이터 검증

마지막으로, 데이터를 잘 옮겼는지 검증하는 단계가 필요합니다.
데이터 무결성, 참조 관계, 데이터 타입 등을 확인해서 오류가 발생하지 않도록 해야 해요.
간단한 검증 쿼리를 실행해보세요.

-- 데이터 검증 예시
SELECT COUNT(*) FROM 테이블명;

검증을 통해 데이터가 제대로 이동되었는지 확인하고, 쿼리 성능도 테스트해 보세요.

운영 DB에서 개발 DB로 데이터를 이동하는 작업은 단순한 데이터 복사 이상의 작업이 필요합니다.
자동 증가값, 외래 키, 트리거, 인덱스, 통계 등 여러 요소를 점검하고 최적화하는 것이 중요하죠.
이 글에서 설명한 단계를 하나씩 차근차근 진행하면, 데이터 이동 후 시스템이 안정적이고 최적화된 상태로 유지될 수 있습니다.

이제 데이터 이동이 완료된 후, 시스템이 문제없이 작동하는지 확인하고, 성능도 점검해보세요.