SQL Server-Alter table vs 드롭고 만들기
-
28-09-2020 - |
문제
우리의 데이터베이스는 SQL Server2008R2.우리는 몇 가지가 있는 테이블 일부 varchar(500)열고 싶어 하는 스위치를 datetime2 또는 bigint.보장할 수 있습니다 모든 데이터를 열로 전환은 유효한 적절한 형식입니다.열 변화에 영향을 미친 인덱스이지만,키가 있습니다.
논의하는 동안 동료들과 함께,우리는 두 가지 방법으로 접근하는 문제입니다.이러한 두 것을 통해 수행 T-Sql 스크립트가 있습니다.
- 을 만들 temp 테이블을 통해 선택으로,드롭 이전 테이블과 테이블을 다시 만들과 적절한 데이터 형식.다시 인덱스입니다.
- 변경 현재블/데이터를 통해 유형
ALTER TABLE x ALTER COLUMN Y datetime2
다음 다시 작성하거나 다시 인덱스입니다.
기 때문에 나는 자신감을 데이터로 변환 깨끗하게,나는 쪽으로 기울고#2.내 동료 및 DBA 친구아보세요#1 지만 동료에게 기억할 수 없다 그들은 왜 그를 교육하는 방법입니다.DBA 친구에서 휴가지 않았다,그래서 그에게 물 이유.
할 수 있는 누군가가 통찰력을 제공하는 옵션들을 생각하는 더 나은 그리고 왜?궁극적으로 그것이 나의 결정이 나는 이유를 궁금#1 것 선호#2?
해결책
나는 최근에 이 내에서 조직의 점에서 우리를 처리하는 테이블 억+행이 있습니다.
모든 신에 대한 아이디어가 아론에게 버트 및에서 블로그 포스팅 드:스키마로 전환-A-Roo
테스트 아래에서 프로세스 작은 테이블과 자기를 얻을 수락하기 전에 그것에 PROD.
- 만 2schemas
fake
고shadow
인증dbo
. - 테이블을 만들과 함께 열과 데이터 유형에서 당신이 원하는
shadow
예를 들어 스키마create table shadow.Correct_Table ...
- 데이터를 삽입하고 만들기 모든 인덱스는 원본 테이블에
shadow
스키마이다. - 이 방법은 당신이 동일한 복사본으로 테이블 데이터 인덱스 하지만 그들은 서로 다른 스키마에(논리적으로 구분).
- 한 번 업데이트에 대한 통계와 테이블
shadow
스키마가 있습니다. 스위치는 스키마(이것은 메타데이터 작업은 매우 빠르게)
--- ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; BEGIN TRANSACTION; ALTER SCHEMA fake TRANSFER dbo.original_table; ALTER SCHEMA dbo TRANSFER shadow.Correct_Table; COMMIT TRANSACTION; ALTER SCHEMA shadow TRANSFER fake.Lookup;
최종을 할지 확인 가 계획한 대로 수행되도록 합니다.당신이해야 할
select count(1) from dbo.Correct_table
한 번 7 단계 확인하고 당신은 행복,드롭
shadow.table
,shadow
스키마fake
스키마로 정리합니다.
다른 팁
여기에는 방법이 나는 그것을 참조하십시오.
프로#1
- 를 사용하기 때문에 별도의 테이블의 테이블 생산에 사용될 때까지 당신은 할 수 있습니다.없음에 대한 잠금 그것은(이후 그에 필요한 데이터를 읽).
- 이것은 또한 무@AaronBertrand 말했:당신은 그것을 할 수 있는 조금씩,시험 등
- 을 변경할 수 있습의 열기 위해서 필요
프로#2
- 그것은 모든 아무것 작업입니다.기회가 없다는 것을 잃는 데이터를 가지고 삽입/수정에서 원본 테이블이있는 동안 당신은 못 찾고 있습니다.
- 모든 권한 있는 특별히 할당 개체를 유지합니다.당신이 사용하는 경우#1 당신은 당신을 확인하는 스크립트와 적용한다.
모두는 것이 일반적으로 사용#2 을 위한 작은 테이블 또는 내가 때 얻을 수 있는 중단(항상하기 전에 백업을 수행 손만)#1 에 가입할 수 없을 경우에는 큰 정전 또는 나를 다시 정렬하기 위해 열 etc.만약 내가 거#1I 일반적으로 생성하는 스크립트는 GUI 를 통해 다음 그것을 검토하기 전에 신중하게 그것을 실행.
주의로 삭제하고 다시 만드십시오 옵션:이것을 남길 수 있습니다.sys.따라 달라집에 이상한 상태와 문제의 원인을 캐시 계획의 주문 또는 유형의 열은 변화하고 있습니다.
당신은 또한 조치를 취할 필요가 있을 유지하는 모든 개체 수준 사용 권한으로,이러한에서 손실됩 DROP
고 자동으로 재탄생한 후속 CREATE
.
ALTER TABLE
입 청소기 옵션 IMO 확인,하지만 당신은 테스트를 철저하게 일을 하기 전에 그것에서 생산 모두를 확인한 모든 것이 잘 나중에 당신을 확인하는 방법을 알고 긴 작업을 취할 것(테이블과 함께 많은 행이 포함되어 있을 수 있습니다 시간).
내 동료에게 결국 찾는 문서에 대해 무엇이었을 참조하기: http://www.nigelrivett.net/SQLAdmin/AlterTableProblems.html.한 후 이것을 읽을 실현해 보고 다가오고 있었으며,우리가 결정하지 않을 변경하는 열의 유형이 다시 방문이에서 다음 몇 개월입니다.내가 생각하는 기사를 읽은 후에,나는 그냥 가 Drop/를 만들 방법입니다.
덕분에 모든 사람을 위해 자신의 의견을니다.많은 흥미로운 접근 방식을 고려할 때 우리는 결정 앞으로 이동합니다.