리눅스 커널 컴파일

리눅스 커널을 만드는 과정(3단계)

1. 커널 구성(Kernel configuration)

2. 커널 컴파일(Kernel compile)

3. 커널 인스톨(Kernel installation)


1. 커널 구성(Kernel configuration)

- 커널 구성이란 새로 만들어질 리눅스 커널에게 현재 시스템에 존재하는 하드웨어 특성, 커널 구성 요소, 네트워크 특성 등의

  정보를 알려주는 과정

- 시스템 하드웨어 정보들에 대한 사전 지식이 필요

- 수행 방법

  make config

  make menuconfig

  make xconfig 등의 방법이 있음


2. 커널 컴파일(Kernel compile)

- 커널 소스 파일을 이용해 실행 가능한 커널을 만드는 과정

- "make bzImage"나 "make zImage" 등의 명령으로 생성될 수 있다. (bzImage와 zImage는 커널 이미지 크기만 차이가 있을 뿐 커널 자체는 동일)

- 커널 2.6 버전 이후 부터는 "make"만 타이핑 해도 됨


3. 커널 인스톨(Kernel installation)

- 생성된 커널로 시스템이 부팅될 수 있도록 만드는 과정

- 커널 인스톨은 생성된 커널 이미지를 루트 파일시스템으로 복사, 모듈 인스톨, 그리고 부트로더(grub) 수정 등의 과정으로 이루어짐


리눅스 커널 컴파일 수행

* root 계정에서 수행 해야한다.


커널 컴파일을 위한 패키지 설치

 

현재 커널 버전 확인

$ uname -r

 

 

 

커널 소스 다운로드

커널 소스는 http://kernel.org 에서 다운로드 가능

 

 

저 하이퍼링크 마우스 오른쪽을 누른후 링크 copy후

 

# wget [링크 주소] 를 입력하면 다운로드를 받게된다.

 

tar.xz로 다운 받았으므로

# tar xvf linux-4.4.5.tar.xz

를 이용하여 다운로드 받은 파일을 압축풀기

(tar.gz일경우 tar xzvf로 풀면됨)

 

필요 패키지 설치

 

$ sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package -y

 


Configuration 파일 복사

 

현재 커널의 configuration 파일을 복사


cp /boot/config-현재커널명 ./.config



$ sudo make menuconfig


Load 를 클릭


OK 후 Save


이후 Exit로 터미널로 빠져나옴


커널 컴파일 (커널 설치 이미지 생성)

$ sudo make-kpkg --initrd --revision=1.0 kernel_image

* 이 명령어 수행시 컴퓨터 상태에 따라 시간이 오래 걸릴 수 있다.

'Study Note > OS' 카테고리의 다른 글

[Linux] root 계정 초기 패스워드 설정  (0) 2016.03.10
[Linux] Task 관리  (0) 2016.03.07
[Linux] 리눅스 커널 구조  (0) 2016.03.07
[Linux] Shell Script  (0) 2016.02.15
[Linux] Shell & Shell 내장 명령어  (0) 2016.02.15

리눅스 커널 구조


운영체제의 관리 자원

물리적인 자원 : CPU, 메모리, 디스크, 터미널, 네트워크 등 시스템 구성 요소 및 주변 장치들

추상적인 자원 : task, 세그먼트, 페이지, 파일, 통신 프로토콜, 패킷 등

  * 물리적인 자원에 대응되지 않으며 추상적인 객체로만 존재하는 자원 : 보안, 사용자 ID에 따른 접근제어 등


커널이 관리하는 자원 ( 물리적인 자원 + 추상적인 자원)

CPU - task                  (Task 관리자)            => task의 생성, 실행, 상태 전이, 스케줄링, 시그널 처리, 프로세스 간 통신 등의 서비스 제공

Memory - Segment,page  (Memory 관리자)         => 물리 메모리 관리, 가상 메모리 관리, 세그멘테이션, 페이징, 페이지 부재 결함 처리 등의 서비스 제공

Disk - File                  (File System)              => 파일 생성, 접근 제어, inode 관리, 디렉터리 관리, 수퍼 블록 관리 등의 서비스 제공

Network 장치 - Socket     (Network 관리자)         => socket 인터페이스, TCP/IP 같은 통신 프로토콜 등의 서비스 제공

각종 장치 - Device Driver  (Device Driver 관리자)  => 디스크나 터미널, CD, 네트워크 카드 등과 같은 주변 장치를 구동하는 드라이버들로 구성


" 운영체제는 시스템 호출을 통해 테스크가 자원을 사용할 수 있게 해주는 자원관리자"



각 디렉터리의 내용


kernel 디렉터리

- task 관리자가 구현한 디렉터리

- task의 생성과 소멸, 프로그램의 실행, 스케줄링, 시그널 처리 등의 기능이 구현되있는 디렉터리


