이 단원을 마치면 다음을 수행할 수 있습니다.
➡️ 오라클 데이터베이스에서 발생할 수 있는 Failure 유형 식별
➡️ instance recovery 튜닝 방법 설명
➡️ 체크포인트, 리두 로그 파일 및 아카이브 로그 파일의중요성 파악
➡️ Fast Recovery Area 구성
➡️ ARCHIVELOG 모드 구성
workshop1
-> 첫번째 교재 (1장 ~ 13장) , 두번째 교재 (14장 ~ 17장)
workshop2
-> 첫번째 교재 (1장 ~ 백업과 복구), 두번째 교재
: DBA에게 가장 필수 업무이다. 평상시에 데이터 백업이 잘 되고있는지 확인해야 한다!!
데이터베이스 관리자의 임무는 다음과 같습니다.
➡️ 어느 곳에서나 발생할 수 있는 failure로부터 데이터베이스 보호
➡️ MTBF(Mean time between failure) 늘리기 ->장애와 장애 사이의 간격!
➡️ 중복을 통한 중요 구성 요소 보호 ->백업을 하라는 말!
➡️ MTTR(Mean time to recover) 줄이기 ->복구에 걸리는 시간은 짧을수록 좋다.
➡️ 데이터 손실 최소화
- SQL 문장 에러
- 유저 프로세서 에러
- 네트워크 에러
- 휴먼 에러 (인간의 실수)
- 인스턴스 Failure
- 디스크 손상 또는 파일 손상
💡 가장 낮을 레벨의 장애이다. 쉽게 해결이 가능함!
💡 데이터베이스에 접속한 클라이언트의 PC가 비정상 종료된 경우
사람이 할 일은 없다. 백그라운드 프로세스가 알아서 해줌 -> 낮은레벨의 장애
💡 이것도 dba가 크게 할것은 없다. TA라는 직무가 있다.
💡 SQL 사용자가 실수로 테이블 drop,delete를 한 경우
delete(롤백이나 플래시백), drop은 flashback으로 복구가 가능하다.
오늘의 마지막 문제
HR계정이 가지고 있는 모든 테이블, 인덱스를 Reorg 작업 하기.
테이블 스페이스를 ts200으로 만들고 여기로 hr 계정의 테이블을 모두 move 시키고, 관련된 인덱스들을 모두 rebuild 하기! move된 결과를 캡쳐해서 올리기
1. table space 만들기
HR> create tablespace ts200 datafile '/home/oracle/ts200.dbf' size 300m;
2. table의 이름과 테이블 스페이스가 어디에 있는지 확인
HR @ orcl > select table_name, tablespace_name from user_tables ; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ COUNTRIES EMPLOYEES EXAMPLE REGIONS EXAMPLE DEPARTMENTS EXAMPLE LOCATIONS EXAMPLE JOB_HISTORY EXAMPLE JOBS EXAMPLE
3. HR계정 Index들 VALID 여부 확인
HR @ orcl > select index_name, status from user_indexes ; INDEX_NAME STATUS ------------------------------ -------- JHIST_EMP_ID_ST_DATE_PK VALID JHIST_JOB_IX VALID JHIST_EMPLOYEE_IX VALID JHIST_DEPARTMENT_IX VALID EMP_EMAIL_UK VALID EMP_EMP_ID_PK VALID EMP_DEPARTMENT_IX VALID EMP_JOB_IX VALID EMP_MANAGER_IX VALID EMP_NAME_IX VALID JOB_ID_PK VALID DEPT_ID_PK VALID DEPT_LOCATION_IX VALID LOC_ID_PK VALID LOC_CITY_IX VALID LOC_STATE_PROVINCE_IX VALID LOC_COUNTRY_IX VALID COUNTRY_C_ID_PK VALID REG_ID_PK VALID 19 rows selected.
4. HR 이 가지고 있는 모든 테이블을 example에서 ts200으로 move 시키는 SQL 을 생성하는 스크립트를 만들기 (작은테이블 -> 큰테이블 순으로) 모두 SYS에서 진행 아까는 scott이 dba권한 있어서 된듯함
SQL> exec dbms_stats.gather_schema_stats('HR'); SQL> set pages 400 SQL> -- num_rows 확인한번 해보고 select table_name, num_rows from dba_tables where owner='HR' order by num_rows asc; -- 스크립트 작성 select 'alter table ' || table_name || ' move tablespace ts200; ' from dba_tables where owner='HR' order by num_rows asc; -- 아래 move는 HR에서 실행 'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACETS200;' ------------------------------------------------------------------ alter table REGIONS move tablespace ts200; alter table JOB_HISTORY move tablespace ts200; alter table JOBS move tablespace ts200; alter table LOCATIONS move tablespace ts200; alter table COUNTRIES move tablespace ts200; alter table DEPARTMENTS move tablespace ts200; alter table EMPLOYEES move tablespace ts200; 7 rows selected.
5. 잘 옮겨졌나 확인 (countries table move하는 방법 밑에 추가)
HR @ orcl > select table_name, tablespace_name from user_tables ; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ COUNTRIES LOCATIONS TS200 JOBS TS200 EMPLOYEES TS200 REGIONS TS200 JOB_HISTORY TS200 DEPARTMENTS TS200 -----------------countries table move하는 방법--------------------- HR @ orcl > alter table hr.countries move tablespace ts200; -- 확인하기 HR @ orcl > select index_type, tablespace_name, table_owner, table_name from all_indexes where owner = 'HR' and index_name = 'COUNTRY_C_ID_PK'; INDEX_TYPE TABLESPACE_NAME --------------------------- ------------------------------ TABLE_OWNER TABLE_NAME ------------------------------ ------------------------------ IOT - TOP TS200 HR COUNTRIES
6. Index들 상태 확인해보기 -> UNUSABLE로 바뀌었다. COUNTRY_C_ID_PK는 인덱스랑 같이 옮겨져서 VALID상태!
HR @ orcl > select index_name, status from user_indexes ; 2 INDEX_NAME STATUS ------------------------------ -------- JHIST_EMP_ID_ST_DATE_PK UNUSABLE JHIST_JOB_IX UNUSABLE JHIST_EMPLOYEE_IX UNUSABLE JHIST_DEPARTMENT_IX UNUSABLE EMP_EMAIL_UK UNUSABLE EMP_EMP_ID_PK UNUSABLE EMP_DEPARTMENT_IX UNUSABLE EMP_JOB_IX UNUSABLE EMP_MANAGER_IX UNUSABLE EMP_NAME_IX UNUSABLE JOB_ID_PK UNUSABLE DEPT_ID_PK UNUSABLE DEPT_LOCATION_IX UNUSABLE LOC_ID_PK UNUSABLE LOC_CITY_IX UNUSABLE LOC_STATE_PROVINCE_IX UNUSABLE LOC_COUNTRY_IX UNUSABLE COUNTRY_C_ID_PK VALID REG_ID_PK UNUSABLE 19 rows selected.
7. Index들 Rebuild 시키기! (스크립트 생성)
SYS> select 'alter index ' || index_name || ' rebuild online; ' from dba_indexes where status='UNUSABLE' and owner='HR' order by num_rows asc; -- alter문은 HR에서 실행 'ALTERINDEX'||INDEX_NAME||'REBUILDONLINE;' ----------------------------------------------------------- alter index REG_ID_PK rebuild online; alter index JHIST_EMP_ID_ST_DATE_PK rebuild online; alter index JHIST_DEPARTMENT_IX rebuild online; alter index JHIST_EMPLOYEE_IX rebuild online; alter index JHIST_JOB_IX rebuild online; alter index LOC_STATE_PROVINCE_IX rebuild online; alter index JOB_ID_PK rebuild online; alter index LOC_COUNTRY_IX rebuild online; alter index LOC_CITY_IX rebuild online; alter index LOC_ID_PK rebuild online; alter index DEPT_LOCATION_IX rebuild online; alter index DEPT_ID_PK rebuild online; alter index EMP_DEPARTMENT_IX rebuild online; alter index EMP_MANAGER_IX rebuild online; alter index EMP_JOB_IX rebuild online; alter index EMP_NAME_IX rebuild online; alter index EMP_EMAIL_UK rebuild online; alter index EMP_EMP_ID_PK rebuild online; 18 rows selected.
8. move 결과 테이블 스페이스가 ts200에 잘 있는지 확인
HR @ orcl > select table_name, tablespace_name from user_tables ; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ COUNTRIES LOCATIONS TS200 JOBS TS200 EMPLOYEES TS200 REGIONS TS200 JOB_HISTORY TS200 DEPARTMENTS TS200 7 rows selected.
9. Index가 VALID상태인지 확인
HR @ orcl > select index_name, status from user_indexes ; INDEX_NAME STATUS ------------------------------ -------- JHIST_EMP_ID_ST_DATE_PK VALID JHIST_JOB_IX VALID JHIST_EMPLOYEE_IX VALID JHIST_DEPARTMENT_IX VALID EMP_EMAIL_UK VALID EMP_EMP_ID_PK VALID EMP_DEPARTMENT_IX VALID EMP_JOB_IX VALID EMP_MANAGER_IX VALID EMP_NAME_IX VALID JOB_ID_PK VALID DEPT_ID_PK VALID DEPT_LOCATION_IX VALID LOC_ID_PK VALID LOC_CITY_IX VALID LOC_STATE_PROVINCE_IX VALID LOC_COUNTRY_IX VALID COUNTRY_C_ID_PK VALID REG_ID_PK VALID 19 rows selected.
참고 : 오늘 수업시간 내용 확인