Tablespace
헤더블락 → 데이터파일관련한 블럭이라 사용못함.
나머지 블락
블럭을 줄때 붙어있는블락을 한꺼번에 주는 단위 → extent단위(연속된 블럭으로 구성되어있다.)
ㄴ 딕셔너리
bit map 에서 관리하는 방법
insert 는 h/m왼쪽에서만 저장이 된다.
풀 테이블 스켄 → h/m 까지 읽음.
인덱스 스켄
블럭 사이즈 → IO기본 단위
업뎃이 데이터가 큰방향으로 하면 나눠서 저장할수도 있다.
pctfree → 블럭의 빈공간 만들어주기
Tablespace와 Data file 상태 조회
사용 명령어
SQL> SELECT tablespace_name, status, contents,
2 extent_management, segment_space_management 3 FROM dba_tablespaces;
- Tablespace의 상태를 조회한다.
- STATUS : 사용 가능여부
- CONTENTS : 저장 Segment의 종류
- EXTENT_MANAGEMENT : Extent의 할당 및 관리 방식
- SEGMENT_SPACE_MANAGEMENT : Block내의 공간 관리 방식
SQL> SELECT tablespace_name, bytes, file_name 2 FROM dba_data_files;
- Tablespace별 data file의 상태를 조회 한다.
- BYTES : Data file의 크기
- FILE_NAME : Data file의 경로명을 포함한 이름
SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name 2 FROM v$tablespace t, v$datafile d 3 WHERE t.ts#=d.ts#;
- Tablespace별 data file의 상태를 조회 한다.
- Dictionary가 아니라 dynamic performance view를 조회하는 것이므로 MOUNT 상태에서도 조회 가능하다
언두 테이블은 딱 하나만 만들어서 사용한다.
템퍼러리 테이블을 만들면 템퍼러리 세그먼트가 딱 하나만 만들어진다.
temp는 dbf.tmp파일을 찾아야한다.
Tablespace 생성
CREATE TABLESPACE
2 DATAFILE '
' SIZE <크기>;
- 오라클 10g 이후 버전에서 사용자용 tablespace생성
- Extent management 는 locally 방식으로, segment space management는 AUTO 방식으로 생성된다.
ㄴ 우리가 보통 사용할꺼.
Tablespace 확장 1 - 수동
ㄴ max사이즈 정해줘야함.
사용 명령어
SQL> ALTER DATABASE DATAFILE
2 '<data file>' RESIZE <크기>;
- 지정된 파일의 크기를 늘린다.
- 크기는 실제 현장에서 늘리는거만 가능하다.
SQL> ALTER TABLESPACE <tablespace명>
2 ADD DATAFILE '<추가될 data file>' SIZE <크기>;
- Data file을 추가한다.
- 데이터파일은 미러링을 안함. 복구 해야하는 파일이기 때문.
Tablespace 확장 2 - 자동
사용 명령어
SQL> CREATE TABLESPACE <tablespace명>
2 DATAFILE '<data file명>' SIZE <크기>
3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;
- 자동으로 커지는 data file을 갖는 tablespace를 생성한다.
- NEXT : 증가치
- MAX SIZE : 최대 크기
SQL> ALTER TABLESPACE <tablespace명>
2 ADD DATAFILE '<추가될 data file명>' SIZE <크기>
3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;
- tablespace에 자동으로 커지는 data file을 추가 한다.
SQL> ALTER DATABASE
2 DATAFILE '<변경할 data file명>
3 AUTOEXTEND [ON | OFF] NEXT <크기> MAX SIZE <크기>;
- 지정한 data file을 자동증가를 설정한다
Tablespace 삭제
ㄴ 안에 뭔가 있는데 삭제 하지마라. 그냥 삭제하지마라.
사용 명령어
SQL> DROP TABLESPACE <tablespace 명> 2 [INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS];
- 지정된 tablespace를 삭제한다.
- INCLUDING CONTENT : Tablespace에 segment가 존재할 때 segment를 같이 삭제한다.
- CASCADE CONSTRAINTS : 삭제되는 tablespace의 table을 다른 tablespace의 table이 참조하는 경우에 해당 constraint를 같이 삭제한다.
- AND DATAFILES : Tablespace에 포함된 data file을 같이 지운다. 이 옵션을 쓰지 않으면 데이터 파일은 OS상에서 직접 지워야한다
볼드 된걸 한문장으로 쓴다. 하나다
뒤에쪽은 제약조건을 지우고 지우는거.
Tablespace READ ONLY
ㄴ 데이터파일이 실제로 read only로 바뀜. 데이터 파일은 수정이 안되는데 테이블이 지워진다.. 근데 테이블이 지워지는데 뭐하러 read only를 할까?(잘 사용하면 db를 엄청 가볍게 사용가능함.)
사용 명령어
SQL> ALTER TABLESPACE <tablespace명> [ READ ONLY / READ WRITE ]
- 지정한 tablespace를 읽기 전용(읽기 쓰기)으로 변경한다.
테이블 스페이스를 오프라인 하는 방법이 있따. 그럼 테이블 스페이스가 닫혀버림.
관리용은 오프라인 불가능, 사용자가 사용하는 것은 오프라인 가능.
OPEN 상태에서 tablespace 이동
ㄴ 데이터파일을 이동한다고 생각하면 댐.
사용 명령어
SQL> ALTER TABLESPACE <tablespace명> OFFLINE;
- 지정된 tablespace OFFLINE 한다.
- Offline된 tablespace는 더 이상 접근이 불가능하다.
SQL> ALTER TABLESPACE <tablespace> RENAME DATAFILE
2 <원래 data file명> TO <이동한 data file>;
- Data file 등록 정보 수정(rename 한다.)
SQL> ALTER TABLESPACE <tablespace> ONLINE;
- 지정된 tablespace를 ONLINE한다.
Close 상태에서 tablespace 이동
MOUNT 상태에서 data file을 이동하는 과정
step 1. DB SHUTDOWN
step 2. DATA FILE 이동
step 3. DB MOUNT
step 4. ALTER DATABASE 명령으로 DATA FILE 등록
step 5. DB OPEN
사용 명령어
ALTER DATABASE RENAME FILE
2<원래 data file명> TO <이동한 data file명>;
- Data file 등록 정보 수정
- ALTER TABLESPACE ~ RENAME DATAFILE 명령과 동일한 효과가 있다
Default permanent tablespace
사용 명령어 SQL> SELECT * FROM DATABASE_PROPERTIES
2 WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
- DB전체에 대해서 정의된 DEFAULT TABLESPACE를 조회한다.