arch 디렉터리

- 리눅스 커널 기능 중 하드웨어 종속적인 부분들이 구현된 디렉터리

- CPU의 타입에 따라 하위 디렉터리로 다시 구분 ( 인텔의 i386, ARM계열, 모토로라의 68시리즈, SUN의 Sparc, IBM의 PPC 등 )


fs 디렉터리

- 리눅스에서 지원하는 다양한 파일시스템과 open(), read(), write() 등의 시스템 호출이 구현된 디렉터리.

- 대표적인 파일시스템 (ext2, ext3, ext4, nfs, fat,proc, sysfs, devfs, isofs, ntfs, reiserfs, f2fs, xfs 등)


mm 디렉터리

- 메모리 관리자가 구현된 디렉터리

- 물리 메모리 관리, 가상 메모리 관리, task마다 할당되는 매모리 객체 관리 등의 기능이 구현


driver 디렉터리

- 리눅스에서 지원하는 디바이스 드라이버가 구현된 디렉터리

- 디바이스 드라이버( 디스크, 터미널, 네트워크 카드 등 주변 장치를 추상화시키고 관리하는 커널 구성 요소 ) 


net 디렉터리

- 리눅스 커널 소스 중 상당히 많은 양을 차지하는 디렉터리

- 리눅스가 지원하는 통신 프로토콜이 구현된 디렉터리

- TCP/IP 뿐만아니라 UNIX 도메인 통신 프로토콜, 802.11, IPX, RPC, AppleTalk, bluetooth, socket 등 다양한 통신 프로토콜 구현


ipc 디렉터리

- 리눅스 커널이 지원하는 프로세스간 통신 기능이 구현된 디렉터리

- 대표적인 프로세스간 통신 ( 파이프, 시그널, SYS V IPC, 소켓 등 )

  * 파이프는 fs디렉터리에, 시그널은 kernel 디렉터리에, 소켓은 net 디렉터리에 구현


init 디렉터리

- 커널 초기화 부분, 즉 커널의 메인 시작 함수가 구현된 디렉터리


include 디렉터리

- 리눅스 커널이 사용하는 헤더 파일들이 구현된 디렉터리


others 디렉터리

- 리눅스 커널의 주요 기능이 구현된 디렉터리 외에도 리눅스 커널 소스에는 여러 다른 디렉터리가 존재한다.

- 대표적으로 (리눅스 커널 및 명령어들에 대한 자세한 문서 파일들이 존재하는 Documentation 디렉터리, 

                 커널 라이브러리 함수들이 구현되는 lib 디렉터리, 

                 커널 구성 및 컴파일 시 이용되는 스크립트 들이 존재하는 scripts 디렉터리 등)이 리눅스 커널소스에 존재



'Study Note > OS' 카테고리의 다른 글

[Linux] Task 관리  (0) 2016.03.07
[Linux] 리눅스 커널 컴파일 (fedora)  (0) 2016.03.07
[Linux] Shell Script  (0) 2016.02.15
[Linux] Shell & Shell 내장 명령어  (0) 2016.02.15
[Linux] Vi Editor  (0) 2016.02.15

1. 오라클 다운로드

http://www.oracle.com 접속

 

Download 클릭 후 oracle database 클릭.

 

*Orange Tool(64bit를 호환 안함)을 사용하기 때문에 32bit로 설치

 

위쪽에 Accept License Agreement 체크 후

 

File1 클릭 후 Oracle계정으로 로그인 한 후 다운로드 진행.

 

 

2. 압축 해제

 

다운이 완료되면 database 한 폴더 내에 두 개의 zip파일을 압축을 푼다.

 

 

3. 오라클 설치

 

 

아래 체크 해제

 

아래 경고 시 예 클릭

 

 

 

 

 

 

 

 

 

 

 

기본 값이 KO16MSWIN949일 경우 기본값 사용 아닐 경우

아래쪽의 다음 문자 집합 목록에서 선택부분을 눌러 LO16MSWIN949를 선택

 

 

 

 

 

 

 

 

 

 

 

 

 

Log Miner 활용과 Redo log 장애

Log Miner

- Oracle 8i 버전부터 Binary 형식으로 되어있는 Redo log File의 내용을 조회할 수 있도록 Log Miner를 제공

- Redo log File에 있는 내용을 추출해서 SQL로 변환한 후 사용자가 SQL 문장으로 조회해서 원하는 내용 확인할 수 있음

- Redo log File 내부에는 데이터가 변경된 시점을 정확하게 알 수 있기 때문에 변경이력을 추적해서 원래 값으로

돌려야 할 경우 등에 유용

 

Log Miner의 제약 사항

- Log Miner8i 이후 버전에서만 작동

- 분석 대상 인스턴스와 같은 플랫폼에서 동작하고 같은 Character set을 사용하는 db에서 생성된 Redo Log File만 분석할 수 있음

