SELECT name FROM v$controlfile;
SELECT member FROM v$logfile;
SELECT name FROM v$datafile;
SELECT name FROM v$tempfile;
file 새로운 위치로 변경

/u01/app/oracle/oradata/ORA19C/control01.ctl →
/home/oracle/userdata/control01.ctl
1) control files 파라미터 변경
ALTER SYSTEM SET control_files = '/home/oracle/userdata/control01.ctl' SCOPTE = SPFILE;
2) 데이터베이스 정상적인 종료
shutdown immediate
3) 물리적 control file 이동
mv -v /u01/app/oracle/oradata/ORA19C/control01.ctl /home/oracle/userdata/control01.ctl
4) 물리적 data file 이동
mv -v /u01/app/oracle/oradata/ORA19C/system01.dbf /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/sysaux01.dbf /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/undotbs01.dbf /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/insa_tbs.dbf /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/users01.dbf /home/oracle/userdata
5) 물리적 log file 이동
mv -v /u01/app/oracle/oradata/ORA19C/redo03.log /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/redo02.log /home/oracle/userdata
mv -v /u01/app/oracle/oradata/ORA19C/redo01.log /home/oracle/userdata
6) 물리적 temp file 이동
mv -v /u01/app/oracle/oradata/ORA19C/temp01.dbf /home/oracle/userdata
mount 단계 까지만 DB 열기
startup mount
리두 로그파일, 데이터파일, 임시파일을 새로운 위치로 변경
DB OPEN 단계로 변경
디렉터리 파일위치 확인
show parameter db_files;
db_files : 데이터베이스에서 생성할 수 있는 데이터 파일의 수 파라미터

CREATE BIGFILE TABLESPACE big_tbs
DATAFILE ' ' SIZE 1G
AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;
select rowid ,
dbms_rowid.rowid_object(rowid) as data_object_id, -- 오브젝트 ID
dbms_rowid.rowid_relative_fno(rowid) as file_id, -- 데이터파일 ID
dbms_rowid.rowid_block_number(rowid) as block_id, -- 블록 ID
dbms_rowid.rowid_row_number(rowid) as row_slot, -- 로우 슬롯 ID
employee_id
from hr.employees;

alter system flush shared_pool; -- shared_pool 초기화
SELECT sql_id, sql_text, parse_calls, loads, executions
FROM v$sql
WHERE sql_text LIKE '%hr.employees%'
AND sql_text not LIKE '%v$sql%';
SELECT * FROM hr.employees WHERE employee_id = 100;

parse_calls , executions : 해당 실행계획을 parse, execute 한 횟수
loads : 하드파싱 한 횟수
SELECT * FROM TABLE(dbms_xplan.display_cursor('SQL_ID'));

ORA-01650 : unable to extend rollback segment , ORA-30036: 세그먼트를 8만큼 실행 취소 테이블스페이스 'UNDO1'에서 확장할 수 없음ORA-01555: snapshot too old errorenq:US-contention wait event 발생ALTER TABLESPACE undotbs1 ADD DATAFIE '/u01/app/oracle/oradata/ORA19C/undotbs02.dbf' SIZE 10M AUTOEXTEND ON
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/app/oracle/oradata/ORA19C/undo01.dbf' SIZE 10M
AUTOEXTEND ON;
- extent 와 segment를 설정하려고 하면 오류 발생

ALTER SYSTEM SET undo_tablespace = undo1 SCOPE = BOTH;
- undo_tablespace 는 동적 파라미터이기 때문에 메모리에서 바로 변경가능
- undo_tablespace는 테이블스페이스 1개만 설정해야 한다.
show parameter undo_tablespace;

SELECT segment_id, segment_name, owner, tablespace_name, status
FROM dba_rollback_segs;

- system undo는 dictionary 테이블에 대한 변경작업시에 사용된다
- 예를 들어 CREATE USER를 하게 될 경우 USER 딕셔너리에 변경 작업이 발생된다.
UPDATE hr.employees
SET salary = salary * 1.1
WHERE employee_id = 100;
SELECT n.usn,n.name, s.extents, s.rssize, s.xacts, s.status
FROM v$rollname n, v$rollstat s
WHERE n.usn = s.usn;
- rssize는 undo segment의 사이즈, xacts는 해당 세그먼트에 연결된 트랜잭션 갯수
- 트랜잭션이 종료되면 자동으로 해제된다.

SELECT s.username, t.xidusn, t.ubafil, t.ubablk, t.used_ublk
FROM v$session s, v$transaction t
WHERE s.saddr = t.ses_addr;

- 어느 유저에서 유입된 트랜잭션인지 확인할 때 사용된다.
- xidusn : undo segment 번호
- ubafil : 데이터파일 번호
- ubablk : undo block 번호
- used_ublk : undo block 사용 갯수