Oracle/Backup & Recovery2019. 4. 5. 11:41

설명

 

RMAN의 12c new feature인 Recover table을 테스트하는 시나리오.

기존에 클론 DB 생성 후 데이터 export 후 데이터 import하는 절차를 RMAN의 명령어 하나로 복구할 수 있게 된 기능

 

 

테스트 시나리오 요약


 1. 테스트용 테이블 생성

 2. 백업

 3. 테스트용 테이블 DROP

 4. 복구

 5. 복구된 테이블 확인

 

 

 

테스트 상세


1. 테스트용 테이블 생성

 

SQL> create table test.test (co1l number);

Table created.

SQL> insert into test.test values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test.test;

      CO1L
----------
         1

SQL> select sysdate from dual;

SYSDATE
-------------------
2019/03/30 11:19:19           ============> 복구될 시간

 

 

2. 백업

 

rman target /

 

RMAN> run {
 allocate channel ch1 type disk format='/tmp/backup/%U_%T';
 backup database;
 }2> 3> 4>

 

released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: SID=108 instance=bitek1 device type=DISK

Starting backup at 30-MAR-19
channel ch1: starting full datafile backup set
channel ch1: specifying datafile(s) in backup set
input datafile file number=00002 name=+DATA/BITEK/DATAFILE/sysaux.261.1002792885
input datafile file number=00001 name=+DATA/BITEK/DATAFILE/system.260.1002792865
input datafile file number=00003 name=+DATA/BITEK/DATAFILE/undotbs1.262.1002792889
input datafile file number=00004 name=+DATA/BITEK/DATAFILE/undotbs2.264.1002792943
input datafile file number=00006 name=+DATA/BITEK/DATAFILE/splex.296.1003324047
input datafile file number=00005 name=+DATA/BITEK/DATAFILE/users.265.1002792955
channel ch1: starting piece 1 at 30-MAR-19
channel ch1: finished piece 1 at 30-MAR-19
piece handle=/tmp/backup/2cttnpn9_1_1_20190330 tag=TAG20190330T110720 comment=NONE
channel ch1: backup set complete, elapsed time: 00:00:25
Finished backup at 30-MAR-19

Starting Control File and SPFILE Autobackup at 30-MAR-19
piece handle=/oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-03 comment=NONE
Finished Control File and SPFILE Autobackup at 30-MAR-19
released channel: ch1

 

 

3. 테스트용 테이블 drop

 

SQL> drop table test.test purge;

Table dropped.

SQL> desc test.test
ERROR:
ORA-04043: object test.test does not exist

 

 

4. 복구

 

RMAN> recover table "TEST"."TEST" until time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')" auxiliary destination '/oracle/oracle/recover';

 

  => 스키마(TEST)와 테이블명(TEST)은 큰따옴표로 묶고, 대문자를 반드시 써야한다. 그렇지 않으면 오류 발생

Starting recover at 30-MAR-19
current log archived
using channel ORA_DISK_1
RMAN-05026: warning: presuming following set of tablespaces applies to specified point-in-time

List of tablespaces expected to have UNDO segments
Tablespace SYSTEM
Tablespace UNDOTBS1
Tablespace UNDOTBS2

Creating automatic instance, with SID='prev'

initialization parameters used for automatic instance:
db_name=BITEK
db_unique_name=prev_pitr_BITEK
compatible=12.2.0
db_block_size=8192
db_files=200
diagnostic_dest=/oracle/oracle
_system_trig_enabled=FALSE
sga_target=1024M
processes=200
db_create_file_dest=/oracle/oracle/recover
log_archive_dest_1='location=/oracle/oracle/recover'
#No auxiliary parameter file used


starting up automatic instance BITEK

Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes
Automatic instance created

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# restore the controlfile
restore clone controlfile;

# mount the controlfile
sql clone 'alter database mount clone database';

# archive current online log
sql 'alter system archive log current';
}
executing Memory Script

executing command: SET until clause

Starting restore at 30-MAR-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=45 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-04
channel ORA_AUX_DISK_1: piece handle=/oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-04 tag=TAG20190330T111223
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl
Finished restore at 30-MAR-19

sql statement: alter database mount clone database

sql statement: alter system archive log current

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for clone datafile  1 to new;
set newname for clone datafile  3 to new;
set newname for clone datafile  4 to new;
set newname for clone datafile  2 to new;
set newname for clone tempfile  1 to new;
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  1, 3, 4, 2;

switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

renamed tempfile 1 to /oracle/oracle/recover/BITEK/datafile/o1_mf_temp_%u_.tmp in control file

Starting restore at 30-MAR-19
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /oracle/oracle/recover/BITEK/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00003 to /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00004 to /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00002 to /oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /tmp/backup/2ettnpvt_1_1_20190330
channel ORA_AUX_DISK_1: piece handle=/tmp/backup/2ettnpvt_1_1_20190330 tag=TAG20190330T111156
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 30-MAR-19

