[오라클 DB백업과 복구]23.10.04

망구씨·2023년 10월 4일
0
post-thumbnail

복습

dba가 백업을 하기에 앞서서 db에 기본적으로 셋팅해놔야 할 필수작업들을 14장에서 배우고있다.

1. 인스턴스 장애가 발생했을 때 복구에 걸리는 시간을 지정

  • 관련 파라미터 : fast_start_mttr_target (기본값 0, 최대값 1시간) - 10분정도로 지정하면 됩니다!

2. 오라클 데이터 베이스를 구성하는 중요 파일들을 다중화 합니다.

  • data file : 백업 대상
  • control file : 다중화 대상
  • redo log file : 다중화 대상
    ✅ 다중화가 되어져 있는지 확인 작업을 해야한다.

3. 아카이브 로그 모드로 변환을 합니다. (오늘 진행)

아카이브 로그 파일

SYS @ orcl > @log

    GROUP# STATUS            SEQUENCE#
---------- ---------------- ----------
         1 INACTIVE                128
         2 INACTIVE                129
         3 CURRENT                 131
         4 INACTIVE                126
         5 INACTIVE                127
         6 INACTIVE                130
         -- 6개가 있다 !


✅ 로그라이터가 두개 멤버에 내려쓰는데 꽉차면 로그스위치가 일어난다. 6번까지 꽉차면 다시 그룹1으로 오는데 이게 덮어씌워진다. 덮어씌워지기전에 아카이브로그 파일에 내용들이 저장되므로 아카이브 로그 모드를 해놓아야 함 !
: 아카이브 라는 프로세서가 리두로그파일에 대한 복사본을 생성해준다.
💡 로그라이터는 리두로그 파일에 내려쓰지만 이 복사본을 아카이브 로그 파일에 만드는 애는 아카이브 프로세서이다.

arch 프로세서 (p.14-25)

✅ arch 프로세서는 REDO LOG FILE을 백업하는 백그라운드 프로세서 입니다.
실습 1. 아카이브 모드인지 확인하기

SYS @ orcl > archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     126
Next log sequence to archive   131
Current log sequence           131

실습 2. 생성되는 위치

SYS @ orcl > show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA -- 여기에 생성
db_recovery_file_dest_size           big integer 20G

실습 3. 아카이브 로그 파일의 위치를 확인하는 sql

select name from v$archived_log;
+FRA/orcl/archivelog/2023_10_04/thread_1_seq_130.328.1149327701
+FRA/orcl/archivelog/2023_10_04/thread_1_seq_129.329.1149327699

92 rows selected.

thread_1는 인스턴스 번호. 인스턴스1 이다. seq_130는 로그 시퀀스 번호. 130개나 되었다! 130에 대한 아카이브 로그 파일이 스레드 1번에 생성되었다 라는 뜻.

실습 4. 아카이브 프로세서가 잘 떠있는지 확인하는 sql

select * 
 from v$bgprocess
 where name like '%ARC%';
5F675038	2	ARC0	Archival Process 0	0
5F675B10	1	ARC1	Archival Process 1	0
5F6770C0	1	ARC2	Archival Process 2	0
5F677B98	1	ARC3	Archival Process 3	0 

✅ archn 이라고 나오는 이유가 n 자리에 숫자가 들어가기 때문! 얘네들이 리두로그파일을 백업해서 아카이브 로그 파일을 만드는 프로세서 들이다 !

[orcl:~]$ ps -ef | grep arc
oracle   10814     1  0 09:11 ?        00:00:00 ora_arc0_orcl
oracle   10816     1  0 09:11 ?        00:00:00 ora_arc1_orcl
oracle   10820     1  0 09:11 ?        00:00:00 ora_arc2_orcl
oracle   10824     1  0 09:11 ?        00:00:00 ora_arc3_orcl

실습 1. 현재 아카이브 로그 파일이 생성되는 위치를 +FRA가 아닌 /home/oracle/arch라는 폴더에 생성되게끔 /home/oracle 밑에 arch 라는 폴더를 생성하기

