본문 바로가기

빅데이터과정/RAC

#44_140813_RAC_DATAFILE 복구

728x90

# DATAFILE 복구






Storage 3가지

1.     ASM(Automatic storage management)
공유 스토리지

2.     Cluster file system
공유 스토리지

3.     Raw divice
각 노드의 file system




Archive log file 확인하는 쿼리
SQL> select name from v$archived_log;






RAC 환경에서 복구 순서
archive file이 공유 storage에 있다면 하나의 instance만 올려서 수행가능하다
그러나 만약 archive file raw device면 각각의 노드의 file system에 저장되는데 이 때는 하나의 노드에 모든 archive file을 모아서 수행해야 한다

1.     모든 instance shutdown
2.     하나의 instance mount로 올린다
3.     mount된 인스턴스에서 rman으로 접속해서 복구작업 수행







ASM Instance
공유 storage를 위한 데몬들의 관리를 하는 instance


n DB instance와 ASM instance 접속방법

[rac1:+ASM1:/home/oracle]su - oracle
Password:
[rac1:yudb1:/home/oracle]sql
SQL#1> select instance_name from v$instance;
INSTANCE_NAME
----------------
yudb1
오라클 계정에서 sqlplus에 접속하면 yudb1이라는 instance로 접속한 것을 확인할 수 있다

SQL#1> exit

[rac1:yudb1:/home/oracle]. .asm.sh
[rac1:+ASM1:/home/oracle]sql
INSTANCE_NAME
----------------
+ASM1
.asm.sh 를 수행하면 ASM instance로 접속하는 것을 확인할 수 있다





RAC 환경에서 data file이 깨졌을 때 복구 방법


1.     SQL> create tablespace ts05 datafile size 20m


2.     RMAN> backup tablespace ts05


3.     SQL> select tablespace_name, file_name from dba_data_files;


4.     양쪽 instance를 shutdown abort로 내린다


5.     OS에 가서 아래의 경로를 보이도록 해야한다
+DATA/yudb/datafile/ts05.268.855483839


6.     위 경로를 보이도록 할려면 아래와 같이 설정

[rac1:yudb1:/home/oracle]chmod 777 .asm.sh
.asm.sh 스크립트를 실행할 수 있는 권한을 최대로 허용

[rac1:yudb1:/home/oracle]. .asm.sh
.asm.sh 스크립트 수행

[rac1:+ASM1:/home/oracle]cat .asm.sh
.asm.sh 스크립트를 수행
export ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/asm_1
위 스크립트를 수행하면 asm 커맨드로 들어갈 수 있는 조건이 성립된다

[rac1:+ASM1:/home/oracle]asmcmd

ASMCMD>
위처럼 asmcmd로 접속가능한 것을 확인할 수 있다


7.     ts05 tablespace asmcmd에서 삭제한다
삭제하려면 양쪽 instance shutdown 상태여야 한다


ASMCMD> cd data/yudb/datafile

ASMCMD> ls
SYSAUX.261.743034679
SYSTEM.259.743034645
TS05.268.855483839
UNDOTBS1.260.743034669
UNDOTBS2.263.743034691
USERS.264.743034699

ASMCMD> pwd
+data/yudb/datafile

ASMCMD> rm TS05.268.855483839

ASMCMD> ls
SYSAUX.261.743034679
SYSTEM.259.743034645
UNDOTBS1.260.743034669
UNDOTBS2.263.743034691
USERS.264.743034699
ts05 tablespace가 삭제된 것을 확인 할 수 있다


8.     1번 노드를 startup 한다
mount에서 멈춘다


9.     복구해야할 파일 리스트 확인

1번 노드에서 진행

SQL#1> startup
Total System Global Area  167772160 bytes
Fixed Size                  1218316 bytes
Variable Size             130025716 bytes
Database Buffers           33554432 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '+DATA/yudb/datafile/ts05.268.855483839'
datafile 6번이 없다는 메시지를 출력하는 것을 확인할 수 있다

SQL#1> select status from v$instance;
STATUS
------------
MOUNTED
instance 상태를 확인하니 datafile이 없기 때문에 mount 상태까지 올라간다

SQL#1> select * from v$recover_file;
 FILE#  ONLINE  ONLINE_    ERROR           CHANGE#
---------- ------- ------- ---------------------------------------------
6  ONLINE  ONLINE       FILE NOT FOUND    0
6번 파일이 존재하지 않는다는 것을 알 수 있다


10.  rman에서 복구 진행

1번 노드에서 진행
RMAN> restore datafile 번호:
RMAN> recover datafile 번호:
RMAN> alter database open