datafile 1 switched to datafile copy
input datafile copy RECID=5 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_system_g9xnmcsd_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=6 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_g9xnmcsw_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=7 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_g9xnmctb_.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=8 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_g9xnmcrw_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  1 online";
sql clone "alter database datafile  3 online";
sql clone "alter database datafile  4 online";
sql clone "alter database datafile  2 online";
# recover and open database read only
recover clone database tablespace  "SYSTEM", "UNDOTBS1", "UNDOTBS2", "SYSAUX";
sql clone 'alter database open read only';
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  1 online

sql statement: alter database datafile  3 online

sql statement: alter database datafile  4 online

sql statement: alter database datafile  2 online

Starting recover at 30-MAR-19
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 84 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561
archived log for thread 1 with sequence 85 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563
archived log for thread 1 with sequence 86 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561 thread=1 sequence=84
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563 thread=1 sequence=85
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991 thread=1 sequence=86
media recovery complete, elapsed time: 00:00:01
Finished recover at 30-MAR-19

sql statement: alter database open read only

contents of Memory Script:
{
   sql clone "create spfile from memory";
   shutdown clone immediate;
   startup clone nomount;
   sql clone "alter system set  control_files =
  ''/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl'' comment=
 ''RMAN set'' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
# mount database
sql clone 'alter database mount clone database';
}
executing Memory Script

sql statement: create spfile from memory

database closed
database dismounted
Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes

sql statement: alter system set  control_files =   ''/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl'' comment= ''RMAN set'' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes

sql statement: alter database mount clone database

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for datafile  5 to new;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  5;

switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

Starting restore at 30-MAR-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=51 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /tmp/backup/2ettnpvt_1_1_20190330
channel ORA_AUX_DISK_1: piece handle=/tmp/backup/2ettnpvt_1_1_20190330 tag=TAG20190330T111156
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 30-MAR-19

datafile 5 switched to datafile copy
input datafile copy RECID=10 STAMP=1004268201 file name=/oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_g9xnrr06_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  5 online";
# recover and open resetlogs
recover clone database tablespace  "USERS", "SYSTEM", "UNDOTBS1", "UNDOTBS2", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  5 online

Starting recover at 30-MAR-19
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 84 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561
archived log for thread 1 with sequence 85 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563
archived log for thread 1 with sequence 86 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561 thread=1 sequence=84
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563 thread=1 sequence=85
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991 thread=1 sequence=86
media recovery complete, elapsed time: 00:00:00
Finished recover at 30-MAR-19

database opened

contents of Memory Script:
{
# create directory for datapump import
sql "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/oracle/oracle/recover''";
# create directory for datapump export
sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/oracle/oracle/recover''";
}
executing Memory Script

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/oracle/oracle/recover''

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/oracle/oracle/recover''

Performing export of tables...
   EXPDP> Starting "SYS"."TSPITR_EXP_prev_Fqyg":
   EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
   EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   EXPDP> . . exported "TEST"."TEST"                               5.054 KB       1 rows
   EXPDP> Master table "SYS"."TSPITR_EXP_prev_Fqyg" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYS.TSPITR_EXP_prev_Fqyg is:
   EXPDP>   /oracle/oracle/recover/tspitr_prev_99272.dmp
   EXPDP> Job "SYS"."TSPITR_EXP_prev_Fqyg" successfully completed at Sat Mar 30 11:25:42 2019 elapsed 0 00:01:23
Export completed


contents of Memory Script:
{
# shutdown clone before import
shutdown clone abort
}
executing Memory Script

Oracle instance shut down

Performing import of tables...
   IMPDP> Master table "SYS"."TSPITR_IMP_prev_Fyhj" successfully loaded/unloaded
   IMPDP> Starting "SYS"."TSPITR_IMP_prev_Fyhj":
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   IMPDP> . . imported "TEST"."TEST"                               5.054 KB       1 rows
   IMPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
   IMPDP> Job "SYS"."TSPITR_IMP_prev_Fyhj" successfully completed at Sat Mar 30 11:26:23 2019 elapsed 0 00:00:14
Import completed


Removing automatic instance
Automatic instance removed
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_temp_g9xnockf_.tmp deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_4_g9xns44l_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_3_g9xns32o_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_2_g9xnrzx9_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_1_g9xnrzfl_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_g9xnrr06_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_g9xnmcrw_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_g9xnmctb_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_g9xnmcsw_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_system_g9xnmcsd_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl deleted
auxiliary instance file tspitr_prev_99272.dmp deleted
Finished recover at 30-MAR-19

 

5. 복구된 테이블 확인

 

SQL> select * from test.test;

      CO1L
----------
         1

 

※ 추가내용

recover table "TEST"."TEST" until time "to_date('2019/03/30 16:01:17','yyyy/mm/dd hh24:mi:ss')" auxiliary destination '/oracle/oracle/recover'
remap table "TEST"."TEST":"TEST_OLD";

 

 => 기존에 테이블이 존재한다면 remap table 기능을 이용하여 복구도 가능하다.

