1. oracle 계정 홈 디렉터리에 userdata 디렉터리를 생성하세요. [oracle@oracle ~]$ pwd /home/oracle [oracle@oracle ~]$ mkdir userdata [oracle@oracle ~]$ cd userdata [oracle@oracle userdata]$ pwd /home/oracle/userdata |
2. tablespace 생성하세요. tablespace 이름 : dw_tbs datafile 위치 및 이름 : /home/oracle/userdata/dw_tbs01.dbf datafile 사이즈 : 5m datafile 자동 확장 활성화 extent 관리 : local uniform size 1m segment space management: auto CREATE TABLESPACE dw_tbs DATAFIILE '/home/oracle/userdata/dw_tbs01.dbf' SIZE 5M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO; select * from dba_tablespaces; SELECT * FROM dba_data_files; |
3. dw_tbs 테이블 스페이스에 데이터 파일을 추가 해주세요. datafile 위치 및 이름 : /home/oracle/userdata/dw_tbs02.dbf datafile 사이즈 : 5m datafile 자동 확장 비활성화 ALTER TABLESPACE dw_tbs ADD DATAFILE '/home/oracle/userdata/dw_tbs02.dbf' SIZE 5M; SELECT * FROM dba_data_files; |
4. /home/oracle/userdata/dw_tbs02.dbf 데이터 파일을 자동 확장 기능으로 수정하세요. ALTER DATABASE DATAFILE '/home/oracle/userdata/dw_tbs02.dbf' AUTOEXTEND ON; select * from dba_data_files; |
5. hr.employees 테이블을 hr.emp 복제하세요. hr.emp 테이블은 dw_tbs 테이블스페이스에 생성하세요. CREATE TABLE hr.emp TABLESPACE dw_tbs AS SELECT * FROM hr.employees; SELECT * FROM dba_segments WHERE owner = 'HR' AND segment_name = 'EMP'; SELECT * FROM dba_extents WHERE owner = 'HR' AND segment_name = 'EMP'; select * from dba_data_files; SELECT * FROM dba_free_space where tablespace_name = 'DW_TBS' |
6. dw_tbs에 있는 데이터 파일을 /u01/app/oracle/oradata/ora11g/ 디렉터리로 이관 작업하세요. > 오프라인 모드로 변경 > 체크포인트 유발 > 안그러면 망가짐 ALTER TABLESPACE dw_tbs OFFLINE; select * from dba_tablespaces; SELECT * FROM v$datafile; mv -v /home/oracle/userdata/dw_tbs01.dbf /u01/app/oracle/oradata/ora11g/dw_tbs01.dbf mv -v /home/oracle/userdata/dw_tbs02.dbf /u01/app/oracle/oradata/ora11g/dw_tbs02.dbf ALTER TABLESPACE dw_tbs RENAME DATAFILE '/home/oracle/userdata/dw_tbs01.dbf' TO '/u01/app/oracle/oradata/ora11g/dw_tbs01.dbf'; ALTER TABLESPACE dw_tbs RENAME DATAFILE '/home/oracle/userdata/dw_tbs02.dbf' TO '/u01/app/oracle/oradata/ora11g/dw_tbs02.dbf'; select * from dba_data_files; ALTER TABLESPACE dw_tbs ONLINE; select * from dba_data_files; SELECT * FROM v$datafile; |
7. dw_tbs 테이블스페이스 삭제 DROP TABLESPACE dw_tbs INCLUDING CONTENTS AND DATAFILES; select * from dba_data_files; SELECT * FROM v$datafile; |
★ 모든 작업에 기록 필수 ★
■ 모든 데이터 파일 이관 작업
offline 설정할 수 없는 테이블스페이스
1. system
2. undo
3. temp
> 운영중에 오프라인으로 설정 불가 >> DB shutdown >> startup mount 에서 작업
ALTER TABLESPACE SYSTEM OFFLINE;
01541. 00000 - "system tablespace cannot be brought offline; shut down if necessary"
ALTER TABLESPACE temp OFFLINE;
03217. 00000 - "invalid option for alter of TEMPORARY TABLESPACE"
0. 대상파일 목록 체크 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ora11g/system01.dbf /u01/app/oracle/oradata/ora11g/sysaux01.dbf /u01/app/oracle/oradata/ora11g/users01.dbf /u01/app/oracle/oradata/ora11g/example01.dbf /u01/app/oracle/oradata/ora11g/undo1.dbf SQL> select name from v$tempfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ora11g/temp01.dbf sqldeveloper > 미리 일괄작업 목록 추출 select 'mv -v '||name||' /home/oracle/userdata' from v$datafile; select 'mv -v '||name||' /home/oracle/userdata' from v$tempfile; mv -v /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/undo1.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/temp01.dbf /home/oracle/userdata |
1. 오라클 데이터베이스를 정상적인 종료 SQL> shutdown immediate >> 체크포인트 발생 |
2. 모든 데이터 파일을 새로운 디스크 위치로 이동 [oracle@oracle ~]$ mv -v /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/undo1.dbf /home/oracle/userdata mv -v /u01/app/oracle/oradata/ora11g/temp01.dbf /home/oracle/userdata [oracle@oracle ~]$ ll /home/oracle/userdata |
3. 오라클 데이터베이스를 mount까지만 열기 SQL> startup mount SQL> select status from v$instance; STATUS ------------ MOUNTED |
4. 기존 데이터파일을 새로운 데이터파일로 수정 system, temp file = 오프라인모드 불가 -> mount 모드 -> ALTER DATABASE RENAME FILE 'OLD' TO 'NEW'; SELECT 'ALTER DATABASE RENAME FILE '''||name||''' TO ''/home/oracle/userdata'||substr(name,instr(name,'/',-1))||''';' FROM v$datafile; SELECT 'ALTER DATABASE RENAME FILE '''||name||''' TO ''/home/oracle/userdata'||substr(name,instr(name,'/',-1))||''';' FROM v$tempfile; SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/system01.dbf' TO '/home/oracle/userdata/system01.dbf'; ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/sysaux01.dbf' TO '/home/oracle/userdata/sysaux01.dbf'; ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/users01.dbf' TO '/home/oracle/userdata/users01.dbf'; ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/example01.dbf' TO '/home/oracle/userdata/example01.dbf'; ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/undo1.dbf' TO '/home/oracle/userdata/undo1.dbf'; ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/ora11g/temp01.dbf' TO '/home/oracle/userdata/temp01.dbf'; SQL> select name from v$datafile; SQL> select name from v$tempfile; |
5. 오라클 데이터베이스 열기 SQL> alter database open; >> 주의!! mount모드이기 때문에 startup이 아니다! >> open 시점에 파일이 없으면 DB장애 SQL> select status from v$instance; STATUS ------------ OPEN SQL> select * from dba_data_files; SQL> select count(*) from hr.employees; COUNT(*) ---------- 107 |
# 다시 원래 위치로 이관 작업
1. 오라클 데이터베이스를 정상적인 종료 SQL> shutdown immediate |
2. 모든 데이터 파일을 새로운 디스크 위치로 이동 SELECT 'mv -v '||name||' /u01/app/oracle/oradata/ora11g/' FROM v$datafile; SELECT 'mv -v '||name||' /u01/app/oracle/oradata/ora11g/' FROM v$tempfile; mv -v /home/oracle/userdata/system01.dbf /u01/app/oracle/!oradata/ora11g/ mv -v /home/oracle/userdata/sysaux01.dbf /u01/app/oracle/oradata/ora11g/ mv -v /home/oracle/userdata/users01.dbf /u01/app/oracle/oradata/ora11g/ mv -v /home/oracle/userdata/example01.dbf /u01/app/oracle/oradata/ora11g/ mv -v /home/oracle/userdata/undo1.dbf /u01/app/oracle/oradata/ora11g/ mv -v /home/oracle/userdata/temp01.dbf /u01/app/oracle/oradata/ora11g/ [oracle@oracle ~]$ ls -l /u01/app/oracle/oradata/ora11g/ |
3. 오라클 데이터베이스를 mount까지만 열기 SQL> startup mount SQL> select status from v$instance; |
4. 기존 데이터파일을 새로운 데이터파일로 수정 SELECT 'ALTER DATABASE RENAME FILE '''||name||''' TO ''/u01/app/oracle/oradata/ora11g'||substr(name,instr(name,'/',-1))||''';' FROM v$datafile; SELECT 'ALTER DATABASE RENAME FILE '''||name||''' TO ''/u01/app/oracle/oradata/ora11g'||substr(name,instr(name,'/',-1))||''';' FROM v$tempfile; alter database rename file '/home/oracle/userdata/system01.dbf' to '/u01/app/oracle/oradata/ora11g/system01.dbf'; alter database rename file '/home/oracle/userdata/sysaux01.dbf' to '/u01/app/oracle/oradata/ora11g/sysaux01.dbf'; alter database rename file '/home/oracle/userdata/users01.dbf' to '/u01/app/oracle/oradata/ora11g/users01.dbf'; alter database rename file '/home/oracle/userdata/example01.dbf' to '/u01/app/oracle/oradata/ora11g/example01.dbf'; alter database rename file '/home/oracle/userdata/undo1.dbf' to '/u01/app/oracle/oradata/ora11g/undo1.dbf'; alter database rename file '/home/oracle/userdata/temp01.dbf' to '/u01/app/oracle/oradata/ora11g/temp01.dbf'; SQL> select name from v$datafile; SQL> select name from v$tempfile; |
5. 오라클 데이터베이스 열기 SQL> alter database open; SQL> select status from v$instance; SQL> select * from dba_data_files; SQL> select count(*) from hr.employees; |
■ VM 이미지 백업
[머신 > 복제]
같은 PC내에 복사해 각각의 이미지를 다른 용도로 사용 가능
SQL> shutdown immediate
[root@oracle ~]# shutdown -h 0
< GUI - Settings>
- IP 충돌 방지 변경 및 고정
IPv4 > Manual > 겹치지 않게 어드레스만 수정 > on/off
< GUI - Open Terminal >
- HOSTS 수정
root > vi /etc/hosts > 변경한 ip주소로 수정
- 호스트 수정 후 리부트 필수 : DB - lsnrstl - OS
SQL > shutdown immediate
[oracle@oracle ~]$ lsnrctl stop
[root@oracle ~]# shutdown -h 0
ifconfig > IP주소 체크
isnrctl > start
db > startup
putty 연결
[파일 > 가상 시스템 내보내기]
이미지를 하나의 파일로 추출하여 외부이동 가능
# control file 단일화 TEST
1안 | spfile 수정 |
0. pfile 백업 습관 create pfile from spfile; |
|
1. 위치 수정 ALTER SYSTEM SET control_files = '/u01/app/oracle/oradata/ora11g/control01.ctl' SCOPE=SPFILE |
|
2. db 정상종료 SQL> shutdown immediate |
|
* 만약 새로운 위치로 이동 시 해당 단계에서 물리적 파일 mv 이동 | |
3. db open SQL> startup SQL> show parameter control_files SQL> select name from v$controlfile; |
|
4. 기존 물리적 파일 삭제 | |
2안 | pfile로 작업 |
0. pfile 백업 create pfile from spfile; [oracle@oracle ~]$ cd $ORACLE_HOME/dbs [oracle@oracle dbs]$ mv spfileora11g.ora spfileora11g.bak |
|
1. db 정상 종료 + 시작 SQL> shutdown immediate SQL> startup SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string |
|
2. control file 위치 체크 SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ora11g/control01.ctl |
|
3. db 정상 종료 SQL> shutdown immediate |
|
4. pfile 수정 [oracle@oracle ~]$ cd $ORACLE_HOME/dbs [oracle@oracle dbs]$ vi initora11g.ora *.control_files = '경로수정' |
|
* 물리적 파일도 해당 경로에 복사 | |
5. db open SQL> startup SQL> show parameter pfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ora11g/control01.ctl |
|
6. 기존 물리적 파일 삭제 | |
pfile -> spfile | |
SQL> create spfile from pfile; SQL> shutdown immediate SQL> startup SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string /u01/app/oracle/product/11.2.0.4/db_1/dbs/spfileora11g.ora |
# Redo log file 정리 TEST
1안 | group 1,2,3 내 파일 단일화 |
1. 파일위치 확인 및 상태 변경 SELECT * FROM V$LOG; SELECT * FROM V$LOGFILE; ALTER SYSTEM SWITCH LOGFILE; |
|
2. Redo log file member 삭제 ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/ora11g/redo01.log'; ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/ora11g/redo02.log'; ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/ora11g/redo03.log'; |
|
3. Redo log file member 물리적 데이터 삭제 1,2,3 /u01/app/oracle/oradata/ora11g /u01/app/oracle/fast_recovery_area/ora11g |
|
4. Redo log file group 삭제 ALTER DATABASE DROP LOGFILE GROUP 4; ALTER DATABASE DROP LOGFILE GROUP 5; ALTER DATABASE DROP LOGFILE GROUP 6; |
|
select * from v$log; GROUP# MEMBERS 1 1 2 1 3 1 select * from v$logfile; MEMBER /u01/app/oracle/fast_recovery_area/ora11g/redo01.log /u01/app/oracle/fast_recovery_area/ora11g/redo02.log /u01/app/oracle/fast_recovery_area/ora11g/redo03.log |
|
2안 | 신규 생성하여 정리 |
1. 신규 그룹 생성 alter database add logfile group 7 '/u01/app/oracle/oradata/ora11g/redo07.log'; alter database add logfile group 8 '/u01/app/oracle/oradata/ora11g/redo08.log'; alter database add logfile group 9 '/u01/app/oracle/oradata/ora11g/redo09.log'; |
|
2. 강제 상태 변경 SELECT * FROM V$LOG; ALTER SYSTEM SWITCH LOGFILE; |
|
3. INACTIVE 상태확인 후 기존 그룹 삭제 ALTER DATABASE DROP LOGFILE GROUP 1; ALTER DATABASE DROP LOGFILE GROUP 2; ALTER DATABASE DROP LOGFILE GROUP 3; ALTER DATABASE DROP LOGFILE GROUP 4; ALTER DATABASE DROP LOGFILE GROUP 5; ALTER DATABASE DROP LOGFILE GROUP 6; |
|
4. 기존 물리적 파일 삭제 1~6 /u01/app/oracle/oradata/ora11g /u01/app/oracle/fast_recovery_area/ora11g |
< 아침 할일 > # 리스너 체크 [oracle@oracle ~]$ lsnrctl status # DB체크 SQL> sqlplus / as sysdba - putty = local -> 리스너가 꺼져있어도 연결된다. - sqldeveloper에서 DB접속 -> 리스너가 켜져있어야 연결된다. # TableSpace 체크 SELECT A.tablespace_name AS "TABLESPACE", -- 테이블스페이스명 B.file_name AS "FILE", -- 파일주소 A.status, -- 연결상태 B.bytes AS "TOTAL SIZE", -- 총 용량 (B.bytes - C.free_bytes) AS "USED SIZE", -- 사용중인 용량 C.free_bytes AS "FREE SIZE" -- 여유 공간 FROM DBA_TABLESPACES A, DBA_DATA_FILES B, (SELECT tablespace_name, file_id, SUM(bytes) AS free_bytes FROM DBA_FREE_SPACE GROUP BY tablespace_name, file_id ) C WHERE A.tablespace_name = B.tablespace_name AND A.tablespace_name = C.tablespace_name AND B.file_id = C.file_id ORDER BY B.file_id; |
SELECT A.GROUP#, A.MEMBERS, A.STATUS, B.TYPE, B.MEMBER
FROM V$LOG A, V$LOGFILE B
WHERE A.GROUP# = B.GROUP#;
cd cd ~ /home/oracle/ |
.bash_profile .bash_history |
$ORACLE_BASE = /u01/app/oracle/ | |
$ORACLE_BASE/oradata/ora11g/ | control file : control01.ctl redo log file tablespaces data file |
$ORACLE_BASE/fast_recovery_area/ora11g/ | redo log file |
$ORACLE_BASE/diag/rdbms/ora11g/ora11g/trace/ | tail -f alert_ora11g.log |
$ORACLE_HOME = $ORACLE_BASE/product/11.2.0.4/db_1 = /u01/app/oracle/product/11.2.0.4/db_1 |
|
$ORACLE_HOME/dbs/ | spfile : spfileora11g.ora pfile : initora11g.ora |
$ORACLE_HOME/rdbms/admin/ | Default Profile : utlpwdmg.sql |
'Oracle 11g > Oracle DB' 카테고리의 다른 글
51 ORACLE Tablespace, Privilege, Role (1) | 2023.12.20 |
---|---|
50 ORACLE SGA, Undo, User (0) | 2023.12.19 |
48 ORACLE ASSM, Tablespace, Undo (0) | 2023.12.14 |
47 ORACLE Redo Log File, Tablespace, FLM (0) | 2023.12.13 |
46 ORACLE ASMM, PGA, AMM, Background Process, Control file (0) | 2023.12.12 |