[관리] Control, Redo Log, Data File명령어 모음

##############

Control File

##############

————————-

Control File의 위치

————————-

$ORACLE_HOME/dbs/init<SID>.ora 파일 안에 아래과 같이 존재

control_files=(“/oracle/oradata/disk3/control.ctl”,

               “/oracle/oradata/disk4/control.ctl”,

               “/oracle/oradata/disk5/control.ctl”)

Control File 를 수정 하는 방법은 아래와 같이 두가지가 있다.

1. SPFILE을 이용한 Control File 수정

2. PFILE을 이용한 Control File 수정

———————————————

SPFILE을 이용한 Control File 수정

———————————————

1. startup 상태에서 SPFILE을 수정한다.

   ALTER SYSTEM SET control_files =

   ‘$HOME/ORADATA/ctl/ctrl01.ctl’,

   ‘$HOME/ORADATA/ctl/ctrl02.ctl’ SCOPE=SPFILE;

2. 작업중이던 control file을 내려쓰기 위해 데이타베이스를 shutdown 한다.

  shutdown immediate

3. 추가하려는 control file을 생성(기존의 것을 복사)한다.

  cp  $HOME/ORADATA/ctl/ctrl01.ctl

        $HOME/ORADATA/ctl/ctrl02.ctl

4. 수정된 정보를 갱신하기 위해 데이타베이스를 startup 한다.

   startup

5. 수정된 정보를 확인한다.

   SQL> col NAME format a35

   SQL> select * from v$controlfile;

——————————————-

PFILE을 이용한 Control File 수정

——————————————-

oracle 9i 를 수동으로 설치 할 경우 pfile 은 생성 되지 않습니다.

기본 접속은 spfile 을 이용하여 접속을 하기 때문에 pfile 을 이용하여

파라메터를 변경 할때는 먼저 spfile 로 부터 pfile 을 생성하여 주셔야

합니다.

create pfile from spfile;

구문으로 먼저 pfile 을 생성한다.

그럼

{ORACLE_HOME}/dbs 밑에 init{SID}.ora 파일이 생성된다.

db shutdown 후 ..

pfile 의 파라메터 값을 수정하고..

startup pfile={ORACLE_HOME}/dbs/init{SID}.ora 로

db start 를 시킨다.

그런 후 {ORACLE_HOME}/dbs 밑에 spfile{SID}.ora 파일을 백업 후

삭제 한다. 그 후

create spfile from pfile;

해준 후 다음 부터 정상적인 start 과정을 진행하면 새로 적용된 내용의

splile 로 db 가 시작된다.

위 내용을 참조하여 pfile 수정으로 control 파일을 추가 혹은 위치 변경하

는 법을 알아보자

1. 작업중이던 control file을 내려쓰기 위해 데이타베이스를 shutdown 한다.

  shutdown immediate

2. 추가하려는 control file을 생성(기존의 것을 복사)한다.

  cp  $HOME/ORADATA/ctl/ctrl01.ctl

        $HOME/ORADATA/ctl/ctrl02.ctl

3. PFILE이 위치한 $ORACLE_HOME/dbs의 init<SID>.ora 파일을 다음과 같이 수정한다.

  CONTROL_FILE = $HOME/ORADATA/ctl/ctrl01.ctl,

                                 $HOME/ORADATA/ctl/ctrl02.ctl)

4.수정된 정보를 갱신하기 위해 데이타베이스를 startup 한다.

   startup

  

5. 수정된 정보를 확인한다.

   SQL> col NAME format a35

   SQL> select * from v$controlfile;

##############

Redo Log File

##############

————————————

Redo Log File의 Group 상태

————————————

1. current  – 아직 사용 중인 Redo Log File

2. active    – 내용을 아직 Datafile에 저장하지 않은 상태(Checkpoint를 일으키면 incative 상태로 된다.)

3. inactive – active 상태가 checkpoint된 후의 상태

4. unused  – 아직 한 번도 사용되지 않은 상태

————————————————

Redo Log File의 Group 상태 확인하기

————————————————

SQL> col member format a35

SQL> select a.group#, a.member, b.status, b.bytes

          from v$logfile a, v$log b

          where a.group# = b.group#;