Posted by 자수성가한 부자
Oracle/Backup & Recovery2015. 6. 16. 17:17

 

 

오라클에서 Import 성능 향상시키는 방법


Oracle에서 테이블의 재구성(table reorganization) 또는 데이터 이동(data migration)을 하는 경우 많은 양의 데이터를 import할 경우가 있다. 성능향상을 위한 몇 가지 방법을 소개하니 참고하기 바란다.

1. 파라미터 파일에서 BUFFER SIZE를 크게 한다. 이렇게 함으로서 디스크 I/O가 줄게되어 성능이 개선된다.

2. 항상 indexes=N로 한다. 테이블의 데이터를 먼저 import한 후 Oracle Server에서 index를 rebuild 하는 것이 훨씬 좋다.

3. 파라미터 파일에서 COMMIT=N로 한다. 이렇게 하면 큰 ROLLBACK SEGMENT를 필요로 하지만 각각의 BUFFER를 import후 commit하는 것이 아니라 TABLE을 몽땅 import후 commit하게 된다.

4. 하나의 큰 dedicated rollback segment를 쓰는 것이 좋다. 이렇게 하기 위해서는 다른 rollback segment는 offline 시키면 된다. 하나뿐인 rollback segment의 사이즈는 가장 큰 테이블의 50% 정도 잡으면 된다.

5. import가 끝날 때까지 DB운영을 NOARCHIVELOG mode로 한다.

 

출처 : http://gnujava.com/board/article_view.jsp?article_no=365&board_no=17&table_cd=EPAR06&table_no=06

Posted by 자수성가한 부자
Oracle/Backup & Recovery2013. 4. 3. 15:36

 

 

disk 여유가 없어 export된 dump size를 알아야 할 경우,  named pipe를
이용하여 export를 수행함으로서 정확한 dump file size를 예측해 볼 수
있다. 단, 이 방법은 실제 export를 수행하는 것과 동일한 시간이 소요
된다는 점을 염두에 두어야 한다.

%  mknod  /tmp/exp_pipe  p
%  exp  file=/tmp/exp_pipe <other option> &
%  dd  if=/tmp/exe_pipe  of=/dev/null  bs=1024
   64+0 records out

dump의 크기는 64 * 1024 byte가 된다.

 

출처 : How to Estimate Traditional Export (EXP) File Size Without Creating A Dump File [ID 106465.1]

'Oracle > Backup & Recovery' 카테고리의 다른 글

테이블 복구(RMAN recover table)  (0) 2019.04.05
Import 성능 향상 시키는 방법  (0) 2015.06.16
current redo log group 삭제시 복구  (0) 2010.11.24
RMAN  (0) 2010.07.09
start backup 후 end backup을 안했을 경우.  (0) 2010.04.17
Posted by 자수성가한 부자
Oracle/Backup & Recovery2010. 11. 24. 23:53

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS          FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- ------ -------------------------------- ------------- ------------
  1     1        2   52428800      1 YES    INACTIVE          469524 24-NOV-10
  2     1        3   52428800      1 YES    INACTIVE          469526 24-NOV-10
  3     1        4   52428800      1 NO     CURRENT          469528 24-NOV-10


SQL> select * from v$logfile;

    GROUP# STATUS   TYPE   MEMBER             IS_REC
---------- -------------- -------------- ------------------------------------------------------------ ------
  3    ONLINE  /u01/app/oracle/oradata/orcl/redo02.log        NO
  2    ONLINE  /u01/app/oracle/oradata/orcl/redo03.log        NO
  1    ONLINE  /u01/app/oracle/oradata/orcl/redo01.log        NO


SQL> !rm /u01/app/oracle/oradata/orcl/redo02.log


SQL> !ls /u01/app/oracle/oradata/orcl/redo02.log

ls: /u01/app/oracle/oradata/orcl/redo02.log: No such file or directory



SQL> shutdown abort;

ORACLE instance shut down.


SQL> startup;

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
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'

 

SQL> alter database backup controlfile to trace as '/u01/app/oracle/con_bak.sql';
Database altered.


SQL> shutdown immediate;

ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.


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@test app]$ cd /u01/app/oracle/


[oracle@test oracle]$ ls

admin  bak_con.sql  con_bak.sql  flash_recovery_area  oraInventory  oradata  product  test_ts02.dbf  test_ts03.dbf


[oracle@test oracle]$ vi con_bak.sql

"con_bak.sql" 147L, 5792C-- The following are current System-scope REDO Log Archival related


CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16   
    MAXLOGMEMBERS 3   
    MAXDATAFILES 100   
    MAXINSTANCES 8   
    MAXLOGHISTORY 292
    LOGFILE 
      GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M, 
      GROUP 2 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M,
      GROUP 3 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M
   DATAFILE'/u01/app/oracle/oradata/orcl/system01.dbf',
           '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
           '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
           '/u01/app/oracle/oradata/orcl/users01.dbf',
           '/u01/app/test_ts01.dbf'