- 분석 대상 인스턴스와 Redo log가 생성된 인스턴스는 DB_BLOCK_SIZE가 동일해야 한다.

다를 경우 Corruption 발생 내용이 기록

- Supplemental loggingenable되어 있어야 함

 

supplemental logging

- 데이터에 DML이 발생할 경우 Redo log에 추가적인 내용을 기록 (기본 값 보다 자세한 내용 기록)

- supplemental log 기능을 사용할 경우 redo log 생성 양이 많아지기 때문에 아카이브 로그 모드를 사용 할 경우 아카이브 경로를

충분하게 주고 사용해야 한다

- 기본 값은 disable

 

min level supplemental logging 조회 및 변경

 

# 조회

select supplemental_log_data_min from v$database;

 

# enable

alter database add supplemental log data;

 

# disalbe

alter database drop supplemental log data;

 

# 특정 테이블에만 적용

alter table scott.emp add supplemental log data (all) columns;

 

# 특정 테이블에만 적용 해제

alter table scott.emp drop supplemental log data (all) columns;

 

# 특정 컬럼 logging 확인

select * from dba_log_groups;

 

Log Miner 설정하기

1. Log Miner 전용 Dictionary 생성

2. Log Miner로 분석할 로그를 보냄

(redo log buffer, archive log) = 등록

3. Log miner에서 분석

4. SQL 로 분석된 결과 조회(v$)

 

Log Miner Dictionary 생성

- Log MinerRedo log file을 분석해서 그 안에 있는 테이블 이름이나 컬럼 이름들이 있는 부분을 딕셔너리를 확인해서

볼 수 있도록 변환해줌

- SQL parse 단계에서 사용하는 딕셔너리가 아닌 Log Miner가 사용하는 별도의 딕셔너리

- 다른 서버에서 만들면 안 되고 분석을 해야하는 Redo log file이 만들어진 DB에 생성되어야 한다.

- 만약 딕셔너리가 없을 경우 테이블 이름이나 컬럼명이 나오는 부분이 변환할 수 없기 때문에 헥사 값으로 보여주게 된다.

 

Dictionary File 생성하는 방법 세 가지

1. Online Catalog 사용

  - Redo log file이 생성된 Source Database에 접근이 가능한 경우

  - 관련 table들에 컬럼 정의가 변경이 없을 경우

  - exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog);

 

2. Redo Log File 자체에 저장하는 방법

  - Redo Log File이 생성된 Source Database에 접근이 불가능할 경우 사용

  - 9i 이상에서 지원됨

  - DBArchive mode 여야 한다

  - 딕셔너리를 추출하는 동안 어떠한 DDL도 허용되지 않음

  - exec dbms_logmnr_d.build(options => dbms_logmnr_d.store_in_redo_logs);

 

3. Flat File에 저장하는 방법 ★ 가장 많이 쓰임

  - 이전 버전과의 호환성을 보장하기 때문에 가장 많이 사용하는 방법

  - exec dbms_logmnr_d.build(‘dict.dat’,‘/home/oracle/logmnr/’, -> dbms_logmnr_d.store_in_flat_file);

 

flat file 로 딕셔너리 생성 실습

1) DB 전체를 종료한 후 parameter file에 딕셔너리 파일의 위치를 아래와 같이 지정한다

SQL > !mkdir /oracle11/logminer

SQL > shutdown immediate;

# vi $ORACLE_HOME/dbs/inittestdb.ora

utl_file_dir=/oracle11/logminer 추가

 

-- 2) DBstart

select *

from v$parameter

where name like '%utl_file_dir%';

-- 3) 딕셔너리 생성

select a.group#, a.member, b.bytes/1024/1024 mb, b.sequence# "seq#", b.status, b.archived arc

from v$logfile a , v$log b

where a.group# = b.group#

order by 1,2;

exec dbms_logmnr_d.build(dictionary_filename=>'dict.dat',dictionary_location=>'/oracle11/logminer');

 

-- 4) Log Miner에 분석할 로그 추가

-- 명령 마지막에 있는 숫자의 의미 1=신규등록, 2=파일삭제, 3=추가등록

exec dbms_logmnr.add_logfile('/oracle11/oracle/oradata/testdb/redo01.log',1);

exec dbms_logmnr.add_logfile('/oracle11/oracle/oradata/testdb/redo02.log',3);

exec dbms_logmnr.add_logfile('/oracle11/oracle/oradata/testdb/redo03.log',3);

 

 

-- 무한 루프 현상 조치

 

-- Log Miner 등록 확인

select db_name, filename from v$logmnr_logs;

 

-- 문제가 되는 로그 삭제

exec dbms_logmnr.add_logfile('/oracle11/oracle/oradata/testdb/redo03.log',2);

 

