oracle
Oracle Linux 8 (x86_64) Addons | Oracle, Software. Hardware. Complete. 오라클 애드온 repo rpm들, repo 주소는 더 검색해야함
db https://buildlogs.centos.org/centos/7/isos/x86_64/ https://mirrors.cloud.tencent.com/centos/7.9.2009/isos/x86_64/ centos7 설치 후 yum 명령어 적용 안되시는분들은 sudo sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-* sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
데이터는 뭐고 데이터베이스는 뭔가 raw vs unorganized, unprocessed material vs collection
information - processed data that has meaning and context structured query language 'relational' = link 데이터 이상 anomaly 및 불필요한 데이터, 중복을 피하도록 만든 데이터베이스 = join을 하는 것이 중요, 테이블 하나만 가지고는 알수없으므로 10g 등에서 이전시 반드시 공식문서를 통해 호환성과 버전 업데이트 절차를 확인할것
yum update
yum -y install oracle-database-preinstall-19c
\=============================== Set Kernel Parameters
vi /etc/sysctl.conf fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmall = 2251799813685247 kernel.shmmax = 4398046511104 #kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.ip_local_port_range = 9000 65500 vm.hugetlb_shm_group = 1001 /sbin/sysctl -p 커널값을 변경했으니 업데이트 적용
vi /etc/security/limits.conf 자원 한계값 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768 oracle hard memlock 134217728 oracle soft memlock 134217728
getenforce 혹은 sestatus 로 selinux 상태확인, 공식문서에서도 selinux 를 끄고 설치할 것을 권장 /etc/selinux/config disabled
vi /etc/pam.d/login 맨 마지막줄 session required /lib/security/pam_limits.so
group oinstall dba user oracle:oinstall(default):dba(supplement) 그룹 유저 권한 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle
grep oinstall /etc/group id oracle
oracle base 거점 oracle home 설치
mkdir -p /oracle/product/19.3/db_1 zip파일 옮겨놓기 mkdir -p /oracle/oraInventory chown -R oralcle:oinstall
su - oracle 해당 폴더에 unzip 6. 으로
설정후 source or . .bash_profile
vi /etc/security/limits.d/90-nproc.conf
Change this:q!
- soft nproc 1024
To this
- nproc 16384
cat /etc/selinux/config SELINUX=permissive
setenforce Permissive
\=============================== 필요 package 설치
Package 목록
binutils-2.20.51.0.2-5.36.el6 (x86_64) compat-libcap1-1.10-1 (x86_64) compat-libstdc++-33-3.2.3-69.el6 (x86_64) compat-libstdc++-33-3.2.3-69.el6 (i686) e2fsprogs-1.41.12-14.el6 (x86_64) e2fsprogs-libs-1.41.12-14.el6 (x86_64) glibc-2.12-1.7.el6 (i686) glibc-2.12-1.7.el6 (x86_64) glibc-devel-2.12-1.7.el6 (x86_64) glibc-devel-2.12-1.7.el6 (i686) ksh libgcc-4.4.4-13.el6 (i686) libgcc-4.4.4-13.el6 (x86_64) libs-1.42.8-1.0.2.el6.x86_64 libstdc++-4.4.4-13.el6 (x86_64) libstdc++-4.4.4-13.el6 (i686) libstdc++-devel-4.4.4-13.el6 (x86_64) libstdc++-devel-4.4.4-13.el6 (i686) libaio-0.3.107-10.el6 (x86_64) libaio-0.3.107-10.el6 (i686) libaio-devel-0.3.107-10.el6 (x86_64) libaio-devel-0.3.107-10.el6 (i686) libXtst-1.0.99.2 (x86_64) libXtst-1.0.99.2 (i686) libX11-1.5.0-4.el6 (i686) libX11-1.5.0-4.el6 (x86_64) libXau-1.0.6-4.el6 (i686) libXau-1.0.6-4.el6 (x86_64) libxcb-1.8.1-1.el6 (i686) libxcb-1.8.1-1.el6 (x86_64) libXi-1.3 (x86_64) libXi-1.3 (i686) make-3.81-19.el6 net-tools-1.60-110.el6_2.x86_64 (for Oracle RAC and Oracle Clusterware) nfs-utils-1.2.3-15.0.1 (for Oracle ACFS) sysstat-9.0.4-11.el6 (x86_64) smartmontools-5.43-1.el6.x86_64
\===============================
\=============================== ORACLE_HOME 및 인벤토리 디렉토리 생성
mkdir -p /oracle/product/19.3/db_1
mkdir -p /oracle/oraInventory chown -R oracle.oinstall /oracle mv LINUX.X64_193000_db_home.zip /oracle/product/19.3/db_1 unzip LINUX.X64_193000_db_home.zip
\=============================== su - oracle
vi .bash_profile (환경 변수 설정)
. .bash_profile
bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
umask 022
export ORACLE_SID=dev1 export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.3/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin:/usr/local/bin export TNS_ADMIN=$ORACLE_HOME/network/admin export TEMP=/tmp export TMPDIR=/tmp
NLS_LANG
export NLS_LANG=American_America.UTF8
##CLASSPATH must include the following JRE locations: export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
\================================================
umask 022
export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1
#export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601 #export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export NLS_LANG=American_America.UTF8 #export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949 #export ORA_NLS10=$ORACLE_HOME/nls/data #oracle9i NLS #export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export TNS_ADMIN=$ORACLE_HOME/network/admin export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/network/lib export ORACLE_SID=KTEST
##CLASSPATH must include the following JRE locations: export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
set -o vi
ETC Env
echo "[ORACLE_SID = $ORACLE_SID ]" PS1=hostname
:'${PWD##*/}/ > ' stty erase ^H alias ss='sqlplus "/as sysdba"' export LANG=C
. .bash_profile
setup software only single - rac 안할거라서 standard /oracle /oracle/oraInventory yes default oinstall automatically 체크 빈 패키지 목록 oracle 아닌 root 로 설치 gcc-c++ 은 버전말고 걍 설치, 어떤건 버전까지 써서 설치해야함 yum install root비전 경고 ㄱㄱ $ORACLE_HOME/bin 이동 .dbca 엔진설치시 db를 만들지 않는다고 했기때문에 수동으로 만듦. 같이 만들다가 오류나면 처음부터 다시 해야하기 때문 global db name - bash_profile에서 입력한 이름 file system db location
cdb pdb 안할거라서 create as container db 해제
sqlplus / as sysdba select status from v$instance; 원격지 등 다양한 소스에서 요청받기 - 리스너 $ORACLE_HOME/bin/netca net config netca add lsnrctl status
windows 193000 client 설치(안되면 client home 설치) 경로 구성 윈도우에서 해당 경로 netca 로컬네트 서비스 이름 구성 추가 서비스 이름 dev1 tcp ip주소? 그냥 알아보는 이름 방화벽 추가 firewall-cmd --add-port=1521/tcp --permanent --reload --list-all
network\admin\tnsname.ora 에 정보 확인 host port sid
centos 7 초기설정 yum update 되는지 확인 안될경우 인터페이스가 올라와있는지 확인한다 /etc/sysconfig/network-script/ifcfg- onboot=yes dns 서버 확인 /etc/resolve.conf ping 8.8.8.8 firefox google.com /etc/yum.repo.d/CentOS-base.repo 에서 각 섹션에서 baseurl 주석을 제거해주고 모든 mirrolist 와 baseurl 의 mirrorlist 및 mirror를 vault 로 바꿔준다 db https://buildlogs.centos.org/centos/7/isos/x86_64/ https://mirrors.cloud.tencent.com/centos/7.9.2009/isos/x86_64/ centos7 설치 후 yum 명령어 적용 안되시는분들은 sudo sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-* sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* 해당부분 안되면 같은 파일에서 mirrolist 를 지우고 baseurl을 kakao repo 등으로 바꿔준다
커널업데이트 확인 지난 커널 삭제 uname -r 로 확인 yum update 안해도 되는지 확인하고 yum remove kernel 로 삭제 or
- update 할 때마다 아래의 옵션을 추가하여 실행
옵션 : --exclude=kernel*
\=> # yum update --exclude=kernel*
- yum.conf 설정에 추가
vim /etc/yum.conf
마지막에 한 줄 추가 <<
exclude=kernel*
db 개요 79년 상용오라클 83년 ibm db2 97년 oodbms
파일기반 데이터는 구성방법과 접근방법의 지나친 다양성, 데이터의 일관성, 무결성, 중복제거, 공유성, 보안등급 관리 용이성의 문제가 있다 dbms는 물리적 독립성, os와 상관없는 처리독립성 등이 있다
설치 시스템요구사항 운영체제 요구사항 커널 파라미터 디렉토리 형성 유저 그룹 생성
grep MemTotal /proc/meminfo grep SwapTotal /proc/meminfo df -h 7기준 pre 설치패키지 binutils, compat-libcap1 compat-libstdc++, gcc, gcc-c++, glibc, glibc, glibc-devel, libaio, libaio-devel, make, libXi, libXtst, libgcc, liibstdc++, libstdc++devel, sysstat, svuqdisk, openssh, ksh
커널파라미터 12g라서 지금 좀 바뀜 /proc/sys/kernel/sem semmsl 250 semmns 32000 Semopm 100 semmni 128 /proc/sys/kernel/shmmni shmmni 4096 /proc/sys/fs/file-max file-max 6815744 /proc/sys/fs/aio-max-nr aio-max-nr 1048576 /proc/sys/net/ipv4/ip_local_port_range ip_local_port_range 9000 65000 /proc/sys/net/core/rmem_default rmem_default 262144 /proc/sys/net/core/rmem_max rmem_max 4194304 /proc/sys/net/core/wmem_default wmem_default 262144 /proc/sys/net/core/wmem_max wmem_max 1048576 /etc/security/limits.conf oracleproc 2047 oracleproc 16384 oraclenofile 1024 oraclenofile 65536 oraclestack 10240 oraclestack 10240 /sbin/sysctl -a | grep sem, shm, file-max, ip_local_port_range 로 확인
오라클 사용자 기본 디렉토리 /oracle 설치 디렉토리 /opracle/app/oracle/product/12.1/dbhome_1 mkdir -p /oracle chown -R oracle:oinstall /oracle mkdir -p /grid chown -R grid:oinstall /grid
콘쉘사용시 profile export ORACLE_BASE = /oracle/app export ORACLE_HOME=$ORACLE_BASE/product/12.1 export ORACLE_SID=ORCL export NLS_LANG=American_America.K016WIN949 export TNS_ADMIN=$ORACLE_HOME/network/admin export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib
useradd -g oinstall -G dba grid
db서버 $ORACLE_HOME/demo/schema/human_resources sqlplus / as sysdba @hr_main.sql 비번 users temp @ORACLE_HOME/demo/schema/log/ select table_name from user_tables; conn hr/비번 show user select table_name from user_tables; select * from regions; sqldeveloper hr 비번 접속유형 tns 네트워크 별칭 dev1
ddl 객체의 구조를 만들고 변경하는 것 create alter drop rename, auto commit commit 메모리 -> 디스크 dml 데이터 조작 insert update delete select dcl 권한 부여, 회수 grant revoke
제약조건 constraint 사용자가 원하는 조건의 데이터만 입력되는 것을 보장 - 무결성 pk = unique + not null uk = unique + null foregin key = 참조무결성 제약조건 default = 기본값 not null = check = 입력값의 종류와 범위
ddl practice 유저생성 create user 유저명 identified by 비번; grant, resource, connect to sales; select username from dba_users; 유저 생성 확인 dba_role_privs where grantee = 권한 확인
create table desc table alter table 테이블명 add constraint 제약조건명 primary key(
select sysdate from dual; 서버와 sqdeveloper 의 날짜 형식이 다를때 쿼리가 안될수 있다
transaction 논리적인 db 작업 단위 논리 = 변경가능하다 commit rollback
트랜잭션 적용이전 메모리상 - 복구가능 직접 실행한 사용자만 확인가능 row-lock으로 인해 다른 사용자는 변경 불가능
적용이후 디스크에 쓰여짐 - 영구 반영 모든 사용자가 확인가능
무결성 보장
atomicity 쪼갤수없는 트랜잭션 all or nothing consistency 트랜잭션 이전 이후가 같다 isolation durability 영구반영
where 추출되는 행 제한
단일행함수 다중행함수 - 여러건의 데이터에서 하나의 출력값
변환형 함수 to_number to_char to_date
decode(조건, 조건값, 결과...,기본값)
case 조건 when 조건값 then 결과 else 기본값 end
메인쿼리 서브쿼리
group by 묶기
having 조건걸기
순서 from where group by having select order by
조인 정규화 primary key와 foregin 키와의 관계가 설정돼있는가 필요한 데이터가 각 테이블에 있을때 조인을 해서 하나의 테이블인 것처럼 사용하게 하는것
이너조인 조건에 딱 들어맞는 레코드만 출력
아우터조인 아우터를 모두출력하고 조인되는 레코드 출력
내추럴 조인 컬럼이름이 같으면 조건없이 조인 타잎이 다른경우 안됨
3웨이 조인 - 중매쟁이가 필요
non equi join 값이 아니라 범위에 속하는걸 찾을때
left, right outer join 기준이 되는 측은 다 나오고 반대는 일치하는것만 출력
full 해당하는 조건에 충족하지 않아도 조회할 경우 = 모든 행 더하기
cross 모든 경우의 수 = 곱, 복제할때, 조인조건 명시하지 않을때
self 스스로 조인할때 다른 칼럼값을 조인시켜서 새로운 정보생성
set operator 셀렉트 결과문간의 연산자 union != union all 중복값을 포함하는가
중복값 계산시 정렬 order by 은 비용을 발생시킨다 중복이 별로 없는 테이블끼리 합칠때 중복값만 남겼을때 데이터로서의 가치가 없을때, 중복시켰을때의 데이터의 가치에 비해 자원을 더 소모할때
join vs union 옆으로 붙이냐, 밑으로 붙이냐
intersect 교집합
minus
rownum 셀렉트할때 db가 부여하는 가상, 임시 인덱스
any 다중행 비교시 컴퓨터가 어떤 값을 선택해야 할지 모를때 모든 값에 대응하라는 지침
쿼리 sql 검증 - 실행이 가능한가
문법검사, semantic check
semantic check = 칼럼이 있는지, 권한이 있는지 실행계획 - 옵티마이저(최적화 엔진)에 의한 구체적 순서 결정 CBO Cost Based Optimizer shared pool에서 동일한 캐시가 있는지 확인
캐시가 있을경우 - 소프트파싱 - sql 검증 + 실행계획 pass
없을 경우 - 하드파싱 - sql 검증 + 실행계획 세우기
ctas create table as select
scott.sql $ORACLE_HOME/sqlplus/admin/plustrce.sql
grant dba plustrace to scott;
execute dbms_stats.gather_schema_stats('scott')
set autotrace on explain
select * from emp0
select sql_text from v$sql where sql_text='select * from emp0';
alter system flush shared_pool;
least recently used
vm과 ssh 접속안될때 vm전원내리고 설정에서 호스트전용네트워크를 추가해준다
오라클 설치된 ol vm에서 외부접속후 xscreen 띄우기 루트 dnf config-manager --enable ol8_codeready_builder dnf install xorg-x11-apps xhost + 다른 유저에게 x11 권한부여 access control disabled, clients can connect from any host 오류 메시지 아님 xclock xeyes su - oracle who pts 접속 ip 확인 export DISPLAY=192.168.56.1:0.0 xclock dbca
sid 확인 cat .bash_profile show parameter db_name
윈도 클라이언트 64비트는 현업에서 충돌나고 레지스트리 수정해야할 경우가 많으니 32비트로 깔아라
스트라이핑 방식의 레이드0이 순차 io가 높으므로 oltp에 강하다. 그러나 대체 디스크가 없기때문에 디스크 탈락시 전체 데이터 붕괴의 위험이 있다 미러 방식의 레이드1는 같은 디스크가 2개이므로 읽기성능이 좋다. 그러나 가격이 높을수 밖에 없다 레이드 10방식은 스트라이핑과 미러 방식을 모두 적용함으로써 읽기, 쓰기 성능을 모두 높일 수 있다.
oracle 접속방법 oci jdbc thick thin
dedicate한 방식으로 리스너를 통해 서버프로세스가 생성되고 죽을때 process monitor가 관리함으로써 메모리를 절약한다. 또한 system monitor, checkpoint, dbwr, lgwr, archn 등 다른 프로세스도 같이 관리한다. system monitor는 commit된 로그가 로그파일에 저장되어있고, 서버가 급작스럽게 내려갔다가 올라올때 리두로그에서 로그를 읽어서 체크포인트 이후의 로그를 복구해서 데이터의 무결성을 보장한다. pmon, smon이 내려갈경우 db도 내려간다.
select file_name from dba_temp_files;
ckpt 메모리와 디스크 동기화 = 데이터 헤더에 있는 scn 동기화, 데이터 파일 구조
sysaux, system 메타정보
startup 프로세스 시작 initora 로 파라미터 읽기 컨트롤파일 읽고 올라오기 mounted db 파일 올리기 open
pga private area 대용량의 order, group 처리, 풀스캔 후 인덱싱 sort area, 대용량 hash join
join hash join nl join
desc dict select * from dict where like 'user'; 딕셔너리에서 관련 테이블 찾기
all 아래 dba 아래 user view v 뷰 x 뷰 잘 안씀
오라클은 거대한 잠금 머신이다 wait event
sid = db_name = global_db_name = service_name 개발 언어 인코딩셋과 db 출력 인코딩셋 맞추기
오라클 한국어셋 가짓수, 전체언어 커버 캐릭터셋 nls database parameters nchar 가변길이 언어셋, 기본언어셋말고 추가용 국내 캐릭터셋 utf8 호환성 euc-kr 한글전용, 과거사용, win949 캐릭터셋 잘못된 경우 dbca 로 기존 db삭제후 ps -ef 로 프로세스가 떠있는지 확인한다
huge page 일반적으로 리눅스 시스템에서 메모리는 4KB 단위로 관리되지만, Huge Page를 사용하면 2MB 또는 1GB 크기의 페이지로 메모리를 관리할 수 있습니다.
stty erase ^H 쉘에서 백스페이스 안먹을때
alias dba
설치시 요구사항 db네임(sid) data 쌓는 폴더 캐릭터셋은 ~로 해주세요
스키마 - 특정유저가 갖고있는 객체들
오라클은 세션 풀을 만드는 기능이 없다 디스크에 ucp라는 기능이 있지만 보통은 was에서 풀링해서 넘긴다
서버프로세스 3mb~6mb - pga에서 상쇄되긴 함
sga 일반적으로 전체메모리의 3~40% 잡음 독스있으나 엔지니어들이 참고하진 않음
pga 10~20? 배치작업시에는 크게 잡아줘야 한다
아카이브 모드 생성시 폴더만들고 권한주기 홈 dbs 아래 spfileorcl.ora 동적 파라미터파일 명령어로 수정 필요
dba가 항상 보는 로그 /$ORACLE_BASE/diag/rdbms/db명/sid명/trace/alert tail -f 실시간 보기
latch 메모리에 있는 경량화된 락 서브풀 래치를 줄이기위해 쉐어풀을 나눠놓은 것
쉐어드풀 ora 0431 에러시 저장된 라이브러리 캐시는 flush해도 하드파싱 비용이 더 들뿐 데이터 블록이날아가진 않는다
하드파싱을 줄이기 위해 bind 변수를 쓴다 = literal sql을 줄인다
amm = sga + pga auto 관리 automatic shared memory management = sga 세부 관리 amm 쓰면 안됨; sga_target, pga_target 만 조정
오라클 설치된 ol vm에서 외부접속후 xscreen 띄우기 루트 dnf config-manager --enable ol8_codeready_builder dnf install xorg-x11-apps xhost + 다른 유저에게 x11 권한부여 access control disabled, clients can connect from any host 오류 메시지 아님 xclock xeyes su - oracle who pts 접속 ip 확인 export DISPLAY=192.168.56.1:0.0 xclock dbca
sid 확인 cat .bash_profile show parameter db_name
윈도 클라이언트 64비트는 현업에서 충돌나고 레지스트리 수정해야할 경우가 많으니 32비트로 깔아라
스트라이핑 방식의 레이드0이 순차 io가 높으므로 oltp에 강하다. 그러나 대체 디스크가 없기때문에 디스크 탈락시 전체 데이터 붕괴의 위험이 있다 미러 방식의 레이드1는 같은 디스크가 2개이므로 읽기성능이 좋다. 그러나 가격이 높을수 밖에 없다 레이드 10방식은 스트라이핑과 미러 방식을 모두 적용함으로써 읽기, 쓰기 성능을 모두 높일 수 있다.
oracle 접속방법 oci jdbc thick thin
dedicate한 방식으로 리스너를 통해 서버프로세스가 생성되고 죽을때 process monitor가 관리함으로써 메모리를 절약한다. 또한 system monitor, checkpoint, dbwr, lgwr, archn 등 다른 프로세스도 같이 관리한다. system monitor는 commit된 로그가 로그파일에 저장되어있고, 서버가 급작스럽게 내려갔다가 올라올때 리두로그에서 로그를 읽어서 체크포인트 이후의 로그를 복구해서 데이터의 무결성을 보장한다. pmon, smon이 내려갈경우 db도 내려간다.
select file_name from dba_temp_files;
ckpt 메모리와 디스크 동기화 = 데이터 헤더에 있는 scn 동기화, 데이터 파일 구조
sysaux, system 메타정보
startup 프로세스 시작 initora 로 파라미터 읽기 컨트롤파일 읽고 올라오기 mounted db 파일 올리기 open
pga private area 대용량의 order, group 처리, 풀스캔 후 인덱싱 sort area, 대용량 hash join
join hash join nl join
desc dict select * from dict where like 'user'; 딕셔너리에서 관련 테이블 찾기
all 아래 dba 아래 user view v 뷰 x 뷰 잘 안씀
오라클은 거대한 잠금 머신이다 wait event
sid = db_name = global_db_name = service_name 개발 언어 인코딩셋과 db 출력 인코딩셋 맞추기
오라클 한국어셋 가짓수, 전체언어 커버 캐릭터셋 nls database parameters nchar 가변길이 언어셋, 기본언어셋말고 추가용 국내 캐릭터셋 utf8 호환성 euc-kr 한글전용, 과거사용, win949 캐릭터셋 잘못된 경우 dbca 로 기존 db삭제후 ps -ef 로 프로세스가 떠있는지 확인한다
huge page 일반적으로 리눅스 시스템에서 메모리는 4KB 단위로 관리되지만, Huge Page를 사용하면 2MB 또는 1GB 크기의 페이지로 메모리를 관리할 수 있습니다.
stty erase ^H 쉘에서 백스페이스 안먹을때
alias dba
설치시 요구사항 db네임(sid) data 쌓는 폴더 캐릭터셋은 ~로 해주세요
스키마 - 특정유저가 갖고있는 객체들
오라클은 세션 풀을 만드는 기능이 없다 디스크에 ucp라는 기능이 있지만 보통은 was에서 풀링해서 넘긴다
서버프로세스 3mb~6mb - pga에서 상쇄되긴 함
sga 일반적으로 전체메모리의 3~40% 잡음 독스있으나 엔지니어들이 참고하진 않음
pga 10~20? 배치작업시에는 크게 잡아줘야 한다
아카이브 모드 생성시 폴더만들고 권한주기 홈 dbs 아래 spfileorcl.ora 동적 파라미터파일 명령어로 수정 필요
dba가 항상 보는 로그 /$ORACLE_BASE/diag/rdbms/db명/sid명/trace/alert tail -f 실시간 보기
latch 메모리에 있는 경량화된 락 서브풀 래치를 줄이기위해 쉐어풀을 나눠놓은 것
쉐어드풀 ora 0431 에러시 저장된 라이브러리 캐시는 flush해도 하드파싱 비용이 더 들뿐 데이터 블록이날아가진 않는다
하드파싱을 줄이기 위해 bind 변수를 쓴다 = literal sql을 줄인다
amm = sga + pga auto 관리 = memory target automatic shared memory management = sga 세부 관리 amm 쓰면 안됨; sga_target, pga_target 만 조정
phisical read 디스크에서 읽기 logical read 메모리에서 읽기
데이터 버퍼 캐시 - 물리 io의 성능 극복
multiblock read count
리두로그 디비가 하는 모든일 데이터 버퍼에서 더티버퍼를 디스크에 쓰는것보다 리두로그를 쓰는 비용이 훨씬 적다
dbwr 주기 체크포인트, 더티 버퍼 임계치, 프리버터 임계치, 테이블 스페이스 변경시, 테이블 변경시, 테이블 스페이스 백업상태, 타임아웃
언두 physiological logging
write ahead 로그부터 쓰기
system change number
enqueue 테이블, 인덱스 락 = 락
smon 인스턴스복구 공간관리
db file sysaux system temp undo user control file 오라클 구성정보, 동기화 정보 redo log file archive file 스위치된 로그파일
1.db server의 sga 영역을 3g로 증가 show parameter sga alter system set sga_target=3G scope=spfile; shutdown immediate startup rac의 경우 다른노드도 적용은 되지만 내렸다 올려야함 2.db 서버의 pga 영역을 1g로 증가 - 19c는 최소 2기가 오류날경우 create pfile from spfile 로 만들고 p파일의 해당부분을 수정하고 startup scope나 sp파일명 수정을 한후 올린다 startup한후 다시 spfile을 만든다
scope 옵션 memory, spfile, both
오라클 필수파일 - 엔진위치
pfile spfile 오라클홈/dbs에서 읽는다 - 싱글기준
sqlnet.ora 접속 보안설정 default 아님
listener.ora 서버측
tnsnames.ora 클라이언트측
undo retention 15분 순환 ex)고객요청 24시간, retention값과 용량도 그에 맞춰 예상해 늘려줘야한다
하드파싱 -> bind 변수쓰세요
시스템뷰 desc dict where like ~
orapwd file= entries=
추적파일 = dump 장애시 로그
automatic diagnostic repo = adr = diagnotic_dest, v$diag_info dba보단 오라클 엔지니어가 보는 로그
컨트롤파일 복사시 오라클을 내리기전 alter하지 않으면 복사하고 올린후 등록하는 과정에서 이전 컨트롤 파일과 다른 부분이 생긴다 이러한 점을 고려할것
컨트롤파일에 디비구조까지는 저장
resetlog 불완전 복구 redo log가 깨졌을경우
긴급시 sqlplus 들어가면 abort 못들어가면 smon kill
redolog 2개부터 가능, 현재 사용중인 로그빼고 물리적보다는 논리적으로 깨지는 경우가 많음
가장 io많은 메모리 = db버퍼 캐시 계속 디스크와 상호교환 = redolog
지우고싶다면 switch를 계속해서 바꾸면서 inactive상태로 만들고 alter로 그룹에서 빼고, 물리파일 삭제
shut down transactional; 트랜잭션이 끝나기까지 너무 오래걸림, immediate로 끝내도 유실된 거래는 리두로그에 있음
huge page 는 os단에서 오라클이 퍼올릴수 있는 데이터 단위를 설정해줌, 데이터블록이 8k라 하더라도 연속되는 경우 16k 등을 한꺼번에 퍼올릴 수 있으므로 효율적이라 여겨짐
백업 핫, 콜드, rman, datapump(export)
sysaux - system 기능 추가하려고 만듦. 스냅, 모니터링 기능이 많이 들어감
pga의 sort 영역에서 정렬중 메모리가 모자랄경우 temp 디스크까지 사용한다
익스텐트 관리방법 지역관리만 쓴다
select from v$tablespace; v$은 단수 dba_는 복수다 select from dba_tablespaces;
sasactbs 1G~자동증가 옵션 sesac/sesac connect, resource 신상정보 테이블명 personal col name, age, varchar2(20)
테이블 스페이스의 물리위치를 옮길때 컨트롤파일의 정보를 수정하고 파일을 이동한다음에 다시 올린다
테이블 스페이스 생성시 일반적으로 autoextend 쓴다 리사이징시 데이터의 양보다는 많아야하고 스토리지크기보단 작아야한다
빅파일스페이스 8k 블록으로 32t까지 가능하지만 거의 안씀, 기존 32g
4k 블록 리눅스에선 단일파일 최대 16g 테스트 dd
오브젝트는 세그먼트 단위, 클러스터 오브젝트는 인프라 클러스터와 다른 것 잘 쓰지 않음 dblink 용어 확실히 정리 필요, 분산 디비 전용라인, 편의성이 높아지되 보안에 취약 -> cdc기법 golden gate로 대체 리두로그에서 변경이력을 테이블복제, 양쪽 소스 tns alias 로 생성 LOB large object, CLOB character large object package plsql partition 데이터 파티션 trigger 데이터변경시 다른 데이터도 같이 변경 materialized view mview write가능한 뷰 dblink 대신 쓰기도 함
언두 dml 작업시 이전이미지, 시간, 저장용량 한계값이 있기때문에 대용량 처리시 조정이 필요함, 일반적으로 32g, 24hour로 잡음, 자동화로 관리, ORA-01555 select 시 undo의 과거 이미지가 aging되어 없을때 mvccc? multi version cuncurrency
제약조건 유일성
롤 - 권한의 집합, 그룹
유저가 많을때 sqldeveloper
oci로 로드밸런싱 설정이 가능하나 알고리즘이 좋지 못함
public ip 서비스라인 virtual ip 묶기 = scan ip 설치할때만 씀 한쪽 노드 서비스 중단시 vip 가 다른 노드로 옮겨감
private ip 는 클러스터 네트워크 전용선으로 10g추천 메모리 공유 = 캐시퓨전 sga 공유
ocr oracle cluster ready
voting disk 헬스체크
undo retention 1800으로 바꾸고 spfile 동적으로 되는지는 매뉴얼확인 필요 resize 1g autoentend on 먹히는지 확인
yum -y install oracle-database-preinstall-19c
x환경 패키지
dnf config-manager --enable ol8_codeready_builder
dnf install xorg-x11-apps
xhost + xclock export DISPLAY=192.168.56.1:0.0
crsctl stat res -t -init 기동확인
ora.diskmon offline이 정상 exadata
부팅 클러스터 - ASM - 인스턴스 - DB기동
free -mt 16기가 까지는 물리메모리와 똑같은 용량의 swap메모리
실사용시 selinux와 firewalld 다시 켜는지?
private ip는 전혀 사용하지 않는 ip로
memlock 값 휴즈페이지
udev 스토리지 구성 asmlib 사용하지 않고 디스크 등록 조회해서 나오는 디스크주소를 권한, 이름과 함께 등록
보통 접속안되면 방화벽탓임
hugepage os 스왑을 쓰고 모자라면 휴즈 페이지를 쓴다는 것이 기본 정책, 느릴경우 정책을 바꿔준다?
uid와 gid가 다르면 통신에 문제가 생긴다
oracleasm 이 제대로 설치되면 /dev/oracleasm이 보인다
asm 이름 설정과정을 라벨링이라고 한다
디스크 인식안될경우 oracleasm init 해야함
scp 수정이유는 패스워드 리드 통신에 오류가 생겨서임 패스워드 리드 뚫기 oracle계정 홈 .ssh 폴더 ssh-keygen -t rsa node2에서도 생성 pub키 ssh-copy-id oracle@node2 서로 교환 authorized_keys 확인 통신확인 ssh connectivity test 에서 오류 안남 혹은 $GRID_HOME/sshsetup 아래 sh돌려서 설정 https://otsteam.tistory.com/306
crs 무조건 3개이상
cvuqdisk 는 권한 문제로 등록한다음 설치가능 cluster verify utility $grid_home/cv/rpm 위치에 있음 CVUQDISK_GRP=dba; export CVUQDISK_GRP rpm ivh
/etc/resolve.conf 등록 에러 외부 통신을 위한 dns 서버가 필요없음
scan에러 3개 등록하면 안뜨지만 1개면 됨
ntp 에러 필요없음
dns 에러 필요없음
rpm packeme database management에러 필요없음
메모리, 디스크값 부족은 해결해야함 패키지설치 해결필요
rsp 파일로 사일런트모드에 들어가는 파라미터 확인
신규는 new cluster set up software only는 기존 클러스터에 노드를 추가할때 사용
asm_pmon으로 확인
asm sid가 따로 있음
grid 설치후 vip, private이 추가된 것을 알수있음 node1은 scanip도 추가됨
crsctl stat res -t asm network 3 offline은 필요없음
$GRID_HOME/asmcmd lsdg 로 확인
lsnr는 그리드 설치시 자동 설치등록됨 grep tns 로 확인
db설치 확인 sqlplus 로 확인
세션값은 프로세스 값의 1.5
rac 패치 분기별 1개 database update gi update grid버전이 db보다 같거나 높아야 함 엔진설치 후 패치 신규설치시 디비는 자동패치 디비까지 설치후 패치 기존디비 내린후 디비패치하고 엔진설치
패치툴 그리드홈 혹은 오라클홈 Opatch 가 해당위치에 있기때문 readme 읽기 opath inv 패치버전과 비교
실제패치 readme 패치를 입히기 위한 패치툴버전 기존파일 백업 패치툴 홈에 unzip
RAC vocl 오라클과 grid 패치 버전 각각 확인 신규설치시 그리드와 엔진까지 패치해야 db가 해당패치로 올라감 node 하나씩 내린후 패치 그리드와 엔진 설치해야할 패치가 항상 같지는 않음
autostart always restore never
deinstall
rac ip 변경
rman scn 지정시 밀리세컨 단위로 지정하기 때문에 ntp 서버와의 통신이 필요하다 scn은 조회시에도 증가하고 있다 리두는 백업하지 않는다 백업전 체크포인트 설정후 수차례 스위치하고 아카이브를 받아간다
컨트롤파일 scn 시간기록 디비구조
scn = 로그시퀀스 번호 = 체크포인트 넘버
테이블스페이스 = 오브젝트?
redo current 기록중 active 체크포인트
로그마이너 - 아카이브 분석
컨트롤이 깨졌을 경우 노마운트 단계에서 컨트롤파일 텍스트와 같은 형식으로 입력해서 생성
v$dabase, logfile, archive change# 검색가능 컨트롤파일은 없음
디비가 무너지기 직전의 커런트 리두로그의 scn에 나머지 동기화
sql 에러 튜닝필요 유저프로세스 실패 버그패치, os불안정 유저에러 - 개발자 실패 인스턴스 실패 smon 미디어 실패 - 디스크, dba가 조치, 물리적 < 논리적 네트워크 실패 - 엔지니어 호출 실패경고 - 테이블스페이스가 수정된때가 아니라 버퍼에서 디스크로 쓸때
완전복구 최신시점까지의 아카이브 적용 불완전복구 복구가능한 어떤 시점까지의 복구
restore 복구가 요구된 백업본을 원본 위치에 복사하는 것 recover 아카이브에서 scn 시점 맞추기 AUTO 끝까지 찾아들어가는 완전복구 cancle 시점지정 - 불완전복구
flashback table abc to before drop 세그먼트가 리마킹되어 복구에 대비한다
purge recyclebin
drop table abc purge
테이블스페이스는 휴지통에 없다
삭제된 시간을 알수 없을경우 아카이브를 로그마이너로 뜯어본다
offline immediate 할 경우 failure로 인식한다 -> advise
데이터파일을 온라인시켜도 테이블스페이가 오프라인일 경우 온라인시켜야 한다
rac는 각 노드에서 사용자들이 작업하므로 리두로그가 각각 생성된다 따라서 생성되는 아카이브가 다르다 그러나 복구할때는 한쪽노드에서 모든 정보를 알고있어야하므로 아카이브가 한곳에 모여있는것이 작업하기 편하다
리스너 안뜰때 alter system resister
datapump 아카이브 미적용, 해당 시점 데이터만 가능
https://www.youtube.com/playlist?list=PLZwFtgKc35I8OoMuIHY5dYKORoYpGnyjW
https://www.youtube.com/playlist?list=PLxU-iZCqT52CE6piTNJMXGGUvDvKw46_T
https://www.youtube.com/@sqlplsql8870/videos
https://www.youtube.com/@ssap-dba/playlists
https://www.youtube.com/@dbboda/playlists
https://www.youtube.com/playlist?list=PLjXGlnSkrdzTUHikKihgVlW1jQCe-U35m
https://www.youtube.com/playlist?list=PLsBBahlj-RCik453qD9Nnnor5KvlSBUTu
https://www.youtube.com/playlist?list=PL3036mp45iYz6btoxjMpeIcOs4RaCo2Np
https://www.youtube.com/playlist?list=PL7mmuO705dG0d1Z_6AoWJk_vdLgJnv-L3
https://www.youtube.com/playlist?list=PLDE8MlAqcTnC9Hn4gqkYEQP9enBYl4Wb3