CHARACTER SET KO16KSC5601;                                                                                                                                           

[oracle@test oracle]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Nov 24 23:40:31 2010

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

Enter user-name: /as sysdba
Connected to an idle instance.


SQL> startup nomount;

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


SQL> @con_bak

CREATE CONTROLFILE SET DATABASE "ORCL" RESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-00200: control file could not be created
ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl'
ORA-27038: created file already exists
Additional information: 1


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@test oracle]$ cd /u01/app/oracle/oradata/orcl


[oracle@test orcl]$ ls -lrt con*

-rw-r-----  1 oracle dba 7389184 Nov 24 23:38 control03.ctl
-rw-r-----  1 oracle dba 7389184 Nov 24 23:38 control02.ctl
-rw-r-----  1 oracle dba 7389184 Nov 24 23:38 control01.ctl


[oracle@test orcl]$ rm con*


[oracle@test orcl]$ cd /u01/app/oracle


[oracle@test oracle]$ ls

admin  bak_con.sql  con_bak.sql  flash_recovery_area  oraInventory  oradata  product  test_ts02.dbf  test_ts03.dbf


[oracle@test oracle]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Nov 24 23:41:13 2010

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

Enter user-name: /as sysdba

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


SQL> @con_bak

Control file created.


SQL> alter database open resetlogs;

Database altered.


SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup;

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
Database mounted.
Database opened.


SQL> show lines

linesize 80


SQL> set lines 200


SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS          FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- ------ -------------------------------- ------------- ------------
  1     1        0   52428800      1 YES    UNUSED        0
  2     1        1   52428800      1 NO     CURRENT          489578 24-NOV-10
  3     1        0   52428800      1 YES    UNUSED        0


SQL> col member for a60

SQL> /

    GROUP# STATUS   TYPE   MEMBER             IS_REC
---------- -------------- -------------- ------------------------------------------------------------ ------
  3    ONLINE  /u01/app/oracle/oradata/orcl/redo02.log        NO
  2    ONLINE  /u01/app/oracle/oradata/orcl/redo03.log        NO
  1    ONLINE  /u01/app/oracle/oradata/orcl/redo01.log        NO

 

'Oracle > Backup & Recovery' 카테고리의 다른 글

Import 성능 향상 시키는 방법  (0) 2015.06.16
[펌] [Export/Import] EXPORT FILE의 SIZE 예측  (0) 2013.04.03
RMAN  (0) 2010.07.09
start backup 후 end backup을 안했을 경우.  (0) 2010.04.17
Block Corruption  (0) 2009.12.23
Posted by 자수성가한 부자
Oracle/Backup & Recovery2010. 7. 9. 15:43
RMAN에 관해서 정리 잘 되어있는 문서

참조 : http://kkkidea.springnote.com/pages/1586822.xhtml

'Oracle > Backup & Recovery' 카테고리의 다른 글

[펌] [Export/Import] EXPORT FILE의 SIZE 예측  (0) 2013.04.03
current redo log group 삭제시 복구  (0) 2010.11.24
start backup 후 end backup을 안했을 경우.  (0) 2010.04.17
Block Corruption  (0) 2009.12.23
restore points  (0) 2009.12.23
Posted by 자수성가한 부자
Oracle/Backup & Recovery2010. 4. 17. 12:27
테스트 시나리오 :

핫백업 중에 DB가 강제 종료가 된다면 어떻게 될까?
(alter tablespace XXXX begin backup
  -> !cp /oracle/XXX.dbf /oracle_backup/XXX.dbf
    -> 강제 종료(shutdown abort))


테스트 :

0. 현재 인스턴스명과 상태 확인

SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN


1. 테이블 스페이스 단위 핫백업

SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TEMP

SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf

SQL> alter tablespace system begin backup;
Tablespace altered.

SQL> !cp /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl_backup/system01.dbf


2. 강제 종료

SQL> shutdown abort;
ORACLE instance shut down.


3. 시작

SQL> startup;
ORACLE instance started.


4. 에러 메시지 확인

ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'


5. 문제 원인 분석

  위의 에러 메시지로 나타날 수 있는 장애의 원인이 4가지라고 한다.(metalink 문서번호 : 183367.1)

   1) 핫백업 중에 테이블 스페이스 장애 후 startup시
   2) 백업에서 데이터 파일 또는 테이블스페이스 복원 후에 startup시
   3) 데이터 파일 또는 테이블 스페이스를 온라인으로 시도할 때
   4) 불완전 복구시에 'using backup controlfile' 옵션으로 복구할 때
  
 원인은 이미 알고 있는 거지만 2)이므로 2)에 대한 해결만 이 포스트에서 하겠다.
 

