라이브러리/시스템
SQL Server 특정 파티션 데이터 삭제하고 데이터 그룹 제거
눌프
2012. 3. 22. 18:40
전체 프로세스는 다음과 같다.
1. 임시 파일을 삭제하고자 하는 파일그룹에 생성
2. 해당 파일로 동일 파티션으로 SWITCH 시킴
3. 해당 파일그룹이 있는 파티션 Range를 Merge시킴
4. 임시 테이블 지우고, 해당 파일그룹도 삭제
코드 예제
BEGIN TRANSACTION
USE [SMSRaw]
CREATE TABLE [dbo].[T_PerfData_tmp](
[HeaderID] [uniqueidentifier] NOT NULL,
[AgentDateTime] [datetime] NOT NULL,
[ServerDateTime] [datetime] NOT NULL,
[PerfValue] [float](53) NOT NULL,
[RefValue] [float](53) NULL,
[DetailValue] [varchar](4000) NULL
) ON [fg_20120322]
USE [SMSRaw]
CREATE CLUSTERED INDEX [T_PerfData_tmp_IDX_T_PerfData] ON [dbo].[T_PerfData_tmp]
(
[AgentDateTime] ASC,
[HeaderID] ASC
)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [fg_20120322]
USE [SMSRaw]
ALTER TABLE [dbo].[T_PerfData_tmp] WITH CHECK ADD CONSTRAINT [chk_T_PerfData_tmp_partition_2] CHECK ([AgentDateTime]<N'2012-03-23T00:00:00')
ALTER TABLE [dbo].[T_PerfData_tmp] CHECK CONSTRAINT [chk_T_PerfData_tmp_partition_2]
ALTER TABLE [SMSRaw].[dbo].[T_PerfData] SWITCH PARTITION 2 TO [SMSRaw].[dbo].[T_PerfData_tmp]PARTITION 2
USE [SMSRaw]
ALTER PARTITION FUNCTION [F_PerfData]() MERGE RANGE(N'2012-03-22T00:00:00.000')
COMMIT TRANSACTION
/***** *****/
drop table T_PerfData_tmp
alter database SMSRaw remove file data_20120322
alter database SMSRaw remove filegroup fg_20120322