디비 오라클 테이블 ddl인데요
코드는 컬럼이하입니다...
테이블 복사하라는 과제 도중 코드가 뭘 의미하는지 알아내야 하는데
아무리 찾아도 인덱스이하부터는...특히나 공간정보쪽을 못찾겠습니다 (검색능력의 한계)
혹시 한줄씩 해석가능할까요?
부탁드립니다.
) SEGMENT CREATION IMMEDIATE
PCTFREE 0 PCTUSED 40 INITRANS 4 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DW"
LOB ("SHAPE"."POINTS") STORE AS BASICFILE (
TABLESPACE "DW" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 1
CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ;
CREATE UNIQUE INDEX "ORACLE_ALTER"."SYS_IL0000162284C00191$$" ON "ORACLE_ALTER"."BG_ALTER" (
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DW"
PARALLEL (DEGREE 0 INSTANCES 0) ;
CREATE UNIQUE INDEX "ORACLE_ALTER"."R43_ROWID_UK" ON "ORACLE_ALTER"."BG_ALTER" ("OBJECTID")
PCTFREE 0 INITRANS 4 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DW" ;
CREATE INDEX "ORACLE_ALTER"."A15_IX1" ON "ORACLE_ALTER"."BG_ALTER" ("SHAPE")
INDEXTYPE IS "EXP"."ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS = 0 ST_SRID = 300002 ST_COMMIT_ROWS = 10000 PCTFREE 0 INITRANS 4');
저도 잘 모르겠습니다. 그냥 무시하고 지워버리고 쓰는편인데요.
TABLESPACE : 데이터베이스 오브젝트 내 실제 데이터를 저장하는 공간
DEGREE : 병렬처리 할 쓰레드(?) 갯수 , 스크립트에서 지워버리면 디폴트0
LOB : 이건 저도 처음보내요.. 그냥 컬럼에만 선언해봐서.. 스크립트에서 지워버려도 되지않을지..
아는건 이정도 입니다..
-- 대략 아래의 의미 입니다. ) SEGMENT CREATION IMMEDIATE ~~> Table 생성 시 Segment 로 바로 생성, 버전에 따른 Default 는 Object 로 생성하고, 1번째 rows 나 block extent 시 Segment 가 생성되도록 지정되 있음 PCTFREE 0 PCTUSED 40 ~~> DB Block 의 PCT 의 Free 값을 0% ( Update 에 따른 여유공간은 남기지 않음 ) 으로 , Used 값은 40% (40% 가 차 있으면 사용된 Block 로 분류 ) 로 하겠다는 의미 INITRANS 4 MAXTRANS 255 ~~> 해당 Object 에 대한 초기 Transaction (DML 포함) 을 4개 부터, 최대 255개 까지 허용 NOCOMPRESS LOGGING ~~> Segment 에 Compress 하지 않고 저장, Logging 을 통해 Access 에 대한 기록을 유지 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 ~~> Segment 생성 시, 초기 Block 크기 65536, 데이터가 늘어날 때 마다 1048576 (byte) 크기로 Segment 를 증가 시키되, 해당 Segment 의 최대 Size 는 2147483645 (byte) 로 하고 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 ~~> PCTINCREASE 0 즉 데이터가 늘어날 때 다음 Extent 의 증가율은 0% 동일하게 같은 사이즈로 증가 시키고, FREELIST GROUPS 1 는 RAC 에서 경합관리를 회피하기 위해 각 Instance 에서 독자적으로 사용하라 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) ~~> 해당 Segment 의 위치는 SGA 의 BUFFER_POOL, FLASH_CACHE 그리고 Exadata 의 경우 CELL_FLASH_CACHE 에 초기 Loading 하며 TABLESPACE "DW" ~~> Segment 를 DW Tablespace 에 생성하라. -- 정확한 의미나 내용은, 좌측 "구루비 검색" 에 PCTFREE 등 해당 문구를 검색해 보시면, 선배님들의 강의, 강좌에서 확인해 보실 수 있습니다. .
저 속성등은 DB, Tablespace 순으로 상속 됩니다. Default 는 PCTFREE 20 PCTUSED 40 인데, 그렇게 지정된 Tablespace 에 Table 생성을 하게 되면, 상속 받아 그렇게 만들어 집니다. 각각 동작하는 의미가 있는데 다른 설정들이 Default 라고 가정하면 table DEGREE 4로 지정되 있으면, 저 테이블을 Access 하는 SQL 은 No Parallel 이라도 Optimizer 가 Parallel 4 로 Plan 을 수립합니다. Index 도 Degree 4 로 함께 지정되 있으면, 아주 단순한 SQL 로 Parallel 8 로 수행되기 때문에, 불필요한 Thread 가 수행되고, 서버 CPU, MEmory 를 사용하고, 더군다나수행 속도도 늦어지게 됩니다. 그래서 보통 Object 자체는 Noparallel 로 설정하고, SQL 에서 Parallel 여부를 결정 합니다.
모두 답변 감사합니다!