6. 장애 해결

  1) mount로 startup(어차피 그냥 startup 하더라도 mount까지밖에 올라가지 않는다.)

SQL> startup mount;


  2) 핫백업 중인 데이터 파일을 찾는다.

SQL> SELECT V1.FILE#, NAME 
          FROM V$BACKUP V1, V$DATAFILE V2 
          WHERE V1.STATUS = 'ACTIVE' AND V1.FILE# = V2.FILE# ;

     FILE# NAME
---------- ----------------------------------------------------------------------------------------------------
         1 /u01/app/oracle/oradata/orcl/system01.dbf


  3) 다음의 명령을 통해 end backup을 실시한다.

SQL> alter tablespace system01 end backup;

  4) 데이터베이스를 open한다.

SQL> alter database open;


참조 : http://blog.naver.com/darkturtle?Redirect=Log&logNo=50029568769

'Oracle > Backup & Recovery' 카테고리의 다른 글

current redo log group 삭제시 복구  (0) 2010.11.24
RMAN  (0) 2010.07.09
Block Corruption  (0) 2009.12.23
restore points  (0) 2009.12.23
clone DB를 이용한 incomplete recovery 실습2 : RMAN  (0) 2009.12.22
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 23. 17:57

● 개요

Block Corruption의 원인을 확인할 수 있다.
Block Corruption을 찾을 수 있다.
 - Analyze
 - Dbverify
 - DB_BLOCK_CHECKING
 - DBMS_REPAIR
RMAN을 이용하여 Block Corruption을 repair 할 수 있다.


● Block corruption이란?
    : 오라클 포맷이라고 인식되지 않은 블럭을 말한다.
  ◎ block을 읽거나 쓸 때마다 일관성 검사가 수행됨
    - block 버전
    - Cache에 있는 Datablock Address(DBA)와 block buffer의 주소를 비교
    - block checksum : check의 합
  ◎ corrupt block의 종류
    - disk corrupt
    - logically(software) corrupt

● ORA-01578 : "ORACLE data block corrupted (file # %s, block # %s)": 에러
  - corrupted data block을 찾았을 때 발생된다.
  - alert.log에 남음

  - 같은 file과 block이 자주 발생하면 media corruption일 가능성이 큼
  - 다른 flie과 block이 발생하면 software일 가능성이 큼

● Block Corruption 관련 특징
  ◎ dbverify

     : 파일에 훼손된 블럭이 있는지 검사하는 유틸리티
       블럭 일관성 확인.

OS] dbv 파일명

  ◎ analyze
     : logical block check를 수행함.

SQL> analyze table table_name validate structure cascade;

  ◎ db_block_checking
    : block check 관련 파라미터
     TRUE일 경우, 모든 데이터 블럭들에 대해 블럭 checking을 수행

  ◎ db_block_checksum
   : 데이터 블럭헤더에 쓸 때 검사.파라미터
     셋팅하는 것을 권장.

  ◎ exp
   : export중 block corruption이 있으면 도중에 멈춤

  ◎ flashback

  ◎ dbms_repair package
    : 8i부터 사용가능.
     손상된 블럭을 marking.또는 skip

  ◎ BMR(Block Media Recovery)
    : 9i부터 사용가능.
      MTTR을 낮춘다.
      복원에 적절한 백업을 알아서 찾음.

RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 49, 50, 51, 52;


기타 참고사항

- DBA
  : Data Block Address의 약자


- Fix와 Repair의 사전적 의미
  - Fix : 간단한 것을 고침
  - Repair : 기술력이 많이 드는 것을 고침

Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 23. 15:43
● restore points
  - 복원할 지점을 지정한다.
  - 10g new feature
  - savepoint와 비슷한 개념.
  - scn or time에 대한 alais
  - control file에 저장됨.
  - 관련 view : v$restore_point
  - FRA에 저장됨.(관련 파라미터 : db_recovery_file_dest, db_recovery_file_dest_size

  ◎ 종류
    1. normal restore point
      : 보장이 안됨(FRA이 크기가 모자라면 지워질 가능성이 있음). scn이나 시간을 대신할 목적으로 생성

SQL> create restore point before_upgrade; 

   2. guaranteed restore point
     : restore point 후의 보장이 됨. 복원이 빠름.


SQL> create restore point before_upgrade guarantee flashback database;

Flashback database(O) : flashback log가 주기적으로 남긴다.
Flashback database(X) : whole restore를 빠르게 할 수 있다. 첫번째 남기는 것(FRA세팅 필수)

명령을 친 이후 처음으로 데이터가 변경되면 변경된 데이터의 before 블럭이 남는다.
몇 번의 변경이 있어도 before 블럭을 적용하면 whole backup이 없어도 restore됨

flashback database에 종속된 기능이 아니다

참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40046342918


필요할 경우 control file을 빨리 복구하는 방법

nomount상황
RMAN> restore controlfile to '경로' from autobackup;

catalog database가 있을 경우
RMAN> restore control file;


read only tablespace의 recovery

- read only로 tablespace를 변경하면 그 시점에 백업을 꼭 해 놓을 것.
- backup file에서 cp로 해결.
case 1 :  read only        ->     read only     ->   read only
case 2 :  read only        ->     read only     ->   read / write
case 3 :  read write       ->     read / write  ->   read only


기타 참고사항

- resetlogs로 open후 반드시 whole backup을 하는 것은 아님
  : %r이 들어가면서 부터

- alter database open resetlogs;로 open할 경우
  : 불완전 복구 후
    flashback database

- 10g부터는 신경쓸 필요가 없지만, 9i에서는 신경써야 할 복구(SCN 관련:alert)
    http://kr.forums.oracle.com/forums/thread.jspa?threadID=463572
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 22. 23:13

● clone DB를 이용한 incomplete recovery 실습2

  ◎ RMAN

실습순서

1. 실습을 위한 환경설정
   ① whole backup
   테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)