[orcl:~]$ cd ~
[orcl:~]$ pwd
/home/oracle
[orcl:~]$ mkdir arch
[orcl:~]$ ls -ld arch
drwxr-xr-x 2 oracle oinstall 4096 104 10:27 arch

실습 2. /home/oracle/arch가 아카이브 로그파일이 생성될 위치가 되게 하시오

SYS> alter system set db_recovery_file_Dest='/home/oracle/arch';

실습 3. 로그 스위치를 수동으로 일으켜서 아카이브 로그 파일이 강제로 생성되게 하기

SYS> alter system switch logfile;
[orcl:~]$ cd arch
[orcl:arch]$ ls
ORCL
[orcl:arch]$ cd ORCL/
[orcl:ORCL]$ ls
archivelog
[orcl:ORCL]$ cd archivelog/
[orcl:archivelog]$ ls
2023_10_04
[orcl:archivelog]$ cd 2023_10_04/
[orcl:2023_10_04]$ pwd
/home/oracle/arch/ORCL/archivelog/2023_10_04
[orcl:2023_10_04]$ ls
o1_mf_1_131_lksj20r0_.arc

실습 4. 노아카이브 모드로 변환하기

SQL> shutdown immediate
SQL> startup mount
SQL> alter database noarchivelog;
SQL> alter database open;
SQL> archive log list

SYS @ orcl > archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     127
Current log sequence           132

실습 5. 다시 아카이브 모드로 변환하기

SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list
Database log mode              Archive Mode

❗ db 구성할 때 기본적으로 14장에 나온것처럼 셋팅해둡니다.

  1. 컨트롤 파일 다중화
select name from v$controlfile;
  1. 리두로그 파일 다중화
select group#, members from v$log;
  1. 아카이브 로그 모드로 변환
archive log list
  1. fast_start_mttr_target은 10분으로 셋팅
alter system set fast_start_mttr_target=600;

아카이브 로그 파일 : 이름 지정 및 대상

아카이브 로그 파일 이름 및 대상을 구성하려면 Enterprise Manager > Availability > Configure Recovery Settings를 선택합니다.
이전 로그 파일을 겹쳐쓰지 않도록 하려면 각각의 아카이브 로그 파일이 고유한 이름을 가져야
합니다.
슬라이드에 표시된 것과 같이 이름 지정 형식을 지정하십시오. 고유한 파일 이름을
생성할 수 있도록 Oracle Database 11g에서는 이름 형식에 다양한 대체 문자를 허용합니다.
%s: 파일 이름의 일부로 Log Sequence Number를 포함합니다.
%t: 파일 이름의 일부로 스레드 번호를 포함합니다.
%r: resetlogs ID를 포함하여 Log Sequence Number를 재설정하는 특정 고급 Recovery
기법후에도 아카이브 로그 파일 이름이 고유하게 유지되도록 보장합니다.
%d: 파일 이름의 일부로 데이터베이스 ID를 포함합니다.
형식에는 최적의 사용법으로 %s, %t 및 %r이 포함됩니다(%d는 여러 데이터베이스가 동일한
아카이브 로그 대상을 공유하는 경우에 포함될 수도 있음).
기본적으로 Fast Recovery Area가 활성화된 경우 USE_DB_RECOVERY_FILE_DEST는
아카이브 로그 파일 대상으로 지정됩니다. 아카이브 로그 파일은 최대 10개의 다른 대상에
기록될 수 있습니다. 대상은 로컬(디렉토리) 또는 원격(Standby Database에 대한 Oracle Net alias)에
있을 수 있습니다. 더 많은 대상을 추가하려면 Add Another Row를 누릅니다. Recovery 설정을
변경하려면 SYSDBA 또는 SYSOPER로 연결해야 합니다.
주: 아카이브를 이 위치로 보내지 않으려면 USE_DB_RECOVERY_FILE_DEST를 삭제하십시오.

ARCHIVELOG 모드 활성화

sqlplus / as sysdba
shutdown immediate
startup mount
alter database archivelog;
alter database open;
archive log list

📖 15장. 데이터 베이스 백업