-- 무한 루프중인 로그가 current 이면 current, inactive, inactive 상태로 맞춰준 후 다시 실행한다.

alter system switch logfile;

alter system checkpoint;

 

exec dbms_logmnr.add_logfile('/oracle11/oracle/oradata/testdb/redo03.log',3);

 

--Log Miner 실습 1. drop table 정보 찾기

--drop table 장애가 발생했을 경우 Log Miner을 활용하여

--어떻게 Redo LogFile에서 해당 정보를 찾아내는지 실습

 

--step 1. 현재 상태 확인

select a.group#, a.member, b.bytes/1024/1024 mb, b.sequence# "seq#", b.status, b.archived arc

from v$logfile a , v$log b

where a.group# = b.group#

order by 1,2;

--step 2. 새로운 테이블 생성 후 데이터 입력하고 삭제

create table scott.test1 (no number);

insert into scott.test1 values(1);

commit;

 

drop table scott.test1 purge;

 

-- 현재 current log 확인(1번 그룹에서 진행 중)

SQL> @log.sql;

 

--step 3 .Log Miner를 시작해서 log를 분석한 후 결과를 조회한다. (, temporary space가 있어야 함!)

create temporary tablespace temp2 tempfile '/oracle11/oracle/oradata/testdb/temp02.dbf' size 20M;

 

alter database default temporary tablespace temp2;

 

select tablespace_name from dba_temp_files;

 

select file_name from dba_temp_files;

 

exec dbms_logmnr.start_logmnr(dictfilename=>'/oracle11/logminer/dict.dat',

options=>dbms_logmnr.ddl_dict_tracking+dbms_logmnr.committed_data_only);

 

-- logminer 내용 확인

alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';

 

select timestamp, username, operation, sql_redo

from v$logmnr_contents

where seg_name='TEST1';

 

 

 

Offline 백업 본을 이용한 DB 복구

1) shutdown immediate

 

2) OS 상에서 Cold 백업해둔 파일로 대체

--151228 날짜 백업 본을 이용해 복구

SELECT 'cp /oracle11/backup/20151228' ||substr(name,instr(name,'/',-1))||' '||name

FROM v$datafile

union all

SELECT 'cp /oracle11/backup/20151228' || substr(name,instr(name,'/',-1))||' '||name

FROM v$controlfile

union all

SELECT 'cp /oracle11/backup/20151228' || substr(name,instr(name,'/',-1))||' '||name

FROM (select member as "NAME"

from v$logfile);

 

3) startup

 

 

'Study Note > Database' 카테고리의 다른 글

Oracle 11g Release 2 installation on Windows  (0) 2016.03.01
Log Miner 활용과 Redo log 장애  (0) 2016.02.26
Control File 장애 복구  (0) 2016.02.26
Hot Backup  (0) 2016.02.26
Cold Backup  (0) 2016.02.26

Control File 장애 복구

** Control File이 과거 버전이면 반드시 다시 만들어야 함(redo를 읽는건 datafile)

 

실습 1. Parameter File의 경로와 실제 파일 경로가 다른 경우 대처하기

==> Parameter File 에 적힌 control file 경로와 실제 control file 의 경로가 달라서 생기는 에러로 두 경로만 일치시키면 간단히 해결

실습환경 만들기

SQL> create pfile from spfile;

-- control file 유실 상황 가정(rm)

 

SQL> shutdown immediate;

!rm /oracle11/oracle/flash_recovery_area/testdb/control02.ctl

 

SQL> startup

 

 

alert log 확인

 

 

해결방법

-- 복구 수행 1) init파일의 ctl 파일 삭제 후 DB open(문제되는 2번 지우기)

* spfile로 운영시 spfile은 삭제 후 open

-- 복구 수행 2) 나머지 손상되지 않은 control file copy DB open

!cp /oracle11/oracle/oradata/testdb/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;

 

SQL> alter database mount;

SQL> alter database open;

 

실습 2. Control File끼리 버전이 다른 경우 대처하기

==> Control file 끼리의 정보가 서로 다른 경우에 생기는 에러. Control file 끼리 정보를 맞춰주면 됨

실습환경

-- 1. pfile control file 주석 후 pfileDB OPEN (spfile 있을 시 spfile 삭제)

-- 2. shutdown immediate

-- 3. startup

-- 4. 다시 pfile control file 주석 해제 후 DB OPEN 시 에러 확인

 

 

해결방법

--버전 정보가 더 큰 파일을 작은 파일로 cp

cp /oracle11/oracle/oradata/testdb/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;

 

SQL> alter database mount;

SQL> alter database open;

 

 

실습 3. Old Control File 또는 Control File이 삭제되었을 경우 대처하기

1) noresetlogs : 리두 리셋 안함 (resetlogsredo에도 에러있을시 사용)

 

-- control file 재생성 스크립트 만들기

