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

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

by @GodWin 2024. 12. 15.
728x90
반응형

-

 

-

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

728x90

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

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

 

728x90
반응형