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

망구씨·2023년 10월 12일
0
post-thumbnail
post-custom-banner

fast recovery area 사용 (p.2-23)

SYS> show parameter recovery 

실습 우리회사에 하루에 아카이브 로그 파일이 몇개나 생성되는지 확인하기
: 알아야 공간관리를 잘 할 수 있다. 서버도 내릴일이 있어서 여유있게 한달전이나 두달전에 알려줘야한다.
✔️ dba가 TA에게 파일 시스템에 공간이 꽉 차기 전에 평상시에 db에서 발생하는 데이터의 크기를 보고 계산을 해서 몇달 후면 파일 시스템이 90% 되겠다 라는 것을 미리 예상하고 있어야한다.

select * from v$archived_log;

1. 우리 회사에 하루 발생하는 아카이브 로그 파일의 갯수 확인

select first_time, count(*) 
 from v$archived_log
 group by first_time
 order by 1 asc ;

2. 우리 회사에 하루에 발생하는 아카이브 로그 파일의 크기 확인

select first_time, sum(block_size)
 from v$archived_log
 group by first_time
 order by 1 asc ; 

backup database plus archive log;

✔️ 온라인 로그 파일은 아카이브 로그 파일로 자동 백업 되므로 알맨으로 백업할 때 백업되지 않는다.


📖 workshop1 3장. RMAN Recovery Catalog 구성

Recovery catalog를 사용 안했을 때 vs Recovery catalog를 사용 했을 때 (p.3-3)

$ rman target / nocatalog
RMAN> backup database;

✔️ 백업 정보가 전부 controlfile에 기록된다. 즉, 컨트롤파일 깨지면 백업 못한다는 말
그런데 Recovery catalog db를 사용하게 되면 알맨 백업 정보가 control file, recovery catalog db에 동시에 저장되며 더 많은 정보를 저장할 수 있고, 알맨 백업 복구 스크립트를 저장할 수 있습니다.

백업 스크립트가 있으면,
월간 단위 백업 스크립트
주간 단위 백업 스크립트
일 단위 백업 스크립트를 저장하고 시간되면 자동으로 돌게 할 수 있습니다.


✅ 우리 실습은 orcl2를 보호하기 위해 orcl3쪽에 백업본들을 저장할 것이다!

recovery catalog를 사용해야하는 이유(p.3-5)

💡 Recovery Catalog 장점
control file 이 아니라 recovery catalog 를 이용했을때 장점

1. RMAN 백업/복구 스크립트저장할 수 있다.
2. 컨트롤 파일보다 더 많은 정보를 저장할 수 있다.
3. 컨트롤 파일을 백업 받을때 마다 그 정보를 기록하고, 컨트롤 파일이 깨졌을 때 가장 최근에 백업받은 컨트롤 파일로 자동 복구할 수 있게 해준다.

💡 control file이 아닌 recovery catalog에 백업정보를 저장하면 백업정보를 모두 기록한다. 오히려 comtrol file을 백업받은 정보까지 ! **그래서 컨트롤 파일이 깨지면 리커버리 카탈로그가 가장 최근 시점의 백업받은 컨트롤파일을 가져와서 깨진 컨트롤파일을 복구해준다.** (아니면 사람이 다 일일이 찾아서 해야함) 사람이 하면 시간도 오래걸리고, 없으면.......
  1. backup 할 때 keep forever 절을 사용할 수 있다.
report obsolete 라고 하면 지워도 되는 백업 파일 리스트를 보여주는데, 특정 백업본은 너무 중요해서
절대로 지우면 안되는 백업 파일로 만들고 싶으면 백업 받을 때 keep forever 를 사용하면 됩니다. 

Recovery Catalog 구성하기 (p.3-6)

💡 세가지 단계 !

          orcl2                                orcl3
       (target db)                     (recovery catalog db)
                                               ↓
                                         1. 리커버리 카탈로그 데이터를 저장할 
                                           테이블 스페이스 생성
                                         2. rc 소유자 유저를 생성
                                         3. recovery catalog 생성
 4. target db를 recovery catalog에 등록해주기                                     