—————————————————–

강제로 Log switch와 checkpoint 일으키기

—————————————————–

– Log switch

ALTER SYSTEM SWITCH LOGFILE;

(Redo Log File의 Group 삭제시 current 나 active 상태에서는 삭제되지 않으므로

강제로 Log switch 해준다)

– Checkpoint

ALTER SYSTEM CHECKPOINT;

(9i이후에는 강제적인 checkpoint는 장려되지 않음)

——————————————

Redo Log File에 Group 추가하기

——————————————

$HOME/ORADATA/rl/log3a.rdo 과 $HOME/ORADATA/rl/log3b.rdo을

포함하고 있는 Group 1을 만든다.

ALTER DATABASE ADD LOGFILE GROUP 1

( ‘$HOME/ORADATA/rl/log3a.rdo’,

  ‘$HOME/ORADATA/rl/log3b.rdo’) size 1M;

——————————————–

Redo Log File에 Member 추가하기

——————————————–

Group 1에 $HOME/ORADATA/rl/log3c.rdo 을 추가 할 때

ALTER DATABASE ADD LOGFILE MEMBER

‘$HOME/ORADATA/rl/log3c.rdo’ TO GROUP 1;

——————————————–

Redo Log File에서 Group 삭제하기

——————————————–

Redo Log File에서 Group1을 삭제 할 때

ALTER DATABASE DROP LOGFILE GROUP 1;

———————————————–

Redo Log File에서 Member 삭제하기

———————————————–

Redo Log File에서 $HOME/ORADATA/rl/log3c.rdo 삭제 할 때

ALTER DATABASE DROP LOGFILE MEMBER

‘$HOME/ORADATA/rl/log3c.rdo’;

—————————————————-

Redo Log File 이름 바꾸기 및 이동 시키기

—————————————————-

1. Database를 shutdown 한다.

2. 옮길 위치에 Redo Log File을 복사한다.

    !cp $HOME/ORADATA/rl/log2c.rdo

          $HOME/ORADATA/rl/log3c.rdo

3. Database를 MOUNT 모드로 실행시킨다.

4. 다음의 명령어를 실행한다.

   ALTER DATABASE RENAME FILE

   ‘$HOME/ORADATA/rl/log2a.rdo’

   TO ‘$HOME/ORADATA/rl/log1c.rdo’;

5. Database를 Open 모드로 변경한다.

    ALTER DATABASE open;

    

##############

Data Files

##############

———————-

Tablespace 생성

———————-

userdata라는 이름(논리적인 이름)으로

‘$ORACLE_BASE/oradata/<SID명>/userdata01.dbf’ 라는 (물리적) 위치에 생성 할 경우

CREATE TABLESPACE userdata

DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/userdata01.dbf’ SIZE 5M;

———————————————-

Locally Managed Tablespaces 생성

———————————————-

– 9i부터는 디폴트가 Locally Managed Tablespace이다.

– UNIFORM SIZE는 EXTENT 사이즈이다.

CREATE TABLESPACE userdata

DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/userdata01.dbf’ SIZE 500M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128k;

————————————————–

Dictionary-Managed Tablespaces 생성

————————————————–

– initial 다음의 1M은 처음 할당된 EXTENT SIZE이다.

– PCTINCREASE 다음의 0은 증가치(% 단위)이다.

CREATE TABLESPACE userdata

DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/userdata01.dbf’ SIZE 500M

EXTENT MANAGER DICTIONARY

DEFAULT STORAGE

(initial 1M NEXT 1M PCTINCREASE 0);

—————————–

Undo Tablespace 생성

—————————–

undo1라는 이름(논리적인 이름)으로

‘$ORACLE_BASE/oradata/<SID명>/undo1.dbf’ 라는 (물리적) 위치에 생성 할 경우

CREATE UNDO TABLESPACE undo1

DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/undo01.dbf’ SIZE 40M;

—————————————————

Temporary Tablespace 관리시 주의사항

—————————————————

오라클 설치 시의 temp 테이블 스페이스는 Default Temporary Tablespace는

삭제되지 않는다.