2. clone DB를 이용한 복구
   ① password file 준비
   ② oracle net 설정(tnsnames.ora)
   ③ parameter file 생성
   ④ Start the Auxiliary Instance
   ⑤ Mount or Open the Target Database
   ⑥ Allocate Auxiliary Channels if Automatic Channels Are Not Configured
   ⑦ clone DB에서 export -> devdb로 import





    1. 실습을 위한 환경 설정 : ① whole backup
      

[oracle@ora10gr2 ~]$ mkdir /u01/app/oracle/oradata/devdb_rman_backup
[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ rman target /
connected to target database: DEVDB (DBID=610700147)
RMAN> backup database format='/u01/app/oracle/oradata/devdb_rman_backup/devdb_%d_%s_%p.bus';
RMAN> exit 



   
1. 실습을 위한 환경 설정 :  테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)


[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> create table phil.t2 (col1 varchar2(20));
SQL> insert into  phil.t2 values ('Recovery done!');
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> -- 복구 시점 확인
SQL> !date
2009. 12. 21. (월) 23:43:47 KST
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> -- 장애 발생
SQL> drop table phil.t2 purge;
SQL> exit



    2. clone DB를 이용한 복구 : ① password file 준비



[oracle@ora10gr2 ~]$ cd
[oracle@ora10gr2 ~]$ cd $ORACLE_HOME/dbs
[oracle@ora10gr2 dbs]$ orapwd file=orapwdevdbaux password=oracle entries=5


    2. clone DB를 이용한 복구 : ② oracle net 설정(tnsnames.ora)


[oracle@ora10gr2 dbs]$ cd $ORACLE_HOME/network/admin
[oracle@ora10gr2 admin]$ vi tnsnames.ora
devdbaux =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdbaux)
    )
  )


    2. clone DB를 이용한 복구 : parameter file 생성


[oracle@ora10gr2 admin]$ export ORACLE_SID=devdb
[oracle@ora10gr2 admin]$ sqlplus / as sysdba
SQL> create pfile='$ORACLE_HOME/dbs/initdevdbaux.ora' from spfile;
SQL> !mkdir /u01/app/oracle/oradata/devdbaux
SQL> !vi $ORACLE_HOME/dbs/initdevdbaux.ora
DB_NAME=devdbaux
CONTROL_FILES='/u01/app/oracle/oradata/devdbaux/control01.ctl'
DB_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
LOG_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
db_block_size=4096
sga_target=200m
pga_aggregate_target=60m
SQL> exit


    2. clone DB를 이용한 복구 : ④ Start the Auxiliary Instance


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force nomount
SQL> exit



    2. clone DB를 이용한 복구 : ⑤ Mount or Open the Target Database


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force
SQL> exit



    2. clone DB를 이용한 복구 : ⑥ Allocate Auxiliary Channels if Automatic Channels
                              Are Not Configured



[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
[oracle@ora10gr2 ~]$ export NLS_LANG=american
[oracle@ora10gr2 ~]$ rman TARGET sys/oracle@devdb AUXILIARY /
RMAN> run {
 ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
 DUPLICATE TARGET DATABASE TO devdbaux UNTIL TIME '2009/12/21 23:43:47';
}



   2. clone DB를 이용한 복구 : ⑦ clone DB에서 export -> devdb로 import


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 dbs]$ sqlplus / as sysdba
SQL> select * from phil.t2;
COL1
--------------------
Recovery done!

SQL> !exp phil/phil file=t2.dmp tables=t2
SQL> exit
[oracle@ora10gr2 dbs]$ export ORACLE_SID=devdb
[oracle@ora10gr2 dbs]$ sqlplus phil/phil
SQL> select * from t2;
select * from t2
              *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> !imp phil/phil file=t2.dmp tables=t2
SQL> select * from t2;

'Oracle > Backup & Recovery' 카테고리의 다른 글

