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 연결



[파일 > 가상 시스템 내보내기]
이미지를 하나의 파일로 추출하여 외부이동 가능

VM - 파일 - 가상 시스템 내보내기

 






# 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