이 단원을 마치면 다음을 수행할 수 있습니다.
• 일관성 있는 데이터베이스 백업 생성 -> db close상태에서 백업. 백업상태에서 하는것을 많
• 데이터베이스를 종료하지 않고 백업 -> db open중에 백업
• Incremental 백업 생성 -> 변경사항만 백업
• 데이터베이스 백업 자동화
• 백업 관리 및 백업 보고서 보기
• Fast Recovery Area 모니터 -> 백업파일과 아카이브로그파일이 저장되므로 풀나지 않도록 주의

백업 솔루션


1. RAMN을 이용한 백업
2. Tape에 백업하는
3. 유저관리 방식의 백업

User 관리 방식의 백업 실습

위 실습 진행 전에 테이블스페이스 정리했음

select tablespace_name from dba_data_files;
drop tablespace TS206 including contents and datafiles;
drop tablespace TS51 including contents and datafiles;
drop tablespace TS05 including contents and datafiles;
drop tablespace TS5000 including contents and datafiles;
drop tablespace TS300 including contents and datafiles;

1. data file의 위치를 확인

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.796857625
+DATA/orcl/datafile/undotbs1.258.796857625
+DATA/orcl/datafile/sysaux.257.796857623
+DATA/orcl/datafile/system.256.796857621
+DATA/orcl/datafile/example.265.796857803
+DATA/orcl/datafile/sysaux.267.1145464529
+DATA/orcl/datafile/users.268.1145464531
+DATA/orcl/datafile/system.269.1145464533
+DATA/orcl/datafile/system.270.1145464597
+DATA/orcl/datafile/small_undo.273.1148230607
/home/oracle/example02.dbf

FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/sysaux02.dbf
/home/oracle/system02.dbf
/home/oracle/ts200.dbf
+DATA/orcl/datafile/sysaux.274.1148637749
+DATA/orcl/datafile/users.276.1148637749

16 rows selected.

2. control file의 위치를 확인

SQL> select name from v$controlfile;
NAME
----------------------------------------------------------------------------
+DATA/orcl/controlfile/current.260.796857737
+FRA/orcl/controlfile/current.256.1148659713
/home/oracle/control03.ctl

3. redo logfile의 위치를 확인

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+DATA/orcl/onlinelog/group_3.263.796857759
+FRA/orcl/onlinelog/group_3.259.796857763
+DATA/orcl/onlinelog/group_2.262.796857753
+FRA/orcl/onlinelog/group_2.258.796857757
+DATA/orcl/onlinelog/group_1.261.796857743
+FRA/orcl/onlinelog/group_1.257.796857749
+DATA/orcl/onlinelog/group_4.271.1146924991
+FRA/orcl/onlinelog/group_4.264.1146924997
+DATA/orcl/onlinelog/group_5.272.1146925419
+FRA/orcl/onlinelog/group_5.265.1146925423
+DATA/orcl/onlinelog/group_6.275.1148660837
MEMBER
-----------------------------------------------------------------------------
+FRA/orcl/onlinelog/group_6.330.1148660945
12 rows selected.

4. db를 정상종료 shutdown immediate
5. 위 3개의 파일을 전부 하나의 특정 백업 디렉토리에 복사한다.

-- home/oralce 밑에 backup 폴더 만들기
[orcl:~]$ mkdir backup 