11.  2번 노드 startup
  



 

RAC 환경에서 controlfile 삭제 후 복구 방법

 

1.     controlfile 백업

사용자 관리 백업

SQL> alter database backup controlfile to trace AS '/home/oracle/cre_con.sql';

RAMN 백업

RMAN> configure controlfile autobackup on;

RMAN> backup datafile 5;

 

2.     현재 controlfile의 위치 확인

SQL> select * from v$controlfile;

STATUS NAME                                                                                                        IS_ BLOCK_SIZE FILE_SIZE_BLKS

------- --------------------------------------------------------------------------------------------------------

+DATA/yudb/controlfile/current.256.743034629   NO        16384            950

+FRA/yudb/controlfile/current.256.743034631    YES       16384            950

 

3.     양쪽 인스턴스 shutdown

 

4.     asmcmd 창으로 접속해서 controlfile 삭제

asmcdm는 디렉토리에 파일이 없으면 cd .. 명령어를 이용해서 뒤로 못간다

 

5.     1번 instance에서 startup

SQL#1> startup

 

6.     Controlfile 복구

controlfile을 복구하려면 반드시 cluster_database 파라미터를 true에서 false로 변경하고 수행

cluster_database을 false로 한다는 것은 반드시 하나의 인스턴스만 올라올 수 있다는 의미이다

SQL> alter system set cluster_database=false scope=spfile sid='*';

 

