'2010/03/09'에 해당되는 글 3건

  1. 2010.03.09 Complete Recovery 연습 문제
  2. 2010.03.09 Archive log mode Complete Recovery
  3. 2010.03.09 No Archive log mode Recovery 연습문제
posted by I유령I 2010. 3. 9. 12:13
#1 /home/oracle/oradata/testdb/undotbs01.dbf를 삭제하고 복구하기

SQL> !rm -rf /home/oracle/oradata/testdb/undotbs01.dbf

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             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/home/oracle/oradata/testdb/undotbs01.dbf'


SQL> !cp /data/backup/open/undotbs01.dbf /home/oracle/oradata/testdb/

SQL> recover datafile '/home/oracle/oradata/testdb/undotbs01.dbf';
Media recovery complete.
SQL> alter database open;

Database altered.

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
TS_A                          5 /home/oracle/oradata/testdb/ts_a01.dbf
TS_B                          5 /home/oracle/oradata/testdb/ts_b01.dbf
TS_C                          5 /home/oracle/oradata/testdb/ts_c01.dbf

8 rows selected.

SQL> 



#2 ts_a, ts_b, ts_c에 각각 test5, test6, test7 Table을 만들고 Data를 입력한 후 각 Data file을 삭제하고 3개의 Tablespace 전부 복구하기

SQL> create table test5 (no number) tablespace ts_a;

Table created.

SQL> insert into test5 values (5);

1 row created.

SQL> commit;  

Commit complete.

SQL> select * from test5;

        NO
----------
         5

SQL> create table test6 (no number) tablespace ts_b;

Table created.

SQL> insert into test6 values (6);

1 row created.

SQL> commit;  

Commit complete.

SQL> select * from test6;

        NO
----------
         6

SQL> create table test7 (no number) tablespace ts_c;

Table created.

SQL> insert into test7 values (7);

1 row created.

SQL> commit;  

Commit complete.

SQL> select * from test7;

        NO
----------
         7

SQL> !rm /home/oracle/oradata/testdb/ts_a01.dbf

SQL> !rm /home/oracle/oradata/testdb/ts_b01.dbf

SQL> !rm /home/oracle/oradata/testdb/ts_c01.dbf

SQL> !ls /home/oracle/oradata/testdb/ts_*
ls: /home/oracle/oradata/testdb/ts_*: 그런 파일이나 디렉토리가 없음

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             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/home/oracle/oradata/testdb/ts_a01.dbf'


SQL> !cp /data/backup/open/ts_a01.dbf /home/oracle/oradata/testdb/

SQL> !cp /data/backup/open/ts_b01.dbf /home/oracle/oradata/testdb/

SQL> !cp /data/backup/open/ts_c01.dbf /home/oracle/oradata/testdb/

SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from test5;

        NO
----------
         5

SQL> select * from test6;

        NO
----------
         6

SQL> select * from test7;

        NO
----------
         7

SQL> 
posted by I유령I 2010. 3. 9. 12:09
Non System Tablespace Recovery

SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              96470608 bytes
Database Buffers          184549376 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /data/arc2
Oldest online log sequence     2
Next log sequence to archive   4
Current log sequence           4
SQL> create tablespace ts_a
  2  datafile '/home/oracle/oradata/testdb/ts_a01.dbf' size 5m;

Tablespace created.

SQL> create tablespace ts_b
  2  datafile '/home/oracle/oradata/testdb/ts_b01.dbf' size 5m;

Tablespace created.

SQL> create tablespace ts_c
  2  datafile '/home/oracle/oradata/testdb/ts_c01.dbf' size 5m;

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
TS_A                          5 /home/oracle/oradata/testdb/ts_a01.dbf
TS_B                          5 /home/oracle/oradata/testdb/ts_b01.dbf
TS_C                          5 /home/oracle/oradata/testdb/ts_c01.dbf

8 rows selected.

SQL> create table test1 (no number) tablespace ts_c;

Table created.

SQL> insert into test1 values (1);

1 row created.

SQL> insert into test1 values (2);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test1;

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

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 ts_a begin backup;

Tablespace altered.

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

SQL> alter tablespace ts_a end backup;

Tablespace altered.

SQL> alter tablespace ts_b begin backup;

Tablespace altered.

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

SQL> alter tablespace ts_b end backup;

Tablespace altered.

SQL> alter tablespace ts_c begin backup;

Tablespace altered.

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

SQL> alter tablespace ts_c end backup;

Tablespace altered.

SQL> alter database backup controlfile to '/data/backup/open/control01.ctl';

Database altered.

SQL> !rm -rf /home/oracle/oradata/testdb/ts_c01.dbf

SQL> alter tablespace ts_c offline;