[orcl:~]$ ps -ef | grep pmon
oracle    5469     1  0 05:48 ?        00:00:04 asm_pmon_+ASM
oracle   13692 11401  0 11:29 pts/4    00:00:00 grep pmon
[orcl:~]$ . oraenv
ORACLE_SID = [orcl] ? +ASM --ASM으로 접속
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle
[+ASM:~]$ asmcmd
ASMCMD>
ASMCMD> ls
DATA/
FRA/
ASMCMD> cd data/
ASMCMD> ls
ASM/
ORCL/
ASMCMD> cd orcl
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileorcl.ora
ASMCMD> cd datafile/
ASMCMD> ls
EXAMPLE.265.796857803
SMALL_UNDO.273.1148230607
SYSAUX.257.796857623
SYSAUX.267.1145464529
SYSAUX.274.1148637749
SYSTEM.256.796857621
SYSTEM.269.1145464533
SYSTEM.270.1145464597
UNDOTBS1.258.796857625
USERS.259.796857625
USERS.268.1145464531
USERS.276.1148637749
--------copy 진행----------
cp EXAMPLE.265.796857803 /home/oracle/backup/
cp SMALL_UNDO.273.1148230607 /home/oracle/backup/
cp SYSAUX.257.796857623 /home/oracle/backup/
cp SYSAUX.267.1145464529 /home/oracle/backup/
cp SYSAUX.274.1148637749 /home/oracle/backup/
cp SYSTEM.256.796857621 /home/oracle/backup/
cp SYSTEM.269.1145464533 /home/oracle/backup/
cp SYSTEM.270.1145464597 /home/oracle/backup/
cp UNDOTBS1.258.796857625 /home/oracle/backup/
cp USERS.259.796857625 /home/oracle/backup/
cp USERS.268.1145464531 /home/oracle/backup/
cp USERS.276.1148637749 /home/oracle/backup/
cp sysaux02.dbf /home/oracle/backup/ -- os에서 진행
cp system02.dbf /home/oracle/backup/
cp ts200.dbf /home/oracle/backup/
cp undotbs3.dbf /home/oracle/backup/

[orcl:backup]$ ls -l | wc -l

--------------------controlfile(os,+FRA,+DATA)----------------------------
[orcl:~]$ ls -l control03.ctl
-rw-r----- 1 oracle dba 9846784 10월  4 11:29 control03.ctl
[orcl:~]$ cp control03.ctl /home/oracle/backup/
-----------------
ASMCMD> cd ..
ASMCMD> ls
ASM/
ORCL/
ASMCMD> pwd
+data
ASMCMD> cd ..
ASMCMD> ls
DATA/
FRA/
ASMCMD> pwd
+
ASMCMD> cd fra/
ASMCMD> ls
ORCL/
ASMCMD> cd orcl
ASMCMD> ls
ARCHIVELOG/
BACKUPSET/
CONTROLFILE/
ONLINELOG/
ASMCMD> cd controlfile/
ASMCMD> ls
current.256.1148659713
ASMCMD> cp current.256.1148659713 /home/oracle/backup/
copying +fra/orcl/controlfile/current.256.1148659713 -> /home/oracle/backup//current.256.1148659713
------------------
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileorcl.ora
ASMCMD> cd controlfile
ASMCMD> ls
Current.260.796857737
ASMCMD> cp Current.260.796857737 /home/oracle/backup/
copying +data/orcl/controlfile/Current.260.796857737 -> /home/oracle/backup//Current.260.796857737

--------------------------------redolog(+data)--------------------------------
ASMCMD> cd ..
ASMCMD> ls
DATA/
FRA/
ASMCMD> cd data/
ASMCMD> ls
ASM/
ORCL/
ASMCMD> cd orcl/
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileorcl.ora
ASMCMD> cd onlinelog/
ASMCMD> ls
group_1.261.796857743
group_2.262.796857753
group_3.263.796857759
group_4.271.1146924991
group_5.272.1146925419
group_6.275.1148660837

cp group_1.261.796857743 /home/oracle/backup/
cp group_2.262.796857753 /home/oracle/backup/
cp group_3.263.796857759 /home/oracle/backup/
cp group_4.271.1146924991 /home/oracle/backup/
cp group_5.272.1146925419 /home/oracle/backup/
cp group_6.275.1148660837 /home/oracle/backup/

--------------------------------redolog(+FRA)--------------------------------
ASMCMD> cd onlinelog/
ASMCMD> ls
group_1.257.796857749
group_2.258.796857757
group_3.259.796857763
group_4.264.1146924997
group_5.265.1146925423
group_6.330.1148660945

cp group_1.257.796857749 /home/oracle/backup/
cp group_2.258.796857757 /home/oracle/backup/
cp group_3.259.796857763 /home/oracle/backup/
cp group_4.264.1146924997 /home/oracle/backup/
cp group_5.265.1146925423 /home/oracle/backup/
cp group_6.330.1148660945 /home/oracle/backup/

공간확인해보기 /가 /home/oracle임