alter database backup controlfile to trace as '/oracle11/backup/20151229/control.sql';

 

* 공백 / 주석을 제거해야 합니다.

 

-- 실습환경 만들기

-- 과거 컨트롤 파일로 바꿔줌

cp /oracle11/backup/20151228/control01.ctl /oracle11/oracle/oradata/testdb/control01.ctl

cp /oracle11/backup/20151228/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;

 

SQL> startup

 

==> 반드시 control file 재생성 해주어야 함

 

SQL> shutdown immediate

 

* 해당 폴더에서 sqlplus 로 접속 후 @control.sql

 

-- control file 재생성 스크립트 만들기

alter database backup controlfile to trace as '/oracle11/backup/20151230/control.sql';

 

--장애상황 발생

--old 백업 본으로 현재 control file 덮어쓰기

alter database backup controlfile to '/oracle11/backup/20151230/control_bak.ctl'

 

drop table scott.recover_test1;

create table scott.recover_test1(a number);

insert into scott.recover_test1 values(1);

insert into scott.recover_test1 values(2);

insert into scott.recover_test1 values(3);

commit;

 

SQL> shutdown immediate

!cp /oracle11/backup/20151230/control_bak.ctl /oracle11/oracle/oradata/testdb/control01.ctl

!cp /oracle11/backup/20151230/control_bak.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;

 

-- startup 시 에러 확인

* 컨트롤 파일은 정상인데 시점정보가 맞지 않음(01589)

 

SQL> alter database noresetlogs;

 

* controlfile을 이용해서만 noresetlogs 가능(01610)

 

SQL> alter database resetlogs;

 

* control 파일은 과거 버전인데 system01.dbf는 최신버전 즉, restore 해야 함(01152)

==> control file 재생성 판단

 

--shutdown 상태에서 수행

SQL> shutdown immediate

SQL> @/oracle11/backup/20151230/control.sql

 

SQL> alter database open;

 

 

control file 재생성 하기

--장애 상황 만들기

--01. 현재 online redo 확인

select a.group#, a.member, b.bytes/1024/1024 mb, b.sequence# "seq#", b.status, b.archived arc

from v$logfile a , v$log b

where a.group# = b.group#

order by 1,2;

 

 

 

-- inactive 이면서 arcYES인 리두로그 파일 확인 및 삭제

!rm /oracle11/oracle/oradata/testdb/redo03.log;

 

-- control file 확인

select * from v$controlfile;

 

-- 모든 control file 삭제

!rm /oracle11/oracle/oradata/testdb/control01.ctl;

!rm /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;

 

-- shutdown immediate로 내릴 경우 에러 확인

SQL > shutdown immediate

 

 

 

SQL > shutdown abort

 

!cp /oracle11/backup/20151230/control01.ctl /oracle11/oracle/oradata/testdb/control01.ctl

!cp /oracle11/backup/20151230/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl

 

SQL > startup

 

 

SQL > @control.sql (전에 만들어둔 noresetlogs 옵션)

** redo 파일이 없어져서 error

 

control.sql 파일의 noresetlogsresetlogs로 수정 한 후

 

SQL > @control.sql

SQL > alter database open;

##ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

 

SQL > alter database open resetlogs;

Database altered.

 

1. 마운트 상태에서 alter database backup control file to trace as ‘....’; 명령어로 재생성 할 수 있는 스크립트 생성

2. 스크립트를 열어서 no resetlogs caseresetlogs case를 구분해서 재생성 스크립트를 편집

3. DB shutdown 상태로 만든 후 위 2번에서 만든 스크립트를 실행시켜 DB를 마운트 까지 시킨 후 시작

 

'Study Note > Database' 카테고리의 다른 글

Log Miner 활용과 Redo log 장애  (0) 2016.02.26
Offline 백업 본을 이용한 DB 복구  (0) 2016.02.26
Hot Backup  (0) 2016.02.26
Cold Backup  (0) 2016.02.26
No Archive log / Archive log  (0) 2016.02.26

Hot Backup

열린 백업 (Hot backup/Open backup/Begin backup/Online backup)

- 데이터베이스 가동 중 전체 파일 백업

- Tablespace 단위로 백업 수행

- 11g부터 Database 단위도 가능 (Redo 발생량 문제로 비 권고)

- 백업 전 대상 Tablespace를 백업 모드로 적용하고, 백업 후 백업 모드를 해제

- Archive Log Mode 필수 (Redo log 파일로 변경하기 위해)

- Redo 발생량 급증, Archive 발생량 급증

- Data fileControl file만 백업 가능, Online Redo Log File은 백업 불가능 --> resetlogs 필요

 

열린 백업 원리

SQL > alter tablespace users begin backup; (DBWR 발생)

 

Checkpoint 발생해서 변경사항 datafile로 저장

