[오라클 DB백업과 복구]23.09.26

망구씨·2023년 9월 26일
0
post-thumbnail
post-custom-banner

📖 14장. 백업 및 Recovery

이 단원을 마치면 다음을 수행할 수 있습니다.
➡️ 오라클 데이터베이스에서 발생할 수 있는 Failure 유형 식별
➡️ instance recovery 튜닝 방법 설명
➡️ 체크포인트, 리두 로그 파일 및 아카이브 로그 파일의중요성 파악
➡️ Fast Recovery Area 구성
➡️ ARCHIVELOG 모드 구성

workshop1 -> 첫번째 교재 (1장 ~ 13장) , 두번째 교재 (14장 ~ 17장)
workshop2 -> 첫번째 교재 (1장 ~ 백업과 복구), 두번째 교재

❓ DBA에게 데이터 백업과 복구과 왜 중요한가?

: DBA에게 가장 필수 업무이다. 평상시에 데이터 백업이 잘 되고있는지 확인해야 한다!!

관리자의 임무

데이터베이스 관리자의 임무는 다음과 같습니다.
➡️ 어느 곳에서나 발생할 수 있는 failure로부터 데이터베이스 보호
➡️ MTBF(Mean time between failure) 늘리기 -> 장애와 장애 사이의 간격!
➡️ 중복을 통한 중요 구성 요소 보호 -> 백업을 하라는 말!
➡️ MTTR(Mean time to recover) 줄이기 -> 복구에 걸리는 시간은 짧을수록 좋다.
➡️ 데이터 손실 최소화

p.14-4 Failure(장애) 범주

  1. SQL 문장 에러
  2. 유저 프로세서 에러
  3. 네트워크 에러
  4. 휴먼 에러 (인간의 실수)
  5. 인스턴스 Failure
  6. 디스크 손상 또는 파일 손상

SQL 문장 에러

💡 가장 낮을 레벨의 장애이다. 쉽게 해결이 가능함!

유저 프로세서 에러

💡 데이터베이스에 접속한 클라이언트의 PC가 비정상 종료된 경우
사람이 할 일은 없다. 백그라운드 프로세스가 알아서 해줌 -> 낮은레벨의 장애

네트워크 에러

💡 이것도 dba가 크게 할것은 없다. TA라는 직무가 있다.

유저에러

💡 SQL 사용자가 실수로 테이블 drop,delete를 한 경우
delete(롤백이나 플래시백), drop은 flashback으로 복구가 가능하다.


Reorg작업하기! (table move, index rebuild)

오늘의 마지막 문제 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.


참고 : 오늘 수업시간 내용 확인

profile
Slow and steady wins the race.
post-custom-banner

0개의 댓글