[orcl:backup]$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                     199019448  50767244 137979436  27% /
/dev/sda1               101086     18291     77576  20% /boot
tmpfs                  1815956    157532   1658424   9% /dev/shm
/dev/hdc                 52244     52244         0 100% /media/VBox_GAs_7.0.10

백업 용어(p.15-6)

  1. db 전체(whole) 백업 : datafile, controlfile, redo log file
  2. db 일부 백업 : 특정 datafile만 백업
  3. db 전체(full) 백업 : 모든 데이터 블럭을 다 백업(파일 안에 있는 블럭들)
  4. incremental 백업 :full backup 이후에 변경된 사항만 백업
  5. cumulative 백업 : full backup 이후에 변경된 사항들을 모두 누적해서 백업
  6. 오프라인 백업 : db가 open 안된 상태에서 백업 cold backup
  7. 온라인 백업 : db가 open된 상태에서 백업 hot backup

Rman의 백업 용어 2가지 (p.15-7)

💡 Rman으로 백업할 때 백업 파일 2가지
1. image copy : os의 파일을 그대로 백업하는 것
2. backupset : data가 있는 블럭만 백업하는 것

만약 users01.dbf라는 파일 안에 전체의 1/3만 데이터가 차있고 2/3가 비어있다면, 이미지 카피는 그대로 복사하는 것이고(통채로) 백업셋은 들어있는 1/3의 데이터만 가져와서 백업한다.

RMAN(Recovery Manager)

  1. 명령어로 간편하게 백업과 복구를 수행할 수 있다.
  2. EM으로 백업 버튼을 누르면 RMAN 스크립트가 돕니다.
  3. 시중에 판매되고 있는 백업 프로그램들은 RMAN 스크립트가 돌게 구성됨
  4. 오라클이 알아서 아래의 명령어만 수행하면 datafile, controlfile, 파라미터 파일을 백업합니다.
RMAN> configure controlfile autobackup on;
RMAN> backup database including current controlfile;

실습 RMAN을 이용해서 오전에 했던 전체 database 백업을 하기(db올라가있는 상태로하기)

$ rman target / nocatalog
RMAN> configure controlfile autobackup on;

✅ 앞으로 어느 파일을 백업받던 백업을 수행할 때마다 무조건 컨트롤파일과 파라미터 파일을 자동으로 백업합니다.

RMAN> backup database include current controlfile;
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 04-OCT-23

Starting Control File and SPFILE Autobackup at 04-OCT-23
piece handle=/home/oracle/arch/ORCL/autobackup/2023_10_04/o1_mf_s_1149344144_lksx80b3_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 04-OCT-23
RMAN> list backupset;


✅ 사용자도 편하고 오라클에서도 권장하는 강력한 백업 방법이 Rman 백업입니다!

위는 em으로 백업하는 방법

컨트롤 파일을 trace file로 백업(p.15-16)

컨트롤 파일을 생성하는 스크립트를 만드는 작업.

alter database backup controlfile to trace
  as '/home/oracle/create_controlfile.txt'; 

위 명령어를 반드시 수정해야할 떄
1. DB구조가 변경되었을 때 (DATAFILE, REDO LOG FILE의 위치가 변경)
2. 새로운 테이블스페이스를 생성했을 때
3. 기존 테이블 스페이스에 DATA FILE을 추가했을 때
🤔 만약 RMAN으로 컨트롤 파일을 자동으로 백업하는 구성을 했으면 오라클이 알아서 DB의 구조 변경되었을떄 컨트롤 파일을 자동백업합니다.

문제 ts700 이라는 테이블 스페이스를 10m로 생성하는데 alert log 파일을 아래쪽에 tail -f 로 모니터링 하면서 생성하시오

SYS> create tablespace ts700
   datafile '/home/oracle/ts700.dbf' siz 10m;

문제 em에서 rman 백업본을 확인하시오 (책 15-17페이지)
em -> 가용성 -> 현재백업관리

문제 em에서 백업 보고서 보기를 확인 (15-18)
em -> 가용성 -> 백업 보고서

문제 em에서 fast recovery area 영역에 사용율에 대한 원형 그래프를 확인하시오(p.15-19)
db_recovery_file_dest로 지정한 위치 !
em -> 가용성 -> 복구 설정 -> 밑으로 내리면 원형그래프 나옴

