반응형
/********************************************************************************************
-- Title : [2k5] 컬럼 사이즈 증가/감소 후 데이터 내부 확인
-- Reference : www.dbnuri.com 장래형님
-- Key word : dbcc page dbcc ind dbcc page dbcc dbreindex alter index rebuild
********************************************************************************************/
USE tempdb
GO
-- Title : [2k5] 컬럼 사이즈 증가/감소 후 데이터 내부 확인
-- Reference : www.dbnuri.com 장래형님
-- Key word : dbcc page dbcc ind dbcc page dbcc dbreindex alter index rebuild
********************************************************************************************/
USE tempdb
GO
/*************************
-- 컬럼 사이즈 증가시
*************************/
DROP TABLE t11;
CREATE TABLE t11 (
col1 SMALLINT NOT NULL,
col2 CHAR(2000),
col3 CHAR(1000)
);
GO
INSERT INTO t11 VALUES(1, REPLICATE('A', 2000), REPLICATE('B', 1000));
GO
DBCC IND(Tempdb, t11, -1);
GO
/*
PageFID PagePID IAMFID IAMPID ObjectID IndexID PageType
------- ----------- ------ ----------- ----------- ----------- --------
1 90 NULL NULL 2105058535 0 10
1 77 1 90 2105058535 0 1
*/
DBCC TRACEON(3604);
GO
DBCC PAGE(Tempdb, 1, 77, 3);
GO
-- 컬럼 사이즈 증가
ALTER TABLE t11
ALTER COLUMN col2 CHAR(3000);
GO
UPDATE t11
SET col2 = REPLICATE('X', 3000);
GO
-- DROPPED 된것 확인
DBCC PAGE(Tempdb, 1, 77, 3);
GO
ALTER TABLE t11
ADD col4 CHAR(3000);
GO
DBCC DBREINDEX ('dbo.t11');
-- 인덱스가 없어 소용없다.
ALTER TABLE t11
ADD col4 CHAR(3000);
GO
ALTER TABLE t11
ADD CONSTRAINT pk_t11 PRIMARY KEY (col1);
DBCC DBREINDEX ('dbo.t11');
-- 인덱스 만들고 잘 됐다.
ALTER TABLE t11
ADD col4 CHAR(3000);
GO
/*************************
-- 컬럼 사이즈 줄일 때
*************************/
DROP TABLE t1;
CREATE TABLE t1 (
col1 SMALLINT NOT NULL,
col2 CHAR(4000),
col3 CHAR(1000)
);
GO
-- 줄일 때 대비해서 2000개만 복제시킨다.
INSERT INTO t1 VALUES(1, REPLICATE('A', 2000), REPLICATE('B', 1000));
GO
DBCC IND(Tempdb, t1, -1)
GO
/*
PageFID PagePID IAMFID IAMPID ObjectID IndexID PageType
------- ----------- ------ ----------- ----------- ----------- --------
1 120 NULL NULL 2105058535 0 10
1 118 1 120 2105058535 0 1
*/
DBCC TRACEON(3604);
GO
DBCC PAGE(Tempdb, 1, 118, 3);
GO
-- 컬럼 사이즈 줄임
ALTER TABLE t1
ALTER COLUMN col2 CHAR(2000);
GO
UPDATE t1
SET col2 = REPLICATE('X', 2000);
GO
-- 이상타..??
-- DROPPED에 'XXX'가 들어가 있고
-- col2 = [null]로 표시된다. 왜지??
DBCC PAGE(Tempdb, 1, 118, 3);
GO
-- 역시 안된다.
ALTER TABLE t1
ADD col4 CHAR(4000);
GO
ALTER TABLE t1
ADD CONSTRAINT pk_t1 PRIMARY KEY (col1);
DBCC DBREINDEX ('dbo.t1');
-- 역시 된다.
ALTER TABLE t1
ADD col4 CHAR(4000);
GO
반응형