(상황)
undo01.dbf → undotbs.dbf 로 변경하려고 시도 했다가 다시 원상복구 한 상황
#) 백업본이 있는지 확인.
=> 만일을 대비해서 backup file은 있어야 한다..!
SQL> !
[oracle1@oracle ~]$ cd backup/noarch/20240110/
[oracle1@oracle 20240110]$ ls
control01.ctl redo02.log redo08.log system01.dbf users01.dbf
example01.dbf redo03.log redo09.log temp01.dbf
redo01.log redo07.log sysaux01.dbf undo01.dbf
#) instance 상태 확인하려고 하는데 확인이 되지 않는다.
=> 급하게 lsnrctl status 확인.
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0
역시나.. 리스너가 open 되어 있지 않는다.
전에도 리스너가 open 되어 있지 않아 startup해서 open한 적이 있어 진행한 적이 있었다.
얘는 리스너의 괄호가 안닫혀서 오류가 난 것이다.
#) listener 있는 곳으로 가서 수정해서 start 해준다!
[oracle1@oracle ~]$ cd $ORACLE_HOME/network/admin
[oracle1@oracle admin]$ ls
listener.bak listener.ora samples shrept.lst tnsnames.ora
[oracle1@oracle admin]$ vi listener.ora
#) 변경해줄 위치
[oracle1@oracle ~]$ cd /u01/app/oracle/oradata/ora11g/
[oracle1@oracle ora11g]$ ls
control01.ctl redo02.log redo08.log system01.dbf users01.dbf
example01.dbf redo03.log redo09.log temp_new01.dbf
redo01.log redo07.log sysaux01.dbf undo01.dbf
[oracle1@oracle ora11g]$ cd
[oracle1@oracle ~]$ exit
exit
#) undo01.dbf 삭제
SQL> ! rm /u01/app/oracle/oradata/ora11g/undo01.dbf
#) checkpoint 발생시켜준다!
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 4337
Session ID: 137 Serial number: 37
#) DB 올려준다!
=> 당연히 오류가 발생할 것이다..!
SQL> startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
#) 다시 접속을 해주면서 DB를 올려준다
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 440402980 bytes
Database Buffers 264241152 bytes
Redo Buffers 5419008 bytes
Database mounted. => mount 단계까지 밖에 올라오지 않는다!
=> undo01.dbf 파일을 삭제했기 때문이다.
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/u01/app/oracle/oradata/ora11g/undo01.dbf'
#) data file 중 undo01.dbf 이 OFFLINE 으로 변경해주자!
SQL> select name, status from v$datafile;
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/ora11g/system01.dbf SYSTEM
/u01/app/oracle/oradata/ora11g/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/users01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/example01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/undo01.dbf ONLINE
#) drop 파일 번호로 drop 해주자.
SQL> alter database datafile 9 offline for drop;
Database altered.
#) undo01.dbf 파일 확인
SQL> select name, status from v$datafile;
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/ora11g/system01.dbf SYSTEM
/u01/app/oracle/oradata/ora11g/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/users01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/example01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/undo01.dbf RECOVER
#) DB open 해주자
SQL> alter database open;
Database altered.
#) 제대로 올라왔는지 hr계정에 있는 table 조회해보기.
SQL> select count(*) from hr.employees;
COUNT(*)
----------
107
#) undotbs 생성해주자!
=> 엥..? 뭐지..? 시나리오대로라면.. 되어야 하는데 왜 못보던 오류니..?
SQL> CREATE UNDO TABLESPACE undotbs DATAFILE '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' SIZE 10M AUTOEXTEND ON;
CREATE UNDO TABLESPACE undotbs DATAFILE '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' SIZE 10M AUTOEXTEND ON
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 9 cannot be read at this time
ORA-01110: data file 9: '/u01/app/oracle/oradata/ora11g/undo01.dbf'
=> ORA-00604 : 순환 SQL 레벨 1에 오류가 발생?
=> ORA-00376 : data file 읽을수 없다..?
=> ORA-01110 : data file 9의 문제..? drop 했으니 문제지..!!
#) 코드가 잘못 되었나..? 다시 써본다
=> 그래도 동일한 오류번호이다.. 그러지마라.. 나 운다..
SQL> create undo tablespace undotbs
2 datafile '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' size 10m;
create undo tablespace undotbs
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 9 cannot be read at this time
ORA-01110: data file 9: '/u01/app/oracle/oradata/ora11g/undo01.dbf'
#) 괜히 undo file을 바라본다..
SQL> show parameter undo
#) OS 로 나가서 확인해보자.. 모든..!
SQL> !
[oracle1@oracle ~]$ cd /u01/app/oracle/oradata/ora11g/
[oracle1@oracle ora11g]$ ls
control01.ctl redo01.log redo03.log redo08.log sysaux01.dbf temp_new01.dbf
example01.dbf redo02.log redo07.log redo09.log system01.dbf users01.dbf
=> 삭제되었는데.. 경로가 잘못 되었는가..?
[oracle1@oracle ora11g]$ pwd
/u01/app/oracle/oradata/ora11g
#) 다시 oracle 로 접속..
[oracle1@oracle ora11g]$ sqlplus / as sysdba
#) 다시 undo 를 바라본다.. 뭐가 잘못이니..?
SQL> show parameter undo
SQL> !
#) OS 에 있는 initora11g.ora를 열어본다..!
[oracle1@oracle ora11g]$ cd $ORACLE_HOME/dbs
[oracle1@oracle dbs]$ vi initora11g.ora => 뭐가 없다..
#) oracle 접속
[oracle1@oracle dbs]$ exit
exit
#) 시간을 지났으니 다시 undo 생성하는 거를 도전..!
SQL> CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/app/oracle/oradata/ora11g/undo1.dbf' SIZE 10M AUTOEXTEND ON; 2
CREATE UNDO TABLESPACE undo1
*
ERROR at line 1:
ORA-01543: tablespace 'UNDO1' already exists
=> 아이쿠..! unod1이 아닌데..
#) undotbs 생성
SQL> CREATE UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' SIZE 10M AUTOEXTEND ON; 2
CREATE UNDO TABLESPACE undotbs
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 9 cannot be read at this time
ORA-01110: data file 9: '/u01/app/oracle/oradata/ora11g/undo01.dbf'
=> 하.. 그러지 말자..
#) 안되겠다! undo1 다시 백업해야겠다..!
=> pfile 로 startup 하기!
SQL> startup pfile='$ORACLE_HOME/dbs/initora11g.ora'
ORA-01081: cannot start already-running ORACLE - shut it down first
=> shutdown부터.. 해야지!!
#) 정상적인 종료하고 startup pfile로 열기!
=> 시나리오대로 진행만 하면 돼..!
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile='$ORACLE_HOME/dbs/initora11g.ora'
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 440402980 bytes
Database Buffers 264241152 bytes
Redo Buffers 5419008 bytes
ORA-00214: control file '/u01/app/oracle/oradata/ora11g/control01.ctl' version
1740 inconsistent with file
'/u01/app/oracle/fast_recovery_area/ora11g/control02.ctl' version 1222
=> 없으니까 control file까지 말썽이구나..
#) OS 로 나와서 없는 파일 다시 확인하자!
SQL> !
[oracle1@oracle ora11g]$ ls
control01.ctl redo01.log redo03.log redo08.log sysaux01.dbf temp_new01.dbf
example01.dbf redo02.log redo07.log redo09.log system01.dbf users01.dbf
[oracle1@oracle ora11g]$ exit
exit
#) 다시 정상적으로 종료하려는데 이마져도 힘들겠지만.. 종료는 된다.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> exit => OS 로 아예 나오기
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle1@oracle ora11g]$ cd
#) backup 파일 있는 위치로 이동
[oracle1@oracle ~]$ cd backup/noarch/
[oracle1@oracle noarch]$ ls
20240110 example01.dbf redo03.log redo09.log temp01.dbf
20240111 redo01.log redo07.log sysaux01.dbf undo01.dbf
control01.ctl redo02.log redo08.log system01.dbf users01.dbf
[oracle1@oracle noarch]$ pwd
/home/oracle1/backup/noarch
#) 옮겨야 하는 곳을 확인해서 cp해주자..! 이 방법뿐이다
[oracle1@oracle noarch]$ cp -av undo01.dbf /u01/app/oracle/oradata/ora11g/
‘undo01.dbf’ -> ‘/u01/app/oracle/oradata/ora11g/undo01.dbf’
[oracle1@oracle noarch]$ cd /u01/app/oracle/oradata/ora11g/
[oracle1@oracle ora11g]$ ls
control01.ctl redo02.log redo08.log system01.dbf users01.dbf
example01.dbf redo03.log redo09.log temp_new01.dbf
redo01.log redo07.log sysaux01.dbf undo01.dbf
#) 여기서 oracle 접속하자.
[oracle1@oracle ora11g]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 11 03:29:50 2024
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
#) DB startup 해보자..! (제발..)
SQL> startup
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 440402980 bytes
Database Buffers 264241152 bytes
Redo Buffers 5419008 bytes
Database mounted.
Database opened.
#) data file 상태 확인
=> undo01.dbf 상태 제일 중요
SQL> select name, status from v$datafile;
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ora11g/undo01.dbf
RECOVER => 왜!! ONLINE 이 아냐ㅠㅠ
#) ALTER로 해보자.. 침착하게..
SQL> alter database datafile '/u01/app/oracle/oradata/ora11g/undo01.dbf ' online;
alter database datafile '/u01/app/oracle/oradata/ora11g/undo01.dbf ' online
*
ERROR at line 1:
ORA-01516: nonexistent log file, data file, or temporary file
"/u01/app/oracle/oradata/ora11g/undo01.dbf "
=> ORA-01516 : 존재하지 않는 로그 파일, 데이터 피일, 임시 파일로 변경하려고 하나 알려지지 않거나 지원하지 않는 파일이라고..?
#) 심플하게 써야 하뉘..?
SQL> alter tablespace undo1 online;
alter tablespace undo1 online
*
ERROR at line 1:
ORA-01190: control file or data file 9 is from before the last RESETLOGS
ORA-01110: data file 9: '/u01/app/oracle/oradata/ora11g/undo01.dbf'
=> 다른 오류넹..? 아하
=> 컨트롤 파일 또는 데이터 파일 이 마지막 resetlogs 보다 이전 상태이다..?
#) DB 정상적인 종료를 다시한다..!
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
#) DB를 mount 단계까지 올려보자..!
SQL> startup mount
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 440402980 bytes
Database Buffers 264241152 bytes
Redo Buffers 5419008 bytes
Database mounted.
#) resetlogs 로 open을 해보자!
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
=> 이또한 오류.. ㅎㅎ
=> recovery 하란다.. 그랫! 해줘야지!
#) recover 해야 하는 파일 올려준다.(해탈..)
SQL> RECOVER DATAFILE '/u01/app/oracle/oradata/ora11g/undo01.dbf';
Media recovery complete.
=> 된다..!!
#) 얼른 DB 올려!!
SQL> alter database open;
#) data file 확인하자!
=> OFFLINE 모드야!!
SQL> select name, status from v$datafile;
#) online 로 후다닥 올려!!
SQL> alter tablespace undo1 online;
#) 다시 data file 확인해야지!
SQL> select name, status from v$datafile;
#) 드디어.. 다했다..!
=> 휴.. 다행이다.. 원상복구도 장애복구처럼 일이구나.. ㅎ
(혹시 모르니 DB를 정상적으로 종료했다가 다시 open 하자..!)
'Backup > Noarchive Log Mode' 카테고리의 다른 글
운영 중에 OFFLINE 되는 데이터 파일 손상되었을 경우 (0) | 2024.01.12 |
---|---|
NOARCHIVE LOG MODE, ARCHIVE LOG MODE (0) | 2024.01.12 |
240111 Backup / Noarchive Log Mode _ temp file 손상 되었을 경우 복구 방식 (0) | 2024.01.11 |
backup file에 redo log file(옵션 파일)이 없을 경우 (1) | 2024.01.11 |
데이터 이관 작업 전 상태로 원상 복구 (0) | 2024.01.11 |