본문 바로가기
잡식

MSSQL에서 파일 복사 및 삭제 처리를 위한 외부 명령(dos) 호출 방법

by 불멸도도 2024. 8. 7.

MSSQL에서는 파일 복사 및 삭제 등 다양한 처리를 위해 외부 명령을 호출할 수 있습니다. 이러한 작업을 수행하기 위해 "master..xp_cmdshell" 명령을 사용할 수 있으며, 이 기능을 활용하면 데이터베이스 관리가 더욱 유연해집니다. 그러나 이 기능은 기본적으로 비활성화되어 있어, 활성화 과정과 주의사항을 이해하는 것이 중요합니다.

xp_cmdshell 활성화 방법

xp_cmdshell을 사용하려면 먼저 이를 활성화해야 합니다. 이 과정에서 보안 문제가 발생할 수 있으므로 신중하게 접근해야 합니다.

환경설정 확인

xp_cmdshell이 비활성화된 상태를 확인하려면 다음과 같은 명령을 실행합니다:

exec sp_configure;
반응형

이 명령을 실행하면 마지막 라인에 xp_cmdshell 항목이 표시되며, config_value와 run_value 값이 "0"으로 설정되어 있습니다.

xp_cmdshell 활성화

xp_cmdshell을 활성화하려면 다음과 같은 명령을 실행합니다:

exec sp_configure 'xp_cmdshell', 1;
reconfigure;

이 명령을 통해 xp_cmdshell을 활성화하면 외부 명령을 호출할 수 있게 됩니다.

xp_cmdshell을 이용한 파일 복사 예시

xp_cmdshell을 활성화한 후, 파일 복사 명령을 실행할 수 있습니다. 예를 들어, 로컬에 백업된 데이터베이스 파일을 원격 경로로 복사하려면 다음과 같이 명령을 작성합니다:

declare @cmdstring varchar(1000);
set @cmdstring = 'copy S:\TESTDB.BAK \\BACKUP\DB';
exec master..xp_cmdshell @cmdstring;
반응형

위 명령을 통해 S:\TESTDB.BAK 파일을 원격 경로 \\BACKUP\DB로 복사할 수 있습니다.

주의사항 및 보안

xp_cmdshell을 활성화하면 시스템 명령어를 실행할 수 있으므로 보안에 대한 철저한 관리가 필요합니다. 특히, 외부에서 연결된 사용자가 중요한 파일을 변경하거나 삭제할 수 있는 보안 문제가 발생할 수 있습니다. 따라서 보안이 담보되지 않은 경우 xp_cmdshell을 활성화하지 않는 것이 좋습니다.

예제: 데이터베이스 백업 파일 원격 복사

로컬에 백업된 데이터베이스 파일을 원격 경로로 복사하는 실제 예제를 살펴보겠습니다. 이 예제는 스케줄러를 통해 로컬 백업 이후 다음 단계에서 백업된 파일을 강제로 복사하는 상황을 가정합니다.

백업 스크립트

먼저, 데이터베이스 백업 스크립트를 작성합니다:

BACKUP DATABASE [TestDB] TO DISK = 'S:\TESTDB.BAK';
반응형

파일 복사 스크립트

백업이 완료된 후, 다음 스크립트를 통해 파일을 복사합니다:

declare @cmdstring varchar(1000);
set @cmdstring = 'copy S:\TESTDB.BAK \\BACKUP\DB';
exec master..xp_cmdshell @cmdstring;

이와 같이 스크립트를 작성하여 스케줄러에 등록하면 자동으로 데이터베이스 백업 파일을 원격 경로로 복사할 수 있습니다.

xp_cmdshell 비활성화

작업이 완료된 후, 보안을 위해 xp_cmdshell을 다시 비활성화하는 것이 좋습니다. 이를 위해 다음 명령을 실행합니다:

exec sp_configure 'xp_cmdshell', 0;
reconfigure;
반응형

이 명령을 통해 xp_cmdshell을 비활성화하면 보안 위험을 최소화할 수 있습니다.

결론

xp_cmdshell을 활용하면 MSSQL에서 파일 복사 및 삭제 등의 외부 명령을 유연하게 처리할 수 있습니다. 그러나 이 기능을 사용할 때는 보안에 주의하고, 작업이 완료된 후 반드시 비활성화하는 것이 좋습니다. 위에서 설명한 방법을 통해 효율적으로 파일 복사 및 삭제 작업을 수행할 수 있습니다.

반응형