실습

1. (orcl3) 리커버리 카탈로그 데이터를 저장할 테이블 스페이스 생성

SYS @ orcl3 > create tablespace rc_ts
  2  datafile '/home/oracle/rcts01.dbf' size 100m;

Tablespace created.

2. rc 소유자 유저를 생성

SYS @ orcl3 >
create user rc_user
     identified by rc_user
     default tablespace rc_ts;

SYS @ orcl3 > GRANT unlimited tablespace TO rc_user;
Grant succeeded.
SYS @ orcl3 > GRANT recovery_catalog_owner TO rc_user;
Grant succeeded.

3. recovery catalog 생성 -> rman 접속할 때 확실하게 orcl3으로 접속하게 하려고 아래처럼 써줌

cd $ORACLE_HOME/network/admin  -- tnsnames.ora 
$ rman catalog rc_user/rc_user@orcl3
RMAN> create catalog tablespace rc_ts;
recovery catalog created

4. orcl2에서 target db를 recovery catalog에 등록해주기

[orcl2:~]$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3

Recovery Manager: Release 11.2.0.1.0 - Production on Thu Oct 12 11:17:39 2023
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL2 (DBID=1130331177)
connected to recovery catalog database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

RMAN> report schema; -- target db에 대한 정보를 한눈에 볼 수 있다!

✅ 위처럼 접속하면 sys는 target db(orcl2)에 접속, rc_user는 catalog db(orcl3)에 동시에 접속한다. orcl2 -> orcl3 등록해줄것임!

RMAN> exit; -- 나갔다가 
[orcl2:~]$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3 --재접속후
RMAN> backup database; -- 백업하기

💡 Recovery catalog를 사용했을때의 이점

  1. RMAN 백업 스크립트를 생성할 수 있습니다.
  2. backup 할 떄 keep forever 절을 사용할 수 있습니다.

백업 스크립트 생성하기

실습 백업 스크립트를 생성할 수 있다.

RMAN> create script whole_backup
        {
          backup database include current controlfile;
        }
RMAN> print script whole_backup;
RMAN> run  {execute script whole_backup;}

문제 data file 1번, 2번, 3번을 백업하는 스크립트를 생성하고 수행해보기

RMAN> create script datafile_backup --여긴 스크립트 이름
        {
          backup datafile 1 ;
          backup datafile 2 ;
          backup datafile 3 ;
        }
RMAN> print script datafile_backup;
RMAN> run {execute script datafile_backup;} --실행     

실습 생성된 스크립트들을 조회하기

$ sqlplus rc_user/rc_user@orcl3
SQL> select script_name from rc_stored_script;
SCRIPT_NAME
----------------------------------------------------------------------------
datafile_backup
whole_backup

✅ rc를 이용하면 백업 복구 스크립트를 저장할 수 있습니다!

알맨으로 백업할 때 tag를 지정하는 실습

💡 tag는 사람이 알아볼 수 있는 쉬운 용어로 백업본의 이름을 지정하는 것입니다.

[orcl2:~]$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
RMAN> list backup;

➡️ 보면 뭐가 여러개 나오긴 하는데 이 백업본이 무슨 백업본인지 잘 모르겠다. 월간? 단위? 주간??? 어떤건지 확실하지 않다.

RMAN> backup tag 'month_full_backup' database;
RMAN> list backup tag 'month_full_backup';
RMAN> list backup;

문제 datafile 1번을 백업하는데 태그 이름을 붙여서 백업하기

RMAN> backup tag 'datafile_1' datafile 1;
RMAN> list backup tag 'datafile_1';
RMAN> list backup;

keep forever 를 지정해서 중요한 백업본을 영구히 저장할 수 있게 하기 (안됨)

RMAN> change backup tag 'month_full_backup' keep forever; #에러난다!!

