※ 현재 undo 내용을 보는 명령어
SQL> show parameter undo;
※ undo의 특징 : 여러개의 undo tablespace가 있을수 있지만, 사용 할 수 있는것은 한개
undo - 자동관리 : auto : 운영
- 수동관리 : manual : 장애고칠때
: 파라미터파일 - 관련파라미터 : undo_managment = auto 또는 manual
- 언두가 지워지면, auto일때 안켜짐(오라클이 undo파일 찾아다님)
manual 일때 켜짐(오라클은 사용자에게 맡기고 신경안씀)
※ 언두 에러 났을때 해결
: DB끄고(undo는 offline안됨) 파라미터파일 manual로 바꾸고 DB올려서, UNDO2번 만들어서 스위칭 시키고, 파라미터 원래대로 auto로 돌린다.
(참고 : 테이블스페이스 안에 테이블(테이블의 호적상 이름 = 세그먼트) → 언두테이블=언두세그먼트)
1번에 A사용자가 DML을 일으키는 중 장애가 일어나서 DATAFILE이 지워져서 DB가 죽음.
undo1을 새로 만들어서 스위칭 시키고 기존 undotbs1는 안쓰기 때문에 지우려 한다.
그러나 A사용자가 1번 언두스페이스 사용중이라 undotbs1을 지울 수 없다.
(※ undo tablespace 지우려면 안의 undo segment를 아무도 안쓰고 있어야 한다.)
쓰던 흔적이 남아 있어서 안지워지는 경우가 많다.
강제로 언두 세그먼트를 없애야 한다.
파라미터파일에, 히든파라메터 _offline_rollback_segments=(세그먼트이름,여러개가능)
추가해주고 껐다 켜고 지우기 시도하면 지워진다.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습1 시작
undo tablespace 장애
1. 현재상황확인
SQL> @df
SQL> show parameter undo;
2. (다른창) scott 계정으로 DML 수행
SQL> con scott/tiger
SQL> create table utest01 (no number);
SQL> insert into utest01 values (1);
3. sys 계정에서 rollback segment 확인 후 장애 발생
SQL> select s.sid, s.serial#, s.username, r.name "ROLLBACK SEG"
2 from v$session s, v$transaction t, v$rollname r
3 where s.taddr=t.addr
4 and t.xidusn = r.usn;
SQL> save ud.sql
SQL> !rm -fr /home/oracle/ordata/testdb/undotbs01.dbf
운영중인 undo 테이블스페이스 삭제 - 장애발생
SQL> create undo tablespace undo01
2 datafile '/home/oracle/oradata/testdb/undo01.dbf' size 10M;
SQL> alter system set undo_tablespace=undo01;
SQL> drop tablespace undotbs1;
위에 조회했을때 사용중이던 세그먼트가 있어서 삭제안됨
SQL> show parameter undo;
테이블스페이스 새로 만든것으로 바뀌어 있음
SQL> shutdown immediate;
SQL> shutdown abort;
$ vi ~/inittestdb.ora
undo_management=manual
undo_retention=10800
undo_tablespace=UNDO01
_offline_rolback_segments=(_SYSSMU6$)
SQL> startup
MOUNT까지 올라감
SQL> alter database datafile '/home/oracle/oradata/testdb/undotbs01.dbf' offline drop;
SQL> alter database open;
SQL> show parameter undo;
SQL> drop tablespace undotbs1 including contents and datafiles;
SQL> sutdown immediate;
$ vi ~/inittestdb.ora
undo_management=auto → 변경
undo_retention=10800
undo_tablespace=UNDO01
#_offline_rolback_segments=(_SYSSMU6$) → 주석처리
SQL> startup
SQL> show parameter undo;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습1 끝
- NO archive log mode 에서는 할수 있을수도, 없을수도 있다.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습2 시작
NO archive log mode 에서 undo tablespace의 DATAFILE이 삭제된 장애상황
: no archive log로 바꾸고 작업
: SQL> alter database noarchivelog;
1. 현재 파라미터 언두상황
undo_management=auto
undo_tablespace=undotbs1
2. 장애발생
SQL> startup
SQL> selet tablespace_name, bytes/1024/1024 MB, file_name
2 from dba_data_files;
SQL> save dd.sql
SQL> archive log list;
SQL> !rm -fr /home/oracle/oradata/testdb/undotbs01.dbf
장애발생
SQL> create table scott.tt01 (no number) tablespace example;
SQL> insert into scott.tt01 values (1);
SQL> alter system switch logfile;
SQL> /
SQL> /
ORA-03113: end-of-file on communication channel
DB 강제 종료
3. 장애 확인
SQL> startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
쓰고 있는중에 강제로 DB가 종료되어서 나타나는 현상
sqlplus 새로 열면 된다.
SQL> exit
$ sqlplus / as sysdba;
SQL> startup
MOUNT까지 올라감
4. 파라미터 파일 undo 관련 설정 수동모드로 수정
SQL> shutdown abort;
$ vi ~/inittestdb.ora
undo_management=manual
_offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
→ 어떤것을 쓰고 있는지모르니까 10개 다 지운다: 언두세그먼트 하나당 기본적으로 10개쓴다.
5. 재시작 후 복구
SQL> startup mount;
SQL> select name, status from v$datafile;
SQL> alter database datafile '/home/oracle/oradata/testdb/undotbs01.dbf' offline drop;
SQL> alter database open;
OPEN상태
6. 신규 undo tablespace 생성 후 반영
SQL> create undo tablespace undo
2 datafile '/home/oracle/oradata/testdb/undo01.dbf' size 10M;
SQL> shutdown immediate;
$ vi ~/inittestdb.ora
undo_management=auto
undo_tablespace=undo → 신규 undo로 변경
SQL> startup
SQL> show parameter undo;
7. 장애난 undo tablespace 삭제
SQL> drop tablespace undotbs1 including contents and datafiles;
현재 사용중인 세그먼트 있다고 삭제안됨
SQL> select segment_name, owner, tablespace_name, status from dba_rollback_segs;
SQL> shutdown immediate;
$ vi ~/inittestdb.ora
undo_management=auto
undo_tablespace=undo
_offline_rollback_segments=(_SYSSMU11$)
SQL> startup
SQL> drop tablespace undotbs1 including contents and datafiles;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습2 끝
'Oracle > Oracle - 백업&복구' 카테고리의 다른 글
백업&복구 14 - Supplemental logging / log miner - log 분석해서 장애 시간 알아내기 (0) | 2012.02.09 |
---|---|
백업&복구 13 - Redo log의 생성 및 기록 원리 (0) | 2012.02.08 |
백업&복구 11 - drop tablespace 복구 / log miner 간단 사용 (0) | 2012.02.07 |
백업&복구 Extra - 스크립트 : datafile rename 작업 편하게 하기 / 로그마이너 (0) | 2012.02.07 |
백업&복구 10 - 불완전 복구 실습 - drop tablespace로 잘못 삭제된 tablespace 복구 (0) | 2012.02.05 |