posted by I유령I 2010. 3. 16. 11:02
< 전체 순서 요약 >
1. DB를 Archive log mode로 설정
2. 실제 DB: testdb, Clone DB: testdb2
3. 이 방법은 장애 시점 이전의 Backup file과 Archive log file로 복구를 해내므로 반드시 장애시점 이전의 Backup file과 Archive log file이 존재해야 한다.


< 작업 순서 요약 >
1. Tablespace 생성 후 전체 Tablespace Backup (hot / cold 상관 없음)
2. test Table 생성 후 장애발생 - 실습할 Tablespace에 생성할 것
3. 복구 서버(testdb2)용 Parameter file 생성 (기존 Parameter file 복사 후 몇 개 항목만 변경)
4. 복구 대상 파일을 복구 위치로 복사
5. 복구 서버를 위한 Control file 재 생성 (기존 서버에서 사용중인 Control file을 Trace해서 재 생성에 사용함)
6. mount 상태에서 recover database until time 명령어로 복구
7. exp로 해당 Table을 export 받고 imp로 원본 서버에 import 한다.


< 실제 작업 수행 >
1단계 : Tablespace 생성 후 전체 Backup 받기

SQL> create tablespace clone datafile '/home/oracle/oradata/testdb/clone01.dbf' size 10m;

Tablespace created.

SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;

TABLESPACE_NAME              MB FILE_NAME
-------------------- ---------- --------------------------------------------------
USERS                         5 /home/oracle/oradata/testdb/users01.dbf
SYSAUX                      240 /home/oracle/oradata/testdb/sysaux01.dbf
UNDOTBS1                     35 /home/oracle/oradata/testdb/undotbs01.dbf
SYSTEM                      480 /home/oracle/oradata/testdb/system01.dbf
EXAMPLE                     100 /home/oracle/oradata/testdb/example01.dbf
CLONE                        10 /home/oracle/oradata/testdb/clone01.dbf

6 rows selected.

SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/system01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/system01.dbf' -> `/data/backup/open/system01.dbf'

SQL> alter tablespace system end backup;

Tablespace altered.

SQL> alter tablespace sysaux begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/sysaux01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/sysaux01.dbf' -> `/data/backup/open/sysaux01.dbf'

SQL> alter tablespace sysaux end backup;

Tablespace altered.

SQL> alter tablespace undotbs1 begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/undotbs01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/undotbs01.dbf' -> `/data/backup/open/undotbs01.dbf'

SQL> alter tablespace undotbs1 end backup;

Tablespace altered.

SQL> alter tablespace users begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/users01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/users01.dbf' -> `/data/backup/open/users01.dbf'

SQL> alter tablespace users end backup;

Tablespace altered.

SQL> alter tablespace example begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/example01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/example01.dbf' -> `/data/backup/open/example01.dbf'

SQL> alter tablespace example end backup;

Tablespace altered.

SQL> alter tablespace clone begin backup;

Tablespace altered.

SQL> !cp -av /home/oracle/oradata/testdb/clone01.dbf /data/backup/open/
`/home/oracle/oradata/testdb/clone01.dbf' -> `/data/backup/open/clone01.dbf'

SQL> alter tablespace clone end backup;

Tablespace altered.

SQL> 



2단계 : 실습용 Tablespace 생성 후 Data를 입력하고 장애를 발생시킨다.

SQL> conn scott/tiger;
Connected.
SQL> create table test (no number) tablespace clone;

Table created.

SQL> insert into test values (1);

1 row created.

SQL> commit;

Commit complete.

SQL> insert into test values (2);

1 row created.

SQL> commit;

Commit complete.

SQL> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') "SYSDATE" from dual;

SYSDATE
-------------------
2010-03-16:11:20:17

SQL> drop table test purge;

Table dropped.

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE

SQL> conn / as sysdba
Connected.

#log switch를 수 차례 발생시켜 해당 작업 내용이 아카이빙 되도록 한다.
SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> 



3단계 : 복구 서버용 Parameter file 생성하기 - 운영 서버에서 Parameter file 복사해서 복구 서버용으로 편집하는 작업

SQL> create pfile from spfile;

File created.

SQL> !cp -av $ORACLE_HOME/dbs/inittestdb.ora $ORACLE_HOME/dbs/inittestdb2.ora
`/home/oracle/product/10g/dbs/inittestdb.ora' -> `/home/oracle/product/10g/dbs/inittestdb2.ora'

SQL> !vi $ORACLE_HOME/dbs/inittestdb2.ora

testdb.__db_cache_size=213909504
testdb.__java_pool_size=4194304
testdb.__large_pool_size=4194304
testdb.__shared_pool_size=58720256
testdb.__streams_pool_size=0
*.audit_file_dest='/data/clone/admin/adump'
*.background_dump_dest='data/clone/admin/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/data/clone/testdb2/control01.ctl'
*.core_dump_dest='/data/clone/admin/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='testdb2'
*.db_recovery_file_dest='/home/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'
*.job_queue_processes=10
*.local_listener='LISTENER_TESTDB'
*.log_archive_dest_1='location=/data/arc1'
*.log_archive_dest_2='location=/data/arc2'
*.log_archive_format='%s_%t_%r.arc'
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/data/clone/admin/udump'
"~/product/10g/dbs/inittestdb2.ora" 30L, 1025C written