위처럼 keep forever 지정해주면 백업 보존 정책에 위배되더라도 지워도 되는 파일 리스트에 나오지 않습니다.
❗ 위와같이 수행하면 에러가 발생한다. 에러가 발생하지 않게 하려면 백업 할 떄 format 옵션을 지정해서 알맨 백업본이 생성되는 위치를 지정해야함

RMAN> backup tag 'week_full_backup2' database
       format '/home/oracle/backup/%U';
RMAN> change backup tag 'week_full_backup2' keep forever;  
# 에러난다.
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of KEEP command on ORA_DISK_1 channel at 10/12/2023 13:29:23
ORA-19811: cannot have files in DB_RECOVERY_FILE_DEST with keep attributes

%U라고 쓰면 오라클이 알아서 백업본의 이름을 생성한다.

RMAN> report obsolete; <- 여기에 안나옴 !
RMAN> delete obsolete; 

🤔 리커버리 카탈로그를 이용했을 때의 장점?
1. keep forever 사용가능
2. rman 백업 복구 스크립트를 저장할 수 있다.

os에서 datafile을 삭제하고 복구하기(recovery catalog를 사용한 상태)

  1. db를 shutdown abort
  2. os에서 user01.dbf 를 삭제
  3. db startup
  4. rman에서 복구해야할 파일 리스트 조회
  5. 백업본 복원
  6. 복원한 파일 복구하기
  7. db 오픈

실습
0. 데이터 파일 위치 확인

SYS @ orcl2 > @ts
SYS @ orcl2 > USERS      /u01/app/oracle/oradata/orcl2/users01.dbf
  1. db를 shutdown abort
SYS @ orcl2 > shutdown abort
  1. os에서 user01.dbf 를 삭제
$ cd /u01/app/oracle/oradata/orcl2
$ rm users01.dbf
  1. db startup
startup 
  1. rman에서 복구해야할 파일 리스트 조회
[orcl2:~]$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
RMAN> list failure;
RMAN> advise failure;
  1. 백업본 복원
RMAN> restore datafile 4;
  1. 복원한 파일 복구하기
RMAN> recover datafile 4;
  1. db 오픈
SYS @ orcl2 > alter database open;

문제 /u01/app/oracle/oradata/orcl2/example01.dbf 를 삭제하고 복구하기

  1. db를 shutdown abort
SYS @ orcl2 > shutdown abort
  1. os에서 user01.dbf 를 삭제
$ cd /u01/app/oracle/oradata/orcl2
$ rm example01.dbf
  1. db startup
startup 
  1. rman에서 복구해야할 파일 리스트 조회
[orcl2:~]$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
RMAN> list failure;
RMAN> advise failure;


5. 백업본 복원

RMAN> restore datafile 5;
  1. 복원한 파일 복구하기
RMAN> recover datafile 5;
  1. db 오픈
SYS @ orcl2 > alter database open;

recovery catalog 를 사용했을 때 사용할 수 있는 rman 명령어 (p.3-14)

  1. catalog 명령어
  2. resync catalog 명령어
  3. change 명령어
  4. crosscheck 명령어
  5. list 명령어
  6. report 명령어

1. catalog 명령어

💡 RMAN으로 백업 받지 않은 일반 백업본을 알맨으로 복구할 때 사용할 수 있도록 등록하는 명령어

실습순서

1. users01.dbf를 hot backup(온라인 백업, 디비 운영중에 백업) 하기 위해 해당 테이블 스페이스를 begin backup 합니다.

SQL> select file#, checkpoint_change# from v$datafile_header; 
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1269820
         2            1269820
         3            1269820
         4            1269820
         5            1269820
         6            1063151
         7            1063659
         8            1080325
         9            1082485
        10            1269820 
-- 얘네 왜 안맞냐면 어제 read write 해놓은 애들임. @ts로 확인해서 
-- ts로 시작하는 애들 전부 alter system tablespace tsysh read write;로 바꾸니까 번호 다 맞음!
SQL> alter system checkpoint;
SYS @ orcl2 > save f.sql
Created file f.sql
SYS @ orcl2 > @f