마지막 checkpoint scn 정보를 data file control file 에 저장

데이터파일 헤더의 Hot-backup-in-progress 플래그에 백업 시작 정보 기록

이후의 변경된 데이터는 리두로그에 블록단위(데이터 손실을 막기위해)로 기록

--> Begin backup을 수행해도 테이블스페이스 변경은 가능

--> 백업 수행 시 archive 양이 급증 하므로 모니터를 더 잘해야함

백업 완료 후에는 반드시 end backup을 수행해야 함(hot backup을 수행 중에는 shutdown immediatenormal로 종료불가)

 

SQL > alter tablespace users end backup;

 

ALTER TABLESPACE BEGIN BACKUP 내부 처리 과정

1. ALTER TABLESPACE BEGIN BACKUP 명령이 수행되는 순간 체크포인트 신호가 발생하여 db 버퍼 캐시의

Dirty Block 들을 데이터 파일로 내려쓰는 작업이 시작됩니다.

 

2. 체크포인트 신호가 발생되면서 SCN은 동기화 작업이 일어나며 데이터 파일 헤더에 SCN이 기록됩니다.

 

3. ALTER TABLESPACE END BACKUP 명령이 완료 될 때까지 데이터 파일에 기록된 SCN은 변경되지 않는다.

하지만, 데이터 파일의 블록은 읽고 변경이 된다.

 

4. 최종 SCN 이후의 변경된 내용은 리두 로그 파일에 저장되어 있다가 ALTER TABLESPACE END BACKUP

명령을 수행하면 리두로그에 있는 데이터 파일에 기록

 

5. 복구는 ALTER TABLESPACE BEGIN BACKUP 명령을 수행했을 때 고정된 SCN을 기준으로 HOT백업 한

데이터 파일을 복권해서 복구할 수 있습니다. 그러면 리두 로그 파일에 기록된 내용을 ROLL FORWARD

되면서 HOT백업 한 시간까지의 모든 변경된 내용들이 적용됩니다.

 

 

01. BACK UP 대상 확인

SELECT TABLESPACE_NAME, FILE_NAME

FROM DBA_DATA_FILES;

 

 

02. BEGIN BACKUP MODE : 백업모드 적용 (CHECKPOINT 발생)

SELECT TABLESPACE_NAME, 'ALTER TABLESPACE '||TABLESPACE_NAME||' BEGIN BACKUP;'

FROM DBA_TABLESPACES

WHERE TABLESPACE_NAME NOT LIKE 'TEMP%';

 

03. OS BACKUP 수행

SELECT TABLESPACE_NAME, FILE_NAME, 'CP '||FILE_NAME||' /oracle11/backup/'||to_char(sysdate,'yyyymmdd')

FROM DBA_DATA_FILES;

 

04. END BACKUP MODE : 백업 모드 해제 (CHECKPOINT 발생)

SELECT TABLESPACE_NAME, 'ALTER TABLESPACE ' ||TABLESPACE_NAME||' END BACKUP;'

FROM DBA_TABLESPACES

WHERE TABLESPACE_NAME NOT LIKE 'TEMP%';

 

확인

select a. file#, a.name, b.status, to_char(b.time, 'YYYY-MM-DD:HH24:MI:SS') as time

from v$datafile a, v$backup b

where a.file#=b.file#;

 

05. control file 백업

alter database backup controlfile to '/oracle11/backup/20151229/control01.ctl';

'Study Note > Database' 카테고리의 다른 글

Offline 백업 본을 이용한 DB 복구  (0) 2016.02.26
Control File 장애 복구  (0) 2016.02.26
Cold Backup  (0) 2016.02.26
No Archive log / Archive log  (0) 2016.02.26
Recovery 원리  (0) 2016.02.26

Cold Backup

 

□ 백업 대상

- 필수 : Data File, Redo Log File(archive가 있다면 안 가져갈 수 도 있음), Control File

- 선택 : Parameter File, Password File, sqlnet.ora, listener.ora, tnsnames.ora

 

1) Data File

- 사용 중인 Data File은 자주 백업을 받아야 함

SQL > select name, status from v$datafile;

 

NAME STATUS

------------------------------------------------------------

/oracle11/oracle/oradata/testdb/system01.dbf SYSTEM

/oracle11/oracle/oradata/testdb/sysaux01.dbf ONLINE

/oracle11/oracle/oradata/testdb/undotbs01.dbf ONLINE

 

NAME STATUS

------------------------------------------------------------

/oracle11/oracle/oradata/testdb/users01.dbf ONLINE

/oracle11/oracle/oradata/testdb/example01.dbf ONLINE

 

2) Control File

- 현재 Control File을 백업 받아야 함

SQL > select name from v$controlfile;

NAME

--------------------------------------------------------------------------------

/oracle11/oracle/oradata/testdb/control01.ctl