Block Corruption  (0) 2009.12.23
restore points  (0) 2009.12.23
clone DB를 이용한 incomplete recovery 실습1 : user managed  (0) 2009.12.22
MTTR (Mean Time To Recover)  (0) 2009.12.21
MTBF(Mean Time Between Failures)  (0) 2009.12.21
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 22. 18:17

● clone DB를 이용한 incomplete recovery 실습1

  ◎ User Managed

실습 순서

1. 실습을 위한 환경 설정
   ① whole backup
   ② 테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)

2. clone DB를 이용한 복구
   ① control file 및 parameter file 준비
   ② datafile backup, online redo log file, archive log file 복사
   ③ startup nomount -> control file 생성 -> 불완전 복구
   ④ clone DB에서 export -> devdb로 import
   ⑤ clone database 종료 및 삭제



    1. 실습을 위한 환경 설정 : ① whole backup       


OS] export ORACLE_SID=devdb
OS] sqlplus / as sysdba
-- 기존의 backup 및 archived log file 삭제
SQL> !rm -rf $ORACLE_BASE/oradata/devdb_backup
SQL> !rm -rf $ORACLE_BASE/oradata/devdb_arch
-- archive log file 위치를 다시 설정
SQL> !mkdir $ORACLE_BASE/oradata/devdb_arch
SQL> alter system set log_archive_dest_1 = 'location=$ORACLE_BASE/oradata/devdb_arch/';
SQL> alter system switch logfile;
SQL> !ls $ORACLE_BASE/oradata/devdb_arch
  1_2_706222899.dbf