전체 데이터 베이스 백업 명령어 (p.15-20)


✅ rman target / nocatalog 써도 되고 안써도 됨. 디폴트라서! 더 강력하게 쓰고 싶다면 catalog를 쓴다. 이것은 나중에 나옴 !
plus archivelog 를 쓰면 아카이브로그 파일 까지 백업이 된다.

rman target / nocatalog
RMAN> configure controlfile autobackup on;
RMAN> backup database plus archivelog;

💡위와 같이 백업하면 4개의 파일을 전부 백업합니다.
1. data file
2. controlfile
3. spfile
4. archive log file

📖 16장. 데이터 베이스 복구 하기

이 단원을 마치면 다음을 수행할 수 있습니다.

  • Recovery 수행 필요성 판단
  • 다양한 인터페이스 액세스(예: Enterprise Manager 및 명령행)
  • RMAN(Recovery Manager) 및 Data Recovery Advisor
    같은 사용 가능한 옵션 설명 및 사용
  • Recovery 수행:
    • 콘트롤 파일
    • 리두 로그 파일
    • 데이터 파일

db가 올라올 때 필요한 파일들 (p.16-3)

실습1. data file중 하나를 깨트리고 db를 내렸다 올려보면서 어디까지 올라오는지 확인하기

  1. data file 위치를 확인
SQL> select file_name from dba_data_files;

SQL> create tablespace ts700
       datafile '/home/oracle/ts700.dbf' size 10m;
  1. rman으로 접속해서 ts700테이블 스페이스만 백업을 받기
RMAN> backup tablespace ts700;
RMAN> list backup of tablespace ts700;
  1. os에서 /home/oracle밑에 있는 ts700.dbf를 삭제합니다.
rm ts700.dbf
  1. db를 내렸다 올립니다.
SQL> shutdown abort
SQL> startup 

Total System Global Area 1071333376 bytes
Fixed Size                  1341312 bytes
Variable Size             855640192 bytes
Database Buffers          209715200 bytes
Redo Buffers                4636672 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 10 - see DBWR trace file
ORA-01110: data file 10: '/home/oracle/ts700.dbf'
  1. rman으로 접속해서 복구
RMAN> restore datafile 10;
RMAN> recover datafile 10;
RMAN> alter database open

restore(복원) : 과거에 백업 받은 파일을 원본위치에 가져오는 작업
recover(복구) : 복원한 파일에 로그파일을 적용해서 최신 파일로 만들어주는 작업 -> 아카이브 로그 파일, 현재 리두 로그 파일을 적용햇 최신 파일로 만들어주는 작업 !

❗ 우리는 datafile 10 을 직접 적어서 복구했지만 밑 쿼리로 어떤게 문제인지 찾을 수 있다. 또 한개가 아닌 여러개 가능.