Tablespace altered.

SQL> alter tablespace ts_c online;
alter tablespace ts_c online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01110: data file 8: '/home/oracle/oradata/testdb/ts_c01.dbf'


SQL> select * from test1;
select * from test1
              *
ERROR at line 1:
ORA-00376: file 8 cannot be read at this time
ORA-01110: data file 8: '/home/oracle/oradata/testdb/ts_c01.dbf'


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
TS_A                          5 /home/oracle/oradata/testdb/ts_a01.dbf
TS_B                          5 /home/oracle/oradata/testdb/ts_b01.dbf
TS_C                            /home/oracle/oradata/testdb/ts_c01.dbf

8 rows selected.

SQL> !cp /data/backup/open/ts_c01.dbf /home/oracle/oradata/testdb/

SQL> recover tablespace ts_c;
Media recovery complete.
SQL> alter tablespace ts_c online;

Tablespace altered.

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
TS_A                          5 /home/oracle/oradata/testdb/ts_a01.dbf
TS_B                          5 /home/oracle/oradata/testdb/ts_b01.dbf
TS_C                          5 /home/oracle/oradata/testdb/ts_c01.dbf

8 rows selected.

SQL> select * from test1;

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

SQL> 



System Tablespace Recovery

#1 recover database;
SQL> create table test3 (no number) tablespace system;

Table created.

SQL> insert into test3 values (1);

1 row created.

SQL> insert into test3 values (2);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test3;

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

SQL> !rm -rf /home/oracle/oradata/testdb/system01.dbf

SQL> !ls /home/oracle/oradata/testdb/system01.dbf    
ls: /home/oracle/oradata/testdb/system01.dbf: 그런 파일이나 디렉토리가 없음

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             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'


SQL> !cp /data/backup/open/system01.dbf /home/oracle/oradata/testdb/

SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from test3;

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

SQL> 


#2 recover tablespace tablespace_name;
SQL> truncate table test3;

Table truncated.

SQL> select * from test3;

no rows selected

SQL> insert into test3 values (3);

1 row created.

SQL> insert into test3 values (4);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test3;

        NO
----------
         3
         4

SQL> !rm -rf /home/oracle/oradata/testdb/system01.dbf

SQL> !ls /home/oracle/oradata/testdb/system01.dbf
ls: /home/oracle/oradata/testdb/system01.dbf: 그런 파일이나 디렉토리가 없음

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             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'


SQL> !cp /data/backup/open/system01.dbf /home/oracle/oradata/testdb/

SQL> recover tablespace system;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from test3;

        NO
----------
         3
         4

SQL> 

#3 recover datafile '/home/oracle/oradata/testdb/system01.dbf';
SQL> truncate table test3;

Table truncated.

SQL> insert into test3 values (5);

1 row created.

SQL> insert into test3 values (6);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test3;

        NO
----------
         5
         6

SQL> !rm -rf /home/oracle/oradata/testdb/system01.dbf

SQL> !ls /home/oracle/oradata/testdb/system01.dbf
ls: /home/oracle/oradata/testdb/system01.dbf: 그런 파일이나 디렉토리가 없음

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             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'


SQL> !cp /data/backup/open/system01.dbf /home/oracle/oradata/testdb/

SQL> recover datafile '/home/oracle/oradata/testdb/system01.dbf';
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from test3;

        NO
----------
         5
         6

SQL> 
posted by I유령I 2010. 3. 9. 10:53
장애 상황
No archive log mode로 DB 운영 중 갑자기 데이터 파일이 삭제되면서 DB가 강제 종료되는 현상이 발생했다.
확인 결과 Data file, Control file, Redo log file이 저장되어있는 디스크 장애였다.
현재 Backup file은 아래와 같이 저장되어 있으며 긴급 복구를 해야하는 상황이다.
삭제된 파일은 users01.dbf 이다.

