[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;
-- 하면 잘 들어감!