Complete Recovery – DB Open상태에서(2)
현재 데이터베이스는 아카이브 로그 모드로 운영 중이며 이전에 손상된 데이터파일에 대한
백업을 받아둔 것이 있으며 백업을 받은 이후의 아카이브 로그가 아카이브 로그 폴더로
지정된 곳에 저장되어 있다고 가정 하겠습니다.
------------------------------------------------
환경 : Oracle 9.2 윈도우
Close backup이 있는곳 : c:\backup\oradata\wink
데이터파일 위치 : c:\oracle oradata\wink
아카이브 로그 폴더 : C:\oracle\ora92\database\archive
------------------------------------------------
======================================================
복구 예
======================================================
1. 아카이브 로그 모드로 운영 중인지를 확인, 아카이브 로그 폴더 확인
SQL> conn / as sysdba
Connected.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination C:\oracle\ora92\database\archive
Oldest online log sequence 304
Next log sequence to archive 306
Current log sequence 306
2. 아카이브 로그폴더에 로그가 있는지 확인
SQL> host dir C:\oracle\ora92\database\archive
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: FC30-E1BC
C:\oracle\ora92\database\archive 디렉터리
2005-03-26 오전 11:37 <DIR> .
2005-03-26 오전 11:37 <DIR> ..
2005-03-20 오후 01:09 5,435,392 001_00292.ARC
2005-03-20 오후 02:59 195,072 001_00293.ARC
2005-03-20 오후 07:15 225,792 001_00294.ARC
2005-03-21 오전 01:26 167,424 001_00295.ARC
2005-03-22 오전 09:00 4,068,864 001_00296.ARC
2005-03-22 오전 09:01 148,480 001_00297.ARC
2005-03-24 오전 09:12 10,485,248 001_00298.ARC
2005-03-24 오전 09:13 10,477,568 001_00299.ARC
2005-03-24 오전 09:22 10,485,248 001_00300.ARC
2005-03-24 오전 09:23 10,485,248 001_00301.ARC
2005-03-24 오전 09:32 10,485,248 001_00302.ARC
2005-03-24 오전 09:33 10,485,248 001_00303.ARC
2005-03-24 오전 09:38 10,485,248 001_00304.ARC
2005-03-26 오전 11:37 4,341,248 001_00305.ARC
14개 파일 87,971,328 바이트
3. SCOTT 계정에서 실습을 위해 기본 테이블스페이스를 USERS로 바꾸고 USERS 테이블스페이스의 데이터파일을 확인 해두자…
SQL>conn / as sysdba
SQL> -- SCOTT 계정에서 테스트 할 것이므로 SCOTT의 기본 테이블스페이스를 확인
SQL> select username, default_tablespace
2 from dba_users
3 where username = 'SCOTT';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCOTT SYSTEM
SQL> -- SYSTEM으로 되어 있으므로 실습을 위해 user로 변경
SQL> -- 이미 users로 되어 있다면 이 부분은 SKIP
SQL> alter user scott default tablespace users;
User altered.
SQL> -- users 테이블스페이스의 데이터파일을 확인해 두자...
SQL> select FILE_NAME, TABLESPACE_NAME
2 from dba_data_files
3 where tablespace_name = 'USERS';
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
C:\ORACLE\ORADATA\WINK\USERS01.DBF
USERS
4. SCOTT 계정에서 테이블을 하나 만들고 데이터를 넣음… 나중에 이 테이블이 만들어지고 데이터가 들어가 있는 상태까지 복구를 함…
SQL> conn scott/tiger
Connected.
SQL> drop table test;
Table dropped.
SQL> create table test (
2 name varchar2(10) not null primary key,
3 tel varchar2(20)
4 );
Table created.
SQL> insert into test (name, tel)
2 values ('이종철','010-999-0009');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
NAME TEL
---------- --------------------
이종철 010-999-0009
5. 관리자로 접속해서 TEST Table이 USERS 테이블스페이스에 만들어짐을 확인하며 checkpoint, switch logfile을 통해 아카이브 로그를 강제로 만듭니다.
SQL> conn / as sysdba
Connected.
SQL> select table_name, tablespace_name
2 from dba_tables
3 where owner = 'SCOTT'
4 and table_name = 'TEST';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEST USERS
SQL> alter system checkpoint;
System altered.
SQL> alter system switch logfile;
System altered.
6. user01.dbf를 삭제 함으로서 사고를 칩니다…^^(데이터파일을 오프라인으로 만든 후 지웁니다. 온라인으로 되어 있는 경우 다른 프로세스가 사용하고 있다면서 삭제 되지 않습니다.)
SQL> conn / as sysdba
Connected.
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' offline;
Database altered.
SQL> host del c:\oracle\oradata\wink\users01.dbf --데이터 파일 삭제
7. 사고난 것을 확인
SQL> conn scott/tiger
Connected.
SQL> select * from test;
select * from test
*
ERROR at line 1:
ORA-00376: file 9 cannot be read at this time
ORA-01110: data file 9: 'C:\ORACLE\ORADATA\WINK\USERS01.DBF'
8. 장애 파일을 확인…
SQL>conn / as sysdba
SQL> col tablespace_name format a10
SQL> col name format a30
SQL> col error format a10
SQL> select h.tablespace_name, d.name, h.error
2 from v$datafile d, v$datafile_header h
3 where d.file# = h.file#;
TABLESPACE NAME ERROR
---------- ------------------------------ -----------------------
SYSTEM C:\ORACLE\ORADATA\WINK\SYSTEM01.DBF
UNDOTBS1 C:\ORACLE\ORADATA\WINK\UNDOTBS01.DBF
EXAMPLE C:\ORACLE\ORADATA\WINK\EXAMPLE01.DBF
INDX C:\ORACLE\ORADATA\WINK\INDX01.DBF
C:\ORACLE\ORADATA\WINK\USERS01 FILE NOT
TABLESLACE이름이 비어 있는 ERROR에 FILE NOT FOUND라는 부분이
오류를 나타냅니다.
SQL> select d.file#, d.name, d.status, h.status
2 from v$datafile d, v$datafile_header h
3 where d.file# = h.file#;
FILE# NAME STATUS STATUS
---------- ------------------------------ ------- -------
1 C:\ORACLE\ORADATA\WINK\SYSTEM01.DBF SYSTEM ONLINE
1.DBF
……
……
……
8 C:\ORACLE\ORADATA\WINK\TOOLS01.DBF ONLINE ONLINE
9 C:\ORACLE\ORADATA\WINK\USERS01.DBF ONLINE ONLINE
.DBF
SQL>-- ONLINE으로 되어 있다면 OFFLINE으로 변경
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' offline;
Database altered.
9. 손상을 입은 users01.dbf를 데이터파일이 있는 위치에 복사
SQL> host copy c:\backup\oradata\wink\users01.dbf c:\oracle\oradata\wink
1개 파일이 복사되었습니다.
10. 복구를 진행 합니다.
SQL> recover datafile 'c:\oracle\oradata\wink\users01.dbf'
Media recovery complete.
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' online;
Database altered.
11. 복구된 데이터를 확인
SQL> conn scott/tiger
Connected.
SQL> select * from test;
NAME TEL
------------------------------ --------------------
이종철 010-999-0009
* 이종철님에 의해서 게시물 이동되었습니다 (2006-06-04 12:25)
현재 데이터베이스는 아카이브 로그 모드로 운영 중이며 이전에 손상된 데이터파일에 대한
백업을 받아둔 것이 있으며 백업을 받은 이후의 아카이브 로그가 아카이브 로그 폴더로
지정된 곳에 저장되어 있다고 가정 하겠습니다.
------------------------------------------------
환경 : Oracle 9.2 윈도우
Close backup이 있는곳 : c:\backup\oradata\wink
데이터파일 위치 : c:\oracle oradata\wink
아카이브 로그 폴더 : C:\oracle\ora92\database\archive
------------------------------------------------
======================================================
복구 예
======================================================
1. 아카이브 로그 모드로 운영 중인지를 확인, 아카이브 로그 폴더 확인
SQL> conn / as sysdba
Connected.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination C:\oracle\ora92\database\archive
Oldest online log sequence 304
Next log sequence to archive 306
Current log sequence 306
2. 아카이브 로그폴더에 로그가 있는지 확인
SQL> host dir C:\oracle\ora92\database\archive
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: FC30-E1BC
C:\oracle\ora92\database\archive 디렉터리
2005-03-26 오전 11:37 <DIR> .
2005-03-26 오전 11:37 <DIR> ..
2005-03-20 오후 01:09 5,435,392 001_00292.ARC
2005-03-20 오후 02:59 195,072 001_00293.ARC
2005-03-20 오후 07:15 225,792 001_00294.ARC
2005-03-21 오전 01:26 167,424 001_00295.ARC
2005-03-22 오전 09:00 4,068,864 001_00296.ARC
2005-03-22 오전 09:01 148,480 001_00297.ARC
2005-03-24 오전 09:12 10,485,248 001_00298.ARC
2005-03-24 오전 09:13 10,477,568 001_00299.ARC
2005-03-24 오전 09:22 10,485,248 001_00300.ARC
2005-03-24 오전 09:23 10,485,248 001_00301.ARC
2005-03-24 오전 09:32 10,485,248 001_00302.ARC
2005-03-24 오전 09:33 10,485,248 001_00303.ARC
2005-03-24 오전 09:38 10,485,248 001_00304.ARC
2005-03-26 오전 11:37 4,341,248 001_00305.ARC
14개 파일 87,971,328 바이트
3. SCOTT 계정에서 실습을 위해 기본 테이블스페이스를 USERS로 바꾸고 USERS 테이블스페이스의 데이터파일을 확인 해두자…
SQL>conn / as sysdba
SQL> -- SCOTT 계정에서 테스트 할 것이므로 SCOTT의 기본 테이블스페이스를 확인
SQL> select username, default_tablespace
2 from dba_users
3 where username = 'SCOTT';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCOTT SYSTEM
SQL> -- SYSTEM으로 되어 있으므로 실습을 위해 user로 변경
SQL> -- 이미 users로 되어 있다면 이 부분은 SKIP
SQL> alter user scott default tablespace users;
User altered.
SQL> -- users 테이블스페이스의 데이터파일을 확인해 두자...
SQL> select FILE_NAME, TABLESPACE_NAME
2 from dba_data_files
3 where tablespace_name = 'USERS';
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
C:\ORACLE\ORADATA\WINK\USERS01.DBF
USERS
4. SCOTT 계정에서 테이블을 하나 만들고 데이터를 넣음… 나중에 이 테이블이 만들어지고 데이터가 들어가 있는 상태까지 복구를 함…
SQL> conn scott/tiger
Connected.
SQL> drop table test;
Table dropped.
SQL> create table test (
2 name varchar2(10) not null primary key,
3 tel varchar2(20)
4 );
Table created.
SQL> insert into test (name, tel)
2 values ('이종철','010-999-0009');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
NAME TEL
---------- --------------------
이종철 010-999-0009
5. 관리자로 접속해서 TEST Table이 USERS 테이블스페이스에 만들어짐을 확인하며 checkpoint, switch logfile을 통해 아카이브 로그를 강제로 만듭니다.
SQL> conn / as sysdba
Connected.
SQL> select table_name, tablespace_name
2 from dba_tables
3 where owner = 'SCOTT'
4 and table_name = 'TEST';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEST USERS
SQL> alter system checkpoint;
System altered.
SQL> alter system switch logfile;
System altered.
6. user01.dbf를 삭제 함으로서 사고를 칩니다…^^(데이터파일을 오프라인으로 만든 후 지웁니다. 온라인으로 되어 있는 경우 다른 프로세스가 사용하고 있다면서 삭제 되지 않습니다.)
SQL> conn / as sysdba
Connected.
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' offline;
Database altered.
SQL> host del c:\oracle\oradata\wink\users01.dbf --데이터 파일 삭제
7. 사고난 것을 확인
SQL> conn scott/tiger
Connected.
SQL> select * from test;
select * from test
*
ERROR at line 1:
ORA-00376: file 9 cannot be read at this time
ORA-01110: data file 9: 'C:\ORACLE\ORADATA\WINK\USERS01.DBF'
8. 장애 파일을 확인…
SQL>conn / as sysdba
SQL> col tablespace_name format a10
SQL> col name format a30
SQL> col error format a10
SQL> select h.tablespace_name, d.name, h.error
2 from v$datafile d, v$datafile_header h
3 where d.file# = h.file#;
TABLESPACE NAME ERROR
---------- ------------------------------ -----------------------
SYSTEM C:\ORACLE\ORADATA\WINK\SYSTEM01.DBF
UNDOTBS1 C:\ORACLE\ORADATA\WINK\UNDOTBS01.DBF
EXAMPLE C:\ORACLE\ORADATA\WINK\EXAMPLE01.DBF
INDX C:\ORACLE\ORADATA\WINK\INDX01.DBF
C:\ORACLE\ORADATA\WINK\USERS01 FILE NOT
TABLESLACE이름이 비어 있는 ERROR에 FILE NOT FOUND라는 부분이
오류를 나타냅니다.
SQL> select d.file#, d.name, d.status, h.status
2 from v$datafile d, v$datafile_header h
3 where d.file# = h.file#;
FILE# NAME STATUS STATUS
---------- ------------------------------ ------- -------
1 C:\ORACLE\ORADATA\WINK\SYSTEM01.DBF SYSTEM ONLINE
1.DBF
……
……
……
8 C:\ORACLE\ORADATA\WINK\TOOLS01.DBF ONLINE ONLINE
9 C:\ORACLE\ORADATA\WINK\USERS01.DBF ONLINE ONLINE
.DBF
SQL>-- ONLINE으로 되어 있다면 OFFLINE으로 변경
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' offline;
Database altered.
9. 손상을 입은 users01.dbf를 데이터파일이 있는 위치에 복사
SQL> host copy c:\backup\oradata\wink\users01.dbf c:\oracle\oradata\wink
1개 파일이 복사되었습니다.
10. 복구를 진행 합니다.
SQL> recover datafile 'c:\oracle\oradata\wink\users01.dbf'
Media recovery complete.
SQL> alter database datafile 'c:\oracle\oradata\wink\users01.dbf' online;
Database altered.
11. 복구된 데이터를 확인
SQL> conn scott/tiger
Connected.
SQL> select * from test;
NAME TEL
------------------------------ --------------------
이종철 010-999-0009
* 이종철님에 의해서 게시물 이동되었습니다 (2006-06-04 12:25)
[100%환급외,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷… | 12-27 | 2769 | ||
[채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 2010 | ||
53 | [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… | 03-15 | 1824 | |
52 | [주말]C#,ASP.NET마스터 | 01-31 | 1982 | |
51 | [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… | 01-31 | 2934 | |
50 | [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 | 01-31 | 1527 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… | 01-19 | 1851 | |
48 | [평일야간,주말]안드로이드개발자과정(Android기초실무) | 01-11 | 1729 | |
47 | [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… | 01-03 | 2289 | |
46 | [100%환급외,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷… | 12-27 | 2769 | |
45 | [평일주간]NoSQL,MongoDB,빅데이터기초과정 | 12-19 | 1942 | |
44 | [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… | 12-14 | 1922 | |
43 | [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 2010 | |
42 | [평일주간]빅데이터하둡기초과정(BigData Hadoop) | 12-09 | 1568 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1795 | |
40 | [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… | 12-01 | 2007 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1445 |
댓글 없음:
댓글 쓰기