tablespace 생성 스크립트
2010. 4. 30. 15:31ㆍOracle/Oracle Tip
반응형
테이블 스페이스 생성 스크립트 입니다.
디비이관 작업할 때 유용하게 쓰일 것 같네요.
select tablespace_name, dbms_metadata.get_ddl('TABLESPACE',tablespace_name)||';' script
from dba_tablespaces
where tablespace_name not in ('TEMP','USERS','UNDOTBS1','SYSTEM','SYSAUX');
아래와 같이 스크립트가 생성된다.
CREATE TABLESPACE "aaa" DATAFILE
'/oracle/oradata/Disk4/aaa.dbf' SIZE 104857600
AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
NOLOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
;
주의 할 점.
위 스크립트를 그대로 실행시켰을경우. tablespcae 이름이 쌍따옴표를 포함한 "AAA" 으로 등록이 되어지는데
dba_tablespaces를 보면 AAA로 보여진다.
추후 drop 을 할려고 무심코 아래와 같은 쿼리문을 날렸는데 에러를 발생시키면 원인 찾기가 참 힘들어 지겠군요.
drop tablespace aaa including contents and datafiles;
ORA-00959: 테이블스페이스 'AAA'이(가) 존재하지 않습니다.
select tablespace_name from dba_tablespaces where tablespace_name = 'aaa';
TABLESPACE_NAME
aaa
변경및 수정할때에도 아래와 같이 지워야 하네요.
drop tablespace "aaa" including contents and datafiles;
--나의 의견.
쌍따옴표를 제거한 후 실행시키는 것이 관리하기에 편하다고 생각합니다.
유용한 스크립트이지만 하나하나 뜯어보고 불필요한 부분에 대해서는 편집이 필요하다고 생각되어집니다.
저는 위 쿼리보다는 아래 쿼리를 사용하고 있습니다.
위 쿼리는 속도도 많이 느리고, 쌍따옴표의 포함 등등 저에게는 좀 안맞는 쿼리인듯 싶네요.
아래 쿼리가 무식하고 더 불편하긴 하지만 저는 나름 편집해서 사용하고 있습니다.(특성에 따라 쿼리를 수정해줘야해서..)
select
'CREATE TABLESPACE '||tablespace_name||
'DATAFILE
'''||data1||''' SIZE 33554432 REUSE AUTOEXTEND ON NEXT 16777216 MAXSIZE 16384M,
'''||data2||''' SIZE 33554432 REUSE AUTOEXTEND ON NEXT 16777216 MAXSIZE 16384M,
'''||data3||''' SIZE 33554432 REUSE AUTOEXTEND ON NEXT 16777216 MAXSIZE 16384M,
'''||data4||''' SIZE 33554432 REUSE AUTOEXTEND ON NEXT 16777216 MAXSIZE 16384M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16777216 SEGMENT SPACE MANAGEMENT AUTO;' script
from
(
select tablespace_name,
max(case when rank=1 then file_name end) data1,
max(case when rank=2 then file_name end) data2,
max(case when rank=3 then file_name end) data3,
max(case when rank=4 then file_name end) data4
from
(
select file_name, tablespace_name, row_number() over(partition by tablespace_name order by file_name) rank
from dba_data_files b
where tablespace_name not in ('SYSTEM','UNDOTBS1','SYSAUX','TEMP','USERS')
)
group by tablespace_name
)
;
반응형
'Oracle > Oracle Tip' 카테고리의 다른 글
long형 replace (0) | 2011.01.24 |
---|---|
LONG과 CLOB 에 대한 데이터 이전. (0) | 2011.01.04 |
테이블 read only 설정 (0) | 2010.01.27 |
1년치 날짜 생성. (0) | 2010.01.14 |
유용 update문 (0) | 2009.12.09 |