Oracle의 특징
- 대규모 데이터베이스를 지원한다. MSSQL, MYSQL보다 대량의 정보관리를 할 때에 가장 좋은 성능을 보인다.(고가의 HW를 효율적으로 활용할 수 있도록 영역 사용을 완벽하게 제어한다. )
- 고성능 트랜잭션 처리를 제공하여 속도가 빠르다.
- SQL문을 실행하는 가장 효율적인 방법을 선택한다.
- Oracle 서버가 운영되려면 인스턴스가 메모리에 할당되어야 하며, 이를 위해서는 파라미터 파일이 필요하다.
- 다중 동시 데이터 베이스 사용자를 지원한다.
- 여러 사용자가 동일한 데이터에서 작동하는 다양한 데이터베이스 응용 프로그램을 실행하도록 지원하여 데이터 경합을 최소화하고 데이터 동시성을 보장
- 데이터 경합(row level locking) : 데이터 경쟁, 한 사용자가 데이터를 변경하려고 접근할 때 데이터에 lock이 걸리는 것 말함.
- 데이터 동시성 : 다수의 사용자가 동시에 접근 가능
- 유료이기 때문에, 상당히 비싼 비용 지불해야 함.
PostgreSQL
- 대용량 데이터 처리를 위한 기능 구현.
- 다양한 운영체제를 지원함.
- DB 보안을 위해 데이터 암호화, 접근 제어, 접근 감시 3가지로 구성되어 있음.
- C, C++, PL/python 등 여러 언어를 지원함.
- 신뢰성과 안정성이 매우 높다.
- 오픈 소스이기 때문에 무료로 사용 가능함.
- 처리 속도를 빠르게 하기 위해 여러 CPU를 활용하여 쿼리를 실행함.
- 데이터베이스 클러스터 백업 기능을 제공함. (클러스터 : 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법)
Oracle vs PostgreSQL
1. MVCC 모델 구현 방식의 차이
MVCC란, 다중 버전 동시성 제어(multiversion concurrency contrl, MCC, MVCC)이다.
만약 동시성 제어 없이 누군가가 데이터베이스를 읽는 동시에 다른 누군가가 기록을 하려고 한다면 사용자는 반쯤 기록되거나 일관성이 없는 데이터를 보게 될 가능성이 있다.
동시성을 높이기 위해서는 '읽기 작업은 쓰기 작업을 블로킹하지 않고, 쓰기 작업은 읽기 작업을 블로킹하지 않아야 한다'는 원칙을 지켜야 한다. 그 원칙을 지키기 위해 MVCC가 필요하다.
- Oracle : MVCC를 구현하기 위해 UNDO 세그먼트를 사용함.
- PostgreSQL : 블록 내에 이전 레코드를 저장하는 방식 사용함.
2. Shared Pool 존재 여부
Oracle에서는 Parsing작업(문법체크, 권한 유무, Library cache에 기존 쿼리가 있는지를 체크하는 작업)을 하기 위해 Shared Pool을 사용함.
Parsing된 정보를 저장하는 Library Cache와 이러한 Parsing 작업을 진행하는 데 필요한 Data Dictionary의 정보를 메모리상에 올려 저장하는 Data Dictionary Cache가 Shared Pool의 핵심이라 볼 수 있음.
하지만 이 Shared Pool을 PostgreSQL에서는 제공 X.
대신, 프로세스 레벨에서 SQL 정보를 공유하는 기능을 제공함. 즉, 하나의 프로세스에서 같은 SQL을 여러번 수행하면 최초 1회만 하드 파싱(Library cache 이전에 실행했던 쿼리가 없는 경우 진행)을 함.
3. PostgreSQL의 사용이 많아지는 이유
- 비용절감.
- 빠르고 유연한 개발
- 호환성과 유연성
Oracle과 PostgreSQL의 문법 차이
Oracle | PostgreSQL | 비고 |
decode | case when | PostgreSQL에는 decode가 없다, case when으로 대체해야 한다. |
sysdate | now | PostgreSQL에서는 현재 날짜 시간을 now() 함수를 써야한다. |
시퀀스명.NEXTVAL | NEXTVAL('시퀀스명') | PostgreSQL에서는 시퀀스(SEQUENCE) 문법이 다르다. |
nvl | coalesce | Oracle은 타입 불일치시 묵시적 형변환 발생, postgre는 컬럼 타입 불일치 시 오류(상수는 가능) |
CLOB | TEXT | CLOB : 사이즈가 큰 데이터를 외부 파일로 저장하기위한 데이터 타입, 문자열 데이터를 DB 외부에 저장하기 위한 타입. |
connected by | with recursive | |
(+) | outer join | PostgreSQL에서는 outer join시 (+)를 사용할 수 없다. |
select '컬럼' from dual | select '컬럼' from | PostgreSQL에서는 dual을 사용할 수 없다. dual을 제외하고 사용한다. |
CAST | ::[변환할 데이터 타입] | |
Select from (select from table_name); | Select from (select from table_name) as alias_name; | From 절 subquery 사용시 alias 사용 |
문자/숫자 비교 묵시적 형변환 | 문자/숫자 비교 시 오류 | 수치 비교시 타입 다르면 오류 |
number | numeric | 데이터 타입 차이 |
Varchar2 | Varchar | 데이터 타입 차이 |
rownum < | limit | Where 절 |
rownum | Row_number() over() as rownum | Select 절 |
Instr() | Position() | 문자열 index 찾는 함수 instr(문자열, 검색할 문자) : 해당 문자가 시작되는 위치 반환 instr(문자열, 검색할 문자, 시작시점, n번째 검색단어) : 문자열의 시작시점 설정 & n 번째 나오는 위치 반환 |
'DB 공부' 카테고리의 다른 글
문자열 관련 함수들 (0) | 2024.08.28 |
---|---|
null 값 처리 함수들 특징 (0) | 2024.08.27 |
오라클 쿼리 힌트 (0) | 2024.08.26 |