본문 바로가기

빅데이터과정/WORKSHOP 2

#27_140721_WSHOP2_NON CRITICAL FILE 복구

728x90

# NON CRITICAL FILE 복구





파일의 종류 2가지
1.     cretical file
data file (system tablespace, undo tablespace)
controlfile
redo log file 중에서 상태가 current, active 인것

2.     non crtical file
data file 들 중에서 non system file
temp file
redo log file 중에서 상태가 inactive, unused


●  SYSTEM 테이블 스페이스
 - Data Dictionary 정보, Stored Procedure의 정의 Package, Trigger 포함
 - SYSTEM ROLLBACK SEGMENT 포함
 - 사용자 데이터 포함 가능

● NON-SYSTEM 테이블 스페이스
 - 보다 융통성 있게 데이터베이스를 관리
 - Temporary segment , Application Data Segment, Index Segment, User Data Segment
 - Rollback : 특별한 성격의 NON-SYSTEM 테이블스페이스이며 사용중인 Rollback Segment 가 있으면 off-line, 읽기전용으로 전환 할수 없으며, SYSTEM 테이블 스페이스 처럼 복구 되어야 한다. 다시 말하면 복구를 하기위해 전체 데이터 베이스를 off-line하여 복구해야한다.



  • NON CRITICAL FILE 복구



data file들 중에서 non system file(index file) 들이 깨졌을 때 복구

SQL> create tablespace ts100
datafile /home/oracle/ts100.dbf’ size 20m;
SQL> connect scott/tiger
SQL> create index emp_sal on emp(sal) tablespace ts100;
SQL> select index_name, tablespace_name from user_indexes;
SQL> startup
- tablespace에 대해서 오류를 발생한다
SQL> alter database datafile 6 offlien drop;
- 6번 파일을 controlfile에서 지워 버린다
- system tablespace 또는 undo tablespace는 안된다
SQL> alter database open;
SQL> drop tablespace ts100 including contents and datafiles;




temp file의 역할
정렬작업을 수행하기 위한 임시 저장공간


SQL> select file_name
    from dba_temp_files;
FILE_NAME
-----------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/dbdb/temp01.dbf
[dbdb:dbdb]$ cd /u01/app/oracle/oradata/dbdb/
[dbdb:dbdb]$ rm temp01.dbf
[dbdb:dbdb]$ ls
control01.ctl  example01.dbf  redo01.log  redo03.log    system01.dbf   user06.dbf
control03.ctl  log.sql        redo02.log  sysaux01.dbf  undotbs01.dbf  users01.dbf
[dbdb:dbdb]$ sqlplus sh/sh
SQL> select * from sales
  2  order by promo_id desc, prod_id desc;
select * from sales
ERROR at line 1:
ORA-01116: error in opening database file 201
ORA-01110: data file 201: '/u01/app/oracle/oradata/dbdb/temp01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
temp 파일 손실로 위와 같은 정렬작업이 불가능하다


temp file이 꺠졌을때의 조치방법 2가지
1.     DB를 restart 하면 temp file이 자동으로 생긴다
실제로는 DB를 원하는 때에 올렸다 내렸다 내렸다 할 수가 없다
2.     temp tablespace에 새로운 temp file을 추가한다


SQL> ALTER TABLESPACE temp ADD TEMPFILE
'/u01/app/oracle/oradata/dbdb/temp02.dbf' SIZE 20M;
tablespace temp 새로 생성
SQL> ALTER TABLESPACE temp DROP TEMPFILE
'/u01/app/oracle/oradata/dbdb/temp01.dbf';
기존 tablespace temp drop 시킴





  • 인덱스 재생성



parallel : 병렬로 작업해서 인덱스 생성
nologging : 인덱스 생성시 redo 정보 생성 안함


SQL> create index emp_sal on emp(sal)
  nologging parallel 4;
SQL> select index_name, degree from user_indexes;
INDEX_NAME                     DEGREE
------------------------------ ----------------------------------------
EMP_SAL                        4
SQL> alter index emp_sal parallel 1;

parallel 을 1로 되돌리는 이유는
이상이면 이 인덱스를 사용해서 옵티마이저가 실행계획을 만들 때 실행계획이 올바르지 않을 수 있다. full table scan을 하는게 더 빠른데 무조건 인덱스 스캔으 ㄹ하려고 할 수 있기 때문에 1로 변경해야 한다.

degree가 4라는 이야기는 4명의 프로세서가 도와준다는 의미이고 이러면 full table scan 이 더 빠를수가 있음에도 불구하고 무조건 index scan을 하려고 하기 때문에 성능이 저하될 수 있다.



  • password file 복구



password file이 삭제 됐을 때 복구 방법

1.     password file : 특별한 권한을 가진 유저를 인증해주기 위한 파일특별한 권한은 DB중지와 작동을 할 수 있는 권한을 의미한다

2.     패스워드 파일에 등록된 유저를 확인
SQL> select * from v$pwfile_users;
SQL> select * from v$pwfile_users;
USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
SQL> show parameter remote
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode             string      TIMESTAMP
remote_listener                      string
remote_login_passwordfile            string      EXCLUSIVE
exclusive라는 것은 반드시 password file이 존재해야 특별한 권한을 가진 유저를 인증해 줄 수 있다는 의미이다
remote_os_authent                    boolean     FALSE
remote_os_roles                      boolean     FALSE
result_cache_remote_expiration       integer     0

3.     password file의 위치는(orapwdbdb 파일)
$cd $ORACLE_HOME/dbs
$ls
[dbdb:dbdb]$ cd $ORACLE_HOME/dbs
[dbdb:dbs]$ ls
ed.hup        hc_dbdb.dat  lkDBDB     peshm_DBUA0_0  snapcf_dbdb.f
hc_DBUA0.dat  init.ora     orapwdbdb  peshm_dbdb_0   spfiledbdb.ora
[dbdb:dbs]$ rm orapwdbdb

4.     복구
[dbdb:dbs]$ orapwd file=orapwdbdb password=oracle entries=5
[dbdb:dbs]$ ls -l orapwdbdb
-rw-r----- 1 oracle oinstall 2048 Jul 21 16:02 orapwdbdb
orapwd : 패스워드 파일 생성하는 유틸리티
password=oracle : 패스워드 파일에 등록될 유저들이 사용하 패스워드를 oracle로 한다
entries = 5 : 패스워드 파일에 등록될 유저를 5명으로 제한하겠다