SYS> alter tablespace users begin backup;
SYS> alter system checkpoint;
SYS @ orcl2 > @f
   FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1271792
         2            1271792
         3            1271792
         4            1271767 -- 얘만 바뀌지 않았다! 원래 이거였음 
         5            1271792
         6            1271792
         7            1271792
         8            1271792
         9            1271792
        10            1271792

CHECKPOINT_CHANGE#는 현재 시점 다 같은 파일임을 증명하는 것
begin backup을 하면 users테이블 스페이스에 테이블의 데이터를 엑세스 할 수도 있고 변경할 수도 있지만, 그 변경이 메모리에서만 일어나고 디스크에는 dbwr에 의해서 반영안되는 상태가 됩니다.

2. os 에서 /home/oracle밑에 online_backup 이라는 폴더를 만듭니다.

$ mkdir online_backup

3. /u01/app/oracle/oradata/orcl2/users01.dbf를 /home/oracle/online_backup 디렉토리에 복사합니다.

$ cp /u01/app/oracle/oradata/orcl2/users01.dbf /home/oracle/online_backup/users01.dbf

4. users 테이블 스페이스를 end backup 합니다.

SYS> alter tablespace users end backup;

✅ 그러면 다시 메모리에 있는 내용이 users01.dbf에 내려써질 수 있는 상태가 됩니다.
5. 알맨에 /home/oracle/online_backup/users01.dbf를 등록해줍니다.

RMAN> catalog datafilecopy '/home/oracle/online_backup/users01.dbf';
RMAN> list copy of datafile 4;
Key     File S Completion Time     Ckp SCN    Ckp Time
------- ---- - ------------------- ---------- -------------------
740     4    A 2023/10/12:14:17:07 1271767    2023/10/12:14:12:30
        Name: /home/oracle/online_backup/users01.dbf

2. resync catalog 명령어 (p.3-15)


💡 target db의 control file의 내용을 recovery catalog에게 알려주며 동기화 하는 명령어이다.

✔️ controlfile이 관리하는 정보 --------------> recovery catalog
1. db의 물리적 구조 정보
2. rman 백업 정보

RMAN > resync catalog;

➡️ target db쪽에 테이블 스페이스를 추가하거나, 삭제하거나 하는 물리적 구조의 변경이 일어났을 때 해줘야 한다. 원래는 자동으로 동기화 하지만 이 명령어는 수동으로 해주는 것이다!

문제 target db쪽에 ts500 테이블 스페이스를 사이즈 5m로 생성하고, 알맨에서 report schema를 했을 때 ts500 tablespace가 보이는지 확인

SYS> create tablespace ts500 
      datafile '/home/oracle/ts500.dbf' size 5m;
RMAN> report schema;

3. change 명령어

💡recovery catalog에 등록된 백업정보를 지울 때 사용하는 명령어

RMAN> list copy of datafile 4;
RMAN> change datafilecopy '/home/oracle/online_backup/users01.dbf' uncatalog;
RMAN> list copy of datafile 4;
  • rman 으로 백업 받을 때 백업본의 형태 두가지
  1. backup set
  2. image copy

crosscheck 명령어

💡 백업을 확실하게 받지 않으면 나중에 알맨으로 복원하고 복구할 때, 해당 백업본이 없다고 에러나면서 복원/복구를 못하는 경우가 생긴다. 이것을 예방하기 위한 명령어이다!

: 원본 파일들과 백업 파일들을 서로 비교해서 백업이 없는 파일이 있는지 확인하는 아주 중요한 명령어

RMAN> crosscheck backupset; --backupset 체크


✅ AVAILABLE은 괜찮다. expired 되면 x

