SQL Server 데이터베이스의 데이터 정렬을 어떻게 변경합니까? 인덱스를 삭제하고 다시 작성해야합니다. 다음과 같이 보일

단일 데이터 정렬-Latin1_General_CI_AS (표준 데이터 정렬)에서 모든 데이터베이스를 표준화하려고합니다. SQL_Latin1_General_CP1_CI_AS에있는 일부 데이터베이스가 있습니다.

ALTER DATABASE를 사용하여 데이터베이스 데이터 정렬을 변경할 수 있지만 새 개체에만 영향을 미칩니다. 내 이해는 기존 열을 변경하는 유일한 방법은 모든 테이블의 각 열에 대해 ALTER COLUMN을 수행하는 것이므로 모든 인덱스를 삭제하고 다시 작성해야합니다.

다음과 같이 보일 것입니다.

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

전체 데이터베이스의 모든 varchar, char, text, nvarchar, nchar 및 ntext 열에 대해 반복하십시오. 그것은 엄청난 SQL 스크립트 일 것입니다.

더 쉬운 방법이 있습니까, 아니면 누구나 SQL 스크립트 작성을 자동화하는 방법을 제안 할 수 있습니까?



답변

MS KB 325335 에는 전체 db 및 모든 열에 대해이를 수행하는 방법에 대한 옵션이 있습니다.

원래:

  1. 스크립트 데이터베이스 테이블 (새 데이터 정렬)
  2. DTS / SSIS 데이터 (시찰 데이터 정렬)
  3. 구속 조건 추가

답변

약간의 조정이 필요하지만 “SQL Server 2000 Collation Changer”유틸리티를 사용하여 성공했습니다 :
http://www.codeproject.com/KB/database/ChangeCollation.aspx


답변

불행히도 이것은 SQL Server에서 쉬운 일이 아닙니다.

기존 데이터베이스 개체 (테이블, 저장 프로 시저, 뷰 등)에 대해 Redgate의 SQL Compare와 같은 스크립팅 도구를 사용할 수 있습니다. 라이센스가없는 경우 무료 평가판을 사용할 수 있습니다. 올바른 데이터 정렬을 사용하여 새 데이터베이스를 만들고 스크립트에서 개체를 다시 작성한 후 SSIS를 실행하여 한 데이터베이스에서 다른 데이터베이스로 데이터를 전송할 수 있습니다. 많은 데이터가있는 경우 T-SQL 대량 삽입을 사용하십시오.

해당 서버의 향후 데이터베이스에 대한 올바른 데이터 정렬을 위해 서버의 기본 데이터 정렬을 변경할 수 있습니다. 다음 MSDN 문서는 ALTER DATABASE 및 ALTER TABLE의 COLLATE 절을 사용하여 변경되는 내용을 설명합니다.

데이터베이스 데이터 정렬 설정 및 변경 (SQL Server 2008 온라인 설명서)

ALTER DATABASE 문의 COLLATE 절을 사용하여 사용자 데이터베이스에서 작성된 새 오브젝트의 데이터 정렬을 변경할 수 있습니다 . 이 명령문은 기존 사용자 정의 테이블의 열 데이터 정렬을 변경하지 않습니다. ALTER TABLE 의 COLLATE 절을 사용하여이를 변경할 수 있습니다 .

데이터베이스 데이터 정렬을 변경하면 다음이 변경됩니다.

  • 데이터베이스의 기본 데이터 정렬 이 새로운 기본 데이터 정렬은 이후에 데이터베이스에서 생성 된 모든 열, 사용자 정의 데이터 형식, 변수 및 매개 변수에 적용됩니다. 데이터베이스에 정의 된 오브젝트에 대해 SQL 문에 지정된 오브젝트 ID를 해석 할 때도 사용됩니다.
  • 시스템 테이블의 모든 char, varchar, text, nchar, nvarchar 또는 ntext 열이 새 데이터 정렬로 변경됩니다.
  • 저장 프로 시저 및 사용자 정의 함수에 대한 모든 기존 char, varchar, text, nchar, nvarchar 또는 ntext 매개 변수와 스칼라 반환 값이 새 데이터 정렬로 변경됩니다.
  • char, varchar, text, nchar, nvarchar 또는 ntext 시스템 데이터 유형과 이러한 시스템 데이터 유형을 기반으로하는 모든 사용자 정의 데이터 유형이 새로운 기본 데이터 정렬로 변경됩니다.

답변

일반적으로이 작업을 라이브 서버에 수행하지 않는 것이 좋습니다. 내가 마지막으로 보았을 때 Microsoft는 공식적으로 지원하지 않았습니다. 실제로이 작업을 수행하려면 올바른 데이터 정렬을 사용하여 새 인스턴스를 생성하고 데이터베이스를이 인스턴스로 마이그레이션해야합니다.

기본 데이터 정렬이 다른 서버로 DB를 복원하면 tempdb가 새 서버의 데이터 정렬을 가지므로 모든 종류의 재미가 발생하므로 권장하지 않습니다.


답변

소스 데이터베이스에서 대상 데이터베이스에 적용하는 데 필요한 모든 스크립트를 생성하여 데이터 정렬이 안전하게 변경되도록하는 이 유틸리티를 사용해보십시오 .


답변

Infomation_Schema 뷰를 사용하여 스크립트를 쉽게 생성 할 수 있지만 이것이 문제를 해결하는 가장 좋은 방법인지는 잘 모르겠습니다. 지연된 DB에서 모든 인덱스를 다시 만들려면 시간 / 로그 공간이 많이 걸릴 수 있습니다. 새 인스턴스로 마이그레이션 (복원 아님)으로 이동합니다.