SQL Server에서 테이블 이름을 변경하지 않고 테이터만 교체하기
· Version : SQL Server
SQL Server에서 파티션 테이블을 사용하기 위해서는 SQL Server Enterprise Edition을 사용해야한다. Standard Edition에서도 파티션 테이블 처럼 사용하기 위해서는 새로운 테이블을 생성하고 sp_rename 함수를 사용하여 기존테이블과 새로운 테이블의 이름을 변경하는 방식으로 사용하였다.
-- Replace live with staging BEGIN TRAN DROP TABLE DataTable; EXEC sp_rename DataTable_Staging, DataTable; COMMIT
-- Swap live and staging BEGIN TRAN EXEC sp_rename DataTable, DataTable_Old; EXEC sp_rename DataTable_Staging, DataTable; EXEC sp_rename DataTable_Old, DataTable_Staging; COMMIT |
위와 같은 방법을 사용하여 메타 데이터 레벨에서 테이블 이름을 변경하면 스키마가 일치하더라도 이름이 바뀐 테이블이 지정된 이름의 메타 데이터와 연결되지 않는다. 시스템은 캐시된 ObjectID를 사용하는데 스왑아웃을 수행하려면 캐시 데이터를 업데이트하는 추가 단계가 필요하다. 스위치 아웃으로 인해 ObjectID및 관련 메타정보가 그대로 유지되면 이러한 추가단계가 불필요하다.
ALTER TABLE SWITCH TO 명령은 기존 테이블을 유지하면 데이터 세트를 스와핑힌다. 이 명령을 사용하기 위해서는 스키마 정보가 호환 가능해야한다. 컬럼이름, 컬럼 순서, 조약 조건등 특성이 동일해야한다.
-- Replace live with staging BEGIN TRAN TRUNCATE TABLE DataTable; ALTER TABLE DataTable_Staging SWITCH TO DataTable; COMMIT
-- Swap live and staging /* Note: An extra table, DataTable_Old, is required to temporarily hold the data being replaced before it is moved into DataTable_Staging. The rename-based approach did not require this extra table. */ BEGIN TRAN ALTER TABLE DataTable SWITCH TO DataTable_Old; ALTER TABLE DataTable_Staging SWITCH TO DataTable; ALTER TABLE DataTable_Old SWITCH TO DataTable_Staging; COMMIT |
[참고자료]
https://bengribaudo.com/blog/2016/11/15/3521/swapping-data-sets
2019-05-02 / Sungwook Kang / http://sungwookkang.com
SQL Server, partition table, table swap, data set swap, alter table switch to, sp_rename, alter table, 테이블 변경, 테이블 이름 변경, 데이터 변경
출처: https://sqlmvp.tistory.com/1317 [Database Lab]