새로운 Default Temporary Tablespace를 만들기 위해서는 Temporary Tablespace를

새로 만든 후 그 Temporary Tablespace를 Default Temporary Tablespace로 지정한다.

그리고 이전의 Temporary Tablespace를 삭제한다.

————————————

Temporary Tablespace 생성

————————————

temp라는 이름(논리적인 이름)으로

‘$ORACLE_BASE/oradata/<SID명>/temp.dbf’ 라는 (물리적) 위치에 생성 할 경우

CREATE TEMPORARY TABLESPACE temp

TEMPFILE ‘$ORACLE_BASE/oradata/<SID명>/temp1.dbf’ SIZE 20M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;

————————————————-

Default Tempory Tablespace로 바꾸기

————————————————-

temp 라는 Temporary Tablespace를 생성 후 다음을 실행한다.

ALTER DATABASE

DEFAULT TEMPORARY TABLESPACE default_temp;

———————————————

Tablespace READ-OLNY로 바꾸기

———————————————

userdata라는 Tablespace를 READ-ONLY로 변경하기

ALTER TABLESPACE userdata READ ONLY:

————————————————————-

Tablespace를 ONLINE 또는 OFFLINE로 바꾸기

————————————————————-

– userdata를 OFFLINE으로 바꾸기

ALTER TABLESPACE userdata OFFLINE;

– userdata를 ONLINE로 바꾸기

ALTERT TABLESPACE userdata ONLINE;

———————————-

Data File 사이즈 변경하기

———————————-

ALTER DATABASE

DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/userdata.dbf’

RESIZE 200M;

——————————————–

Talbespace 에 Data File 추가하기

——————————————–

userdata라는 Tablespace에 200M 사이즈의

‘$ORACLE_BASE/oradata/<SID명>/userdata02.dbf’ 를 추가한다.

ALTER TABLESPACE userdata

ADD DATAFILE ‘$ORACLE_BASE/oradata/<SID명>/userdata02.dbf’

SIZE 200M;

————————————————

Data File 이동하기(Alter Tablespace)

————————————————

– Tablespace는 offline 이어야한다.

– 이동하고자하는곳에 이동하고자 하는 Data File이 존재해야 한다.

– 4 번은 Control File을 갱신시키는 역할을 한다.

– GAD는 Global Area Database 명이다.

1. startup 상태에서 수행한다.

2. alter tablespace <tablespace명> offline; (mount 상태과 같다)

3. SQL> !mv $ORACLE_BASE/oradata/<GAD명>/userdata01.dbf

                    $ORACLE_BASE/oradata/<GAD명>/df/userdata02.dbf

4. ALTER TABLESPACE userdata RENAME

    DATAFILE ‘$ORACLE_BASE/oradata/<GAD명>/userdata01.dbf’

    TO ‘$ORACLE_BASE/oradata/<GAD명>/df/userdata02.dbf’;

5. alter tablespace <tablespace명> online;

———————————————

Data File 이동하기(Alter Database)

———————————————

– Database가 Mount 단계이어야 한다.

– 이동하고자하는곳에 이동하고자 하는 Data File이 존재해야 한다.

– 4 번은 Control File을 갱신시키는 역할을 한다.

– GAD는 Global Area Database 명이다.

1. 오라클을 shutdown 시킨다.

2. startup mount상태로 만든다.

3. !mv $ORACLE_BASE/oradata/<GAD명>/system01.dbf

           $ORACLE_BASE/oradata/<GAD명>/df/system02.dbf

4. ALTER DATABASE RENAME

    FILE ‘$ORACLE_BASE/oradata/<GAD명>/system01.dbf’

    TO ‘$ORACLE_BASE/oradata/<GAD명>/df/system02.dbf’

5. alter database open;

—————————

Tablespace 삭제하기

—————————

userdata 라는 Tablespace 삭제시 다음과 같다.

– and datafiles는 물리적인 Data File도 지운다는 것을 의미

DROP TABLESPACE userdata

INCLUDING CONTENTS AND DATAFILES;

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 20일

    2scabbard

  2. 2023년 1월 27일

    3cologne

페이스북/트위트/구글 계정으로 댓글 가능합니다.