/oracle11/oracle/flash_recovery_area/testdb/control02.ctl

 

3) Redo Log File

SQL >select a.group#, a.member, b.bytes/1024/1024 MB, b.sequence# "SEQ#", b.status, b.archived "ARC"

from v$logfile a, v$log b

where a.group#=b.group#

order by 1,2;

 

 

4) Parameter File/Password File

- Parameter File

  · Oracle 서버의 각종 설정 정보 저장

  · 기동에 반드시 필요, 최적값 백업 필요

  · $ORACLE_HOME/dbs

- Password File

  · sysdba 권한 암호 저장

  · DB종료 상태에서 딕셔너리 없이 로그온 하기 위해 존재

  · orapwd 로 재생성 가능

 

5) sqlnet.ora & listener.ora & tnsnames.ora

- sqlnet.ora

  · $ORACLE_HOME/network/admin

  · local 접속의 권한 관리

  · 외부 접속자 list 관리

- listener.ora

  · $ORACLE_HOME/network/admin

  · 외부에서 DB서버로 접속을 받아주는 리스너의 설정 파일

- tnsnames.ora

  · $ORACLE_HOME/network/admin

  · 외부 DB서버로 접속할 때의 TNS 정보 설정 파일

 

백업의 종류

1) 닫힌 백업 (Cold backup/Closed backup)

- 데이터베이스 종료 후 전체 파일 백업

- 모든 파일의 Checkpoint SCN은 같아야 함

· 일반적으로 각각 다른 시점에 받은 백업 파일은 복구에 같이 사용 할 수 없음

- 정상 shutdown 상태에서 백업 가능

· shutdown abort, instance crash 등 상태는 일관성이 흐트러진 상태로 복구에 사용될 수 없음

· OFFLINE 되어 있는 Data File 도 복구에 사용 불가 (Checkpoint scn정보가 다름)

- Archive Log Mode 여부 무관

- Data File, Online Redo Log File, Control File 백업 가능

- 주로 복구가 아닌 복제를 할 때 사용

 

01. datafile 확인

select name, status from v$datafile;

 

 

 

02. controlfile 확인

select name from v$controlfile;

 

03. redo log file 확인

select a.group#, a.member as "NAME", b.bytes/1024/1024 MB, b.sequence# "SEQ#", b.status, b.archived "ARC"

from v$logfile a, v$log b

where a.group#=b.group#

order by 1,2;

 

 

04. copy 문 script 작성

SELECT 'cp '||NAME|| ' /oracle11/backup/'||to_char(sysdate,'YYYYMMDD')|| substr(name,instr(name,'/',-1))

FROM v$datafile

union all

SELECT 'cp '||NAME|| ' /oracle11/backup/'||to_char(sysdate,'YYYYMMDD') || substr(name,instr(name,'/',-1))

FROM v$controlfile

union all

SELECT 'cp '||NAME|| ' /oracle11/backup/'||to_char(sysdate,'YYYYMMDD') || substr(name,instr(name,'/',-1))

FROM (select member as "NAME"

from v$logfile);

 

05. DB 정상 종료

SQL > shutdown immediate

 

06. 폴더 만든 후 파일 백업 (copy문 실행)

 

07. DB OPEN

SQL > startiup

 

 

'Study Note > Database' 카테고리의 다른 글

Control File 장애 복구  (0) 2016.02.26
Hot Backup  (0) 2016.02.26
No Archive log / Archive log  (0) 2016.02.26
Recovery 원리  (0) 2016.02.26
파티션 테이블(partition table) - 인덱스(index)  (0) 2016.02.25

No Archive log / Archive log

No Archive log

 

A까지만 백업 Datafile에 저장된 상태

 

- No archive log 모드 이므로 Redo log file에 저장을 덮음

- 백업 파일 복원하여 장애 복구 진행함

  * B 파일이 유실 되어있으므로 순차적 프로그램이라 전체 다 복구 되지 않음

- Log switch 발생해서 기존 redo log file의 내용을 덮어씀

 

□ Archive log

 

Archive log mode 단점

1. Archive log file을 저장해야 할 별도의 저장 공간이 추가로 필요

2. Archive hang 이 발생할 수 있음

3. 관리가 까다로움

 

Archive Hang 발생 시 해결하는 방법

- Archive HangDB 종료 없이 해결하는 방법

1) 현재 상황 확인

SQL> archive log list

2) # chown R root:root /oracle11/arch

 

 

3) log switch 발생 하여 archive 파일 생성 시도

--> oracle계정을 쓸 수 없도록 변경한 후 Log Switch를 발생시키면 Archive Hang이 발생

 

4) 권한 병경 후 다시 확인

# chown R oracle:dba /oracle11/arch

SQL> alter system switch logfile;

 

5) 바로 Hang이 풀리면 상관없지만 Hang이 안 풀릴시

