본문 바로가기

IT관련

(오라클 DB 파라메타) deferred_segment_creation

이 파라메타는 Oracle 11gR2(11.2.0.1) 버전부터 추가된 DB Parameter 입니다.

테이블을 생성(Create) 할 때 바로 만들지 않고, 딕셔너리(메타정보)에만 테이블 생성 정보를 기록하고 실제로는 테이블을 만들지 않는 겁니다.

실제 테이블이 만들어지는 시점은 테이블에 데이터가 들어올 때(Insert) 입니다.

 

헐, 이런 쓸데 없는 기능을 왜 만들었을까 ... 라고 생각이 갑자기 들 수도 있겠습니다. 저처럼 ^^;

 

이게 필요한 경우는 테이블이 엄청 많이 만들어지는 상황... 그런 상황에서 작업을 빠르게 하기 위함입니다.

테이블 만들때, 데이터가 없어도 Initial Extent 만큼은 공간을 할당해야 하거든요.

이 작업을 안하는 거죠.. 그러니 빠르긴 하겠죠~

 

이렇게 테이블이 엄청 많이 만들어지는 상황은 뭔가 DB안에 테이블을 잔뜩 만드는 프로그램을 인스톨할 때 이겠죠.

딱 떠오르는 것은 ERP 같은 프로그램이네요. ERP 설치하면 DB안에 엄청 많은 테이블을 만드니까요.

이런 경우, 테이블 만드는 작업이 엄청 빨리 끝날테니 설치 작업이 빨리 끝나겠죠.

그리고, 테이블 만들때마다 Initial Extent를 할당하지 않으니까 그만큼 스토리지 공간을 절약할 수도 있습니다.

물론 나중에 데이터가 들어오면 똑같아지긴 하지만, 프로그램에서 일부 기능만 쓰고 안쓰는 기능들이 있다면, 그 안쓰는 기능들과 관련된 테이블들은 영원히 공간차지를 안할 테니 확실히 스토리지를 절약할 수 있겠네요.

 

이 deferred_segment_creation 파라메타는 디폴트가 true 입니다.

따라서 11gR2 부터는 건들지 않았으면 그냥 이 상태라고 보면 됩니다.

 

사실, 누가 ERP 같은 설치 작업을 많이 할 일도 없고, 몇년에 한번 있을까 말까한 어떤 어플리케이션 설치 작업 때문에 이 상태로 놔둘 필요가 있을까 싶기는 합니다. 그리고, 관련 버그들도 좀 있는 것 같고..

 

이 파라메타 때문에 당황스러운 경우를 저처럼 당하게 되면 더더욱 이 기능을 끄고 싶은 생각이 들 수밖에 없습니다.

파티션 테이블을 만들고, 파티션 테이블 정보를 조회하기 위해서 아래와 같이 dba_segments 딕셔너리에서 정보를 조회했습니다.

 

안 나옵니다. ^^  내가 방금 만든 파티션 테이블이 안나옵니다.

매우 당황스러운 상황이죠... 몇시간을 끙끙대면서 쉬~ 어디간겨... 찾다찾다가 아~ deferred ... 이런 쒯~

하는 경우를 경험하게 되면 당장 파라메타를 바꿔버리죠 ㅎㅎ

 

 

이렇게 파라메타를 바꾸게 되면 이전에 deferred 상태일때 만들었던 테이블들은 여전히 그 상태입니다. 이후 생성되는 테이블들부터 적용을 받게 됩니다.

이렇게 파라메타를 바꾸는 것 말고도, 수동으로 테이블 만들때마다 스크립트에 segment creation immediate를 넣으면 파라메타를 바꾼것과 똑같은 효과를 냅니다.

 

 

 

오라클 DB 권고 파라메타를 보시려면..  >>> 여기요 (클릭) <<<