-- 정상종료 및 whole backup
SQL> shutdown immediate
SQL> !mkdir $ORACLE_BASE/oradata/devdb_backup
SQL> !cp $ORACLE_BASE/oradata/devdb/* $ORACLE_BASE/oradata/devdb_backup
SQL> startup
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
devdb 



    1. 실습을 위한 환경 설정 : ② 테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)


  SQL> drop table phil.t1 purge;
drop table phil.t1 purge
                *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> create table phil.t1 (no number);
SQL> insert into phil.t1 values (1000);
SQL> insert into phil.t1 values (2000);
SQL> commit;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> !date                         
  2009. 12. 21. (월) 22:56:38 KST            -- 반드시 확인할 것.

SQL> alter system switch logfile;
SQL> drop table phil.t1 purge;
SQL> select * from phil.t1;
select * from phil.t1
                   *
ERROR at line 1:
ORA-00942: table or view does not exist



    2. clone DB를 이용한 복구 : ① control file 및 parameter file 준비


   SQL> !mkdir $ORACLE_BASE/oradata/devdb_clone

  SQL> alter database backup controlfile to trace;                 -- control file을 재생성할 수 있는 스크립트를 생성.
SQL> select d.value||'/'||p.value||'_ora_'||s.spid||'.trc' as trace_file_name
     from (select value from v$parameter where name = 'instance_name') p,
          (select value from v$parameter where name = 'user_dump_dest') d,
          (select spid  from v$process   where addr = (select paddr from v$session
                                                       where sid = (select sid from v$mystat
                                                                    where rownum = 1))) s;
     TRACE_FILE_NAME
     --------------------------------------------------------------------
     /u01/app/oracle/product/10.2.0/db_1/rdbms/log/devdb_ora_24567.trc
-- 컨트롤 파일 생성을 위한 준비
SQL> !cp /u01/app/oracle/product/10.2.0/db_1/rdbms/log/devdb_ora_24567.trc $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
-- 파라미터 파일을 위한 준비
SQL> create pfile='$ORACLE_HOME/dbs/initC1.ora' from spfile;
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
  control_file_create.sql 
-- 다음처럼 control file 생성을 위한 명령을 편집한다.
SQL> !vi $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
CREATE CONTROLFILE set DATABASE "C1" RESETLOGS  ARCHIVELOG    -- set 부분, DB 이름 부분
    MAXLOGFILES 16
    MAXLOGMEMBERS 2
    MAXDATAFILES 30
    MAXINSTANCES 1
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/u01/app/oracle/oradata/devdb_clone/redo01_a.log',       -- devdb_clone 경로
    '/u01/app/oracle/oradata/devdb_clone/redo01_b.log'
  ) SIZE 20M,
  GROUP 2 (
    '/u01/app/oracle/oradata/devdb_clone/redo02_a.log',
    '/u01/app/oracle/oradata/devdb_clone/redo02_b.log'
  ) SIZE 20M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/devdb_clone/system01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/undotbs01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/sysaux01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/undo01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/user_tab_ts.dbf',
  '/u01/app/oracle/oradata/devdb_clone/user_ind_ts.dbf'
CHARACTER SET US7ASCII
;
위의 내용만 두고 아래쪽은 모두 삭제한다.
SQL> -- 다음처럼 pfile을 편집한다.
SQL> !vi $ORACLE_HOME/dbs/initC1.ora
*.compatible='10.2.0'
*.control_files='/u01/app/oracle/oradata/devdb_clone/control01.ctl'
*.db_block_size=4096
*.db_name='C1'
*.log_archive_dest_1='location=$ORACLE_BASE/oradata/devdb_clone/'
*.pga_aggregate_target=60M
*.sga_target=200M
*.undo_management='auto'
*.undo_tablespace='undotbs01'



    2. clone DB를 이용한 복구 : ② datafile backup, online redo log file, archive log file 복사


  -- 백업해둔 데이터 파일 복사
  SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql
SQL> !cp $ORACLE_BASE/oradata/devdb_backup/*.dbf $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql  sysaux01.dbf  system01.dbf  temp01.dbf  undo01.dbf  undotbs01.dbf  user_ind_ts.dbf  user_tab_ts.dbf
-- 사용중인 online redo log 파일 복사
SQL> !cp $ORACLE_BASE/oradata/devdb/*.log $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql  redo01_b.log  redo02_b.log  system01.dbf  undo01.dbf     user_ind_ts.dbf
redo01_a.log             redo02_a.log  sysaux01.dbf  temp01.dbf    undotbs01.dbf  user_tab_ts.dbf
-- archived redo log 파일 복사
SQL> !cp $ORACLE_BASE/oradata/devdb_arch/* $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
1_19_706222899.dbf  1_22_706222899.dbf  control_file_create.sql  redo02_a.log  system01.dbf  undotbs01.dbf
1_20_706222899.dbf  1_23_706222899.dbf  redo01_a.log             redo02_b.log  temp01.dbf    user_ind_ts.dbf
1_21_706222899.dbf  1_24_706222899.dbf  redo01_b.log             sysaux01.dbf  undo01.dbf    user_tab_ts.dbf
SQL> exit



    2. clone DB를 이용한 복구 : ③ startup nomount -> control file 생성 -> 불완전 복구


[oracle@ora10gr2 oradata]$ export ORACLE_SID=C1
[oracle@ora10gr2 oradata]$ sqlplus / as sysdba
SQL> startup nomount
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               STARTED
SQL> @ $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               MOUNTED

SQL> -- 위에서 확인했던 날짜와 시간을 잘 확인해서 아래 명령을 완성한다.
SQL> recover database until time '2009-12-21 22:56:38' using backup controlfile;
ORA-00279: change 273942 generated at 12/21/2009 21:22:11 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/devdb_clone/1_14_706222899.dbf
ORA-00280: change 273942 for thread 1 is in sequence #14
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--> auto 입력
... 생략 ...
ORA-00308: cannot open archived log
'/u01/app/oracle/oradata/devdb_clone/1_19_706222899.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
SQL> -- online redo log 파일을 계속 적용해야 하므로 파일 이름을 확인해서 사용한다.
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/devdb_clone/redo01_a.log
/u01/app/oracle/oradata/devdb_clone/redo01_b.log
/u01/app/oracle/oradata/devdb_clone/redo02_a.log
/u01/app/oracle/oradata/devdb_clone/redo02_b.log
SQL> recover database until time '2009-12-21 22:56:38' using backup controlfile;
ORA-00279: change 274060 generated at 12/21/2009 21:34:32 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/devdb_clone/1_19_706222899.dbf
ORA-00280: change 274060 for thread 1 is in sequence #19
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--> /u01/app/oracle/oradata/devdb_clone/redo01_a.log 입력
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               MOUNTED
SQL> alter database open resetlogs;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> exit



    2. clone DB를 이용한 복구 : ④ clone DB에서 export -> devdb로 import


 
[oracle@ora10gr2 devdb_clone]$ exp phil/phil file=t1.dmp tables=t1
About to export specified tables via Conventional Path ...
. . exporting table                             T1          2 rows exported
Export terminated successfully without warnings.
[oracle@ora10gr2 devdb_clone]$ export ORACLE_SID=devdb
[oracle@ora10gr2 devdb_clone]$ sqlplus phil/phil
SQL> select * from phil.t1;
select * from phil.t1
                   *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> ! imp phil/phil file=t1.dmp tables=t1;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> exit



    2. clone DB를 이용한 복구 : ⑤ clone database 종료 및 삭제


[oracle@ora10gr2 devdb_clone]$ cd
[oracle@ora10gr2 ~]$ export ORACLE_SID=C1
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> shutdown abort
SQL> exit
[oracle@ora10gr2 ~]$ ls /u01/app/oracle/oradata
[oracle@ora10gr2 ~]$ rm -rf /u01/app/oracle/oradata/devdb_clone

 

'Oracle > Backup & Recovery' 카테고리의 다른 글

restore points  (0) 2009.12.23
clone DB를 이용한 incomplete recovery 실습2 : RMAN  (0) 2009.12.22
MTTR (Mean Time To Recover)  (0) 2009.12.21
MTBF(Mean Time Between Failures)  (0) 2009.12.21
User Managed Recovery  (0) 2009.12.18
Posted by 자수성가한 부자