SQL> !mkdir -p /data/clone/testdb2

SQL> !mkdir -p /data/clone/admin/adump

SQL> !mkdir -p /data/clone/admin/bdump

SQL> !mkdir -p /data/clone/admin/cdump

SQL> !mkdir -p /data/clone/admin/udump

SQL> 



4단계 : 임시 복구 경로에 복구 대상 파일 복원하기

SQL> !cp -av /data/backup/open/system01.dbf /data/clone/testdb2/
`/data/backup/open/system01.dbf' -> `/data/clone/testdb2/system01.dbf'

SQL> !cp -av /data/backup/open/sysaux01.dbf /data/clone/testdb2/
`/data/backup/open/sysaux01.dbf' -> `/data/clone/testdb2/sysaux01.dbf'

SQL> !cp -av /data/backup/open/undotbs01.dbf /data/clone/testdb2/
`/data/backup/open/undotbs01.dbf' -> `/data/clone/testdb2/undotbs01.dbf'

SQL> !cp -av /data/backup/open/clone01.dbf /data/clone/testdb2/
`/data/backup/open/clone01.dbf' -> `/data/clone/testdb2/clone01.dbf'

SQL> 


5단계 : 복구 DB를 위한 Control file 재 생성 및 DB 이름 변경, DB 시작 운영 서버에서 Control file을 Backup 받아서 복구 서버용으로 만드는 작업

SQL> alter database backup controlfile to trace as '/data/clone/recon_testdb2.sql';

Database altered.

SQL> !vi /data/clone/recon_testdb2.sql

STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE "TESTDB2" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/data/clone/testdb2/redo01_a.log',
    '/data/clone/testdb2/redo01_b.log'
  ) SIZE 5M,
  GROUP 2 (
    '/data/clone/testdb2/redo02_a.log',
    '/data/clone/testdb2/redo02_b.log'
  ) SIZE 5M,
  GROUP 3 (
    '/data/clone/testdb2/redo03_a.log',
    '/data/clone/testdb2/redo03_b.log'
  ) SIZE 5M
DATAFILE
  '/data/clone/testdb2/system01.dbf',
  '/data/clone/testdb2/sysaux01.dbf',
  '/data/clone/testdb2/undotbs01.dbf',
  '/data/clone/testdb2/clone01.dbf'
CHARACTER SET KO16KSC5601
;
"/data/clone/recon_testdb2.sql" 27L, 688C written

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@ghost ~]$ export ORACLE_SID=testdb2
[oracle@ghost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 16 11:56:18 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> @/data/clone/recon_testdb2.sql
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              92276304 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes

Control file created.

SQL> 



6단계 : 복구 (복구 서버에서 하는 작업)

SQL> recover database using backup controlfile until time '2010-03-16:11:20:17';
ORA-00279: change 526254 generated at 03/16/2010 11:16:57 needed for thread 1
ORA-00289: suggestion : /data/arc2/6_1_713363612.arc
ORA-00280: change 526254 for thread 1 is in sequence #6


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;

Database altered.

SQL> conn scott/tiger;
Connected.
SQL> select * from test;

        NO
----------
         1
         2

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@ghost ~]$ mkdir -p /data/backup/exp
[oracle@ghost ~]$ export ORACLE_SID=testdb2
[oracle@ghost ~]$ exp userid=scott/tiger file=/data/backup/exp/scott.dmp tables=test;

Export: Release 10.2.0.1.0 - Production on Tue Mar 16 12:05:43 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in KO16KSC5601 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
. . exporting table                           TEST          2 rows exported
Export terminated successfully without warnings.
[oracle@ghost ~]$ 



7단계 : 데이터 Import 후 확인

< 실제 서버에서 작업 >
[oracle@ghost ~]$ export ORACLE_SID=testdb
[oracle@ghost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 16 12:08:24 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from scott.test;
select * from scott.test
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> exit 
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@ghost ~]$ imp userid=scott/tiger file=/data/backup/exp/scott.dmp ignore=y

Import: Release 10.2.0.1.0 - Production on Tue Mar 16 12:09:15 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
import done in KO16KSC5601 character set and AL16UTF16 NCHAR character set
. importing SCOTT's objects into SCOTT
. importing SCOTT's objects into SCOTT
. . importing table                         "TEST"          2 rows imported
Import terminated successfully without warnings.
[oracle@ghost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 16 12:09:41 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> conn scott/tiger;
Connected.
SQL> select * from test;

        NO
----------
         1
         2

SQL> 

'Oracle 10g > 10g - 실습' 카테고리의 다른 글

Flashback Query / Versions Query / Transaction Query  (0) 2010.03.19
Datapump  (0) 2010.03.16
Control file 장애  (0) 2010.03.15
Redo log file Recovery  (0) 2010.03.12
Incomplete Recovery - using backup controlfile  (0) 2010.03.11