✨ 경로 어딘지 검색
SQL> select name from v$datafile; select * from v$controlfile; select * from dba_temp_file; select group#, member from v$logfile; NAME ---------------------------------------- C:\ORADATA\ORCL\SYSTEM01.DBF C:\ORADATA\ORCL\SYSAUX01.DBF C:\ORADATA\ORCL\UNDOTBS01.DBF C:\ORADATA\ORCL\USERS01.DBF C:\ORADATA\ORCL\CONTROL01.CTL C:\ORABASE\FAST_RECOVERY_AREA\ORCL\CONTROL02.CTL --깨진파일 C:\ORADATA\ORCL\REDO01.LOG C:\ORADATA\ORCL\REDO02.LOG C:\ORADATA\ORCL\REDO03.LOG
✨ test 폴더 만들기
✨ rename으로 주소 변경하기
1) DB shutdownSQL> shutdown immediate
2) 현재 경로에있는 파일들을 test파일로 복사(move)
move C:\ORADATA\ORCL\SYSTEM01.DBF C:\test move C:\ORADATA\ORCL\SYSAUX01.DBF C:\test move C:\ORADATA\ORCL\UNDOTBS01.DBF C:\test move C:\ORADATA\ORCL\USERS01.DBF C:\test move C:\ORADATA\ORCL\REDO01.LOG C:\test move C:\ORADATA\ORCL\REDO02.LOG C:\test move C:\ORADATA\ORCL\REDO03.LOG C:\test move C:\ORADATA\ORCL\CONTROL01.CTL C:\test move C:\ORADATA\ORCL\TEMP01.DBF C:\test
3) 파라미터파일 안에 controlfile 정보가 있으니 nomount 단계로 올린다.
- 보니까 우리 pfile로 기동중이라 직접 수정해준다.
3-1) pfile에서 직접 경로 변경- show parameter spfile; 해보면 우리지금 spfile이 아닌 pfile로 기동중이라 아래 명령어가 안된다.
alter system set control_files='/oracle/conbak1/control01.ctl','/oracle/conbak2/control02.ctl','/oracle/conbak3/control03.ctl' scope=spfile;
- pfile을 열어서 직접 변경해주기
4) mount단계로 올려서 나머지 파일들 경로수정하기- temp, redo, control(pfile수정으로 했음), datafile을 경로 바꿔주기(rename)
alter database rename file 'C:\ORADATA\ORCL\SYSTEM01.DBF' to 'C:\test\SYSTEM01.DBF'; alter database rename file 'C:\ORADATA\ORCL\SYSAUX01.DBF' to 'C:\test\SYSAUX01.DBF'; alter database rename file 'C:\ORADATA\ORCL\UNDOTBS01.DBF' to 'C:\test\UNDOTBS01.DBF'; alter database rename file 'C:\ORADATA\ORCL\USERS01.DBF' to 'C:\test\USERS01.DBF'; alter database rename file 'C:\ORADATA\ORCL\REDO01.LOG' to 'C:\test\REDO01.LOG'; alter database rename file 'C:\ORADATA\ORCL\REDO02.LOG' to 'C:\test\REDO02.LOG'; alter database rename file 'C:\ORADATA\ORCL\REDO03.LOG' to 'C:\test\REDO03.LOG'; alter database rename file 'C:\ORADATA\ORCL\TEMP01.DBF' to 'C:\test\TEMP01.DBF';
temp는 백업 대상이 아님.
C:\Users\admin>rman target / nocatalog
복구 관리자: Release 19.0.0.0.0 - Production on 금 12월 15 13:58:17 2023
Version 19.21.0.0.0
Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved.
대상 데이터베이스에 접속됨: ORCL(DBID=1683174513, 열리지 않음)
복구 카탈로그 대신 대상 데이터베이스 제어 파일을 사용하고 있습니다.
RMAN> backup database;
23/12/15에서 backup을(를) 시작하는 중입니다.
채널을 할당했습니다: ORA_DISK_1
채널 ORA_DISK_1: SID=493 장치 유형=DISK
ORA_DISK_1 채널: 전체 데이터 파일 백업 집합을 시작하는 중입니다.
ORA_DISK_1 채널: 백업 집합에서 데이터 파일을 지정하는 중입니다.
입력 데이터 파일 번호=00001 이름=C:\TEST\SYSTEM01.DBF
입력 데이터 파일 번호=00003 이름=C:\TEST\UNDOTBS01.DBF
입력 데이터 파일 번호=00002 이름=C:\TEST\SYSAUX01.DBF
입력 데이터 파일 번호=00004 이름=C:\TEST\USERS01.DBF
채널 ORA_DISK_1: 23/12/15에서 1 조각을 시작하는 중입니다.
채널 ORA_DISK_1: 23/12/15에서 1 조각을 완료했습니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\BACKUPSET\2023_12_15\O1_MF_NNNDF_TAG20231215T135843_LQQQ838B_.BKP 태그=TAG20231215T135843 주석=NONE
채널 ORA_DISK_1: 백업 집합 완료, 경과 시간: 00:00:03
23/12/15에서 backup을(를) 종료했습니다.
23/12/15에서 Control File Autobackup을(를) 시작하는 중입니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2023_12_15\O1_MF_N_1155649862_LQQQ86CW_.BKP 주석=NONE
23/12/15에서 Control File Autobackup을(를) 종료했습니다.
RMAN> list backup;
백업 집합 목록
===================
BS 키 유형 LV 크기 장치 유형 경과된 시간 완료 시간
------- ---- -- ---------- ----------- ------------ ---------
1 Full 1.07G DISK 00:00:01 23/12/15
BP 키: 1 상태: AVAILABLE 압축됨: NO 태그: TAG20231215T135843
조각 이름: C:\ORABASE\FAST_RECOVERY_AREA\ORCL\BACKUPSET\2023_12_15\O1_MF_NNNDF_TAG20231215T135843_LQQQ838B_.BKP
백업 집합 1의 데이터 파일 목록
파일 LV 유형 Ckp SCN Ckp 시간 Abs Fuz SCN 희소 이름
---- -- ---- ---------- -------- ----------- ------ ----
1 Full 1491556 23/12/15 NO C:\TEST\SYSTEM01.DBF
2 Full 1491556 23/12/15 NO C:\TEST\SYSAUX01.DBF
3 Full 1491556 23/12/15 NO C:\TEST\UNDOTBS01.DBF
4 Full 1491556 23/12/15 NO C:\TEST\USERS01.DBF
BS 키 유형 LV 크기 장치 유형 경과된 시간 완료 시간
------- ---- -- ---------- ----------- ------------ ---------
2 Full 10.17M DISK 00:00:00 23/12/15
BP 키: 2 상태: AVAILABLE 압축됨: NO 태그: TAG20231215T135846
조각 이름: C:\ORABASE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2023_12_15\O1_MF_N_1155649862_LQQQ86CW_.BKP
포함된 제어 파일: Ckp SCN: 1491556 Ckp 시간: 23/12/15
RMAN> backup current controlfile;
23/12/15에서 backup을(를) 시작하는 중입니다.
채널 ORA_DISK_1 사용 중
ORA_DISK_1 채널: 전체 데이터 파일 백업 집합을 시작하는 중입니다.
ORA_DISK_1 채널: 백업 집합에서 데이터 파일을 지정하는 중입니다.
백업 집합에 현재 제어 파일을 포함하는 중입니다.
채널 ORA_DISK_1: 23/12/15에서 1 조각을 시작하는 중입니다.
채널 ORA_DISK_1: 23/12/15에서 1 조각을 완료했습니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\BACKUPSET\2023_12_15\O1_MF_NCNNF_TAG20231215T140036_LQQQCOS1_.BKP 태그=TAG20231215T140036 주 석=NONE
채널 ORA_DISK_1: 백업 집합 완료, 경과 시간: 00:00:01
23/12/15에서 backup을(를) 종료했습니다.
23/12/15에서 Control File Autobackup을(를) 시작하는 중입니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2023_12_15\O1_MF_N_1155649862_LQQQCPWQ_.BKP 주석=NONE
23/12/15에서 Control File Autobackup을(를) 종료했습니다.
RMAN> backup database plus archivelog ;
23/12/15에서 backup을(를) 시작하는 중입니다.
채널 ORA_DISK_1 사용 중
사양이 저장소의 아카이브된 로그와 일치하지 않습니다.
백업할 파일이 없어서 백업이 취소되었습니다.
23/12/15에서 backup을(를) 종료했습니다.
23/12/15에서 backup을(를) 시작하는 중입니다.
채널 ORA_DISK_1 사용 중
ORA_DISK_1 채널: 전체 데이터 파일 백업 집합을 시작하는 중입니다.
ORA_DISK_1 채널: 백업 집합에서 데이터 파일을 지정하는 중입니다.
입력 데이터 파일 번호=00001 이름=C:\TEST\SYSTEM01.DBF
입력 데이터 파일 번호=00003 이름=C:\TEST\UNDOTBS01.DBF
입력 데이터 파일 번호=00002 이름=C:\TEST\SYSAUX01.DBF
입력 데이터 파일 번호=00004 이름=C:\TEST\USERS01.DBF
채널 ORA_DISK_1: 23/12/15에서 1 조각을 시작하는 중입니다.
채널 ORA_DISK_1: 23/12/15에서 1 조각을 완료했습니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\BACKUPSET\2023_12_15\O1_MF_NNNDF_TAG20231215T144859_LQQT6CW2_.BKP 태그=TAG20231215T144859 주 석=NONE
채널 ORA_DISK_1: 백업 집합 완료, 경과 시간: 00:00:03
23/12/15에서 backup을(를) 종료했습니다.
23/12/15에서 backup을(를) 시작하는 중입니다.
채널 ORA_DISK_1 사용 중
사양이 저장소의 아카이브된 로그와 일치하지 않습니다.
백업할 파일이 없어서 백업이 취소되었습니다.
23/12/15에서 backup을(를) 종료했습니다.
23/12/15에서 Control File Autobackup을(를) 시작하는 중입니다.
조각 핸들=C:\ORABASE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2023_12_15\O1_MF_N_1155649862_LQQT6H1X_.BKP 주석=NONE
23/12/15에서 Control File Autobackup을(를) 종료했습니다.
alter system archive log current 현재 쓰레드의 로그 스위치를 강제로 발생
alter system swithch logfile; :전 쓰레드의 로그 스위치를 강제로 발생
관련수업내용
온라인 백업이니까 begin, end 수행
✨ begin backup 수행
alter database begin backup; -- 이렇게 하면 체크포인트 장애 발생 안함 SQL> select * from v$backup; FILE# STATUS CHANGE# TIME CON_ID ---------- ------------------------------------ ---------- -------- ---------- 1 ACTIVE 1495387 23/12/15 0 2 ACTIVE 1495387 23/12/15 0 3 ACTIVE 1495387 23/12/15 0 4 ACTIVE 1495387 23/12/15 0
✨ 만들어둔 backup 폴더로 복사
✨ end 수행
alter database end backup;
select * from v$recoverfile; -> db가 깨졌을 때 확인해야 하는 것.
GC -Tail 10 C:\oraBase\diag\rdbms\orcl\orcl\trace\alert_orcl.log -Wait
- tablespace 만들기
create tablespace test datafile 'C:\test/test.dbf' size 10m;
- TEST user 생성
create user scott identified by tiger; grant connect, resource to scott;
- table 생성
create table test (ename varchar2(10), sal number(10) ) tablespace test; insert into test values ('scott', 3000); commit; -- 권한 없다그래서 안함
connect target /
RMAN> catalog start with '경로'; -- noprumpt 하면 yes안물어봄 -> 전체
RMAN> catalog datafile copy '/home/oracle/online_backup/users01.dbf'; -> 개별
yes
list copy of datafile;
✨ begin backup 수행
alter database begin backup; -- 이렇게 하면 체크포인트 장애 발생 안함 SQL> select * from v$backup; FILE# STATUS CHANGE# TIME CON_ID ---------- ------------------------------------ ---------- -------- ---------- 1 ACTIVE 1495387 23/12/15 0 2 ACTIVE 1495387 23/12/15 0 3 ACTIVE 1495387 23/12/15 0 4 ACTIVE 1495387 23/12/15 0
✨ 만들어둔 backup 폴더로 복사
✨ end 수행
alter database end backup;
- test 폴더에(기본경로) 있는 test 테이블스페이스 데이터 파일 삭제
- 로그스위치 3번 일으키기 - DB 내려감 test tb삭제해서.
alter system switch logfile;
<사용자관리-지금 내가 함>
✨ startup force
- 확인 : 5번이 깨짐
- (restore단계) 윈도우니까 이렇게 backup -> test로 파일 복제
- recover 한다
recover datafile 5;
<RMAN일 때>
restore datafile 7 recover datafile 7
- 현재 그룹 별 멤버 확인
SQL> select group#, members, status, sequence# 2 from v$log; GROUP# MEMBERS STATUS SEQUENCE# ---------- ---------- -------------------------------- ---------- 1 1 INACTIVE 22 2 1 CURRENT 23 3 1 INACTIVE 21
- 각 그룹별 멤버들의 위치, 이름 확인
(멤버 새로 만들때 경로 똑같이, 이름 비슷하게 만들 예정이라 확인)SQL> col member for a45 SQL> select group#, member from v$logfile order by group# asc; GROUP# MEMBER ---------- --------------------------------------------- 1 C:\TEST\REDO01.LOG 2 C:\TEST\REDO02.LOG 3 C:\TEST\REDO03.LOG
- 그룹 별로 멤버 하나씩 추가
ex) 기존 멤버 1 : C:\TEST\REDO01.LOG 새로운 멤버 : C:\TEST\REDO01b.LOG alter database add logfile member 'C:\TEST\REDO01b.LOG' to group 1; alter database add logfile member 'C:\TEST\REDO02b.LOG' to group 2; alter database add logfile member 'C:\TEST\REDO03b.LOG' to group 3;
- 확인
SQL> select group#, members, status, sequence# 2 from v$log; GROUP# MEMBERS STATUS SEQUENCE# ---------- ---------- -------------------------------- ---------- 1 2 INACTIVE 22 2 2 CURRENT 23 3 2 INACTIVE 21 SQL> select group#, member from v$logfile order by group# asc; GROUP# MEMBER ---------- --------------------------------------------- 1 C:\TEST\REDO01.LOG 1 C:\TEST\REDO01B.LOG 2 C:\TEST\REDO02B.LOG 2 C:\TEST\REDO02.LOG 3 C:\TEST\REDO03B.LOG 3 C:\TEST\REDO03.LOG
create pfile from spfile
show parameter spfile;
- 현재 컨트롤 파일 갯수, 경로 확인
SQL> col name for a60 SQL> select name from v$controlfile; NAME ------------------------------------------------------------ C:\TEST\CONTROL01.CTL
- db 내렸다가 nomount로 올림
- RMAN접속
C:\Users\admin>rman target /
- 다중화
- to '새로 만들 컨트롤파일의 경로와 이름' from '복사하는 원본 컨트롤 파일의 경로와 이름'
RMAN> restore controlfile to'C:\ORABASE\FAST_RECOVERY_AREA\ORCL\CONTROL02.CTL' 2> from 'C:\TEST\CONTROL01.CTL'; 23/12/15에서 restore을(를) 시작하는 중입니다. 복구 카탈로그 대신 대상 데이터베이스 제어 파일을 사용하고 있습니다. 채널을 할당했습니다: ORA_DISK_1 채널 ORA_DISK_1: SID=1343 장치 유형=DISK 채널 ORA_DISK_1: 제어 파일 복사본을 복사했습니다. 23/12/15에서 restore을(를) 종료했습니다.
- 다시 SYS 접속해서 spfile 정보 수정한다.
alter system set control_files = 'C:\TEST\CONTROL01.CTL','C:\ORABASE\FAST_RECOVERY_AREA\ORCL\CONTROL02.CTL' scope = spfile ;
- 디비 내렸다 올리기
SQL> shutdown immediate ORA-01507: 데이터베이스가 마운트되지 않았습니다 ORACLE 인스턴스가 종료되었습니다. SQL> startup ORACLE 인스턴스가 시작되었습니다. Total System Global Area 6626998472 bytes Fixed Size 13793480 bytes Variable Size 2298478592 bytes Database Buffers 4294967296 bytes Redo Buffers 19759104 bytes 데이터베이스가 마운트되었습니다. 데이터베이스가 열렸습니다.
- 확인
SQL> show parameter control_files; select name from v$controlfile; NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ control_files string C:\TEST\CONTROL01.CTL, C:\ORAB ASE\FAST_RECOVERY_AREA\ORCL\CO NTROL02.CTL
디스크에 백업받겠다고 알맨 설정을 하면 되지만, 백업 업체랑 계약을 해서
이미지 카피는 마이그레이션같은 작업을 할 때 많이 쓰인다.
백업셋 하면 사이즈가 다르게 저장된다.
그런데 백업셋 하면 복구할 때 오래걸릴 수 있으므로 무조건 좋은것은 아니다.
정리하자면 알맨 백업을하면(백업셋) 사이즈가 다르게 백업되지만(압축느낌) 복구가 느릴 수 있다. 차이점 공부
압축된 파일이 풀릴 때 풀리는 시간이 있는데 늦게 풀릴 수 있으니까 복구가 느릴 수 있다는 것이다.(압축 풀고 복구해야하는 순서)
복원(restore) : 백업 엔지니어가 함
복구(recover) : 우리가 하면 됨
알맨커맨드 상단에 디스크에 받는지 테이블에 백업받는지 적는다.
RMAN> show all;
db_unique_name ORCL을(를) 가진 데이터베이스에 대한 RMAN 구성 매개변수:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLEDB\DATABASE\SNCFORCL.ORA'; # default
-- 변경은 아래처럼 --
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
Recovery catalog를 사용하지 않는 경우
Controlfile에서 이전 백업의 레코드를 겹쳐쓰지 않기 위해 CONTROL_FILE_RECORD_KEEP_TIME 보다 작거나 같게 recovery window의 기간 설정 (보관주기 설정하는것임)
멀티세션백업도 가능하지만 모름
다받고 (레벨0)
풀백업 이후 변경된것만 백업(레벨1)
RMAN> backup as copy database;
list copy of database
만약 인크리멘털 백업으로 복구를한다? 위처럼 하면 되는데 0이 일년 전거라면?
너무 오래걸리니까. 백업 전략을 짠다. 매주 일요일마다는 0레벨로 받고 나머지는 1로 받자 !
0,1,1 받고 아카이브를 적용한다.
인크리멘털 백업의 최대 문제점은? 문제점을 보완하기 위한 것임
restore, recover를 해야하는데 resotre, recover도 오래걸릴 수 있다.
그래서 처음 1차적으로 이미지 카피 백업을 받는다. 이것은 전체 풀백업이다. (400T)
이미지 카피에서도 incremental이 된다. 이 400T 이미지에서 받는것.
1일에 이미지 카피본
2일에 레벨1 -> 이때 어느곳에 update backup을 받는것. 그러면 1일이랑 2일치가합쳐져서 별도의 디스크 공간에
3일에 레벨1 -> 이것도 업데이트 백업..
이렇게 하면 복구할 때 아카이브 로그 파일만 적용하며 된다. 차이점은 원래는 머지하는 시간이 필요하지만 이렇게 하면 머지 시간 필요없다.
이 별도의 디스크 공간을 이용해서 바로 디비를 오픈시킬 수 있다. (원본 디비 최신본이 하나가 계속 유지되고 있는 것이다.) 디데이에 마이그레이션 적어진다. TTS하기전에
이거가지고 작업을 한다.
TTS, rman의 incremental update backup 기능 두개가 서껴ㅣㅆ다.
Using XTTs in a Data Guard Environment (Doc ID 2853054.1)
V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)
How to Rename or Move Datafiles and Logfiles (Doc ID 115424.1)
인크리멘탈이란 필요한(변경된)것만 찾아서 하는건데 뭐가 변경이 된건지 안된건지 쭉봐야하는데 이것이 시간이과 부하가 걸릴 수 있을 것이다. 이게 오래 걸리면 incremental 을 할 필요가 없다. 운영디비 부하X
마지막 백업이후 변경된 블록들을 포함하는 블록에 저장
ctwr : 이 디비는 bct를 쓰는구나.
우리가 incremental 를 하려면 무조건 BCT기능을 써야한다. 아니면 백업을 받을 때 마다 디비가 행이걸려 내려가버릴 수 있다.
이 기능을 안쓰다고 해서 안되는 것은 아니고 부하가 많은 것이다. 그래서 상황마다 안쓸수도 있음
운영 디비가 있고 가드(ADG)가 있는데 가드쪽에 이 기능을 쓴다. 그래서 BCT기능을 쓰려면 보통 ADG가 있어야 한다. 이거 유료임
만약 adg가 없어서 BCT를 운영에서 해야한다면 그냥 인크리맨탈 쓰지 말고 매일 FULL로 하는게 낫다.
무슨 프로시저로 scn 넘버를 헤더에 넣어서 복구하는게 있는데 이거를 알맨이 해주는 것. catalog 명령어
1. RMAN nomount 단계 올리기
restore controlfile from autobackup; -- pfile에 있는 경로에 복구진행
2. mount 단계로 올리기
restore datafile;
recover datafile; -- 얘는 안함
-> 이 단계에서 리두로그 파일 필요 없는 이유는 백업 대상이 아니다.3. resetlogs로 디비 오픈
alter database open resetlogs;
-> 이 단계에서 temp랑 다른애들 만들어줌