SQL> alter system archive log stop;

SQL> alter system archive log start;

 

Hang일 때, 새로운 session 접속 시 에러 발

 

-- Log 참조 뷰

select * from v$logfile;

select * from v$log;

 

 

** 잘 쓰지않음**

-- archive log 압축 확인

select archivelog_compression from v$database;

 

-- archive log 압축 설정

alter database archivelog compress enable;

 

-- archive log 압축 해제

alter database archivelog compress disable;

 

 

'Study Note > Database' 카테고리의 다른 글

Hot Backup  (0) 2016.02.26
Cold Backup  (0) 2016.02.26
Recovery 원리  (0) 2016.02.26
파티션 테이블(partition table) - 인덱스(index)  (0) 2016.02.25
SQL TUNNING - 1  (0) 2016.02.24

Recovery 원리

Oracle 시작 단계

 

NOMOUNT

· 서버 프로세스가 PFILE(SPFILE)에 지정된 대로 INSTANCE 생성

 

MOUNT

· CKPT 프로세스가 Control File을 읽고 일시 lock 설정

· Control File Header 정보 검증 (Control File 이상 여부 확인),

    -> MOUNTID 계산 값 Control File 저장

· “Successful mount of redo thread”

· “Database mounted...”

 

OPEN

· Data File Header 정보와 Control File Checkpoint SCN 정보 비교

 

Controlfile dump

- Control FileBinary File의 한 종류이므로 OS 명령어로 내용을 직접 확인할 수 없음

- dump 작업을 통해 Control File 내용 확인 가능

    * Control 파일은 Binary 파일 이므로 확인할 수 없어 dump 로 내려서 확인하기 위해 수행

 

SQL> show parameter user_dump_dest; ##dump 파일 위치 확인

SQL> alter session set tracefile_identifier='AAA'; ## 확장자 지정

SQL> oradebug setmypid; ## 현재 process id로 수행

SQL> oradebug dump controlf 3; ## control 파일 3dump

# vi/........./testdb_ora_45613110AAA.trc

     -> dump 내용 확인

 

 Checkpoint SCNStop SCN

- Checkpoint SCN은 현재까지 저장 완료된 SCN

- Stop SCN은 신규로 추가되는 데이터의 마지막 SCN을 의미

- DBopen 상태일 경우 마지막 SCN을 알 수 없으므로 무한대(0xffff.fffffff)로 설정

- DB가 정상 종료되거나 offline이 되는 경우 Checkpoint를 발생시켜 두 SCN을 일치시킴

 

 

Shutdown immediate

SQL> startup mount ## mount 단계

SQL> alter session set tracefile_identifier=BBB'; ## 확장자 지정

SQL> oradebug setmypid; ## 현재 process id로 수행

SQL> oradebug dump controlf 3; ## control 파일 3dump

 

 

 

Shutdown abort

SQL> startup mount ## mount 단계

SQL> alter session set tracefile_identifier=BBB'; ## 확장자 지정

SQL> oradebug setmypid; ## 현재 process id로 수행

SQL> oradebug dump controlf 3; ## control 파일 3dump

 

 SMONRedologfile을 이용해 Roll forward,backward를 이용해 scn을 맞춤

복구 과정 상세

1. Controlfile 내의 Checkpoint cntStop SCN 번호가 같은지 확인하고, 다르다면 Instance Crash로 판단,

Instance Recovery 수행 결정

 

2. Checkpoint cntStop SCN 번호가 같을 경우 실제 Datafileheader에 있는 Checkpoint SCNControl File 안에 있는

Stop SCN 번호와 같은지 비교

--> SCN정보가 같아도 control 파일과 datafilescn 정보가 다를 수 있어 바로 open 되지 않음

 

3. 복구가 필요하다고 판단되면 Datafile에 부족한 SCN중에 가장 낮은 SCN을 확인 후 Control File 안에 있는 Redo log file을 찾아감

 

4. 적당한 Redo log File을 찾게 되면 낮은 SCN 번호부터 순차적으로 Roll Forwared 시킴

 

5. Roll Forward가 끝나면 Undo 데이터를 뒤져서 commit 되지 않은 데이터는 다시 Roll Backward를 진행해서 복구를 완료합니다.

 

6. 마지막 SCN을 기록하면서 동기화 시키고 DB 정상 open

* checkpoint scn stop scn이 같다고 무조건 오픈되지 않음 ( datafile과도 비교해야함 )

 

'Study Note > Database' 카테고리의 다른 글

Cold Backup  (0) 2016.02.26
No Archive log / Archive log  (0) 2016.02.26
파티션 테이블(partition table) - 인덱스(index)  (0) 2016.02.25
SQL TUNNING - 1  (0) 2016.02.24
파티션 테이블(partition table)  (0) 2016.02.24

+ Recent posts