7.     Controlfile을 생성하는 스크립트(수정작업이 필요함수행

 

수정작업

$ vi cre_con.sql

 

colon을 이용해서 명령어를 수행한다

일일이 복사해서 하는 것 보다는 아래의 명령어를 이용해서 원하는 파일을 생성할 수 있다

:set nu

:51,113 w c.sql

51번부터 113번까지 소스를 c.sql 이라는 파일명으로 생성한다

 

c.sql을 생성한 이후에 공백을 없애야 한다

startup nomount 부분 삭제

datafile 윗쪽에 주석을 포함한 공백부분 삭제

 


 

 

asmcmd에서 controlfile 디렉토리가 삭제 됐기 때문에 만들어야한다

ASMCMD> cd data/yudb

ASMCMD> mkdir controlfile

ASMCMD> ls

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

controlfile/

spfileyudb.ora

ASMCMD> exit

[rac1:+ASM1:/home/oracle]asmcmd

ASMCMD> cd fra/yudb

ASMCMD> mkdir controlfile

ASMCMD> ls

ARCHIVELOG/

AUTOBACKUP/

BACKUPSET/

ONLINELOG/

controlfile/

 

스크립트 수행

SQL> shutdown abort

SQL> startup nomount

SQL> @c.sql

 

8.     cluster_database 를 true로 설정

SQL> alter system set cluster_database=true scope=spfile sid='*';

 

9.     1번 instance를 내린 후 다시 양쪽 instance startup

1번을 다시 내리는 이유는 scope가 spfile이기 때문에 다시 내렸다 올려야 한다

 

 

 




 

 

 

Controlfile Autobackup 복구

 

1.     controlfile 백업

RMAN> configure controlfile autobackup on;

RMAN> backup datafile 5;

: autobackup on 으로 설정하고 datafile 중에 아무파일이나 백업하면 자동으로 controlfile의 autobackup 파일이 생성된다

 

2.     controlfile autobackup 위치 확인

RMAN> list backup of controlfile;

List of Backup Sets

===================

 

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

------- ---- -- ---------- ----------- ------------ -------------------

20      Full    14.92M     DISK        00:00:03     2014/08/13:14:19:35

        BP Key: 20   Status: AVAILABLE  Compressed: NO  Tag: TAG20140813T141932

        Piece Name: +FRA/yudb/autobackup/2014_08_13/s_855497972.270.855497975

  Control File Included: Ckp SCN: 4807561      Ckp time: 2014/08/13:14:19:32

 

3.     controlfile 위치 확인

SQL#1> select * from v$controlfile;

 

STATUS

-------

NAME

--------------------------------------------------------------------------------

IS_ BLOCK_SIZE FILE_SIZE_BLKS

--- ---------- --------------

 

+DATA/yudb/controlfile/current.256.855491337

NO       16384            950

 

 

+FRA/yudb/controlfile/current.256.855491343

YES      16384            950

 

4.     DB ID 확인

SQL#1> select dbid from v$database;

      DBID

----------

3819339649

 

 

5.     양쪽 instance를 shutdown abort

 

6.     asmcmd 창에서 controlfile 전부삭제

 

7.     1 instance startup

 

8.     RMAN 접속해서 복구

RMAN> restore controlfile from '+fra/yudb/autobackup/2014_08_13/s_855488827.311.855488829';

+fra 디렉토리에 있기는 하지만 위 한번의 수행으로 controlfile 이 모두 복구된다

RMAN> ALTER DATABASE MOUNT;

RMAN> RECOVER DATABASE;

RMAN> ALTER DATABASE OPEN RESETLOGS;

 

9.     2번 instance startup

 

 

 







 

 

ASM, Cluster file system이 아닌 raw device를 쓰는 환경일 때 복구 방법

NFS(Network File System) 으로 구성하면 1번 노드에서 ls를 수행하면 2번 노드의 archive log file이 보인다

복구시 빠르게 복구 하려면 ASM이나 cluster filesystem 사용

 


 

 

 

 


  



 

 

 

archive log file의 번호에 대한 파라미터





%t : archive logfile 이 생성될 때 thread 번호를 의미

%s : log sequence 번호

 




1.     archive log file 파일 이름 생성 규칙


SQL#1> show parameter log_archive_format

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

log_archive_format                   string      %t_%s_%r.dbf

%t 부분을 보면 어느 인스턴스의 archive logfile인지 구분할 수 있다

 

SQL#1> select name from v$archived_log;

 

NAME

--------------------------------------------------------------------------------

+FRA/yudb/archivelog/2014_08_13/thread_1_seq_21.316.855480071

+FRA/yudb/archivelog/2014_08_13/thread_2_seq_22.303.855481219

+FRA/yudb/archivelog/2014_08_13/thread_1_seq_22.283.855486081

 

 

 

 

 

 





 

 

Snapshot controlfile

controlfile에 백업받은 파일에 대한 이력정보가(백업시간포함된 파일

 

1.     restore database 명령어는 아래 사항을 파악하고 있다는 의미이다

rman으로 백업받은 백업본이 어디 있는지 알고 있다

백업본을 원본 디렉토리가 어디에 복원해야 하는지 알고 있다

 

2.     controlfile은 백업파일 위치와 원래 백업해야할 디렉토리 위치가 포함되어 있다

 

3.     autobackup을 키면 자동으로 controlfile을 백업하는데 이 백업 받은 controlfile들에 대한 이력정보를 snapshot controlfile에 저장되어 있다

 

4.     snapshot controlfile 위치 확인

RMAN> SHOW SNAPSHOT CONTROLFILE NAME;

/u01/app/oracle/product/10.2.0/dbs/scf/snap_prod.cf

 

5.     snapshot controlfile 위치 지정

RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO

'/ocfs/oradata/dbs/scf/snap_prod.cf';

 

 

 

 

RAC 환경에서의 불완전 복구(time base)

scott 유저를 drop 한 후에 scott 유저가 drop 되기 전 시점으로 복구하시오

장점

여러 노드에 있는 모든 리소스를 사용해서 백업을 할 수 있기 때문에 백업속도가 빠르다이 말은 여러 데이터들을 각각의 노드에게 분할해서 백업을 수행하기 때문에 한 개의 컴퓨터에서 백업을 할때 보다 시간이 빨라진다

서비스 친화도가 높은 data file들을 각 노드에서 각각 백업을 할 수 있기 때문에 백업속도가 빠르다.(비슷한 유형을 가지고 있는 node에서 각각 수행되기 때문에 친화도가 높다)

 

단점 복구 어드바이져를 사용못한다

RMAN> list failure;

RMAN> advise failure;

RMAN> repair failure;

 


 

1.     full backup

 

2.     현재시간확인

SQL#1> select sysdate from dual;

 

SYSDATE

-------------------

2014/08/13:15:38:14

 

3.     sys유저에서 scott 유저 drop

SQL> drop user scott cascade;

 

4.     양쪽 instance shutdown immediate

 

5.     1번 instance만 mount 상태로 올린다

 

6.     rman 접속해서 timebase 불완전 복구 수행

RAMN> run {set until time '2014/08/13:15:38:14';

    restore database;

    recover database;

    SQL "ALTER DATABASE OPEN resetlogs";

    }

 

 




'빅데이터과정 > RAC' 카테고리의 다른 글

#45_140814_RAC_CACHE FUSION  (0) 2014.08.14
#44_140813_RAC_TUNING  (0) 2014.08.13
#43_140812_RAC_전자지갑  (0) 2014.08.12
#43_140812_RAC_INSTANCE STOP START  (0) 2014.08.12
#43_140812_RAC_UNDO TABLESPACE  (0) 2014.08.12