RMAN> crosscheck copy; -- image copy만 체크

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=145 device type=DISK
specification does not match any datafile copy in the repository
specification does not match any control file copy in the repository
validation succeeded for archived log
archived log file name=/u01/app/oracle/flash_recovery_area/ORCL2/archivelog/2023_10_12/o1_mf_1_55_llgyvrvd_.arc RECID=52 STAMP=1150033929
validation succeeded for archived log
archived log file name=/u01/app/oracle/flash_recovery_area/ORCL2/archivelog/2023_10_12/o1_mf_1_56_llgz1l02_.arc RECID=53 STAMP=1150034114
validation succeeded for archived log
archived log file name=/u01/app/oracle/flash_recovery_area/ORCL2/archivelog/2023_10_12/o1_mf_1_57_llh20ngw_.arc RECID=54 STAMP=1150037156
Crosschecked 3 objects

실습

1. datafile 4번을 rman으로 백업

RMAN> backup datafile 4;
RMAN> list backup of datafile 4;
 BP Key: 494   Status: AVAILABLE  Compressed: NO  Tag: MONTH_FULL_BACKUP
        Piece Name: /u01/app/oracle/flash_recovery_area/ORCL2/backupset/2023_10_12/o1_mf_nnndf_MONTH_FULL_BACKUP_llgxr6v0_.bkp

2. os에서 위의 백업 파일을 RMAN 몰래 삭제합니다.

$ rm /u01/app/oracle/flash_recovery_area/ORCL2/backupset/2023_10_12/o1_mf_nnndf_MONTH_FULL_BACKUP_llgxr6v0_.bkp

3. RMAN으로 접속해서 crosscheck 합니다!

RMAN> crosscheck backupset;


4. expired 된 정보를 rman에서 지웁니다.

RMAN> delete expired backupset;
  1. 다시 4번 파일만 백업받으면 된다.

4. list 명령어

💡 백업본의 목록을 확인할 때 사용하는 명령어

1. users tablespace의 백업본이 있는가

RMAN> list backup of tablespace users;

2. datafile 5번의 백업본이 있는가

RMAN> list backup of datafile 5;

문제 contrlfile의 백업본이 있는지 조회

RMAN> list backup of controlfile;

5. report 명령어

💡 list 명령어 보다 더 지능적인 결과를 보여줍니다.

1. 백업이 필요한 파일이 무엇인가?

RMAN> report need backup;

2. 공간 절약을 위해 지워도 되는 백업파일들을 보여달라!

RMAN> report obsolete;
RMAN> delete obsolete;

3. target db의 물리적 구조를 보여줘

RMAN> report schema;

💡 지금까지 배운 RMAN 명령어들
catalog 명령어
resync catalog 명령어
change 명령어
crosscheck 명령어
list 명령어
report 명령어

Recovery catalog db가 손상되었을 때(p.3-2)

💡 recovery catalog db에 대한 백업본이 있다면 그걸로 복구하면 되고, 없으면 포기하고 새로운 db를 생성해서 그 db를 recovery catalog로 쓰면 됩니다.
새로운 db를 만들어서 recovery catalog db로 사용할 때 예전 recovery catalog db에 있던 데이터를 사용하고싶다면, 현재 recovery catalog db에 rc_user의 데이터를 export 받으면 됩니다!!

문제 orcl3 rc_user 데이터를 스키마 단위로 export 하시오!

[orcl3:~]$ exp rc_user/rc_user owner=rc_user file=rcuser.dmp

✅ 나중에 얘를 import하면 된다!

recovery catalog 업그레이드

recovery db
             11g  ---------------->  12c
                      upgrade                    

✅ upgrade catalog 라고 하면 upgrade된 오라클 엔진으러 리커버리 카탈로그를 업그레이드 할 수 있다.

Virtual Private Catalog 생성 및 사용

      target db1(계정계, orcl2) 백업정보1                 recovery catalog
      target db2(정보계, orcl4) 백업정보2                      (orcl3)
      target db3(개발db, orcl5) 백업정보3
      target db4(test db, orcl6) 백업정보4

💡백업정보 1,2,3,4를 하나의 recovery catalog db에 모두 저장할 수 있다. 현업에서는 대부분 이렇게 한다.

