열 크기를 조정하면 테이블이 잠깁니까?

열 크기를 조정하면 테이블이 잠깁니까?

열을 nvarchar(2)에서 nvarchar(10)로 변경하거나 열을 char(2)에서 nvarchar(10)로 변경하면 어떻게 되나요? 이 잠금이 테이블을 재구성합니까, 아니면 영향이나 가동 중지 시간 없이 작동합니까?

열을 변경하면 어떻게 되는지 찾아보았지만 아무 것도 찾지 못했습니다. 변경될 하나 또는 두 개의 열이 있는 큰 테이블입니다. MS SQL Server 2008 R2에 관한 것입니다.

답변1

알아내는 가장 쉬운 방법은 테스트 환경을 사용하여 더미 테이블을 만들고 일부 더미 레코드에 변경 내용을 적용한 다음 프로파일러를 통해 작업을 추적하는 것입니다.

또는 SSMS로 디자인된 테이블에서 테이블을 변경한 후 '변경 스크립트 생성' 버튼을 사용합니다. 내 열을 Char(2)에서 NVARCHAR(10)으로 변경할 때. 변경 생성 스크립트는 다음을 생성합니다.

   CREATE TABLE dbo.Tmp_t2
    (
    id int NULL,
    c1 nvarchar(50) NULL,
    c2 nvarchar(2) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_t2 SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.t2)
     EXEC('INSERT INTO dbo.Tmp_t2 (id, c1, c2)
        SELECT id, CONVERT(nvarchar(50), c1), c2 FROM dbo.t2 WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.t2
GO
EXECUTE sp_rename N'dbo.Tmp_t2', N't2', 'OBJECT' 
GO
COMMIT

답변2

ALTER 명령을 사용하는 경우 다른 테이블을 만들고, 기존 데이터를 새 테이블에 복사하고, 완료되면 이전 테이블을 삭제한 다음, 이전 테이블 이름으로 새 테이블의 이름을 바꿉니다. 라이브 데이터베이스에서 이를 수행하는 것이 최선의 방법은 아니라고 생각하지만 프로덕션 데이터를 처리하는 방법이 있습니다.

http://www.sqlmag.com/article/tsql3/resizing-a-column-in-a-large-table.aspx

답변3

테이블 열의 데이터 유형을 수정하는 경우 다른 작업(삽입 업데이트 삭제 등)을 수행할 수 없으며 전체 테이블이 잠깁니다. NOLOCK으로도 선택할 수 없습니다.

관련 정보