SQL> SELECT name, error
      FROM v$datafile
      JOIN v$recover_file
      USING (file#);

SQL> select d.file#, name, error
       from v$datafile d, v$recover_file r
       where d.file# = r.file#;

여러개의 data file을 깨트리고 복구하기

1. 데이터 파일의 위치를 확인하기

SQL> select file_name from dba_data_files;

FILE_NAME
-----------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.796857625
+DATA/orcl/datafile/undotbs1.258.796857625
+DATA/orcl/datafile/sysaux.257.796857623
+DATA/orcl/datafile/system.256.796857621
+DATA/orcl/datafile/example.265.796857803
+DATA/orcl/datafile/sysaux.267.1145464529
+DATA/orcl/datafile/users.268.1145464531
+DATA/orcl/datafile/system.269.1145464533
+DATA/orcl/datafile/system.270.1145464597
/home/oracle/ts700.dbf
+DATA/orcl/datafile/small_undo.273.1148230607
FILE_NAME
-----------------------------------------------------------------------------
/home/oracle/example02.dbf
/home/oracle/sysaux02.dbf
/home/oracle/system02.dbf
/home/oracle/ts200.dbf
+DATA/orcl/datafile/sysaux.274.1148637749
+DATA/orcl/datafile/users.276.1148637749
17 rows selected.

2. db내리기

SYS> shutdown abort

3. asmcmd로 접속해서 아래의 2개 파일 지우기

+DATA/orcl/datafile/users.259.796857625
+DATA/orcl/datafile/undotbs1.258.796857625

[+ASM:~]$ asmcmd
ASMCMD>
rm +DATA/orcl/datafile/users.259.796857625
rm +DATA/orcl/datafile/undotbs1.258.796857625

4. startup 하면 에러날것. 조회해보기 -> 이거 안해도 alert log파일에 나오긴 한다. 항상 보고있기.

SQL> select d.file#, name, error
       from v$datafile d, v$recover_file r
       where d.file# = r.file#;



5. 복구

rman target / 
RMAN> restore datafile 3;
RMAN> restore datafile 4;
RMAN> recover datafile 3;
RMAN> recover datafile 4;
alter database open;

문제 짝꿍하고 자리 바꿔서 짝꿍의 datafile 조회하고 shutdown abort 한 후에 system.dbf빼고 다른 파일 2개 깨트리고 자리로 오기 -> 그리고 내꺼 복구

SYS> startup 
SQL> select d.file#, name, error
       from v$datafile d, v$recover_file r
       where d.file# = r.file#;
rman target / 
RMAN> restore datafile 5;
RMAN> restore datafile 14;
RMAN> recover datafile 5;
RMAN> recover datafile 14;
alter database open;    
SYS @ orcl > alter system checkpoint;

---복구가 다 되었으면 다시 전체 백업을 수행하기! -> 항상 최신 백업본으로 유지해야 함
RMAN> delete backupset;
RMAN> backup database plus archivelog;

Data Recovery Advisor(복구관리자)-꿀팁!⭐

💡 오라클이 장애상황에 대한 대처 방법을 알려줍니다.
실습 순서 !

  1. datafile의 위치를 확인하기
  2. shutdown abort로 디비 내리기
  3. datafile 2개를 삭제하기 (os에서)
  4. startup 하기 (mount에서 멈출것)
  5. 알맨으로 접속해서 복구해야할 파일이 무엇인지 확인하기
RMAN> list failure;
  1. 복구 어드바이져에게 복구 방법을 알려달라고 주문합니다.
RMAN> advise failure;
  1. 알맨에게 너가 어드바이스 한대로 직접 복구해라 !
RMAN> repair failure;

오늘의 마지막 문제 복구 어드바이저로 장애 상황을 해결하는데 data file을 3개 이상 깨트리고 수행하기!

  1. datafile의 위치를 확인하기
SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.1149350615
+DATA/orcl/datafile/undotbs1.258.1149350605
+DATA/orcl/datafile/sysaux.257.796857623
+DATA/orcl/datafile/system.256.796857621
+DATA/orcl/datafile/example.273.1149351731
+DATA/orcl/datafile/sysaux.267.1145464529
+DATA/orcl/datafile/users.268.1145464531
+DATA/orcl/datafile/system.269.1145464533
+DATA/orcl/datafile/system.270.1145464597
/home/oracle/ts700.dbf
+DATA/orcl/datafile/small_undo.265.1149351737
FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/example02.dbf
/home/oracle/sysaux02.dbf
/home/oracle/system02.dbf
/home/oracle/ts200.dbf
+DATA/orcl/datafile/sysaux.274.1148637749
+DATA/orcl/datafile/users.276.1148637749
17 rows selected.
  1. shutdown abort로 디비 내리기
  2. datafile 2개를 삭제하기 (os에서)
$ rm sysaux02.dbf
$ rm system02.dbf
$ rm example02.dbf
  1. startup 하기 (mount에서 멈출것)
  2. 알맨으로 접속해서 복구해야할 파일이 무엇인지 확인하기
RMAN> list failure;
  1. 복구 어드바이져에게 복구 방법을 알려달라고 주문합니다.
RMAN> advise failure;
  1. 알맨에게 너가 어드바이스 한대로 직접 복구해라 !
RMAN> repair failure;


profile
Slow and steady wins the race.

0개의 댓글