반응형
/********************************************************************************************
-- 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 
 

 

반응형

+ Recent posts