$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
$ rman target sys/oracle@orcl4 catalog rc_user/rc_user@orcl3
$ rman target sys/oracle@orcl5 catalog rc_user/rc_user@orcl3

백업과 복구 방법 크게 2가지

1. RMAN으로 백업과 복구

백업
1. hot backup : db 운영중에 백업
2. cold backup : db mount 상태에서 백업

복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)

*추가* recovery catalog를 사용한 백업과 복구
1. 백업 복구 스크립트 저장
2. keep forever
3. 불완전 복구시 잘 복구될 수 있도록 해줌!

✔️ 우리는 RMAN으로 하는 hot 백업, 복구 2가지 했고 recovery catalog 백업과 복구도 했음
2. 사용자 관리 백업과 복구

백업
1. hot backup : db 운영중에 백업
2. cold backup : db shutdown 상태에서 백업

복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)

system 파일 : system ts, undo ts얘네는 db가 오픈되지 않은 상태에서 복구해야한다. 그렇지만 users, example ... 들은 서비스가 운영중일 때 (디비가 올라와져있을 때) 복구를 해야한다.

사용자 관리 백업

1. 사용자 관리 백업 cold backup 수행

  1. 데이터 파일과 컨트롤 파일의 위치 확인
-- 데이터 파일 위치 확인
SYS @ orcl2 > select file_name from dba_data_files;

$ > 
cp /u01/app/oracle/oradata/orcl2/users01.dbf /home/oracle/coldbackup_orcl2/users01.dbf 
cp /u01/app/oracle/oradata/orcl2/undotbs01.dbf /home/oracle/coldbackup_orcl2/undotbs01.dbf
cp /u01/app/oracle/oradata/orcl2/sysaux01.dbf /home/oracle/coldbackup_orcl2/sysaux01.dbf 
cp /u01/app/oracle/oradata/orcl2/system01.dbf /home/oracle/coldbackup_orcl2/system01.dbf
cp /u01/app/oracle/oradata/orcl2/example01.dbf /home/oracle/coldbackup_orcl2/example01.dbf 
cp /home/oracle/ts100.dbf /home/oracle/coldbackup_orcl2/ts100.dbf
cp /home/oracle/tsysh.dbf /home/oracle/coldbackup_orcl2/tsysh.dbf
cp /u01/app/oracle/oradata/orcl2/ts2000.dbf /home/oracle/coldbackup_orcl2/ts2000.dbf
cp /u01/app/oracle/oradata/orcl2/ts3000.dbf /home/oracle/coldbackup_orcl2/ts3000.dbf
cp /home/oracle/ysh/ts01.dbf /home/oracle/coldbackup_orcl2/ts01.dbf
cp /home/oracle/ts500.dbf /home/oracle/coldbackup_orcl2/ts500.dbf

--컨트롤 파일 위치 확인
SYS @ orcl2 > select name from v$controlfile;
$ > 
cp /u01/app/oracle/oradata/orcl2/control01.ctl  /home/oracle/coldbackup_orcl2/control01.ctl
cp /u01/app/oracle/flash_recovery_area/orcl2/control02.ctl  /home/oracle/coldbackup_orcl2/control02.ctl 
cp /u01/app/oracle/oradata/orcl2/control03.ctl  /home/oracle/coldbackup_orcl2/control03.ctl
  1. db shutdown immediate ⭐ 절대 sgutdown abort로 내려서 백업받으면 안된다!!!
    3. /home/oracle/coldbackup_orcl2라는 폴더 만들기
$ mkdir coldbackup_orcl2

4. 데이터파일과 컨트롤 파일을 전부 이 위치로 copy해줍니다. (위 스크립트 수행) - 쉘로 돌리는 것이 더 바람직하다!

$ vi coldbackup.sh
$ sh coldbackup.sh

5. 완료시 startup 하기

1. 사용자 관리 백업 hot(online) backup 수행

  1. 테이블 스페이스를 모두 begin backup 해서 체크 포인트 정보가 갱신 안되게 멈춰놓습니다.
