Oracle 68일차

[OEL8 + 19cR3 single DB 설치]

OEL8 : V1009565-01.iso

D드라이브, 디스크 100GB, 3GB memory, 1 cpu core,

/boot 500M, swap 8192M, / 나머지
Legacy UNIX Compatibility, Developement Tools
security disable
IPv4 manual 172.16.124.134/24/172.16.124.2/8.8.8.8

19cR3 single : V982063-01.zip

설치

-- 0. vi /etc/hosts
172.16.124.134 oel8copy

-- 1. preinstall
yum install -y oracle-database-preinstall-19c

-- 2. oracle 계정 및 dba 그룹 생성 확인
grep oracle /etc/passwd
grep dba /etc/group

-- 3. oracle 패스워드 변경
passwd oracle

-- 4. vi /etc/selinux/config 후 실행
permissive로 변경

setenforce Permissive

-- 5. 방화벽 내리기 - 이거때문에 안됐었음
systemctl stop firewalld
systemctl disable firewalld

-- 6. 설치 디렉터리 생성
mkdir -p /oracle19/app/oracle/product/19.3.0.1/db_1
chown -R oracle:oinstall /oracle19
chmod -R 775 /oracle19
chmod -R 775 /home

-- 7. oracle 유저 .bash_profile 설정
su - oracle
vi .bash_profile
---------------------------------
# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=oel8copy
export ORACLE_UNQNAME=ora19db
export ORACLE_BASE=/oracle19/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0.1/db_1
export ORACLE_SID=ora19db
export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias ss='sqlplus / as sysdba'
-----------------------------------------

-- 8. winscp로 설치zip 전송
oracle 계정으로 접속 후 /oracle19에 위치

-- 9. 압축 해제
cd /oracle19/app/oracle/product/19.3.0.1/db_1
unzip /oracle19/V982063-01.zip
-- 19c부터는 압축해제 위치가 자동으로 ORACLE_HOME으로 설정됨.

-- 10. DISPLAY 설정 후 DB 설치 - xming 사용
** xming을 사용한 연동 방식
step1) xming 실행(아무것도 안뜸)
step2) putty로 서버 접속 시도
       카테고리에서 ssh 선택 -> x11 -> 
       enable X11 forwarding 선택 후
       X display location을 :0.0 설정 후 open(접속)
step3) 위 방식으로 연결된 창에서 DISPLAY 설정
export DISPLAY=localhost:10.0

step4) os 호환 설정
$ export CV_ASSUME_DISTID=RHEL7.6

step5) 설치파일 실행
$ cd /oracle19/app/oracle/product/19.3.0.1/db_1
$ ./runInstaller

그대로로

server class

그대로

그대로

그대로

그대로

이름 ora19db 로 수정하고 밑에 pdb이름도 orapdb로 바꾸기

Character sets만! 변경

그대로

그대로

그대로

패스워드 oracle로 설정

그대로해도 되고 다 dba로 바꿔도 되고 상관없음

root script 자동으로 돌리기

설치 끝

** 설치 완료 후 ORACLE EM 접속

https://172.16.124.134:5500/em

username : system
password : oracle
container name : 기재X

설치 후 세팅

1. sqlnet.ora 수정

cd $ORACLE_HOME/network/admin
vi sqlnet.ora
-------------------------------------------------------
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=11
-------------------------------------------------------

ss
alter user system identified by oracle;

2. sql prompt 방향키 작동 설치

-- root 에서 수행
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
yum install rlwrap

-- oracle 에서 수행
vi .bash_profile
----------------------------
alias sqlplus='rlwrap sqlplus'

3. windows의 tns setting 후 orange 접속 확인

ORA19DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.124.134)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora19db)
    )
  )

(ADDRESS = (PROTOCOL = TCP)(HOST = oel8)(PORT = 1521))

상황따라 추가해야되는 내용

설치 다 했는데 어떤 사람은 잘 되고 나같은 사람은 잘 안됐음.

1. tnsnames.ora 가 없어서 만들었음.

ORA19DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel8copy)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora19db)
    )
  )

LISTENER_ORA19DB =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oel8copy)(PORT = 1521))

2. listener.ora 수정

LISTENER_ORA19DB =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oel8copy)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

[실습 전 사전 준비]

-- copydb oracle 유저로 수행
mkdir -p /oracle19/recover/data
mkdir -p /oracle19/recover/arch

-- RAC에서
-- 1. 모든 노드 불필요한 아카이브 삭제
cd /oraarch
rm *

