*프로세스 간단설명
DBWR:데이터 버퍼 캐쉬에 존재하는 더티 블럭들을 체크포인트가 발생하는 동시에 데이터 파일로 내려쓰는 기능
체크포인트 발생하는경우
1,새로운 데이터 블럭을 데이터 버퍼 캐쉬로 불러들이고자 할때 여유공간이 없는경우
2,타임아웃이 발생하는 경우 (LOG_CHECKPOINT_TIMEOUT파라미터 설정)
3,온라인 리두 로그 파일에 기록된 데이터 블럭(operating system block)의 수가 임의의 개수에 도달하는 경우(LOG_CHECKPOINT_INTERVAL 파라미터 설정)
4.데잍너 베이이스를 종료(closing)할 경우
5,더티 버퍼의 수가 어느정도의 threshold 값에 도달하는 경우
6,테이블스페이스가 오프라인이 되는 경우 또는 온라인 백업이 실행되는 경우
7,alter system checkpoint 명령을 사용하였을경우
LGWR: 사용자가 임의의 트랙잰션(transaction)에 대하여 커밋(commint)을 수행하고 나면 LGWR가 그시점에서의 리두 로그 버퍼에 저장되어있는 모든 리두로그 기록들을 리두 로그 파일로 내려쓰게 된다.(리두로그파일은 어느시점에서 데이터 파일이 손상이 되거나 손실된 경우 문제가 발생한 그 시점까지의 모든 데이터 변경에 관한 정보를 가지고 있으므로 데이터를 복구하는 경우 사용되는 파일)
PMON:오라클을 운용중에 임의의 오라클 프로세스에 문제가 생겨 실패하는 경우 임의의 오라클 프로세스가 사용하고 있던 리소스(resource)를 해제시킴으로 다른 사용자들이 그 리소스를 사용할수 있도록 해주는 기능을 가진다.
SMON:오라클 인스턴스에 문제가 생겨 어느 누구도 오라클 DB 접속할수 없는 상황이 되는 경우 데이터 베이스 버퍼 캐쉬에 아직 데이터 파일로 저장되지 못한 더티 버버(dorty buffer)들에 대해 리두 로그를 사용함으로써 복구가 이루어져야 한다. 인스턴스가 SMON에 의하여 다시 구동되어질때 인스턴스를 복구하는일을 담당.
CKPT: 로그 스위치가 일어나는 동시에 디비라이터는 데이터 버퍼 캐쉬에 존재하는 더티 버퍼들을 이제야 데이터베이스 파일로 내려쓰게 되는데 ,이것을 체크포인트라고 한다. 이때 CKPT는 DBWR로하여금 데이터 파일 헤더 부분에 현재의 상태를 CURRENT라고 기록하고 컨트롤 파일 내부와 데이터 파일 헤더부분에 현재 진행중인 체크포인트에 관한 체크포인트 시퀀스 넘버(sequence number)를 길록한다. 체크포인트 시콘스 넘버는 리두로그 파일,컨트롤파일,그리고 데이터 파일들이 모두 통합되어 있는 상태라는 것을 말해준다. 실제로 이파일들에 저장되어 있는 체크 포인트 시퀀스 넘버들이 어느하나라도 다른경우 데이터 베이이슬 시작할수없구,복구가 요구됨.
ARCH: 아카이버 프로세스는 이미 데이터베이스의 리두 기록들을 저장하고 이쓴ㄴ 리두로그 파일들을 임의의 안전한 외부 기억장치로 저장해주는 역할
>alter database archivelog <-아카이브 모드로 운용중일때..이역할 수행
데이터 파일: 일반 적으로 binary 파일
리두로그 파일: 임의의 데이터에 대한 변경 이전과 이후의 데이터의 이미지와 그에 관계된 정보를 저장하는 파일로 LGWR에 의해 리두로그 버퍼로부터 내려써지게 된다._.이후 아카이브 백그라운드 프로세스에 의해 아카이브로 보관된다.
컨트롤 파일: 기본적인 오라클 데이터베이스의 물리적인 구조와 상태에 관한 정보를 저장되는 파일,거의 모든 데이터베이스 내부적인 변경사항들이 이곳에 저장되므로 이후에 데이터베이스를 복구하는경우 사용 (컨트롤 파일에 체크포인트와 로그 시퀀스정보가 저장되어있는데 이것은 리두로그파일 컨트롤파일 그로그 데이터 파일)의 통합성 또는 일관성을 보관하는 척도)
아카이브 리두로그 파일
온라인 리두 로그 파일의 복사본으로 아카이브 백그라운드 포그세스(ARCH)에 의해 생성
* 백업으로부터 데이터베이스 파일과 아카이브 리두로그 파일의 복원
#sqlplus '/as sysdba'
>startup mount <---mount 후 recovery를 실시하게 된다.
>alter database recover <-init.ora파라미터파일의 log_archive_dest값의 위치로 복원
or >alter database recover database from '/arch'; <-직접경로지정 예
or >recover from '/arch/ database;
*ARCHIVE 모드
>alter system archivelog; <- 아카이브 모드로의 변경
>alter system archivelog stop; <-archive 프로세스 멈춤
>alter system noarchivelog; <-컨트롤 파일에 현재 데이터베이스의 아카이브 설정을 변경해 줌.
*자동 아카이브설정
>archive log list < -현재 상태 보기 automatic archiveal :disable이면 자동아카이브해제상태
init.ora 에 LOG_ARCHIvE_START=TRUE 후 데이터베이스 재시작
>alter system archive log start to '/opt/oracle/tmp'; <-자동 아카이브 모드설정 명령
>archive log list; <-확인해 본다.
>select sequence# from v$log; < -현재 설정되어있는 리두로그파일들의 로그 시퀀스넘버확인
*Alter system archive log [옵션들..]
thread: 아카이브되어질 리두 로그 그룹이 해당되는 thread 를 지정하는 경우
sequence :아카이브되어질 리두로그그룹이 가지는 로그 시퀀스 넘버를 지정하는 경우
chance:아카이브되어질 리두로그르룹이 가지는 SCN을 지정하는경우
group:아카이브되어질 리두로그 글부을 지정하는 경우
current:현재 current한 리두 로그 그룹을 아카이브하는 경우
logfile :아카이브할 리두 로그그룹의 파일 이름을 지정하는경우
next:아직 아카이브되어 있지 않았던 가장 오래된 리두 로그 그룹을 아카이브하는 경우
all:모든 아카이브 파일을 아카이브하는 경우
start:자동 아카이브옵션을 실행하는 경우
to:아카이브되는 파일이 정장되는 위치 설정
stop:자동아카이브 옵션을 종료시키는 경우
*v$ARHIVED_LOG
NAME:아카이브 리두로그파일의 위치와이름
SEQUENCE# :각각의 리두로그 파일에 설정된 시퀀스 넘버
ARCHIVED:아카이브 여부
COMPLETION_TIME: 아카이브 시점
>select name,sequence#,archived,completion_time from v$archived_log;
#ls -lrt /arch <--아카이브파일들 확인해라..
[Close 백업과 Open 백업]
*Close 백업 혹은 Cold백업은 DB가 내려가 있는 상태에서 실시
datafile,controlfile,redolog파일들의 위치를 파악후 백업
>select name from v$datafile;
or >select file_name from dba_data_files;
>select name from v$controlfile;
>select member from v$logfile;
*Open 백업 혹은 Hot백업은 DB가 기동되어있는 상태에서 백업
tablespace위치와 datafile위치확인후 백업
>select * from v$tablespace;
>select name from v$datafile;
>alter tablespace users begin backup; <-table space를 백업모드로
<-tablespace가 백업모드로 변경되면 그 테이블스페이스 내에 존재하는 데이터 파일의 헤더에 저장되어 있는 로그 시퀀스 넘버는 더이상 변경되지 않는다.그래서 데이터베이스 복구해야하는 경우 이 시점 이후에 발생하게 되는 새로운 트랙잭션들은 로그파일에 의해 복구가능해지는 것임.
백업후
>alter tablespace users end backup;
>alter system switch logfile; <-로그 스위치실행하여 모든데이터 파일 헤더에 저장되어있는 체크포인턴 넘버를 통합시켜준다.
확인방법
>select file#,status,tablespace_name,checkpoint_change#,name from v$datafile_header; <-check point 넘버확인
그리고 >alter tablespace users begin backup; 후 다시한번 checkpoint 넘버확인
<-users라는 테이블스페이스가 백업모드로 전환되면서 작동적으로 로그스위치
그리고 >alter tablespace users end backup; 후
>alter system switch logfile;하고 다시
checkpoint 넘버 확인해보면 모두 일치하는게 확인될것임
* 컨트롤 파일 백업
>alter database backup controlfile to '/arch/backup_controlfile.bkp;
<-다음과 같은 명령어로 백업실시 binary 파일이다
>alter database backup controlfile to trace;
<-init.ora의 user_dump_dest 파라미터값에 위해 udump로 저장된다 ascii 형태로
(*)완전 데이터베이스 복구
**사용자가 임의의 데이터 파일을 삭제해 버린경우 복구방법(데이터베이스 오픈상태에서 복구)
>select filed_id,file_name,talbespace_name,status from dba_data_files;
<-삭제되어진 데이터 파일이 어느 테이블스페이스인지 확인한다.
>alter database datafile '/database/COM/data/user.dbf' offline <-offline 상태 만들기
>select file#,status,name from v$datafile; <-user.dbf 가 status가 recover상태를 확인
>cp /backup/COM/user.dbf /database/COM/data <-손상된 db파일 복원
>recover datafile '/database/COM/data/user.dbf' <- 복원된 데이타 파일 복구
또는 >recover tablsespace users; <-user.dbf의 tablespace이름이 users라면..
>alter database datafile'/database/COM/data/user.dbf' online <-다시 online
>select file#,status,tablespace_name,checkpoint_change#,name from v$datafile_header;
<-check point 가 같을 경우 모든 데이터 파일들이 현재 통합되어 있다고 볼수있다.
**사용자가 임의의 데이터 파일을 삭제해 버린경우 복구방법(데이터베이스 오프상태에서 복구)
>cp /backup/COM/system.dbf /database/COM/data <-손상된 시스템 백업본 복사
>sqlplus /nolog
>connect /as sysdba
>startup mount <--mount 까지만 진행
>recover datafile '/database/COM/data/system.dbf'; <-복구
>alter database open; <-db open
>select file#,status,tablespace_name,checkpoing_change#,name from v$datafile_header;
<-check point 확인 같은지
**임의의 디스크가 송상되어 그안의 저장된 데이터 파일을 사용못하는상황(DB오픈상태복구)
>sqlplus /nolog
>connect /as sysdba
>startup mount
>select file#,status,error,tablespae_name from v$datafile_header; <-테이블스페이스users가 손실 되었을경우 ->tablasespace_name file not found 로 나옴
>alter database datafie '/database/COM/data/user.dbf' offline;
>select file#,status,error,tablespae_name from v$datafile_header; <-offline 되어있는지확인
그다음 백업으로 user.dbf 파일을 restore한다 디스크 손상가정이므로 다른디스크에 복원
예)/tmp/COM 여긴 다른 디스크라 가정하자..
>alter database rename file '/database/COM/data/user.dbf' to /tmp/COM/user.dbf;
<-기존 user.dbf 파일의 이름을 복원된 datafile로 이름을 바꿔준다.
>select file#,status,error,tablespae_name from v$datafile_header; <-다시 보면 tabable space확인 가능
>recover datafile '/tmp/COM/user.dbf'; <-복구한다.
>alter database datafie '/tmp/COM/user.dbf' online <-online후
>select file#,status,error,tablespae_name from v$datafile_header; <- 상태확인
(*)두개의 리두로그파일 존재시 파일 복구방법
** 손상된 리두 로그파일을 제거하여 재사용하는 방법
>select * from v$logfile; <- 현상태 확인 status <- status 라고 안나오면 비정ㅇ상
#cp /database/COM/redo/log_02.dbf /dtabase/COM/redo/log_01.dbf <2에서1번으로 카피
>alter database clear unarchived logfile 'database/COM/redo/log_01.dbf';
**리두로그파일 단지 2개일경우 무작정거한후 다시 추가할수 없다. 이때는 다시 리두로그그룹을 추가시켜 해결가능(리두로그파일은 최소한 2개존재해야함)
>select * from v$logfile; <-log_01.dfb 파일 손상확인
>alter database add logfile group3 '/database/COM/redo/log_03.dbf'; <-임시 리두로그추가
>alter database drop logfile group 1; <-로그그룹1번 삭제
>alter database add logfile group1 '/database/COM/redo/log_01.dbf' SIZE 1M;
<-다시 리두로그 그룹 1을 데이터베이스에 다시 추가
>alter database drop logfile group 3; <-리두로그그룹 3번삭제
>alter database open; <- db open
(*) 불완전한 데이터베이스 복구
.아카이브리두 로그파일손상
.컨트롤 파일이 손실된경우
.리두 로그 파일이 손실된경우
* 아카이브로그 파일 적용 복구 "cancell' 복구방법
>shutdown
#cp /backup/data/* /database/COM/data <-db파일 restore
>sqlplus /nolog
>connect /as sysdba
>startup mount
>recover database until cancel;
적용될 아카이브를 하나씩 보여주고
마지막에 적용되지 못할 아카이브파일을 보여주면
cancel 이라 입력하면 그이전까지 복구된다.
>alter database open resetlog; <-db를 resetlogs옵션으로 오픈
* 과거임의의 특정시점까지 데이터 베이스 복구 상황
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover database until time '2004-02-17:06:42:00'; <-특정시점까지 복구
>alter database open resetlog;
* 임의의 시스템 체인지 넘버 (SCN)시점까지 DB복구
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover database until scn 16673;
>alter database open resetlog;
* 예전 백업해두웠던 컨트롤파일을 이용복구
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover dtabase using backup controlfile;
>alter database open resetlogs;
**Export 와 Import
Export:데이터베이스 오브젝트(Table 또는 인덱스)에 대한 논리적백업
Import:export 파일에 저장되어 있는 데이터들을 데이터베이스 내부로 읽어들여 저장할 수 있도록해주는 기능
-대화형 export
#exp
username:com
passwd:****
buffersize: > 4096
file name:> expdat.dmp
user,table:> 2
export grants y/n >yes
export talbe data y/n > yes
compress extents y/n > yes
-명령어를 제공하는 export
#exp com/*** tables=COM_MSG rows=y file=COM_test_exp.dump
-conventional path =>데이터를 데이터파일로부터 데이터 버퍼캐쉬로 불러들인 후에 그 데이터를 사용자 프로세스로 보내고 결국 마지막으로 파일에 저장되는 방법
-direct path => 데이터 버퍼캐쉬를 통하지 않고 바로 데이터 파일로 부터 데이터를 읽어 들인 후에 바로 사용자 프로세스로 보내어 데이터를 처리(빠르다)
* Export 유틸리티에 사용되는 모드
- Full database mode : sys 스키마 내에 포함되어 있는 오브젝트를 제외한 모든 데이터베이스 오브젝트를 export
=comleate export:full백업
=incremental export:증가분 백업
=cumulative export:마지막으로 실행된 compelte export이후의 증가분 백업)
-tablespace mode
-table mode :임의의 사용자 스키마에 존재하는 임의의 테이블 exort하는경우
-user mode :임의의 사용자 스키마에 존재하는 테이블을 포함하는 모든 오브젝트 export
*Export 유틸리티 실행에서 사용되는 파라미터
.userid:사용자의 오라클 아이디
#exp com/**** tables=COM_MSG
.buffer: Export 과정에서 row를 fetch 하는 경우 요구되는 buffer 크기 설정
#exp com/**** tables=COM_MSG buffer=4096
.file: export된 정보를 저장하게 될 dump 파일
#exp com/**** tables=COM_MSG file= COM_test_exp.dmp
.compress: fragment 된 세그먼트들을 하나의 extent로 compress
#exp com/**** tables=COM_MSG compress=yes file= COM_test_exp.dmp
.rows:데이터 베이스 오브젝트 내에 존재하는 모든 row를 export할때
#exp com/**** tables=COM_MSG rows=y file= COM_test_exp.dmp
.full: db전체를 export (dba처럼 EXP_FULL_DATABASE)를 가져와야함
#exp dba/**** tables=COM_MSG full=y rows=y file= COM_test_exp.dmp
.owner:사용자모드로 DB를 export하는 경우
#exp com/**** tables=COM_MSG owner=com rows=y file= COM_test_exp.dmp
.tables :테이블 모드로 데이터 베이스를 export하는 경우 사용자 스키마에 포함되는 임의의 테이블 이름 설정
#exp com/**** tables=COM_MSG tables=tb_COM_data,tb_COM_names rows=y file= COM_test_exp.dmp
.indexs :index도 같이 export
.parfile :파일에 있는 파라미터 값으로 실행하는 방법
#vi par_test.par
userid=com/***
tables=TB_COM_SERVICE
rows=y
file=COM_test_exp.dmp
#exp parfile=par_test.par
.help : 설명 (기본은 n)
#exp com/**** tables=COM_MSG rows=y file= COM_test_exp.dmp help=y
.log:로그파일 저장
#exp com/**** tables=COM_MSG rows=y log=exp.log file= COM_test_exp.dmp
.statistics :export 되는 데이터 베이스 오브젝트에 대하여 ANALYZE명령을 사용할 것인지설정
(estimate,compute,none :기본은 estimate)
#exp com/**** tables=COM_MSG rows=y statistics=compute file= COM_test_exp.dmp
.consistent :export되는 동안 서로 연관이 있는 테이블들의 데이터들이 수정되는 경우 충분한 롤백세그멘트 공간이 요구된다.
#exp com/**** tables=COM_MSG rows=y consistent=y file= COM_test_exp.dmp
.feedback=1000 <- 1000건 받을때 마다 .. " . " 점 찍히는지 확인하려구
.tablespaces :export되게 될 테이블스페이스 리스트 설정
*exprot 시 주의 사항 :
- LONG칼럼에 대한 데이터가 포함된 하나의 row를 처리할수 있는 메모리
- full,table,owner 파아미터들은 동시사용할수 없다.(mutually exclusive)
- consistent 파라미터는 가급적 데이터 분량이 큰 오브젝트는 피한다.
- direct path는 명령어 사용하는 export에서만 실행가능
- direct path설정하여 export하는 경우 buffer 파라미터 사용못함. buffer파라미터는 conventional path사용하는 경우에만 사용
**Import
- 대화형식
>imp
user:com_owner
passwd:***
import file>COM_analysis.dmp
enter insert buffer size>30720
list contents of import file only>no
ignore create error>no
import grants>yes
import table data>yes
import entire export file>no
username:com_owner
*Import 유틸리티 실행에서 사용되는 파라미터
.userid :import유틸리티 실행하고 이쓴 사용자의 오라클 사용자 아이디
.file: import되어질 정보를 저장하고 있는 export파일
.rows :임의의 데이터베이스 오브젝트 내에 존재하는 모든 로우(row)를 import시 포함하는 것을 설정
defautl Y ,만약 N라면 데이터베이스 오프젝트에 대한 DDL정보만 import
.ignore:DDL create명령을 실행할때 import유틸리티는 발생하는 에러를 무시하고 넘어가게 된다는 의미를 가진다.import시 이미존재하는 object를 import하는 경우 필요
>imp dba/dat_pw full=y rows=y file=COM_test_exp.dump
.tables:import 되어질 테이블명
.indexs:임의의 테이블에 관계된 index를 함께 import할 것인지를 설정한다.기본값 Y
.parfile :import를 실행할때 사용되게 될 파라미터 파일의 이름 설정
>imp parfile=Par_test.par
.help :import실행할때 화면에 간단한 파라미터 설명 보여주는 기능 ,default=N
.log :import 실행시 과정을 로그 파일로 저장하기 원하는 경우 설정
>imp com/com_pw tables=COM_MSG rows=y log=COM_test_exp.log file=COM_test_exp.dump
.stattistics
export되는 데이터베이스 오브젝트에 대하여 analyze 명령을 사용할 것인지를 설정한다. 이때 설정 할수 있는 옵션은 esimate,compute,그리고 none이 존재한다.
>imp com/com_pw tables=COM_MSG rows=y statistics=compu file=COM_test_exp.dump
.destory: full export dump 파일에 create tablesspace라는 명령이 존재할 경우 destory =Y라고 설정하게 되면 import유틸리에 의해 임의의 테이블스페이스 생성하게 될때 기존에 존재하고 있던 데이터를 overwrite 하게 된다는 조건을 부여 default =N
.fromuser :export파일이 존재할경우 그가운데 임의의 사용자에게 해당오브젝트들을 읽어들일지에 대한 사용자의 이름지정,full export의경우 사용 못함
.touser export된 dump 파일로부터 읽어들인 임의의 데이터 베이스 오브젝트를 어느 사용자의 스키마로 import할 것인지 설정
.direct :export 처리할때 사용하게 될 ,path 에 대한 설정,Y:direct path ,N:conventional path
.analyze :export된 dump파일 내부에 존재하는 analyze 명령을 import시 실행할 것인지에 대한 설정
.tablespaces :export된 dump파일 내부에 저장되어있는 테이블스페이스 가운데 실제로 import하게될 테이블 리스트설정
*테이블을 import하는 경우
1)import 유틸리트 실행
2)create table 명령
3)rows=Y row date가 새롭게 생성된 테이블로 import
4)인덱스 생성 (import유틸리티가 성공적종료후 index생성하는게 좋다)
5)데이터 베이스 트리거가 import된다.
6)integrity constraint가 새롭게 생성된 테이블에 생성된다.
7)비트맵 인덱스 구조가 생성된다.
*import 유틸리티에 사용되는 모드
.full database mode :export파일에 저장되어있는 오브젝트중 SYS스키마에 포함되어 있는 오브젝트를 제외한 모든 데이터베이스 오브젝트들을 import할수 있는 모드,(imp_fll_database role을가진사용자에서만 가능
.talbe mode: export 에 저장되어있는 임의의 사용자 스키마에 존재하는 임의의 테이블들을 impor할경우 사용되는 모드
.user mode
*데이터 백업/복구에 과한 데이터 딕셔너리 정보
>select intance_name,status,archiver,startup_time from V$INSTANCE;
:현재 status ,arhive프로세스가 존재하는지 보여줌
>sleect name,resetlog_time,log_mode,checkpoint_change#,controlfile_sequence# from V$DATABASES;
>select file#,creation_time,status,bytes,blocks,name from v$datafile;
<-현상태 확인 online인지 오프라인인지
>alter database archivelog < -아카이브 모드설정안되어있슴 전환시켜준다.
>alter tablespace users begin backup;
>select file#,creation_time,status,bytes,blocks,name from v$datafile;
<-user 데이타파일만 status가 RECOVER이고 나머지는 ONLINE임이 확인될것이다.
reocver상태가 되면 아무도 user.dbf 파일에 액세스 할수 없다.
>select group#,sequence#,bytes,archived,status from v$log;
<-현재 리둘로그파일의 시퀀스넘버와 현재 아카이브상태를 확인하는데 사용
>select * from v$tablsespace; <-데이터베이스 백업시 임의의 테이블 스페이를 오프라인으로 만들어줄때 테이블 스페이스 이름 참조시 사용
>select * from v$recover_file; : 데이타파일의 온라인 여부 확인
>select * from v$backup; :현재 백업모든인지확인
select file#,status,tablespace_name,checkpoinrt_change#,fuzzy,name from v$datafie_header;
<fuzz칼럼이 yes연경우 백업모드로 전환된 상태라는것을 의미
출처 : http://ioneit.co.kr/ver1/bbs/board.php?bo_table=tiptech1_3&wr_id=1
DBWR:데이터 버퍼 캐쉬에 존재하는 더티 블럭들을 체크포인트가 발생하는 동시에 데이터 파일로 내려쓰는 기능
체크포인트 발생하는경우
1,새로운 데이터 블럭을 데이터 버퍼 캐쉬로 불러들이고자 할때 여유공간이 없는경우
2,타임아웃이 발생하는 경우 (LOG_CHECKPOINT_TIMEOUT파라미터 설정)
3,온라인 리두 로그 파일에 기록된 데이터 블럭(operating system block)의 수가 임의의 개수에 도달하는 경우(LOG_CHECKPOINT_INTERVAL 파라미터 설정)
4.데잍너 베이이스를 종료(closing)할 경우
5,더티 버퍼의 수가 어느정도의 threshold 값에 도달하는 경우
6,테이블스페이스가 오프라인이 되는 경우 또는 온라인 백업이 실행되는 경우
7,alter system checkpoint 명령을 사용하였을경우
LGWR: 사용자가 임의의 트랙잰션(transaction)에 대하여 커밋(commint)을 수행하고 나면 LGWR가 그시점에서의 리두 로그 버퍼에 저장되어있는 모든 리두로그 기록들을 리두 로그 파일로 내려쓰게 된다.(리두로그파일은 어느시점에서 데이터 파일이 손상이 되거나 손실된 경우 문제가 발생한 그 시점까지의 모든 데이터 변경에 관한 정보를 가지고 있으므로 데이터를 복구하는 경우 사용되는 파일)
PMON:오라클을 운용중에 임의의 오라클 프로세스에 문제가 생겨 실패하는 경우 임의의 오라클 프로세스가 사용하고 있던 리소스(resource)를 해제시킴으로 다른 사용자들이 그 리소스를 사용할수 있도록 해주는 기능을 가진다.
SMON:오라클 인스턴스에 문제가 생겨 어느 누구도 오라클 DB 접속할수 없는 상황이 되는 경우 데이터 베이스 버퍼 캐쉬에 아직 데이터 파일로 저장되지 못한 더티 버버(dorty buffer)들에 대해 리두 로그를 사용함으로써 복구가 이루어져야 한다. 인스턴스가 SMON에 의하여 다시 구동되어질때 인스턴스를 복구하는일을 담당.
CKPT: 로그 스위치가 일어나는 동시에 디비라이터는 데이터 버퍼 캐쉬에 존재하는 더티 버퍼들을 이제야 데이터베이스 파일로 내려쓰게 되는데 ,이것을 체크포인트라고 한다. 이때 CKPT는 DBWR로하여금 데이터 파일 헤더 부분에 현재의 상태를 CURRENT라고 기록하고 컨트롤 파일 내부와 데이터 파일 헤더부분에 현재 진행중인 체크포인트에 관한 체크포인트 시퀀스 넘버(sequence number)를 길록한다. 체크포인트 시콘스 넘버는 리두로그 파일,컨트롤파일,그리고 데이터 파일들이 모두 통합되어 있는 상태라는 것을 말해준다. 실제로 이파일들에 저장되어 있는 체크 포인트 시퀀스 넘버들이 어느하나라도 다른경우 데이터 베이이슬 시작할수없구,복구가 요구됨.
ARCH: 아카이버 프로세스는 이미 데이터베이스의 리두 기록들을 저장하고 이쓴ㄴ 리두로그 파일들을 임의의 안전한 외부 기억장치로 저장해주는 역할
>alter database archivelog <-아카이브 모드로 운용중일때..이역할 수행
데이터 파일: 일반 적으로 binary 파일
리두로그 파일: 임의의 데이터에 대한 변경 이전과 이후의 데이터의 이미지와 그에 관계된 정보를 저장하는 파일로 LGWR에 의해 리두로그 버퍼로부터 내려써지게 된다._.이후 아카이브 백그라운드 프로세스에 의해 아카이브로 보관된다.
컨트롤 파일: 기본적인 오라클 데이터베이스의 물리적인 구조와 상태에 관한 정보를 저장되는 파일,거의 모든 데이터베이스 내부적인 변경사항들이 이곳에 저장되므로 이후에 데이터베이스를 복구하는경우 사용 (컨트롤 파일에 체크포인트와 로그 시퀀스정보가 저장되어있는데 이것은 리두로그파일 컨트롤파일 그로그 데이터 파일)의 통합성 또는 일관성을 보관하는 척도)
아카이브 리두로그 파일
온라인 리두 로그 파일의 복사본으로 아카이브 백그라운드 포그세스(ARCH)에 의해 생성
* 백업으로부터 데이터베이스 파일과 아카이브 리두로그 파일의 복원
#sqlplus '/as sysdba'
>startup mount <---mount 후 recovery를 실시하게 된다.
>alter database recover <-init.ora파라미터파일의 log_archive_dest값의 위치로 복원
or >alter database recover database from '/arch'; <-직접경로지정 예
or >recover from '/arch/ database;
*ARCHIVE 모드
>alter system archivelog; <- 아카이브 모드로의 변경
>alter system archivelog stop; <-archive 프로세스 멈춤
>alter system noarchivelog; <-컨트롤 파일에 현재 데이터베이스의 아카이브 설정을 변경해 줌.
*자동 아카이브설정
>archive log list < -현재 상태 보기 automatic archiveal :disable이면 자동아카이브해제상태
init.ora 에 LOG_ARCHIvE_START=TRUE 후 데이터베이스 재시작
>alter system archive log start to '/opt/oracle/tmp'; <-자동 아카이브 모드설정 명령
>archive log list; <-확인해 본다.
>select sequence# from v$log; < -현재 설정되어있는 리두로그파일들의 로그 시퀀스넘버확인
*Alter system archive log [옵션들..]
thread: 아카이브되어질 리두 로그 그룹이 해당되는 thread 를 지정하는 경우
sequence :아카이브되어질 리두로그그룹이 가지는 로그 시퀀스 넘버를 지정하는 경우
chance:아카이브되어질 리두로그르룹이 가지는 SCN을 지정하는경우
group:아카이브되어질 리두로그 글부을 지정하는 경우
current:현재 current한 리두 로그 그룹을 아카이브하는 경우
logfile :아카이브할 리두 로그그룹의 파일 이름을 지정하는경우
next:아직 아카이브되어 있지 않았던 가장 오래된 리두 로그 그룹을 아카이브하는 경우
all:모든 아카이브 파일을 아카이브하는 경우
start:자동 아카이브옵션을 실행하는 경우
to:아카이브되는 파일이 정장되는 위치 설정
stop:자동아카이브 옵션을 종료시키는 경우
*v$ARHIVED_LOG
NAME:아카이브 리두로그파일의 위치와이름
SEQUENCE# :각각의 리두로그 파일에 설정된 시퀀스 넘버
ARCHIVED:아카이브 여부
COMPLETION_TIME: 아카이브 시점
>select name,sequence#,archived,completion_time from v$archived_log;
#ls -lrt /arch <--아카이브파일들 확인해라..
[Close 백업과 Open 백업]
*Close 백업 혹은 Cold백업은 DB가 내려가 있는 상태에서 실시
datafile,controlfile,redolog파일들의 위치를 파악후 백업
>select name from v$datafile;
or >select file_name from dba_data_files;
>select name from v$controlfile;
>select member from v$logfile;
*Open 백업 혹은 Hot백업은 DB가 기동되어있는 상태에서 백업
tablespace위치와 datafile위치확인후 백업
>select * from v$tablespace;
>select name from v$datafile;
>alter tablespace users begin backup; <-table space를 백업모드로
<-tablespace가 백업모드로 변경되면 그 테이블스페이스 내에 존재하는 데이터 파일의 헤더에 저장되어 있는 로그 시퀀스 넘버는 더이상 변경되지 않는다.그래서 데이터베이스 복구해야하는 경우 이 시점 이후에 발생하게 되는 새로운 트랙잭션들은 로그파일에 의해 복구가능해지는 것임.
백업후
>alter tablespace users end backup;
>alter system switch logfile; <-로그 스위치실행하여 모든데이터 파일 헤더에 저장되어있는 체크포인턴 넘버를 통합시켜준다.
확인방법
>select file#,status,tablespace_name,checkpoint_change#,name from v$datafile_header; <-check point 넘버확인
그리고 >alter tablespace users begin backup; 후 다시한번 checkpoint 넘버확인
<-users라는 테이블스페이스가 백업모드로 전환되면서 작동적으로 로그스위치
그리고 >alter tablespace users end backup; 후
>alter system switch logfile;하고 다시
checkpoint 넘버 확인해보면 모두 일치하는게 확인될것임
* 컨트롤 파일 백업
>alter database backup controlfile to '/arch/backup_controlfile.bkp;
<-다음과 같은 명령어로 백업실시 binary 파일이다
>alter database backup controlfile to trace;
<-init.ora의 user_dump_dest 파라미터값에 위해 udump로 저장된다 ascii 형태로
(*)완전 데이터베이스 복구
**사용자가 임의의 데이터 파일을 삭제해 버린경우 복구방법(데이터베이스 오픈상태에서 복구)
>select filed_id,file_name,talbespace_name,status from dba_data_files;
<-삭제되어진 데이터 파일이 어느 테이블스페이스인지 확인한다.
>alter database datafile '/database/COM/data/user.dbf' offline <-offline 상태 만들기
>select file#,status,name from v$datafile; <-user.dbf 가 status가 recover상태를 확인
>cp /backup/COM/user.dbf /database/COM/data <-손상된 db파일 복원
>recover datafile '/database/COM/data/user.dbf' <- 복원된 데이타 파일 복구
또는 >recover tablsespace users; <-user.dbf의 tablespace이름이 users라면..
>alter database datafile'/database/COM/data/user.dbf' online <-다시 online
>select file#,status,tablespace_name,checkpoint_change#,name from v$datafile_header;
<-check point 가 같을 경우 모든 데이터 파일들이 현재 통합되어 있다고 볼수있다.
**사용자가 임의의 데이터 파일을 삭제해 버린경우 복구방법(데이터베이스 오프상태에서 복구)
>cp /backup/COM/system.dbf /database/COM/data <-손상된 시스템 백업본 복사
>sqlplus /nolog
>connect /as sysdba
>startup mount <--mount 까지만 진행
>recover datafile '/database/COM/data/system.dbf'; <-복구
>alter database open; <-db open
>select file#,status,tablespace_name,checkpoing_change#,name from v$datafile_header;
<-check point 확인 같은지
**임의의 디스크가 송상되어 그안의 저장된 데이터 파일을 사용못하는상황(DB오픈상태복구)
>sqlplus /nolog
>connect /as sysdba
>startup mount
>select file#,status,error,tablespae_name from v$datafile_header; <-테이블스페이스users가 손실 되었을경우 ->tablasespace_name file not found 로 나옴
>alter database datafie '/database/COM/data/user.dbf' offline;
>select file#,status,error,tablespae_name from v$datafile_header; <-offline 되어있는지확인
그다음 백업으로 user.dbf 파일을 restore한다 디스크 손상가정이므로 다른디스크에 복원
예)/tmp/COM 여긴 다른 디스크라 가정하자..
>alter database rename file '/database/COM/data/user.dbf' to /tmp/COM/user.dbf;
<-기존 user.dbf 파일의 이름을 복원된 datafile로 이름을 바꿔준다.
>select file#,status,error,tablespae_name from v$datafile_header; <-다시 보면 tabable space확인 가능
>recover datafile '/tmp/COM/user.dbf'; <-복구한다.
>alter database datafie '/tmp/COM/user.dbf' online <-online후
>select file#,status,error,tablespae_name from v$datafile_header; <- 상태확인
(*)두개의 리두로그파일 존재시 파일 복구방법
** 손상된 리두 로그파일을 제거하여 재사용하는 방법
>select * from v$logfile; <- 현상태 확인 status <- status 라고 안나오면 비정ㅇ상
#cp /database/COM/redo/log_02.dbf /dtabase/COM/redo/log_01.dbf <2에서1번으로 카피
>alter database clear unarchived logfile 'database/COM/redo/log_01.dbf';
**리두로그파일 단지 2개일경우 무작정거한후 다시 추가할수 없다. 이때는 다시 리두로그그룹을 추가시켜 해결가능(리두로그파일은 최소한 2개존재해야함)
>select * from v$logfile; <-log_01.dfb 파일 손상확인
>alter database add logfile group3 '/database/COM/redo/log_03.dbf'; <-임시 리두로그추가
>alter database drop logfile group 1; <-로그그룹1번 삭제
>alter database add logfile group1 '/database/COM/redo/log_01.dbf' SIZE 1M;
<-다시 리두로그 그룹 1을 데이터베이스에 다시 추가
>alter database drop logfile group 3; <-리두로그그룹 3번삭제
>alter database open; <- db open
(*) 불완전한 데이터베이스 복구
.아카이브리두 로그파일손상
.컨트롤 파일이 손실된경우
.리두 로그 파일이 손실된경우
* 아카이브로그 파일 적용 복구 "cancell' 복구방법
>shutdown
#cp /backup/data/* /database/COM/data <-db파일 restore
>sqlplus /nolog
>connect /as sysdba
>startup mount
>recover database until cancel;
적용될 아카이브를 하나씩 보여주고
마지막에 적용되지 못할 아카이브파일을 보여주면
cancel 이라 입력하면 그이전까지 복구된다.
>alter database open resetlog; <-db를 resetlogs옵션으로 오픈
* 과거임의의 특정시점까지 데이터 베이스 복구 상황
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover database until time '2004-02-17:06:42:00'; <-특정시점까지 복구
>alter database open resetlog;
* 임의의 시스템 체인지 넘버 (SCN)시점까지 DB복구
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover database until scn 16673;
>alter database open resetlog;
* 예전 백업해두웠던 컨트롤파일을 이용복구
>shutdown
#cp /backup/data/* /database/COM/data < -db 복구
#sysdba
>startup mount
>recover dtabase using backup controlfile;
>alter database open resetlogs;
**Export 와 Import
Export:데이터베이스 오브젝트(Table 또는 인덱스)에 대한 논리적백업
Import:export 파일에 저장되어 있는 데이터들을 데이터베이스 내부로 읽어들여 저장할 수 있도록해주는 기능
-대화형 export
#exp
username:com
passwd:****
buffersize: > 4096
file name:> expdat.dmp
user,table:> 2
export grants y/n >yes
export talbe data y/n > yes
compress extents y/n > yes
-명령어를 제공하는 export
#exp com/*** tables=COM_MSG rows=y file=COM_test_exp.dump
-conventional path =>데이터를 데이터파일로부터 데이터 버퍼캐쉬로 불러들인 후에 그 데이터를 사용자 프로세스로 보내고 결국 마지막으로 파일에 저장되는 방법
-direct path => 데이터 버퍼캐쉬를 통하지 않고 바로 데이터 파일로 부터 데이터를 읽어 들인 후에 바로 사용자 프로세스로 보내어 데이터를 처리(빠르다)
* Export 유틸리티에 사용되는 모드
- Full database mode : sys 스키마 내에 포함되어 있는 오브젝트를 제외한 모든 데이터베이스 오브젝트를 export
=comleate export:full백업
=incremental export:증가분 백업
=cumulative export:마지막으로 실행된 compelte export이후의 증가분 백업)
-tablespace mode
-table mode :임의의 사용자 스키마에 존재하는 임의의 테이블 exort하는경우
-user mode :임의의 사용자 스키마에 존재하는 테이블을 포함하는 모든 오브젝트 export
*Export 유틸리티 실행에서 사용되는 파라미터
.userid:사용자의 오라클 아이디
#exp com/**** tables=COM_MSG
.buffer: Export 과정에서 row를 fetch 하는 경우 요구되는 buffer 크기 설정
#exp com/**** tables=COM_MSG buffer=4096
.file: export된 정보를 저장하게 될 dump 파일
#exp com/**** tables=COM_MSG file= COM_test_exp.dmp
.compress: fragment 된 세그먼트들을 하나의 extent로 compress
#exp com/**** tables=COM_MSG compress=yes file= COM_test_exp.dmp
.rows:데이터 베이스 오브젝트 내에 존재하는 모든 row를 export할때
#exp com/**** tables=COM_MSG rows=y file= COM_test_exp.dmp
.full: db전체를 export (dba처럼 EXP_FULL_DATABASE)를 가져와야함
#exp dba/**** tables=COM_MSG full=y rows=y file= COM_test_exp.dmp
.owner:사용자모드로 DB를 export하는 경우
#exp com/**** tables=COM_MSG owner=com rows=y file= COM_test_exp.dmp
.tables :테이블 모드로 데이터 베이스를 export하는 경우 사용자 스키마에 포함되는 임의의 테이블 이름 설정
#exp com/**** tables=COM_MSG tables=tb_COM_data,tb_COM_names rows=y file= COM_test_exp.dmp
.indexs :index도 같이 export
.parfile :파일에 있는 파라미터 값으로 실행하는 방법
#vi par_test.par
userid=com/***
tables=TB_COM_SERVICE
rows=y
file=COM_test_exp.dmp
#exp parfile=par_test.par
.help : 설명 (기본은 n)
#exp com/**** tables=COM_MSG rows=y file= COM_test_exp.dmp help=y
.log:로그파일 저장
#exp com/**** tables=COM_MSG rows=y log=exp.log file= COM_test_exp.dmp
.statistics :export 되는 데이터 베이스 오브젝트에 대하여 ANALYZE명령을 사용할 것인지설정
(estimate,compute,none :기본은 estimate)
#exp com/**** tables=COM_MSG rows=y statistics=compute file= COM_test_exp.dmp
.consistent :export되는 동안 서로 연관이 있는 테이블들의 데이터들이 수정되는 경우 충분한 롤백세그멘트 공간이 요구된다.
#exp com/**** tables=COM_MSG rows=y consistent=y file= COM_test_exp.dmp
.feedback=1000 <- 1000건 받을때 마다 .. " . " 점 찍히는지 확인하려구
.tablespaces :export되게 될 테이블스페이스 리스트 설정
*exprot 시 주의 사항 :
- LONG칼럼에 대한 데이터가 포함된 하나의 row를 처리할수 있는 메모리
- full,table,owner 파아미터들은 동시사용할수 없다.(mutually exclusive)
- consistent 파라미터는 가급적 데이터 분량이 큰 오브젝트는 피한다.
- direct path는 명령어 사용하는 export에서만 실행가능
- direct path설정하여 export하는 경우 buffer 파라미터 사용못함. buffer파라미터는 conventional path사용하는 경우에만 사용
**Import
- 대화형식
>imp
user:com_owner
passwd:***
import file>COM_analysis.dmp
enter insert buffer size>30720
list contents of import file only>no
ignore create error>no
import grants>yes
import table data>yes
import entire export file>no
username:com_owner
*Import 유틸리티 실행에서 사용되는 파라미터
.userid :import유틸리티 실행하고 이쓴 사용자의 오라클 사용자 아이디
.file: import되어질 정보를 저장하고 있는 export파일
.rows :임의의 데이터베이스 오브젝트 내에 존재하는 모든 로우(row)를 import시 포함하는 것을 설정
defautl Y ,만약 N라면 데이터베이스 오프젝트에 대한 DDL정보만 import
.ignore:DDL create명령을 실행할때 import유틸리티는 발생하는 에러를 무시하고 넘어가게 된다는 의미를 가진다.import시 이미존재하는 object를 import하는 경우 필요
>imp dba/dat_pw full=y rows=y file=COM_test_exp.dump
.tables:import 되어질 테이블명
.indexs:임의의 테이블에 관계된 index를 함께 import할 것인지를 설정한다.기본값 Y
.parfile :import를 실행할때 사용되게 될 파라미터 파일의 이름 설정
>imp parfile=Par_test.par
.help :import실행할때 화면에 간단한 파라미터 설명 보여주는 기능 ,default=N
.log :import 실행시 과정을 로그 파일로 저장하기 원하는 경우 설정
>imp com/com_pw tables=COM_MSG rows=y log=COM_test_exp.log file=COM_test_exp.dump
.stattistics
export되는 데이터베이스 오브젝트에 대하여 analyze 명령을 사용할 것인지를 설정한다. 이때 설정 할수 있는 옵션은 esimate,compute,그리고 none이 존재한다.
>imp com/com_pw tables=COM_MSG rows=y statistics=compu file=COM_test_exp.dump
.destory: full export dump 파일에 create tablesspace라는 명령이 존재할 경우 destory =Y라고 설정하게 되면 import유틸리에 의해 임의의 테이블스페이스 생성하게 될때 기존에 존재하고 있던 데이터를 overwrite 하게 된다는 조건을 부여 default =N
.fromuser :export파일이 존재할경우 그가운데 임의의 사용자에게 해당오브젝트들을 읽어들일지에 대한 사용자의 이름지정,full export의경우 사용 못함
.touser export된 dump 파일로부터 읽어들인 임의의 데이터 베이스 오브젝트를 어느 사용자의 스키마로 import할 것인지 설정
.direct :export 처리할때 사용하게 될 ,path 에 대한 설정,Y:direct path ,N:conventional path
.analyze :export된 dump파일 내부에 존재하는 analyze 명령을 import시 실행할 것인지에 대한 설정
.tablespaces :export된 dump파일 내부에 저장되어있는 테이블스페이스 가운데 실제로 import하게될 테이블 리스트설정
*테이블을 import하는 경우
1)import 유틸리트 실행
2)create table 명령
3)rows=Y row date가 새롭게 생성된 테이블로 import
4)인덱스 생성 (import유틸리티가 성공적종료후 index생성하는게 좋다)
5)데이터 베이스 트리거가 import된다.
6)integrity constraint가 새롭게 생성된 테이블에 생성된다.
7)비트맵 인덱스 구조가 생성된다.
*import 유틸리티에 사용되는 모드
.full database mode :export파일에 저장되어있는 오브젝트중 SYS스키마에 포함되어 있는 오브젝트를 제외한 모든 데이터베이스 오브젝트들을 import할수 있는 모드,(imp_fll_database role을가진사용자에서만 가능
.talbe mode: export 에 저장되어있는 임의의 사용자 스키마에 존재하는 임의의 테이블들을 impor할경우 사용되는 모드
.user mode
*데이터 백업/복구에 과한 데이터 딕셔너리 정보
>select intance_name,status,archiver,startup_time from V$INSTANCE;
:현재 status ,arhive프로세스가 존재하는지 보여줌
>sleect name,resetlog_time,log_mode,checkpoint_change#,controlfile_sequence# from V$DATABASES;
>select file#,creation_time,status,bytes,blocks,name from v$datafile;
<-현상태 확인 online인지 오프라인인지
>alter database archivelog < -아카이브 모드설정안되어있슴 전환시켜준다.
>alter tablespace users begin backup;
>select file#,creation_time,status,bytes,blocks,name from v$datafile;
<-user 데이타파일만 status가 RECOVER이고 나머지는 ONLINE임이 확인될것이다.
reocver상태가 되면 아무도 user.dbf 파일에 액세스 할수 없다.
>select group#,sequence#,bytes,archived,status from v$log;
<-현재 리둘로그파일의 시퀀스넘버와 현재 아카이브상태를 확인하는데 사용
>select * from v$tablsespace; <-데이터베이스 백업시 임의의 테이블 스페이를 오프라인으로 만들어줄때 테이블 스페이스 이름 참조시 사용
>select * from v$recover_file; : 데이타파일의 온라인 여부 확인
>select * from v$backup; :현재 백업모든인지확인
select file#,status,tablespace_name,checkpoinrt_change#,fuzzy,name from v$datafie_header;
<fuzz칼럼이 yes연경우 백업모드로 전환된 상태라는것을 의미
출처 : http://ioneit.co.kr/ver1/bbs/board.php?bo_table=tiptech1_3&wr_id=1
'IT > Oracle' 카테고리의 다른 글
DBUA를 이용한 Oracle Upgrade (1) | 2008.05.06 |
---|---|
oracle migration export and import (0) | 2008.04.28 |
uDPM을 이용한 튜닝 (0) | 2008.04.23 |
Oracle Error-code (0) | 2008.04.17 |
v$rollstat, v$rollname (0) | 2008.04.16 |