복구 경로 (아래의 경로에 각 파일들이 위치하도록 복구)
- Data file : /data/temp/data/*.dbf
- Redo log file : /data/temp/log/*.log
- Control file : /data/temp/control/*.ctl

[oracle@ghost]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 10 02:52:47 2010

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              96470608 bytes
Database Buffers          184549376 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
#Data file, Control file, Redo log file이 저장되어 있는 디스크 장애이므로 모든 파일을 삭제한다.
SQL> !rm -rf /home/oracle/oradata/testdb/*

#디스크 장애가 발생하면서 DB가 강제 종료되는 상황을 만들기 위해 shutdown abort; 명령어를 사용한다.
SQL> shutdown abort;
ORACLE instance shut down.
#Control file이 삭제되어 아래와 같이 Control file 관련 에러가 발생하며 alert log를 확인하라는 에러 메시지가 출력된다.
SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info

#복구를 위해 일단 shutdown 한다.
SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
#연습문제 내용과 같이 복구 경로를 지정하기 위해 디렉토리를 생성하고 각 디렉토리로 복사한다.
SQL> !mkdir -p /data/temp/data /data/temp/log /data/temp/control

SQL> !cp -av /data/backup/close/*.dbf /data/temp/data/
`/data/backup/close/example01.dbf' -> `/data/temp/data/example01.dbf'
`/data/backup/close/sysaux01.dbf' -> `/data/temp/data/sysaux01.dbf'
`/data/backup/close/system01.dbf' -> `/data/temp/data/system01.dbf'
`/data/backup/close/temp01.dbf' -> `/data/temp/data/temp01.dbf'
`/data/backup/close/undotbs01.dbf' -> `/data/temp/data/undotbs01.dbf'
`/data/backup/close/users01.dbf' -> `/data/temp/data/users01.dbf'

SQL> !cp -av /data/backup/close/*.log /data/temp/log/ 
`/data/backup/close/redo01.log' -> `/data/temp/log/redo01.log'
`/data/backup/close/redo02.log' -> `/data/temp/log/redo02.log'
`/data/backup/close/redo03.log' -> `/data/temp/log/redo03.log'

SQL> !cp -av /data/backup/close/*.ctl /data/temp/control/
`/data/backup/close/control01.ctl' -> `/data/temp/control/control01.ctl'
`/data/backup/close/control02.ctl' -> `/data/temp/control/control02.ctl'
`/data/backup/close/control03.ctl' -> `/data/temp/control/control03.ctl'

#Control file을 우선 복구하기 위해 Instance를 nomount 단계로 시작한다.
SQL> startup nomount;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
#Server Parameter file에서 현재 복구할 Control file의 경로를 변경한다.
#기존 내용
#*.control_files='/home/oracle/oradata/testdb/control01.ctl',
#'/home/oracle/oradata/testdb/control02.ctl',
#'/home/oracle/oradata/testdb/control03.ctl'

#pfile 사용시
SQL> !vi /home/oracle/product/10g/dbs/inittestdb.ora
*.control_files='/data/temp/control/control01.ctl',
'/data/temp/control/control02.ctl',
'/data/temp/control/control03.ctl'

#spfile 사용시
SQL> alter system set control_files='/data/temp/control/control01.ctl',
  2  '/data/temp/control/control02.ctl',
  3  '/data/temp/control/control03.ctl'
  4  scope=spfile;

System altered.

#spfile의 변경된 내용을 적용하고 Data file, Redo log file의 복구를 위해 Instance를 재 시작한다.
 위해 Instance를 mount 단계로 재 시작한다.
SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             100664912 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.
#Data file, Redo log file을 복구하기 위해 Control file의 정보를 변경한다.
SQL> alter database rename        
  2  file '/home/oracle/oradata/testdb/system01.dbf'
  3  to '/data/temp/data/system01.dbf';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/sysaux01.dbf'
  3  to '/data/temp/data/sysaux01.dbf';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/undotbs01.dbf'
  3  to '/data/temp/data/undotbs01.dbf';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/users01.dbf'
  3  to '/data/temp/data/users01.dbf';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/example01.dbf'
  3  to '/data/temp/data/example01.dbf';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/redo01.log'
  3  to '/data/temp/log/redo01.log';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/redo02.log'
  3  to '/data/temp/log/redo02.log';

Database altered.

SQL> alter database rename
  2  file '/home/oracle/oradata/testdb/redo03.log'
  3  to '/data/temp/log/redo03.log';

Database altered.

SQL> alter database open;

Database altered.

#복구 여부를 확인한다.
SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;

TABLESPACE_NAME              MB FILE_NAME
-------------------- ---------- --------------------------------------------------
USERS                         5 /data/temp/data/users01.dbf
SYSAUX                      240 /data/temp/data/sysaux01.dbf
UNDOTBS1                     35 /data/temp/data/undotbs01.dbf
SYSTEM                      480 /data/temp/data/system01.dbf
EXAMPLE                     100 /data/temp/data/example01.dbf

SQL> select a.group#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
  2  from v$logfile a, v$log b
  3  where a.group# = b.group#
  4  order by a.group#, a.member;

    GROUP# MEMBER                                                     MB ARC STATUS
---------- -------------------------------------------------- ---------- --- ----------------
         1 /data/temp/log/redo01.log                                  50 NO  INACTIVE
         2 /data/temp/log/redo02.log                                  50 NO  INACTIVE
         3 /data/temp/log/redo03.log                                  50 NO  CURRENT

SQL>