No Archive Log vs Archive Log 복구 시 차이점
No Archive Log Mode는 복구에 필요한 Archive log 파일이 존재하지 않으면 복구 할 없다.
SQL> startup mount
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/data/arc2
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7
SQL> alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /home/data/arc2
Oldest online log sequence 5
Current log sequence 7
SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
TABLESPACE_NAME MB FILE_NAME
------------------------------ ---------- --------------------------------------
USERS 5 /app/oracle/oradata/jigi/users01.dbf
UNDOTBS1 100 /app/oracle/oradata/jigi/undotbs01.dbf
SYSAUX 520 /app/oracle/oradata/jigi/sysaux01.dbf
SYSTEM 680 /app/oracle/oradata/jigi/system01.dbf
EXAMPLE 100 /app/oracle/oradata/jigi/example01.dbf
SQL> create tablespace test
2 datafile '/app/oracle/oradata/jigi/test01.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 /app/oracle/oradata/jigi/users01.dbf
UNDOTBS1 100 /app/oracle/oradata/jigi/undotbs01.dbf
SYSAUX 520 /app/oracle/oradata/jigi/sysaux01.dbf
SYSTEM 680 /app/oracle/oradata/jigi/system01.dbf
EXAMPLE 100 /app/oracle/oradata/jigi/example01.dbf
TEST 5 /app/oracle/oradata/jigi/test01.dbf
6 rows selected.
SQL> save dd.sql
Created file dd.sql
SQL> select name from v$controlfile;
NAME
----------------------------------------------------------------------------------------------------
/app/oracle/oradata/jigi/control01.ctl
/app/oracle/oradata/jigi/control02.ctl
SQL> select member from v$logfile;
MEMBER
----------------------------------------------------------------------------------------------------
/app/oracle/oradata/jigi/redo03.log
/app/oracle/oradata/jigi/redo02.log
/app/oracle/oradata/jigi/redo01.log
/app/oracle/oradata/jigi/redo01_2.log
/app/oracle/oradata/jigi/redo02_2.log
/app/oracle/oradata/jigi/redo03_2.log
6 rows selected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !cp /app/oracle/oradata/jigi/* /home/data/backup/close/ ------->>>>>> close 백업
SQL> !ls /home/data/backup/close
control01.ctl example01.dbf redo01_2.log redo02_2.log redo03_2.log system01.dbf test01.dbf users01.dbf
control02.ctl redo01.log redo02.log redo03.log sysaux01.dbf temp01.dbf undotbs01.dbf
SQL> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
Database opened.
SQL> create table scott.tt700 (no number) tablespace test;
Table created.
SQL> insert into scott.tt700 values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> !rm /app/oracle/oradata/jigi/test01.dbf --->>>> 데이터 파일 장애 발생
SQL> !ls /app/oracle/oradata/jigi/test01.dbf
ls: cannot access /app/oracle/oradata/jigi/test01.dbf: 그런 파일이나 디렉터리가 없습니다
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
alter system switch logfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 5709
Session ID: 1 Serial number: 5
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@myjigi ~]$ sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 11 00:44:11 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter user-name: /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/app/oracle/oradata/jigi/test01.dbf'
SQL> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/app/oracle/oradata/jigi/test01.dbf'
SQL> alter database datafile '/app/oracle/oradata/jigi/test01.dbf' offline drop;
Database altered.
SQL> alter database open;
Database altered.
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> select * from scott.tt700;
select * from scott.tt700
*
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/app/oracle/oradata/jigi/test01.dbf'
Archive Log 복구 시 주의할 점
장애가 발생하여 복구할 경우, 해당파일에 I/O가 발생하지 않도록 만들어 놓고 복구작업해야 한다.
SYS> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> startup mount
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
SYS> alter database archivelog;
데이타베이스가 변경되었습니다.
SYS> alter database open;
데이타베이스가 변경되었습니다.
SYS> create tablespace test2
2 datafile '/app/oracle/oradata/mydream/test02.dbf' size 5M;
테이블스페이스가 생성되었습니다.
SYS> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/app/oracle/oradata/mydream/system01.dbf
/app/oracle/oradata/mydream/sysaux01.dbf
/app/oracle/oradata/mydream/undotbs01.dbf
/app/oracle/oradata/mydream/users01.dbf
/app/oracle/oradata/mydream/example01.dbf
/app/oracle/oradata/mydream/test02.dbf
/app/oracle/oradata/mydream/dosirak_data01.dbf
/app/oracle/oradata/mydream/dosirak_index01.dbf
/app/oracle/oradata/mydream/genie_data_01
/app/oracle/oradata/mydream/genie_index_01
/app/oracle/oradata/mydream/toda_data_01.dbf
11 개의 행이 선택되었습니다.
SYS> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/app/oracle/oradata/mydream/redo03.log
/app/oracle/oradata/mydream/redo02.log
/app/oracle/oradata/mydream/redo01.log
SYS> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/app/oracle/oradata/mydream/control01.ctl
SYS> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !cp /app/oracle/oradata/mydream/* /data/backup/close/ ------>>>>> close 백업
SYS> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SYS> create table scott.tt750 (no number) tablespace test2;
테이블이 생성되었습니다.
SYS> insert into scott.tt750 values (1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> select * from scott.tt750;
NO
----------
1
SYS> !rm /app/oracle/oradata/mydream/test02.dbf ------->>>>> 데이터 파일 장애발생
SYS> !ls /app/oracle/oradata/mydream/test02.dbf
ls: /app/oracle/oradata/mydream/test02.dbf: 그런 파일이나 디렉토리가 없음
SYS> alter tablespace test2 offline;
테이블스페이스가 변경되었습니다.
SYS> alter tablespace test2 online;
alter tablespace test2 online
*
1행에 오류:
ORA-01157: 데이터 6 파일을 식별 또는 잠금 할 수 없습니다- DBWR 추적 파일을 보십시오
ORA-01110: 6 데이터 파일: '/app/oracle/oradata/mydream/test02.dbf'
SYS> !cp /data/backup/close/test02.dbf /app/oracle/oradata/mydream/ ----->>> 백업파일을 복원
SYS> alter tablespace test2 online;
alter tablespace test2 online
*
1행에 오류:
ORA-01113: 6 파일이 매체 복구되어야 합니다
ORA-01110: 6 데이터 파일: '/app/oracle/oradata/mydream/test02.dbf'
SYS> recover tablespace test2; ------->>> 데이터 복구
매체 복구가 완료되었습니다.
SYS> alter tablespace test2 online;
테이블스페이스가 변경되었습니다.
SYS> select * from scott.tt750;
NO
----------
1
SYS> create table scott.tt800 (no number) tablespace system;
테이블이 생성되었습니다.
SYS> insert into scott.tt800 values(1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> select * from scott.tt800;
NO
----------
1
SYS> !rm /app/oracle/oradata/mydream/system01.dbf
SYS> !ls /app/oracle/oradata/mydream/system01.dbf --->>> rm 만으로는 삭제 안됨
/app/oracle/oradata/mydream/system01.dbf
SYS> alter tablespace system offline;
alter tablespace system offline
*
1행에 오류:
ORA-01541: SYSTEM 테이블스페이스는 오프라인될 수 없습니다. 필요하면 종료하십시오.
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SYS> !rm /app/oracle/oradata/mydream/system01.dbf
SYS> !rm -f /app/oracle/oradata/mydream/system01.dbf ----->>> -f 으로 파일삭제
SYS> !ls /app/oracle/oradata/mydream/system01.dbf
ls: /app/oracle/oradata/mydream/system01.dbf: 그런 파일이나 디렉토리가 없음
SYS> alter tablespace system offline;
alter tablespace system offline
*
1행에 오류:
ORA-01541: SYSTEM 테이블스페이스는 오프라인될 수 없습니다. 필요하면 종료하십시오.
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !cp /data/backup/close/system01.dbf /app/oracle/oradata/mydream/ ---->>> 백업파일로부터 복원
SYS> !ls /app/oracle/oradata/mydream/system01.dbf
/app/oracle/oradata/mydream/system01.dbf
SYS> recover tablespace system; ----->>> 데이터 복구
매체 복구가 완료되었습니다.
SYS> alter database open;
데이타베이스가 변경되었습니다.
SYS> select * from scott.tt800;
NO
----------
1
백업파일이 없는 상태에서의 복구 시 유의점
이 방법으로는 systme01.dbf, sysaux01.dbf, untotb101, users01.dbf, example01.dbf 파일은 생성할 수 없다.
SYS> @dd
FILE# NAME MB STATUS
---------- -------------------------------------------------- ---------- -------
1 /app/oracle/oradata/mydream/system01.dbf 710 SYSTEM
2 /app/oracle/oradata/mydream/sysaux01.dbf 540 ONLINE
3 /app/oracle/oradata/mydream/undotbs01.dbf 90 ONLINE
4 /app/oracle/oradata/mydream/users01.dbf 5 ONLINE
5 /app/oracle/oradata/mydream/example01.dbf 100 ONLINE
6 /app/oracle/oradata/mydream/test02.dbf 5 ONLINE
9 /app/oracle/oradata/mydream/dosirak_data01.dbf 100 ONLINE
10 /app/oracle/oradata/mydream/dosirak_index01.dbf 100 ONLINE
11 /app/oracle/oradata/mydream/genie_data_01 100 ONLINE
12 /app/oracle/oradata/mydream/genie_index_01 100 ONLINE
13 /app/oracle/oradata/mydream/toda_data_01.dbf 100 ONLINE
11 개의 행이 선택되었습니다.
SYS> !rm -f /app/oracle/oradata/mydream/test02.dbf
SYS> !ls /app/oracle/oradata/mydream/test02.dbf
ls: /app/oracle/oradata/mydream/test02.dbf: 그런 파일이나 디렉토리가 없음
SYS> create table scott.tt810 (no number) tablespace test2;
테이블이 생성되었습니다.
SYS> insert into scott.tt810 values(1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> select * from scott.tt810;
NO
----------
1
SYS> alter tablespace test2 offline;
테이블스페이스가 변경되었습니다.
SYS> alter tablespace test2 online;
alter tablespace test2 online
*
1행에 오류:
ORA-01157: 데이터 6 파일을 식별 또는 잠금 할 수 없습니다- DBWR 추적 파일을 보십시오
ORA-01110: 6 데이터 파일: '/app/oracle/oradata/mydream/test02.dbf'
SYS> select * from scott.tt810;
select * from scott.tt810
*
1행에 오류:
ORA-00376: 현재 파일 6를 읽을 수 없습니다
ORA-01110: 6 데이터 파일: '/app/oracle/oradata/mydream/test02.dbf'
SYS> @dd
FILE# NAME MB STATUS
---------- -------------------------------------------------- ---------- -------
1 /app/oracle/oradata/mydream/system01.dbf 710 SYSTEM
2 /app/oracle/oradata/mydream/sysaux01.dbf 540 ONLINE
3 /app/oracle/oradata/mydream/undotbs01.dbf 90 ONLINE
4 /app/oracle/oradata/mydream/users01.dbf 5 ONLINE
5 /app/oracle/oradata/mydream/example01.dbf 100 ONLINE
6 /app/oracle/oradata/mydream/test02.dbf 0 OFFLINE
9 /app/oracle/oradata/mydream/dosirak_data01.dbf 100 ONLINE
10 /app/oracle/oradata/mydream/dosirak_index01.dbf 100 ONLINE
11 /app/oracle/oradata/mydream/genie_data_01 100 ONLINE
12 /app/oracle/oradata/mydream/genie_index_01 100 ONLINE
13 /app/oracle/oradata/mydream/toda_data_01.dbf 100 ONLINE
11 개의 행이 선택되었습니다.
SYS> alter database create datafile ----->> 손상된 파일을 새로운 이름으로 다시 생성
2 '/app/oracle/oradata/mydream/test02.dbf'
3 as '/app/oracle/oradata/mydream/test02_recv.dbf';
데이타베이스가 변경되었습니다.
SYS> recover tablespace test2;
매체 복구가 완료되었습니다.
SYS> alter tablespace test2 online;
테이블스페이스가 변경되었습니다.
SYS> select * from scott.tt810;
NO
----------
1
SYS> @dd
FILE# NAME MB STATUS
---------- -------------------------------------------------- ---------- -------
1 /app/oracle/oradata/mydream/system01.dbf 710 SYSTEM
2 /app/oracle/oradata/mydream/sysaux01.dbf 540 ONLINE
3 /app/oracle/oradata/mydream/undotbs01.dbf 90 ONLINE
4 /app/oracle/oradata/mydream/users01.dbf 5 ONLINE
5 /app/oracle/oradata/mydream/example01.dbf 100 ONLINE
6 /app/oracle/oradata/mydream/test02_recv.dbf 5 ONLINE
9 /app/oracle/oradata/mydream/dosirak_data01.dbf 100 ONLINE
10 /app/oracle/oradata/mydream/dosirak_index01.dbf 100 ONLINE
11 /app/oracle/oradata/mydream/genie_data_01 100 ONLINE
12 /app/oracle/oradata/mydream/genie_index_01 100 ONLINE
13 /app/oracle/oradata/mydream/toda_data_01.dbf 100 ONLINE
11 개의 행이 선택되었습니다.
새로 생성된 data file의 내용
위 복구방법에서 생성된 파일의 checkpoint scn은 0번으로 초기화 되며, recover 명령어 이후 scn의 정보가 변경된다.
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
-------------------- -------- ---------- ----------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/jigi/example01.dbf
SYSAUX 500 AVAILABLE /app/oracle/oradata/jigi/sysaux01.dbf
SYSTEM 680 AVAILABLE /app/oracle/oradata/jigi/system01.dbf
UNDOTBS1 100 AVAILABLE /app/oracle/oradata/jigi/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/jigi/users01.dbf
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/jigi/redo01.log 50 INACTIVE YES 4
2 /app/oracle/oradata/jigi/redo02.log 50 INACTIVE YES 5
3 /app/oracle/oradata/jigi/redo03.log 50 CURRENT NO 6
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/jigi/control01.ctl
/app/oracle/oradata/jigi/control02.ctl
SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> !cp /app/oracle/oradata/jigi/* /home/data/backup/close/ ------>>> CLOSE 백업
SYS> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
Database opened.
SYS>
SYS>
SYS> create table scott.tt820 ( no number, name varchar2(10)) tablespace users;
Table created.
SYS> insert into scott.tt820 values(1, 'aaa');
1 row created.
SYS> insert into scott.tt820 values(2, 'bbb');
1 row created.
SYS> insert into scott.tt820 values(3, 'ccc');
1 row created.
SYS> commit;
Commit complete.
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') recover_date from dual; ---->>>> 복원시점 파악
RECOVER_DATE
-------------------
2015-11-12:23:58:47
SYS> select * from scott.tt820;
NO NAME
---------- --------------------------------------------------
1 aaa
2 bbb
3 ccc
SYS> update scott.tt820 set name = 'DDD'; ----->>>> 잘못된 업데이트 발생
3 rows updated.
SYS> commit;
Commit complete.
SYS> select * from scott.tt820;
NO NAME
---------- --------------------------------------------------
1 DDD
2 DDD
3 DDD
SYS> rollback;
Rollback complete.
SYS> select * from scott.tt820;
NO NAME
---------- --------------------------------------------------
1 DDD
2 DDD
3 DDD
SYS> create pfile from spfile; --> 작업의 편리성을 위해 pfile 사용
File created.
SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> !mkdir /home/data/temp ---->>> 이 위치에서 임시 인스턴스를 올리기로 함(복원 디렉토리)
-- 백업파일에서 모든 파일을 복사하면 복구에 실패하니 주의해야 함
-- 예 : !cp /home/data/backup/close/* /home/data/temp/
[oracle@myjigi temp]$ cp /home/data/backup/close/*.dbf /home/data/temp/ --> 데이터파일만 백업파일을 사용
[oracle@myjigi temp]$ cp /app/oracle/oradata/jigi/*.log /home/data/temp/ --> 장애이후 로그파일
[oracle@myjigi temp]$ cp /app/oracle/oradata/jigi/*.ctl /home/data/temp/ --> 장애이후 컨트롤파일
[oracle@myjigi temp]$ mv /app/oracle/product/11g/dbs/spfilejigi.ora /app/oracle/product/11g/dbs/spfilejigi.ora.bak --> pfile을 사용하도록 변경
-- 아래와 같이 pfile에서 컨트롤파일의 위치를 수정해 줌
#*.control_files='/app/oracle/oradata/jigi/control01.ctl','/app/oracle/oradata/jigi/control02.ctl'
*.control_files='/home/data/temp/control01.ctl'
SYS> startup mount
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
SYS> @con
NAME
--------------------------------------------------
/home/data/temp/control01.ctl
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/app/oracle/oradata/jigi/system01.dbf
/app/oracle/oradata/jigi/sysaux01.dbf
/app/oracle/oradata/jigi/undotbs01.dbf
/app/oracle/oradata/jigi/users01.dbf
/app/oracle/oradata/jigi/example01.dbf
SYS> alter database rename file '/app/oracle/oradata/jigi/example01.dbf' to '/home/data/temp/example01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/sysaux01.dbf' to '/home/data/temp/sysaux01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/system01.dbf' to '/home/data/temp/system01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/undotbs01.dbf' to '/home/data/temp/undotbs01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/users01.dbf' to '/home/data/temp/users01.dbf';
Database altered.
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/home/data/temp/system01.dbf
/home/data/temp/sysaux01.dbf
/home/data/temp/undotbs01.dbf
/home/data/temp/users01.dbf
/home/data/temp/example01.dbf
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/jigi/redo01.log 50 INACTIVE YES 4
2 /app/oracle/oradata/jigi/redo02.log 50 INACTIVE YES 5
3 /app/oracle/oradata/jigi/redo03.log 50 CURRENT NO 6
SYS> alter database rename file '/app/oracle/oradata/jigi/redo01.log' to '/home/data/temp/redo01.log';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/redo02.log' to '/home/data/temp/redo02.log';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/redo03.log' to '/home/data/temp/redo03.log';
Database altered.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /home/data/temp/redo01.log 50 INACTIVE YES 4
2 /home/data/temp/redo02.log 50 INACTIVE YES 5
3 /home/data/temp/redo03.log 50 CURRENT NO 6
SYS> recover database until time '2015-11-12:23:58:47'; ---->> 장애발생 이전 시점으로 복구(로그마이너를 통해서도 확인가능)
Media recovery complete.
SYS> alter database open; -->>>> controlfile, redolog 파일은 장애 이후 시점, datafile은 장애이전 시점의 scn을 가지고 있으므로 서로 불일치함, 로그를 초기화 시켜줘야 함
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SYS> alter database open resetlogs;
Database altered.
SYS> select * from scott.tt820;
NO NAME
---------- --------------------------------------------------
1 aaa
2 bbb
3 ccc
--- pfile의 컨트롤파일 위치를 다시 수정하고, 원래경로에서 DB를 시작하였음
SYS> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
Database opened.
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/jigi/control01.ctl
/app/oracle/oradata/jigi/control02.ctl
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
-------------------- -------- ---------- ----------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/jigi/example01.dbf
SYSAUX 500 AVAILABLE /app/oracle/oradata/jigi/sysaux01.dbf
SYSTEM 680 AVAILABLE /app/oracle/oradata/jigi/system01.dbf
UNDOTBS1 100 AVAILABLE /app/oracle/oradata/jigi/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/jigi/users01.dbf
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/jigi/redo01.log 50 INACTIVE YES 4
2 /app/oracle/oradata/jigi/redo02.log 50 INACTIVE YES 5
3 /app/oracle/oradata/jigi/redo03.log 50 CURRENT NO 6
SYS> create table scott.tt830 (no number) tablespace users;
Table created.
SYS> insert into scott.tt830 values(1);
1 row created.
SYS> commit;
Commit complete.
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') recover_date from dual; -->>> 복구시점 확인
RECOVER_DATE
-------------------
2015-11-13:00:42:58
SYS> delete from scott.tt830; ------>>>> delete 잘못함
1 row deleted.
SYS> commit;
Commit complete.
SYS> select * from scott.tt830;
no rows selected
SYS> shutdown immediate;
-- pfile의 경로를 다시 수정한다. 여기서는 /home/data/temp2로 수정함
#*.control_files='/app/oracle/oradata/jigi/control01.ctl','/app/oracle/oradata/jigi/control02.ctl'
*.control_files='/home/data/temp2/control01.ctl'
SYS> !mkdir /home/data/temp2/
SYS> !cp /home/data/backup/close/system01.dbf /home/data/temp2/ --->>>> 필요한 파일들만 복원
SYS> !cp /home/data/backup/close/sysaux01.dbf /home/data/temp2/
SYS> !cp /home/data/backup/close/undotbs01.dbf /home/data/temp2/
SYS> !cp /home/data/backup/close/users01.dbf /home/data/temp2/
SYS> !cp /app/oracle/oradata/jigi/*.log /home/data/temp2/
SYS> !cp /app/oracle/oradata/jigi/*.ctl /home/data/temp2/
SYS> startup mount
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 482347528 bytes
Database Buffers 297795584 bytes
Redo Buffers 2637824 bytes
Database mounted.
SYS> @con
NAME
--------------------------------------------------
/home/data/temp2/control01.ctl
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/app/oracle/oradata/jigi/system01.dbf
/app/oracle/oradata/jigi/sysaux01.dbf
/app/oracle/oradata/jigi/undotbs01.dbf
/app/oracle/oradata/jigi/users01.dbf
/app/oracle/oradata/jigi/example01.dbf
SYS> alter database rename file '/app/oracle/oradata/jigi/sysaux01.dbf' to '/home/data/temp2/sysaux01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/system01.dbf' to '/home/data/temp2/system01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/undotbs01.dbf' to '/home/data/temp2/undotbs01.dbf';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/users01.dbf' to '/home/data/temp2/users01.dbf';
Database altered.
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/home/data/temp2/system01.dbf
/home/data/temp2/sysaux01.dbf
/home/data/temp2/undotbs01.dbf
/home/data/temp2/users01.dbf
/app/oracle/oradata/jigi/example01.dbf
SYS> alter database datafile '/app/oracle/oradata/jigi/example01.dbf' offline drop; ---->>> 불필요한 파일 offline drop처리
Database altered.
SYS> select name, status from v$datafile;
NAME STATUS
-------------------------------------------------- ----------
/home/data/temp2/system01.dbf SYSTEM
/home/data/temp2/sysaux01.dbf ONLINE
/home/data/temp2/undotbs01.dbf ONLINE
/home/data/temp2/users01.dbf ONLINE
/app/oracle/oradata/jigi/example01.dbf OFFLINE
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/jigi/redo01.log 50 INACTIVE YES 4
2 /app/oracle/oradata/jigi/redo02.log 50 INACTIVE YES 5
3 /app/oracle/oradata/jigi/redo03.log 50 CURRENT NO 6
SYS> alter database rename file '/app/oracle/oradata/jigi/redo01.log' to '/home/data/temp2/redo01.log';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/redo02.log' to '/home/data/temp2/redo02.log';
Database altered.
SYS> alter database rename file '/app/oracle/oradata/jigi/redo03.log' to '/home/data/temp2/redo03.log';
Database altered.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /home/data/temp2/redo01.log 50 INACTIVE YES 4
2 /home/data/temp2/redo02.log 50 INACTIVE YES 5
3 /home/data/temp2/redo03.log 50 CURRENT NO 6
SYS> recover database until time '2015-11-13:00:42:58'; --->>> 장애이전 시점으로 복구함
Media recovery complete.
SYS> alter database open resetlogs;
Database altered.
SYS> select * from scott.tt830;
NO
----------
1
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/control01.ctl
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
------------------------- -------- ---------- --------------------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/mydream/example01.dbf
SYSAUX 540 AVAILABLE /app/oracle/oradata/mydream/sysaux01.dbf
SYSTEM 710 AVAILABLE /app/oracle/oradata/mydream/system01.dbf
TEST2 5 AVAILABLE /app/oracle/oradata/mydream/test02_recv.dbf
UNDOTBS1 90 AVAILABLE /app/oracle/oradata/mydream/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/mydream/users01.dbf
6 개의 행이 선택되었습니다.
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/control01.ctl
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/mydream/redo01.log 50 INACTIVE YES 16
2 /app/oracle/oradata/mydream/redo02.log 50 INACTIVE YES 17
3 /app/oracle/oradata/mydream/redo03.log 50 CURRENT NO 18
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !cp /app/oracle/oradata/mydream/* /data/backup/close/ ----->>>> Close Backup
SYS> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SYS> create table scott.tt840 (no number) tablespace users;
테이블이 생성되었습니다.
SYS> insert into scott.tt840 values (1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') recover_date from dual; --->>>> 복구시점 확인
RECOVER_DATE
-------------------
2014-12-31:14:36:30
SYS> select * from scott.tt840;
NO
----------
1
SYS> drop table scott.tt840 purge; ----->>> 잘못된 table drop, 장애
테이블이 삭제되었습니다.
SYS> select * from scott.tt840;
select * from scott.tt840
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !mkdir /data/temp3 ---->>>> 데이터 복원할 임시경로
SYS> !cp /data/backup/close/*.dbf /data/temp3/ ---->>> 장애이전 시점 데이터 파일
SYS> !cp /app/oracle/oradata/mydream/*.ctl /data/temp3/ ----->>> 장애이후 시점 컨트롤 파일
SYS> !cp /app/oracle/oradata/mydream/*.log /data/temp3/ ----->>> 장애이후 시점 리두로그 파일
-- 파라미터 파일에서 control file의 위치를 변경합니다.(여기서는 /data/temp3으로 변경)
SYS> !vi /app/oracle/product/11g/dbs/initmydream.ora
SYS> startup mount;
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
SYS> @con
NAME
--------------------------------------------------
/data/temp3/control01.ctl
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/system01.dbf
/app/oracle/oradata/mydream/sysaux01.dbf
/app/oracle/oradata/mydream/undotbs01.dbf
/app/oracle/oradata/mydream/users01.dbf
/app/oracle/oradata/mydream/example01.dbf
/app/oracle/oradata/mydream/test02_recv.dbf
6 개의 행이 선택되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/system01.dbf' to '/data/temp3/system01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/sysaux01.dbf' to '/data/temp3/sysaux01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/undotbs01.dbf' to '/data/temp3/undotbs01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/users01.dbf' to '/data/temp3/users01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/example01.dbf' to '/data/temp3/example01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/test02_recv.dbf' to '/data/temp3/test02_recv.dbf';
데이타베이스가 변경되었습니다.
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/data/temp3/system01.dbf
/data/temp3/sysaux01.dbf
/data/temp3/undotbs01.dbf
/data/temp3/users01.dbf
/data/temp3/example01.dbf
/data/temp3/test02_recv.dbf
6 개의 행이 선택되었습니다.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/mydream/redo01.log 50 INACTIVE YES 16
2 /app/oracle/oradata/mydream/redo02.log 50 INACTIVE YES 17
3 /app/oracle/oradata/mydream/redo03.log 50 CURRENT NO 18
SYS> alter database rename file '/app/oracle/oradata/mydream/redo01.log' to '/data/temp3/redo01.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo02.log' to '/data/temp3/redo02.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo03.log' to '/data/temp3/redo03.log';
데이타베이스가 변경되었습니다.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /data/temp3/redo01.log 50 INACTIVE YES 16
2 /data/temp3/redo02.log 50 INACTIVE YES 17
3 /data/temp3/redo03.log 50 CURRENT NO 18
SYS> recover database until time '2014-12-31:14:36:30'; ---->>>>> 장애이전 시점으로 복구
매체 복구가 완료되었습니다.
SYS> alter database open resetlogs;
데이타베이스가 변경되었습니다.
SYS> select * from scott.tt840;
NO
----------
1
SYS> create tablespace test datafile '/app/oracle/oradata/mydream/test01.dbf' size 10m;
테이블스페이스가 생성되었습니다.
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
------------------------- -------- ---------- --------------------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/mydream/example01.dbf
SYSAUX 540 AVAILABLE /app/oracle/oradata/mydream/sysaux01.dbf
SYSTEM 710 AVAILABLE /app/oracle/oradata/mydream/system01.dbf
TEST 10 AVAILABLE /app/oracle/oradata/mydream/test01.dbf
UNDOTBS1 90 AVAILABLE /app/oracle/oradata/mydream/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/mydream/users01.dbf
6 개의 행이 선택되었습니다.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/mydream/redo01.log 50 INACTIVE YES 16
2 /app/oracle/oradata/mydream/redo02.log 50 INACTIVE YES 17
3 /app/oracle/oradata/mydream/redo03.log 50 CURRENT NO 18
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/control01.ctl
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS>
SYS>
SYS> !cp /app/oracle/oradata/mydream/* /data/backup/close/ ----->>> Close Backup
SYS> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SYS> create table scott.tt850 (no number) tablespace test;
테이블이 생성되었습니다.
SYS> insert into scott.tt850 values (1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> drop tablespace test including contents and datafiles; ----->>> 잘못된 drop tablespace, 장애
테이블스페이스가 삭제되었습니다.
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
------------------------- -------- ---------- --------------------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/mydream/example01.dbf
SYSAUX 540 AVAILABLE /app/oracle/oradata/mydream/sysaux01.dbf
SYSTEM 710 AVAILABLE /app/oracle/oradata/mydream/system01.dbf
UNDOTBS1 90 AVAILABLE /app/oracle/oradata/mydream/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/mydream/users01.dbf
SYS> select * from scott.tt850;
select * from scott.tt850
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS>
SYS>
SYS> !mkdir /data/temp6
SYS> !cp /data/backup/close/*.dbf /data/temp6/
SYS> !cp /data/backup/close/*.ctl /data/temp6/ -->>>> 복사할 때 유의, 장애이전 controlfile을 복원함(테이블스페이스 정보가 존재함)
SYS> !cp /app/oracle/oradata/mydream/*.log /data/temp6/ --->>>> 장애이후 시점 리두로그 파일 복원
-- 파라미터 파일에서 control file의 위치를 변경합니다.(여기서는 /data/temp6으로 변경)
SYS> !vi /app/oracle/product/11g/dbs/initmydream.ora
SYS> startup mount;
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
SYS>
SYS>
SYS> @con
NAME
--------------------------------------------------
/data/temp6/control01.ctl
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/system01.dbf
/app/oracle/oradata/mydream/sysaux01.dbf
/app/oracle/oradata/mydream/undotbs01.dbf
/app/oracle/oradata/mydream/users01.dbf
/app/oracle/oradata/mydream/example01.dbf
/app/oracle/oradata/mydream/test01.dbf
6 개의 행이 선택되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/system01.dbf' to '/data/temp6/system01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/sysaux01.dbf' to '/data/temp6/sysaux01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/undotbs01.dbf' to '/data/temp6/undotbs01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/users01.dbf' to '/data/temp6/users01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/example01.dbf' to '/data/temp6/example01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/test01.dbf' to '/data/temp6/test01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo01.log' to '/data/temp6/redo01.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo02.log' to '/data/temp6/redo02.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo03.log' to '/data/temp6/redo03.log';
데이타베이스가 변경되었습니다.
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/data/temp6/system01.dbf
/data/temp6/sysaux01.dbf
/data/temp6/undotbs01.dbf
/data/temp6/users01.dbf
/data/temp6/example01.dbf
/data/temp6/test01.dbf
6 개의 행이 선택되었습니다.
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /data/temp6/redo01.log 50 INACTIVE YES 16
2 /data/temp6/redo02.log 50 INACTIVE YES 17
3 /data/temp6/redo03.log 50 CURRENT NO 18
-- alert log file을 확인하여 tablespace 삭제시점을 알아낸다.
-- 아래는 로그파일 내용
Wed Dec 31 14:56:57 2014
drop tablespace test2 including contents and datafiles
Deleted file /data/temp3/test02_recv.dbf
Completed: drop tablespace test2 including contents and datafiles
SYS> recover database until time '2014-12-31:14:56:55' using backup controlfile; --->> 위에서 알아낸 장애시간 이전 시간으로 복구
ORA-00279: 변환 1154458가 (12/31/2014 16:44:13에서 생성된) 스레드 1에 필요합니다
ORA-00289: 제안 : /app/oracle/flash_recovery_area/MYDREAM/archivelog/2014_12_31/o1_mf_1_18_bb79vbpk_.arc
ORA-00280: 변환 1154458(스레드 1를 위한)가 시퀀스번호 18에 있습니다
로그 지정: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp6/redo03.log --->>>> 시퀀스번호 18이 3번 로그파일에 있으므로 해당 로그파일 입력
로그가 적용되었습니다.
매체 복구가 완료되었습니다.
SYS> alter database open resetlogs;
데이타베이스가 변경되었습니다.
SYS> select * from scott.tt850;
NO
----------
1
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
------------------------- -------- ---------- --------------------------------------------------
EXAMPLE 100 AVAILABLE /app/oracle/oradata/mydream/example01.dbf
SYSAUX 540 AVAILABLE /app/oracle/oradata/mydream/sysaux01.dbf
SYSTEM 710 AVAILABLE /app/oracle/oradata/mydream/system01.dbf
UNDOTBS1 90 AVAILABLE /app/oracle/oradata/mydream/undotbs01.dbf
USERS 5 AVAILABLE /app/oracle/oradata/mydream/users01.dbf
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /app/oracle/oradata/mydream/redo01.log 50 INACTIVE YES 16
2 /app/oracle/oradata/mydream/redo02.log 50 INACTIVE YES 17
3 /app/oracle/oradata/mydream/redo03.log 50 CURRENT NO 18
SYS> @con
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/control01.ctl
SYS> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !cp /app/oracle/oradata/mydream/* /data/backup/close/ ---->>>> Close Backup
SYS> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SYS> create tablespace ts_new datafile '/app/oracle/oradata/mydream/ts_new01.dbf' size 10M;
테이블스페이스가 생성되었습니다.
SYS> create table scott.tt900 (no number) tablespace ts_new;
테이블이 생성되었습니다.
SYS> insert into scott.tt900 values (1);
1 개의 행이 만들어졌습니다.
SYS> commit;
커밋이 완료되었습니다.
SYS> select * from scott.tt900;
NO
----------
1
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') from dual; ---->>>> 복구시점 확인(alert log 확인해도 됨)
TO_CHAR(SYSDATE,'YY
-------------------
2014-12-31:17:09:57
SYS>
SYS>
SYS> drop tablespace ts_new including contents and datafiles; ---->>> 잘못된 drop tablespace, 장애발생
테이블스페이스가 삭제되었습니다.
SYS> select * from scott.tt900;
select * from scott.tt900
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SYS> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SYS> !mkdir /data/temp7
SYS> !cp /data/backup/close/*.dbf /data/temp7/ ---->>> 장애이전 시점 데이터 파일을 복원
SYS> !cp /data/backup/close/*.ctl /data/temp7/ ---->>>> 장애이전 시점 컨트롤파일을 복원
SYS> !cp /app/oracle/oradata/mydream/*.log /data/temp7/ --->>> 장이이후 시점 리두로그 파일을 복원
-- 파라미터 파일에서 control file의 위치를 변경합니다.(여기서는 /data/temp7으로 변경)
SYS> !vi /app/oracle/product/11g/dbs/initmydream.ora
SYS> startup mount;
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 619360256 bytes
Fixed Size 1338280 bytes
Variable Size 461374552 bytes
Database Buffers 150994944 bytes
Redo Buffers 5652480 bytes
데이터베이스가 마운트되었습니다.
SYS> @con
NAME
--------------------------------------------------
/data/temp7/control01.ctl
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/app/oracle/oradata/mydream/system01.dbf
/app/oracle/oradata/mydream/sysaux01.dbf
/app/oracle/oradata/mydream/undotbs01.dbf
/app/oracle/oradata/mydream/users01.dbf
/app/oracle/oradata/mydream/example01.dbf
SYS> alter database rename file '/app/oracle/oradata/mydream/system01.dbf' to '/data/temp7/system01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/sysaux01.dbf' to '/data/temp7/sysaux01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/undotbs01.dbf' to '/data/temp7/undotbs01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/users01.dbf' to '/data/temp7/users01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/example01.dbf' to '/data/temp7/example01.dbf';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo01.log' to '/data/temp7/redo01.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo02.log' to '/data/temp7/redo02.log';
데이타베이스가 변경되었습니다.
SYS> alter database rename file '/app/oracle/oradata/mydream/redo03.log' to '/data/temp7/redo03.log';
데이타베이스가 변경되었습니다.
SYS> select name from v$datafile; --->>>> te_new Tablespace는 존재하지 않음
NAME
--------------------------------------------------
/data/temp7/system01.dbf
/data/temp7/sysaux01.dbf
/data/temp7/undotbs01.dbf
/data/temp7/users01.dbf
/data/temp7/example01.dbf
SYS> @log
GROUP# MEMBER MB STATUS ARCHIVED SEQUENCE#
------ ---------------------------------------- ---------- ---------- ---------- ----------
1 /data/temp7/redo01.log 50 INACTIVE YES 16
2 /data/temp7/redo02.log 50 INACTIVE YES 17
3 /data/temp7/redo03.log 50 CURRENT NO 18
SYS> recover database until time '2014-12-31:17:09:57' using backup controlfile; ---->>> 복구시도
ORA-00279: 변환 1155665가 (12/31/2014 17:03:13에서 생성된) 스레드 1에 필요합니다
ORA-00289: 제안 : /app/oracle/flash_recovery_area/MYDREAM/archivelog/2014_12_31/o1_mf_1_18_bb79vbpk_.arc
ORA-00280: 변환 1155665(스레드 1를 위한)가 시퀀스번호 18에 있습니다
로그 지정: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp7/redo03.log ---->>> 3번 리두로그 파일명 입력
ORA-00283: 복구 세션이 오류로 인하여 취소되었습니다
ORA-01244: 매체 복구에서 이름이 지정되지 않은 데이터 파일을 제어 파일에 추가했습니다.
ORA-01110: 6 데이터 파일: '/app/oracle/oradata/mydream/ts_new01.dbf'
ORA-01112: 매체 복구가 시작되지 않았습니다.
SYS> select name from v$datafile; ---->>> 이름없는 데이터 파일이 존재하는 것을 확인할 수 있음
NAME
--------------------------------------------------
/data/temp7/system01.dbf
/data/temp7/sysaux01.dbf
/data/temp7/undotbs01.dbf
/data/temp7/users01.dbf
/data/temp7/example01.dbf
/app/oracle/product/11g/dbs/UNNAMED00006 ---->>>> 아카이브 및 리두로그를 통해 복구하다가 생겨난 파일
6 개의 행이 선택되었습니다.
SYS> alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006'
as '/data/temp7/ts_new01.dbf'; --->>> control file에 등록하고, 데이터 파일을 생성
데이타베이스가 변경되었습니다.
SYS> select name from v$datafile;
NAME
--------------------------------------------------
/data/temp7/system01.dbf
/data/temp7/sysaux01.dbf
/data/temp7/undotbs01.dbf
/data/temp7/users01.dbf
/data/temp7/example01.dbf
/data/temp7/ts_new01.dbf
6 개의 행이 선택되었습니다.
SYS> recover database until time '2014-12-31:17:09:57' using backup controlfile; --->>> 다시 복구시도
ORA-00279: 변환 1155825가 (12/31/2014 17:07:59에서 생성된) 스레드 1에 필요합니다
ORA-00289: 제안 : /app/oracle/flash_recovery_area/MYDREAM/archivelog/2014_12_31/o1_mf_1_18_bb79vbpk_.arc
ORA-00280: 변환 1155825(스레드 1를 위한)가 시퀀스번호 18에 있습니다
로그 지정: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp7/redo03.log ---->> 시쿼스 번호에 맞는 리두로그 파일명 입력
로그가 적용되었습니다.
매체 복구가 완료되었습니다.
SYS> alter database open resetlogs;
데이타베이스가 변경되었습니다.
SYS> @dd
TABLESPACE_NAME MB STATUS FILE_NAME
------------------------- -------- ---------- --------------------------------------------------
EXAMPLE 100 AVAILABLE /data/temp7/example01.dbf
SYSAUX 540 AVAILABLE /data/temp7/sysaux01.dbf
SYSTEM 710 AVAILABLE /data/temp7/system01.dbf
TS_NEW 10 AVAILABLE /data/temp7/ts_new01.dbf
UNDOTBS1 90 AVAILABLE /data/temp7/undotbs01.dbf
USERS 5 AVAILABLE /data/temp7/users01.dbf
6 개의 행이 선택되었습니다.
SYS> select * from scott.tt900;
NO
----------
1