-- Begin backup 하는 스크립트 생성
SYS> select 'alter tablespace ' || tablespace_name || ' begin backup;'
      from dba_data_files;
'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'
-------------------------------------------------------------
alter tablespace USERS begin backup;
alter tablespace UNDOTBS1 begin backup;
alter tablespace SYSAUX begin backup;
alter tablespace SYSTEM begin backup;
alter tablespace EXAMPLE begin backup;
alter tablespace TS100 begin backup;
alter tablespace TSYSH begin backup;
alter tablespace TS2000 begin backup;
alter tablespace TS3000 begin backup;
alter tablespace TS01 begin backup;
alter tablespace TS500 begin backup;   
  1. os에서 /home/oracle/ 밑에 onlinebackup_orcl2 폴더를 만듭니다.
$ mkdir onlinebackup_orcl2
  1. os에서 datafile들을 전부 /home/oracle/onlinebackup_orcl2 에 copy!
-- cp 할 수 있는 스크립트
SYS> select 'cp ' || FILE_NAME || ' /home/oracle/onlinebackup_orcl2'|| substr(file_name,instr(file_name,'/',-1)) from dba_data_files;

'CP'||FILE_NAME||'/HOME/ORACLE/ONLINEBACKUP_ORCL2'||SUBSTR(FILE_NAME,INSTR(FILE
----------------------------------------------------------------------------
cp /u01/app/oracle/oradata/orcl2/users01.dbf /home/oracle/onlinebackup_orcl2/users01.dbf
cp /u01/app/oracle/oradata/orcl2/undotbs01.dbf /home/oracle/onlinebackup_orcl2/undotbs01.dbf
cp /u01/app/oracle/oradata/orcl2/sysaux01.dbf /home/oracle/onlinebackup_orcl2/sysaux01.dbf
cp /u01/app/oracle/oradata/orcl2/system01.dbf /home/oracle/onlinebackup_orcl2/system01.dbf
cp /u01/app/oracle/oradata/orcl2/example01.dbf /home/oracle/onlinebackup_orcl2/example01.dbf
cp /home/oracle/ts100.dbf /home/oracle/onlinebackup_orcl2/ts100.dbf
cp /home/oracle/tsysh.dbf /home/oracle/onlinebackup_orcl2/tsysh.dbf
cp /u01/app/oracle/oradata/orcl2/ts2000.dbf /home/oracle/onlinebackup_orcl2/ts2000.dbf
cp /u01/app/oracle/oradata/orcl2/ts3000.dbf /home/oracle/onlinebackup_orcl2/ts3000.dbf
cp /home/oracle/ysh/ts01.dbf /home/oracle/onlinebackup_orcl2/ts01.dbf
cp /home/oracle/ts500.dbf /home/oracle/onlinebackup_orcl2/ts500.dbf
  1. 테이블 스페이스를 모두 end backup 해서 체크 포인트 정보가 갱신되게 합니다.
-- end backup 하는 스크립트 
select 'alter tablespace ' || tablespace_name || ' end backup;'
 from dba_data_files;

 'ALTERTAVLESPACE'||TABLESPACE_NAME||'ENDBACKUP;'
-----------------------------------------------------------
alter tablespace USERS end backup;
alter tablespace UNDOTBS1 end backup;
alter tablespace SYSAUX end backup;
alter tablespace SYSTEM end backup;
alter tablespace EXAMPLE end backup;
alter tablespace TS100 end backup;
alter tablespace TSYSH end backup;
alter tablespace TS2000 end backup;
alter tablespace TS3000 end backup;
alter tablespace TS01 end backup;
alter tablespace TS500 end backup;

사용자 관리 복구 방법 (db가 open되지 않은 상태에서 복구하기)

1. scott유저에서 emp 테이블과 똑같이 emp700 테이블을 users 테이블 스페이스에 생성하기

SCOTT @ orcl2> create table emp708
                 tablespace users 
                 as 
                 select * from emp;

2. 로그 스위치를 3번 일으켜서 아카이브 로그 파일이 생성되게 하시오 !

SYS @ orcl2 > alter system switch logfile;
SYS @ orcl2 > alter system switch logfile;
SYS @ orcl2 > alter system switch logfile;

3. shutdown abort 하고 users01.dbf를 삭제하기

SYS @ orcl2 > @ts -- 위치확인
SYS @ orcl2 > shutdown abort 
$ rm /u01/app/oracle/oradata/orcl2/users01.dbf 

4. startup (mount에서 안올라올 것임)

SYS @ orcl2 > startup
select file# from v#recover_file
 where error='FILE NOT FOUND';
SYS @ orcl2 > select file#, name from v#recover_file; -- 복구해야하는 파일 이름확인 

5. 백업받은 users01.dbf를 복원하기 (cold 백업이나 online백업 폴더에서 카피하면 됨)

cp users01.dbf /u01/app/oracle/oradata/orcl2/users01.dbf

6. 복원한 users01.dbf를 복구하기! (예전 파일 일거라서 여기에 아카이브로그 파일을 적용해주어 최신파일로 만든다.)

SYS @ orcl2 > recover datafile 4; 
-- 이거 하면 아카이브로그파일 적용할건지 물어본다. 에러 아니고, 엔터 누르면 됨 !

7. db 오픈

SYS @ orcl2 > alter database open;

8. emp708가 잘 보이는지 select

SCOTT @ orcl2> select * from emp708;

오늘의 마지막 문제 scott 유저에서 example tablespace에 emp와 똑같은 emp908 테이블을 생성하고, 로그 스위치를 3번 일으키고 shutdown abort를 한 후에 os에서 example01.dbf를 삭제하고 startup 한 후 복구하기

  • 후에 보유기술에서 사용자 관리 복구 기술 등록하기

1. scott유저에서 emp 테이블과 똑같이 emp908 테이블을 example 테이블 스페이스에 생성하기

SCOTT @ orcl2> create table emp908
                 tablespace example 
                 as 
                 select * from emp;

2. 로그 스위치를 3번 일으켜서 아카이브 로그 파일이 생성되게 하시오 !

SYS @ orcl2 > alter system switch logfile;
SYS @ orcl2 > alter system switch logfile;
SYS @ orcl2 > alter system switch logfile;

3. shutdown abort 하고 example01.dbf를 삭제하기

SYS @ orcl2 > @ts -- 위치확인
SYS @ orcl2 > shutdown abort 
$ rm /u01/app/oracle/oradata/orcl2/example01.dbf 

4. startup (mount에서 안올라올 것임)

SYS @ orcl2 > startup
SYS @ orcl2 > select file# from v$recover_file
                where error ='FILE NOT FOUND';
     FILE#
----------
         5                
SYS @ orcl2 > select file#,name from v$datafile; -- 복구해야하는 파일 이름확인 
--         5
-- /u01/app/oracle/oradata/orcl2/example01.dbf

5. 백업받은 example01.dbf를 복원하기 (cold 백업이나 online백업 폴더에서 카피하면 됨)

[orcl2:coldbackup_orcl2]$ cp example01.dbf  /u01/app/oracle/oradata/orcl2/example01.dbf

6. 복원한 example01.dbf를 복구하기! (예전 파일 일거라서 여기에 아카이브로그 파일을 적용해주어 최신파일로 만든다.)

SYS @ orcl2 > recover datafile 5; 
-- 이거 하면 아카이브로그파일 적용할건지 물어본다. 에러 아니고, 엔터 누르면 됨 !

7. db 오픈

SYS @ orcl2 > alter database open;

8. emp908가 잘 보이는지 select

SCOTT @ orcl2> select * from emp908;

keep forever 에러나던거 다시 하니까 잘됨

backup tag 'week_full_backup3' database
       format '/home/oracle/backup/%U';

change backup tag 'week_full_backup3' keep forever;  

profile
Slow and steady wins the race.
post-custom-banner

0개의 댓글