![[PostgreSQL] PG17 설치의 모든 것 - Data / Wal 분리부터 환경변수까지](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoZOmk%2FbtsLqUgvEue%2FUXVGkzzV2hNNq2aT2OETTK%2Fimg.png)
PostgreSQL 설치의 모든 것새롭게 요즘 배우고 있는 데이터베이스 PostgreSQL이다.오픈소스의 DBMS이다보니 새로운 버전이 매년 나오고, 설치부터 세팅까지 직접해줘야한다는 불편함이 있다. 심지어 기존에 사용하던 CentOS7이 EOS가 되기에 새로운 Linux 버전인 Rocky 9 를 OS로 하여 PostgreSQL을 설치해 보았다. PostgreSQL 17버전을 설치하는 방법을 소개하며,PG의 인스턴스의 디렉토리를 OS와 분리된 다른 영역에 설치하는 방법Wal 디렉토리를 분리하여 심볼릭 링크를 설정하는 방법기본적으로 편의를 위한 환경변수를 설정하는 방법 등에 대해 소개해 보도록 하겠다. PostgreSQL Install원하는 PostgreSQL 버전의 설치를 위해 공식 홈페이지에 접속한다...
WAL (Write-Ahead Logging)Write-Ahead Logging 즉, 로그 먼저 쓰기 라고 할 수있는 WAL은 데이터베이스의 쓰기를 빠르게 완료하며, 데이터의 무결성과 일관성 유지에 매우 큰 역할을 한다. WAL은 어떻게 데이터 쓰기를 빨리 할 수 있으며, 어떤 부분에서 무결성과 일관성 유지에 도움을 주는지 간략하게 설명해보도록 하겠다. Data Write 란?데이터베이스에 데이터를 변경하면, 저장되어있는 해당 디스크의 값을 바꿔주어야한다. 삽입과 삭제도 마찬가지다. 데이터베이스 성능에 가장 큰 영향을 주는 것이 물리적인 디스크 I/O 인데,과연 데이터 하나 조그마한 것이 바뀔 때마다 디스크 I/O가 발생하면 빠를 수 있겠는가. 원초적인 이야기로 돌아가서 전반적인 데이터베이스의 구조와 엔..
DBA - DATABASE ADMINISTRATORDBA란 무엇일까?항상 고민하고 어디까지가 내 일인가에 대해서 의문을 품으며 일을 하고있는 것 같다. 물론 회사마다 팀마다 느낌이 조금씩 다르겠지만, 뭔가 명확하지 않고 시키면 다하는 듯한 느낌이 들때가 많다.DBA가 무엇인가에 대해서는 예전에 적어둔 글이 있는데, 지금 다시 읽어보면 그게 맞을까? 싶다 DBA - 데이터베이스 관리자(DataBase Administrator)Intro 안녕하세요. 초보 DBA 다뉴입니다. Database 관련 글을 쓸 때면, 초보 DBA 라는 말로 저를 소개하곤 하는데요. 관련 직무에 종사한지 5년이 넘었지만, 이제야 본격적으로 DBA 직무를 맡게 되어 그da-new.tistory.com우리 회사의 우리팀은 여러가지 데이..
![[Oracle] 오라클 종료 - Shut Down Option](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK3Hm9%2FbtsKSlrDD2w%2FlIRFmgvjdOOdv68KK1xfm1%2Fimg.png)
Oracle Shut DownOracle Database를 종료할때 사용 할 수 있는 4가지의 ShutDown 옵션에 대해서 소개해 보도록 하겠다.각 옵션별로 세션의 작업과 데이터의 무결성 그리고 속도에 차이가 있으므로 필요에 맞게 사용하는 것이 중요하다.옵션설명NORMAL새로운 연결 불가, 기존 세션이 완료 될 때까지 대기IMMEDIATE기존 세션 강제 종료 및 트랜잭션 롤백TRANSACTIONAL새로운 연결 불가, 트랜잭션이 종료 될 때 까지 대기ABORT트랜잭션 롤백 없이 데이터베이스 종료 각 옵션에 대해 자세하게 하나씩 알아보도록 하자.NORMALSHUTDOWN NORMAL; 오라클 데이터베이스를 종료하는데 가장 안전한 방식이다.새로운 연결을 허용하지 않으며, 기존의 연결을 각각 다 종료 할 때 ..
![[Oracle] 프로시저 내에서 DDL 실행하기 - Create, Drop, Atler, Truncate, CTAS](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYj4ML%2FbtsKREQ3q7t%2FE7EO24wypKIRXFdYJbMRV1%2Fimg.png)
Procedure 내에서 DDL 실행Oracle의 프로시저 내에서는 DDL문을 바로 실행 할 수 없다.create or replace procedure UP_BAN_TEST isbegin create table XTMP_DDL_TABLE (t_no number(10));end;위와 같은 프로시저를 생성하면, 컴파일 시 아래와 같은 오류가 발생한다. (Error: PLS-00103) Oracle의 프로시저는 컴파일 시 문법적 오류를 확인하며 실행 계획을 미리 정하는데, DDL은 실제 런타임에만 실행이 가능하여 실행 계획을 미리 정할 수 없어 오류가 발생하게 된다. 동적 쿼리 실행프로시저 내에서 DDL문을 실행하기 위해서는 동적쿼리를 실행하는 방식으로 작성하여 실행하도록한다. 주로 CTAS, CREAT..
MVCC (Multi-Version Concurrency Control)다중 버전 동시성 제어란? 데이터베이스에서 동시성을 제어하고 데이터의 일관성을 유지하기 위한 기법 중 하나이다.데이터에 변경사항의 버전을 보관하여, 여러 버전의 데이터를 저장해두어 여러 트랜잭션간의 읽기 / 쓰기 작업이 동시에 수행 될 수 있도록 하는 방법이다. 트랜잭션의 읽기 작업이 쓰기 작업을 방해하지 않고, 일관된 데이터를 읽을 수 있게 하는 방식이 말 그대로 데이터의 다중 버전을 통한 동시성 제어이다. MVCC 주요 개념 1. 스냅샷 읽기 - 트랜잭션이 시작된 시점의 버전의 데이터를 기반으로 동작한다. - 다른 트랜잭션의 변경사항이 커밋되기 전 이라면, 그 데이터는 해당 시점의 버전에 포함되지 않는다.2. 다중 버전 관리 - ..
![[Oracle] 프로시저 내용 찾기 - 특정 테이블이 사용되는 프로시저 찾기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmXvRE%2FbtsKIyrFFVw%2FM6xVrh6dRTQYuQji5nmXx1%2Fimg.png)
Procedure 내용 찾기특정 테이블이 사용되는 프로시저를 찾거나, 특정한 구문이 포함된 프로시저를 찾아야 할 때가 있다.간단한 쿼리로 해당 프로시저를 찾을 수 있으며, 프로시저가 아닌 Function / Trigger /Package 등의 내용을 찾을때도 사용 할 수 있다. Queryselect a.object_id, a.object_name, a.object_type, b.line, b.text from DBA_OBJECTS a inner join DBA_SOURCE b on a.object_name = b.name where a.object_type = 'PROCEDURE' -- FUNCTION / TRIGGER / PACKAGE and a.o..
![[Oracle] DML Trigger - 테이블에서 사용하는 트리거 정리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0IphG%2FbtsKDB122jC%2FuH6TYLO2ImVWHm0wPBHXf1%2Fimg.png)
DML Trigger트리거, 우리 대부분 트리거에 대해서 알고 있을 것 이다. 트리거의 특징으로는 아래 정도 알 고 있을 것 이다.* 특정한 동작이 실행되었을 때, 자동으로 함께 실행되는 것 * 데이터의 무결성을 유지* 자동으로 함께 실행되기에 성능 이슈가 있을 수 있다create or replace trigger [트리거 이름]before [or atfer] -- dml문 이전이냐 이후냐insert [or update / delete] [트리거가 동작할 테이블] -- 테이블에서 지정한 dml문이 동작시 트리거 실행[FOR EACH ROW] -- 행 트리거 일 경우 / 문장 트리거 생략begin -- 동작할 트리거 내용end;근데 트리거에 대해서 깊게 생각 해본 적이 있는가??? 그냥 함께 실행된다..
![[MsSQL] Openquery insert - 다른 데이터베이스의 테이블에 데이터 저장하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs9kUW%2FbtsGE4fhdOB%2FhxzVfWSUvPaRKKKhVO8wQ0%2Fimg.png)
Openquery Linked Server (연결된 서버)를 통해 연결이 되어있는 데이터베이스 들에 대해 Openquery문법을 통해 서로 연결하여 DML을 실행 할 수 있으며, 저번 포스팅에 select문에 관련된 여러가지 방법에 대해서 소개 하였다. [MsSQL] Openquery select - 다른 데이터베이스 데이터 읽고 저장하기 select문을 이용하여 내가 현재 위치하고있는 데이터베이스에 데이터를 insert할 수 있지만, 원격지 이기종 데이터베이스에 데이터를 insert하는 방법에 대해서 간략하게 소개해 보도록 하겠다. insert into ~ values select * from openquery([Linked Server], '[select Query]') 연결된 서버를 통해 연결되어있..
![[MsSQL] Openquery select - 다른 데이터베이스 데이터 읽고 저장하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGafku%2FbtsGqL2Buxf%2FpVLE535OmukXnWaN8CGk9k%2Fimg.png)
OpenqueryLinked Server (연결된 서버)를 통해 연결이 되어있는 데이터베이스 들에 대해 Openquery문법을 통해 서로 연결하여 DML을 실행 할 수 있다. 해당 문법에 대해서 알아보도록하며 요번 포스팅에서는 Openquery문법 중 Select문을 통해 다른 데이터베이스의 데이터를 읽고, 읽은 데이터를 저장하며 사용하는 방법에 대해서 소개해보도록 하겠다. selectselect * from openquery([Linked Server], '[select Query]') 연결된 서버(Linked Server)를 설정해둔 서버에 대해서 openquery문법을 통해 해당 데이터베이스의 테이블을 조회 할 수 있다.[select query]에 들어가는 문법은 해당 연결된 ..