[MSSQL] DB 데이터를 text 파일로 보내기

Programming/Database 2011.07.19 댓글 Joshua95
급하게 DB 데이터를 text 파일로 내보내는 방법을 찾아야 했습니다. DB에 엄청난 데이터가 쌓이다보니, 제공되는 Viewer로는 로그 확인이 어렵다는 호소 때문이지요. MS SQL Server Management Studio에서 제공되는 DB별 내보내기를 이용하다 보니 Database 단위로 excel로 내보내기가 가능하나 엑셀 특성상 65535 이상의 row가 존재할 경우 오류가 발생합니다. csv로 내보내려고 하니, 테이블 단위마다 선택을 해야 합니다. 매번 테이블 하나씩 선택해서 돌리기에는 지금 문제의 DB 내 테이블 개수가 너무 많습니다. 그래서 해당 작업을 쿼리로 생성해서 제공해야지 생각하고 찾아보니 마침 xp_cmdshell 이라는 넘이 있군요.

사용 방법은 아래와 같습니다.

-- 1) enable xp_cmdshell
EXEC master.dbo.sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

-- 2) export query

-- DB이름: 방화벽의 경우 - TG_UTM_KERNEL_REALLOG_YYYYMMDD 형태, TG_UTM_KERNEL_REALLOG_20110718
-- Table 이름: 방화벽의 경우 - (허용) syslog_allow_HH 형태, (차단) syslog_deny_HH 형태, (만료) syslog_expire_HH형태

-- 2011년 7월 16일 00시의 방화벽 로그(허용, 차단, 만료) 기록하기
EXEC xp_cmdshell 'bcp "select * from [TG_UTM_KERNEL_REALLOG_20110716].dbo.syslog_allow_00" queryout "C:\KERNEL_20110716_allow_00.txt" -T -c -t,';
EXEC xp_cmdshell 'bcp "select * from [TG_UTM_KERNEL_REALLOG_20110716].dbo.syslog_deny_00" queryout "C:\KERNEL_20110716_deny_00.txt" -T -c -t,';
EXEC xp_cmdshell 'bcp "select * from [TG_UTM_KERNEL_REALLOG_20110716].dbo.syslog_expire_00" queryout "C:\KERNEL_20110716_expire_00.txt" -T -c -t,';


-- 3) disable xp_cmdshell
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'xp_cmdshell',0;
GO
RECONFIGURE;
GO

- 2011.07.19 Joshua95 


댓글