-- 2. 불필요한 tbs 삭제
select * from dba_tablespaces;

-- 3. online backup 수행
select 'alter tablespace '||TABLESPACE_NAME||' begin backup;'
from dba_data_files;

select '!asmcmd cp '''||FILE_NAME||''''||' /backup/oradb/hot'
from dba_data_files;

select 'alter tablespace '||TABLESPACE_NAME||' end backup;'
from dba_data_files;

-- 4. log switch 5번
alter system switch logfile;

[장애 발생]

--1. 테이블 생성
create table recover_test2(no number);
insert into recover_test2 values(10);
insert into recover_test2 values(20);
insert into recover_test2 values(30);
commit;

--2. 복구 시점 확인
select sysdate from dual;     -- 2025/01/16 11:04:12

--3. 장애 발생
truncate table recover_test2;

[복구 RAC->single]

-- < RAC 서버에서 수행 >
--1. parameter file 생성(1번 노드)
SQL> create pfile from spfile;

--2. control file 재생성 script 생성
SQL> alter database backup controlfile to trace as '/backup/control.sql';

--3. ____________________________

--4. /etc/hosts 파일 수정(양쪽 노드)
--$ su - root
--$ vi /etc/hosts       아래 추가
172.16.124.134 oel8copy

--< RAC -> single restore >
--1. datafile(1번 노드)
$ cd /backup/oradb/hot
$ scp * oracle@oel8copy:/oracle19/recover/data

--2. archive log(양쪽노드)
$ cd /oraarch
$ scp * oracle@oel8copy:/oracle19/recover/arch

--3. init parameter
$ cd $ORACLE_HOME/dbs
$ scp initORADB1.ora oracle@oel8copy:/oracle19/recover/data

--4. controlfile 재생성 script
$ cd /backup
$ scp control.sql oracle@oel8copy:/oracle19/recover/data
--< COPY 서버에서 복구 진행 > ****
--STEP1) init parameter 수정 및 이름/위치 변경
1. parameter 이름 변경
$ mv initORADB1.ora initcopydb.ora

2. 수정
1) 파라미터 삭제
 - ORADB1.XXXX , ORADB2.XXXX 로 된 모든 파라미터
 - *.cluster_database=TRUE
 - *.db_create_file_dest='+DATA'

2) 수정(다음과 같이 수정)
 - *.audit_file_dest='/oracle19/recover/adump'
 - *.control_files='/oracle19/recover/data/control.ctl'
 - *.diagnostic_dest='/oracle19/recover'
 - *.log_archive_dest_1='location=/oracle19/recover/arch'

3. 위치 이동
$ cp initcopydb.ora $ORACLE_HOME/dbs
$ mkdir -p /oracle19/recover/adump


--STEP2) nomount 기동
$ export ORACLE_SID=copydb
$ ss
SQL> startup nomount


--STEP3) controlfile script 수정(resetlogs)
  => logfile, datafile 위치 변경
  
CREATE CONTROLFILE REUSE DATABASE "ORADB" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle19/recover/data/group_1.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 2 '/oracle19/recover/data/group_2.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/oracle19/recover/data/system.260',
  '/oracle19/recover/data/sysaux.261',
  '/oracle19/recover/data/undotbs1.262',
  '/oracle19/recover/data/undotbs2.264',
  '/oracle19/recover/data/users.265'
CHARACTER SET KO16MSWIN949
;

--STEP4) controlfile 재생성
$ ss
SQL> @control.sql

--STEP5) recover
SQL> recover database until time '2025/01/16 11:04:12' using backup controlfile;

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: change 10373400 generated at  needed for thread 2  <--- 2번 인스턴스 로그를 못찾는 현상. 사용자가 직접 로그명 전달  

--STEP6) open
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

=> shutdown 후 hidden parameter 적용 후 startup mount -> open

--STEP7) hidden parameter 적용 후 재오픈
SQL> shutdown immediate
SQL> exit

$ cd $ORACLE_HOME/dbs
$ vi initcopydb.ora   (아래 추가)
_no_recovery_through_resetlogs=true

SQL> startup mount
SQL> alter database open resetlogs;

--STEP8) 확인 후 dblink 통해서 데이터 전송
select * from system.recover_test2;

create database link dblink_oradb connect to system identified by oracle
using '(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.124.110)(PORT = 1521))
  (CONNECT_DATA =
    (SERVICE_NAME = oradb)
  )
)';

insert into system.recover_test2@dblink_oradb select * from system.recover_test2;
-- 하면 잘 들어감!

Leave a Comment