Backup/RMAN

clone DB 이용해서 삭제된 table ora11g DB import 하기

잇꼬 2024. 1. 26. 15:50
728x90
반응형
SMALL

#) redo log 정보 확인

select * from v$log;

 

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status, b.first_time, b.first_change#, b.next_change#
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;


#) 로그 스위치 발생 

alter system switch logfile;


#) 테이블 생성 후 확인

create table hr.new_20240126 as select * from hr.employees;
select count(*) from hr.new_20240126;


#) 로그 스위치 발생 

alter system switch logfile;


#) OS로 나와서 디렉터리 생성 
[oracle1@oracle ~]$ mkdir rman_clone
[oracle1@oracle ~]$ cd rman_clone/
[oracle1@oracle rman_clone]$ pwd
/home/oracle1/rman_clone

#) rman 으로 접속
[oracle1@oracle ~]$ rman target /


#) 스키마 확인
RMAN> report schema;


#) 백업 확인 후 삭제
RMAN> list backup;


RMAN> delete backup;


#) 별도의 공간에 백업본 받기
=> /home/oracle1/rman_clone 
#1) %d : 데이터베이스 이름 
#2) %U : %u_%p_%c backupset 번호와 생성된 시간을 조합한 8자리번호(고유한이름)_backupset piece 번호_중복되는 backup piece 내에서 backup piece의 고유번호
#3) %T : 날짜정보(backup 되는 날짜)

RMAN> backup as compressed backupset format '/home/oracle1/rman_clone/%d_%U_%T' database include current controlfile;


#) backup 확인
RMAN> list backup;


#) 이전의 아카이브 확인
RMAN> report obsolete;


#) 기존 backup 파일 삭제
RMAN> delete obsolete;


#) 다시 아카이브 확인
RMAN>  report obsolete;

tip) 필요없는 아카이브 삭제 후 아카이브 로그 파일이 있는지 확인
RMAN> crosscheck archivelog all;

RMAN> list expired archivelog all;


RMAN>  report obsolete;
=> control file copy 가 있다면?
RMAS> crosscheck copy;
RMAS> delete copy;
RMAN>  report obsolete;

#) oracle 접속 후 redo log 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status, b.first_time, b.first_change#, b.next_change#
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;


#) 로그 스위치 발생*3

alter system switch logfile;


#) redo log 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status, b.first_time, b.first_change#, b.next_change#
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;


#) 아카이브 확인

! ls /home/oracle1/arch1


#) 시간 확인

select systimestamp from dual;


#) 테이블 조회

select count(*) from hr.new_20240126;


#) 테이블 삭제

drop table hr.new_20240126;


#) 로그 스위치 발생*2

alter system switch logfile;



#) 아카이브 정보 

select sequence#, name
from v$archived_log
where name is not null;


#) OS 나와서 초기파라미터 수정
[oracle1@oracle ~]$ cd $ORACLE_HOME/dbs
[oracle1@oracle dbs]$ ls

[oracle1@oracle dbs]$ vi initclone.ora
compatible = '11.2.0.4.0'

*.control_files='/home/oracle1/rman_clone/control01.ctl'
*.db_name='clone'
*.log_archive_dest_1='location=/home/oracle1/rman_clone mandatory'
*.log_archive_format='arch_%t_%s_%r.arc'
*.undo_tablespace='UNDO1'
db_file_name_convert=('/u01/app/oracle/oradata/ora11g/','/home/oracle1/rman_clone/')
log_file_name_convert=('/u01/app/oracle/oradata/ora11g/','/home/oracle1/rman_clone/')
:wq!(저장)


#) 아카이브 파일 옮기기
[oracle1@oracle ~]$ cp -av /home/oracle1/arch1/*.* /home/oracle1/rman_clone
[oracle1@oracle ~]$ cd rman_clone/
[oracle1@oracle rman_clone]$ ls
arch_1_10_1159199033.arc  arch_1_12_1159199033.arc  arch_1_9_1159199033.arc
arch_1_11_1159199033.arc  arch_1_8_1159199033.arc   ORA11G_162hicjt_1_1_20240126(백업정보)


#) control file 옮기기
[oracle1@oracle ~]$ cp -av /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_26/o1_mf_s_1159279278_lv6h4yft_.bkp /home/oracle1/rman_clone
[oracle1@oracle ~]$ cd rman_clone/
[oracle1@oracle rman_clone]$ ls
arch_1_10_1159199033.arc  arch_1_8_1159199033.arc           ORA11G_162hicjt_1_1_20240126
arch_1_11_1159199033.arc  arch_1_9_1159199033.arc
arch_1_12_1159199033.arc  o1_mf_s_1159279278_lv6h4yft_.bkp(control file)


#) clone DB 접속
=> 물리적 위치 확인
[oracle1@oracle ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0.4/db_1

[oracle1@oracle ~]$ . oraenv
ORACLE_SID = [ora11g] ? clone
ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/11.2.0.4/db_1
The Oracle base remains unchanged with value /u01/app/oracle


#) sql 접속
[oracle1@oracle ~]$ sqlplus / as sysdba

#) 비정상적인 종료 DB 후 다시 접속

shutdown abort
exit


[oracle1@oracle ~]$ sqlplus / as sysdba


#) startup nomount 하기

startup pfile=$ORACLE_HOME/dbs/initclone.ora nomount


#) OS 로 나와서 rman 접속 

exit


[oracle1@oracle ~]$ rman auxiliary /


#) 복구 하기
DUPLICATE DATABASE TO 'clone'
pfile='/u01/app/oracle/product/11.2.0.4/db_1/dbs/initclone.ora'
nofilenamecheck
backup location '/home/oracle1/rman_clone'
until time "to_date('2024-01-26 14.12.00','yyyy-mm-dd hh24:mi:ss')";

...


#) rman 나와서 cloneDB 접속
RMAN> exit
[oracle1@oracle ~]$ sqlplus / as sysdba


#) hr 계정 접속 후 테이블 확인 

conn hr/hr
select * from tab;


#) os로 나와서 export 하기
[oracle1@oracle ~]$ exp system/oracle tables=hr.new_20240126 file=new_20240126.dmp

#) 생성되었는지 확인

 

#) ora11g oracle 접속
[oracle1@oracle ~]$ . oraenv
ORACLE_SID = [clone] ? ora11g


#) ora11g 접속 

[oracle1@oracle ~]$ sqlplus / as sysdba


#) table 확인

select count(*) from hr.new_20240126;

#) os로 나와서 import 하기
[oracle1@oracle ~]$ imp system/oracle tables=new_20240126 file=new_20240126.dmp fromuser=hr


#) oracle 접속
[oracle1@oracle ~]$ sqlplus / as sysdba


#) clone DB에 있는 테이블이 import 되었는지 확인

select count(*) from hr.new_20240126;

728x90
반응형
LIST