[copy DB open 안될 시 check]
offline backup file을 full restore 시 각 파일들의 시점이 일치하므로 DB정상 open
1. ORACLE_SID 확인 : copydb
2. parameter file 확인
경로 : $ORACLE_HOME/dbs/initcopydb.ora
내용 : controlfile 경로 잘 되어있나 확인.
3. controlfile 확인
경로 : /oracle12/recover
내용 : redo log file, datafile 경로 수정
4. DB files restore
$ cp /oracle12/backup/cold_backup/*.ctl /oracle12/recover
$ cp /oracle12/backup/cold_backup/*.log /oracle12/recover
$ cp /oracle12/backup/cold_backup/*.dbf /oracle12/recover
5. startup mount
6. redo log file, datafile 경로 수정
alter database rename file ‘/home/oracle/oradata/db1/system01.dbf’ to ‘/oracle12/recover/system01.dbf’;
alter database rename file ‘/home/oracle/oradata/db1/sysaux01.dbf’ to ‘/oracle12/recover/sysaux01.dbf’;
alter database rename file ‘/home/oracle/oradata/db1/test01.dbf’ to ‘/oracle12/recover/test01.dbf’;
alter database rename file ‘/home/oracle/oradata/db1/users01.dbf’ to ‘/oracle12/recover/users01.dbf’;
alter database rename file ‘/home/oracle/oradata/db1/undotbs01.dbf’ to ‘/oracle12/recover/undotbs01.dbf’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo01.log’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo01_2.log’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo02.log’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo02_2.log’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo03.log’;
alter database rename file ‘/home/oracle/oradata/db1/redo03_2.log’ to oracle12/recover/redo03_2.log’;
7. alter database open;
[oel7 서버의 장애를 copydb를 통해 복구]
[사전 세팅 – oel7(db1)]
- shutdown immediate
- archive 삭제
- offline full backup
- db open
- log switch (5회 이상)
- /etc/hosts 수정
$ su – root
$ vi /etc/hosts
172.16.124.130 copy
[db1 – 장애발생]
1. 시점 확인
select sysdate from dual; -- 2024/12/13 11:10:08
2. 장애 발생
select * from scott.student;
truncate table scott.student;
[db1 – 복구 사전 준비]
1. 장애 / 복구 시점 확인 : 2024/12/13 11:10:08
2. 가장 가까운 백업 시점 확인 : 2024/12/13 11:09:20
3. restore file : oel7 -> copy
$ cd /oracle12/backup/cold_backup
$ scp (전송할 대상) (타겟서버유저명@ip:위치)
$ scp /oracle12/backup/cold_backup/*.dbf oracle@copy:/oracle12/recover
또는 (copy = 172.16.124.130 이고 이 정보를 /etc/hosts 에 기록해놔서)
$ scp /oracle12/backup/cold_backup/*.dbf oracle@172.16.124.130:/oracle12/recover
4. 현재 운영 중인 init parameter 다운 & 전송
> create pfile from spfile;
$ scp /oracle12/app/oracle/product/12.2.0.1/db_1/dbs/initdb1.ora oracle@copy:/oracle12/recover/
5. controlfile 재생성 스크립트 다운 & 전송
> alter database backup controlfile to trace as '/oracle12/backup/con.sql';
$ scp /oracle12/backup/con.sql oracle@copy:/oracle12/recover
6. 필요 archive 조회
-- recover에 필요한 아카이브 파일만 조회하는 쿼리
select name,
sequence#,
resetlogs_id,
first_change#,
round(BLOCKS*BLOCK_SIZE/1024/1024,2) as "SIZE(MB)",
first_time,
COMPLETION_TIME
from v$archived_log
where COMPLETION_TIME between to_date('2024/12/13 11:09:20','YYYY/MM/DD HH24:MI:SS')
and to_date('2024/12/13 11:10:08', 'YYYY/MM/DD HH24:MI:SS')
or first_time between to_date('2024/12/13 11:09:20','YYYY/MM/DD HH24:MI:SS')
and to_date('2024/12/13 11:10:08', 'YYYY/MM/DD HH24:MI:SS');
-- 최근 백업 시점 ~ 복구되기를 원하는 시점 사이의 archive file만 조회
-- 23~28번을 copy로 보내야됨.
7. archive file 전송
-- copy에 있는 기존 /arch 지우기 (copy에서)
$ rm /arch/*
-- (oel7에서) 6번에서 조회했던 archive file 전송
$ scp /arch/1_23* oracle@copy:/arch
$ scp /arch/1_24* oracle@copy:/arch
$ scp /arch/1_25* oracle@copy:/arch
$ scp /arch/1_26* oracle@copy:/arch
$ scp /arch/1_27* oracle@copy:/arch
$ scp /arch/1_28* oracle@copy:/arch
[copydb – 복구]
1. copydb shutdown
2. restore 위치 확인 (/oracle12/recover)
3. archive 위치 확인
4. init parameter file 수정
$ vi $ORACLE_HOME/dbs/initcopydb.ora
-------------------------------------------
db1.__data_transfer_cache_size=0
db1.__db_cache_size=452984832
db1.__inmemory_ext_roarea=0
db1.__inmemory_ext_rwarea=0
db1.__java_pool_size=16777216
db1.__large_pool_size=33554432
db1.__oracle_base='/oracle12/app/oracle'#ORACLE_BASE set from environment
db1.__pga_aggregate_target=503316480
db1.__sga_target=754974720
db1.__shared_io_pool_size=33554432
db1.__shared_pool_size=201326592
db1.__streams_pool_size=0
*.audit_file_dest='/oracle12/recover/adump'
*.audit_trail='db'
*.compatible='12.2.0'
*.control_files='/oracle12/recover/control01.ctl'
*.db_block_size=8192
*.db_name='db1'
*.db_recovery_file_dest='/arch'
*.db_recovery_file_dest_size=5368709120
*.diagnostic_dest='/oracle12/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=db1XDB)'
*.local_listener='LISTENER_DB1'
*.log_archive_dest_1='location=/arch'
*.memory_target=1192m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_retention=1800
*.undo_tablespace='UNDOTBS1'
5. controlfile 재생성 스크립트 수정 (resetlogs)
$ vi /oracle12/recover/con.sql
----------------------------------
CREATE CONTROLFILE REUSE DATABASE "DB1" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'/oracle12/recover/redo01.log'
) SIZE 200M BLOCKSIZE 512,
GROUP 2 (
'/oracle12/recover/redo02.log'
) SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/oracle12/recover/system01.dbf',
'/oracle12/recover/test01.dbf',
'/oracle12/recover/sysaux01.dbf',
'/oracle12/recover/undotbs01.dbf',
'/oracle12/recover/users01.dbf'
CHARACTER SET KO16MSWIN949
;
6. startup nomount & controlfile 재생성
> startup nomount
> @/oracle12/recover/con.sql
7. recover
recover database until time '2024/12/13 11:10:08' using backup controlfile
8. DB open
alter database open resetlogs;
[copydb -> oel7 DBlink 통해서 데이터 전송]
oel7 쪽에 dblink를 생성해서 하는 방법도 괜찮고 copy쪽에 dblink를 생성해서 하는 방법도 괜찮음.
1. DBlink 생성 (나는 copy쪽에서 설정해서 oel7로 연결했음)
– 만약 HOST ip주소 적는 부분에 oel7로 땡치고 싶으면 /etc/hosts 에 정의를 해줘야 됨.
CREATE DATABASE LINK oel7_dblink
CONNECT TO system IDENTIFIED BY oracle
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.124.128)(PORT=1521)) CONNECT_DATA=(SERVICE_NAME=db1)))';
2. 데이터 전송
insert into scott.student@oel7_dblink select * from scott.student;
[drop table purge 복구]
0. copy쪽 db shutdown
> shutdown immediate
1. 시점 확인
select sysdate from dual; -- 2024/12/13 15:20:24
2. 장애 발생
select * from scott.professor;
drop table scott.professor purge;
3. 복구 수행
-- log switch 5번 하기
> alter system switch logfile;
-- 보내야 하는 archive file 조회하기
select name,
sequence#,
resetlogs_id,
first_change#,
round(BLOCKS*BLOCK_SIZE/1024/1024,2) as "SIZE(MB)",
first_time,
COMPLETION_TIME
from v$archived_log
where COMPLETION_TIME between to_date('2024/12/13 11:09:20','YYYY/MM/DD HH24:MI:SS')
and to_date('2024/12/13 15:20:24', 'YYYY/MM/DD HH24:MI:SS')
or first_time between to_date('2024/12/13 11:09:20','YYYY/MM/DD HH24:MI:SS')
and to_date('2024/12/13 15:20:24', 'YYYY/MM/DD HH24:MI:SS');
-- 29~34번까지 보내야됨.
-- archive file들 보내기
$ scp 1_29_1187453268.dbf oracle@copy:/arch/
$ scp 1_30_1187453268.dbf oracle@copy:/arch/
$ scp 1_31_1187453268.dbf oracle@copy:/arch/
$ scp 1_32_1187453268.dbf oracle@copy:/arch/
$ scp 1_33_1187453268.dbf oracle@copy:/arch/
$ scp 1_34_1187453268.dbf oracle@copy:/arch/
-- 이제 (copy)서버로 이동해서
> startup mount
> recover database until time '2024/12/13 15:20:24' using backup controlfile
> alter database open resetlogs;
4. 테이블 재생성 (copy->oel7)
아 이거 안되네… DDL은 쓸 수가 없다네… 그럼 다시 oel7->copy로 dblink만들어서 해야겠다.
oel7->copy로 dblink 만들어서 했더니 잘 되네요~
create table scott.professor
as
select * from scott.professor@copy_dblink;
[scp (secure copy protocol)]
네트워크를 통해 두 시스템 간에 파일을 안전하게 전송하는 프로토콜.
SSH를 기반으로 작동해서 파일 전송 중 암호화가 되어 안전하게 전송됨.
원격 시스템과 로컬 시스템 간에 파일을 복사하거나, 두 원격 시스템 간에 파일을 전송할 때 자주 사용.
** 사용법 : scp 전송대상 접속유저면@ip주소:경로
** 자동 로그인 설정 :
ssh의 인증방식을 public-key로 하고 서버에 등록해서 사용하면 암호를 입력하지 않고 자동으로 로그인 가능.
1. public-key 생성 (oel7에서)
$ ssh-keygen -t rsa
2. publick-key target 서버에 전송 (oel7)
$ scp ~/.ssh/id_rsa.pub oracle@copy:/home/oracle/.ssh/authorized_keys
3. public-key copy 확인 (copy)
$ cd ~/.ssh
$ ll
$ cat authorized_keys
4. 권한 설정 (copy)
$ chmod 755 /home/oracle
$ chmod 700 /home/oracle/.ssh
$ chown -R oracle /home/oracle/.ssh
$ chmod 600 /home/oracle/.ssh/authorized_keys
5. scp 테스트 (oel7)
$ arch
$ scp 1_34_1187453268.dbf oracle@copy:/arch/