문제

우리의 데이터베이스는 SQL Server2008R2.우리는 몇 가지가 있는 테이블 일부 varchar(500)열고 싶어 하는 스위치를 datetime2 또는 bigint.보장할 수 있습니다 모든 데이터를 열로 전환은 유효한 적절한 형식입니다.열 변화에 영향을 미친 인덱스이지만,키가 있습니다.

논의하는 동안 동료들과 함께,우리는 두 가지 방법으로 접근하는 문제입니다.이러한 두 것을 통해 수행 T-Sql 스크립트가 있습니다.

  1. 을 만들 temp 테이블을 통해 선택으로,드롭 이전 테이블과 테이블을 다시 만들과 적절한 데이터 형식.다시 인덱스입니다.
  2. 변경 현재블/데이터를 통해 유형 ALTER TABLE x ALTER COLUMN Y datetime2 다음 다시 작성하거나 다시 인덱스입니다.

기 때문에 나는 자신감을 데이터로 변환 깨끗하게,나는 쪽으로 기울고#2.내 동료 및 DBA 친구아보세요#1 지만 동료에게 기억할 수 없다 그들은 왜 그를 교육하는 방법입니다.DBA 친구에서 휴가지 않았다,그래서 그에게 물 이유.

할 수 있는 누군가가 통찰력을 제공하는 옵션들을 생각하는 더 나은 그리고 왜?궁극적으로 그것이 나의 결정이 나는 이유를 궁금#1 것 선호#2?

도움이 되었습니까?

해결책

나는 최근에 이 내에서 조직의 점에서 우리를 처리하는 테이블 억+행이 있습니다.

모든 신에 대한 아이디어가 아론에게 버트 및에서 블로그 포스팅 드:스키마로 전환-A-Roo

테스트 아래에서 프로세스 작은 테이블과 자기를 얻을 수락하기 전에 그것에 PROD.

  1. 만 2schemas fakeshadow 인증 dbo.
  2. 테이블을 만들과 함께 열과 데이터 유형에서 당신이 원하는 shadow 예를 들어 스키마 create table shadow.Correct_Table ...
  3. 데이터를 삽입하고 만들기 모든 인덱스는 원본 테이블에 shadow 스키마이다.
  4. 이 방법은 당신이 동일한 복사본으로 테이블 데이터 인덱스 하지만 그들은 서로 다른 스키마에(논리적으로 구분).
  5. 한 번 업데이트에 대한 통계와 테이블 shadow 스키마가 있습니다.
  6. 스위치는 스키마(이것은 메타데이터 작업은 매우 빠르게)

    --- 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;
    
  7. 최종을 할지 확인 가 계획한 대로 수행되도록 합니다.당신이해야 할 select count(1) from dbo.Correct_table

  8. 한 번 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/를 만들 방법입니다.

덕분에 모든 사람을 위해 자신의 의견을니다.많은 흥미로운 접근 방식을 고려할 때 우리는 결정 앞으로 이동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 dba.stackexchange
scroll top