상세 컨텐츠

본문 제목

2024년 1월 30일 2교시 : 1교시 때 했던 것 원복하기 (데이터 파일 이관작업)

오라클 백업 리커버리

by 병아리 엔지니어 2024. 1. 30. 12:02

본문

 

★ 데이터 파일 이관작업

 

1교시 때 옮겨놓았던 파일들을 원위치시켜 보자.

 

1. 모든 파일들 조회해 보기

 

SYS@ora11g> select name from v$controlfile;

더보기

SYS@ora11g> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/home/oracle/ora_data/control01.ctl


SYS@ora11g>  select name from v$datafile;

더보기

SYS@ora11g>  select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/home/oracle/ora_data/system01.dbf
/home/oracle/ora_data/sysaux01.dbf
/home/oracle/ora_data/users01.dbf
/home/oracle/ora_data/example01.dbf
/home/oracle/ora_data/undotbs01.dbf


SYS@ora11g> select member from v$logfile;

더보기

SYS@ora11g> select member from v$logfile;


MEMBER
--------------------------------------------------------------------------------
/home/oracle/ora_data/redo01.log
/home/oracle/ora_data/redo03.log
/home/oracle/ora_data/redo02.log


SYS@ora11g> select name from v$tempfile;

더보기

SYS@ora11g> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/home/oracle/ora_data/temp01.dbf


2. ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ DB 정.상.적.으.로. 내리기 (가장 중요!!!!!!!!!!!!!!!!!!!) ★ ★ ★ ★ ★ ★ ★ ★ ★

 

SYS@ora11g> shutdown immediate

 

shutdown abort 하고 나서 이후의 과정을 수행하려고 해 봤자 아무 소용이 없다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 

3. 파일 옮기기

 

SYS@ora11g> !
[oracle@oracle ora_data]$ ls
control01.ctl  redo02.log    system01.dbf   users01.dbf
example01.dbf  redo03.log    temp01.dbf
redo01.log     sysaux01.dbf  undotbs01.dbf

 

[oracle@oracle ora_data]$ mv *.* /u01/app/oracle/oradata/ora11g


 

4. 이제 컨트롤파일의 위치를 알고 있는 pfile 을 수정해주자.

 

[oracle@oracle ora_data]$ vi $ORACLE_HOME/dbs/initora11g.ora

 

 

주석처리해 놓았던 줄

*.control_files='/u01/app/oracle/oradata/ora11g/control01.ctl'#Restore Controlfile

에서 맨 앞의 # 없애 버리고

아래 달아놓았던 행 *.control_files='/home/oracle/ora_data/control01.ctl' 은 지워버리기

(esc + dd 명령어 쓰면 한 줄이 통째로 지워진다.)


 

5. pfile 로 DB 열기

 

[oracle@oracle ora_data]$ sqlplus / as sysdba

Connected to an idle instance.

 

DB 가 내려가 있다고 나오면

 

SYS@ora11g> startup pfile=$ORACLE_HOME/dbs/initora11g.ora mount

 

pfile 로 DB 열어주기

 

SYS@ora11g> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11g/control01.ctl

 

컨트롤파일 위치 확인: 원래대로 돌아와 있다.

하지만 컨트롤파일 말고 다른 파일들은 예전 위치 그대로 남아있는 상태인데

 

잠깐 복습:

데이터파일들 중에서 system 과 undo 는 오프라인 모드로 떨어뜨릴 수 없지만 (temp 도 마찬가지)

나머지는 오프라인 모드로 떨어뜨릴 수 있으므로 DB 를 내리지 않고도 이관 작업이 가능하다.

그렇지만 리두는 mount 상태에서 이관작업해 주어야 한다. (커런트한 리두를 지울 수가 없기 때문)


 

6. 리두부터 하나씩 바꾸기 (!!!!!!!!!!!!!!!!!!!!! 꼭 마운트 단계에서 해야 한다 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!)

 

SYS@ora11g> select status from v$instance;

STATUS
------------
MOUNTED

 

DB 가 마운트 단계인지 먼저 꼭 확인하기

 

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/redo01.log' to '/u01/app/oracle/oradata/ora11g/redo01.log';

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/redo02.log' to '/u01/app/oracle/oradata/ora11g/redo02.log';

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/redo03.log' to '/u01/app/oracle/oradata/ora11g/redo03.log';

 

Database altered.

 

하나씩 원위치시켜 주고

 

SYS@ora11g> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11g/redo01.log
/u01/app/oracle/oradata/ora11g/redo03.log
/u01/app/oracle/oradata/ora11g/redo02.log

 

위치가 옮겨졌는지 확인해보기: 잘 옮겨져 있다.


 

7. 데이터파일도 하나씩 옮겨주기

 

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/system01.dbf' to '/u01/app/oracle/oradata/ora11g/system01.dbf';
SYS@ora11g>

alter database rename file '/home/oracle/ora_data/sysaux01.dbf' to '/u01/app/oracle/oradata/ora11g/sysaux01.dbf';

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/users01.dbf' to '/u01/app/oracle/oradata/ora11g/users01.dbf';

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/example01.dbf' to '/u01/app/oracle/oradata/ora11g/example01.dbf';

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/undotbs01.dbf' to '/u01/app/oracle/oradata/ora11g/undotbs01.dbf';

 

하나씩 옮기고

 

SYS@ora11g> 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/undotbs01.dbf

 

옮겨졌는지 확인하기


 

8. 템프 파일도 옮겨주기

 

SYS@ora11g>

alter database rename file '/home/oracle/ora_data/temp01.dbf' to '/u01/app/oracle/oradata/ora11g/temp01.dbf';

옮기고

 

SYS@ora11g> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11g/temp01.dbf

 

확인


 

9. DB 열기 : 파일을 재생성한 것이 아니기 때문에 그냥 열어도 OK

SYS@ora11g> alter database open;

 

10. 지금 DB 가 pfile 로 띄워져 있는 상태이고, 지금의 파일들 위치는 spfile 이 모르는 상태이기 때문에

파일 위치를 아는 pfile 로 spfile 만들기

 

SYS@ora11g> create spfile from pfile;
File created.

 

11. DB 를 정상적으로 내렸다가 다시 올리면: DB가 다시 spfile 로 띄워지게 된다.

SYS@ora11g> shutdown immediate

SYS@ora11g> startup

 

DB 가 spfile 로 띄워져 있는지 확인해보기

 

SYS@ora11g> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 .4/db_1/dbs/spfileora11g.ora

 

spfile 로 잘 띄워져 있다.

관련글 더보기