Database 43

[PostgreSQL] @Transactional(readOnly=false)

Spring MVC에서 PostgreSQL로 INSERT를 하려고 했는데 ERROR: cannot execute INSERT in a read-only transaction 라는 에러가 발생하였다. 이는 PostgreSQL의 트랜지션이 읽기 전용으로 되어 있어 발생하는 것이다. 이땐, INSERT 구문을 실행하는 메소드에 @Transitional(readOnly=false) 라는 어노테이션을 선언해주면 된다. readOnly의 값이 true가 default이므로 false로 변경하여 insert도 할 수 있게 만들어준다. // 예시 @Override @Transitional(readOnly=false) public ResultModel insertData(UserModel user_model) { .....

Database/PostgreSQL 2023.05.22

[PostgreSQL] pg_hba.conf 파일 설정

pg_hba.conf 파일 pg_hba.conf 파일은 클라이언트 인증 파일로, 데이터베이스 클러스터의 데이터 디렉토리에 저장되는 환경설정 파일로 제어가 된다. hba는 호스트 기반 인증(host-based authentication)의 약어이다. 해당 파일은 initDB.exe를 실행하면 data 디렉토리 안에 생성된다. # Put your actual configuration here # ---------------------------------- # # If you want to allow non-local connections, you need to add more # ""host"" records. In that case you will also need to make PostgreSQL # ..

Database/PostgreSQL 2023.04.27

[Oracle] 인덱스 힌트(INDEX HINT)

인덱스 힌트란? 인덱스 힌트는 쿼리 실행 시 인덱스를 사용하도록 강제하는 주석이다. 잘못된 SQL문이나 부정확한 통계 정보로 인한 *옵티마이저의 잘못된 실행 계획을 바로 잡을 수 있다. *옵티마이저: CBO 방식에서 주어진 환경(통계 정보, SQL문) 하에서 최적의 실행 계획을 제공한다. ▷멀티라인 주석: SELECT /*+ [힌트절] */ ~ ▷싱글라인 주석: --+ ▷여러 개의 인덱스 힌트 사용 => /*+ [힌트절] [힌트절] ... */ SQL문에서 힌트절은 주석문 안에 표시하며, 잘못된 힌트절로 인해 에러를 반환하는 경우는 없다. 인덱스 힌트를 사용하는 이유 데이터베이스 최적화를 위해 쿼리 실행 계획을 개선하고 성능을 향상시키기 위함이다. 데이터베이스가 자동으로 최적의 실행 계획을 선택하지 못할..

Database/Oracle 2023.04.26

[Oracle] 온라인 SELECT 쿼리 튜닝 순서

온라인 Select문 튜닝 방법론 온라인 SQL의 튜닝방법은 여러 가지가 있을 수 있다. 하지만 그 중에서 가장 기초적이고, 기본적인 방법을 공개한다. 아래의 7가지 항목을 점검하고 약한 곳을 보강하면 된다. 이 글은 SQL 튜닝책을 두 권 정도 본 사람들을 위한 것이다. 튜닝에 자신있는 사람들은 볼 필요가 없다. 1. 적절한 인덱스를 사용하여 Block I/O를 최소화 하라 조인이 없는 경우는 적절한 인덱스를 사용하는 것 만으로도 상당한 효과를 볼 수 있다. 조인이 있는 경우는 특히 Driving(선행) 집합에 신경을 써야 한다. 왜냐하면 Nested Loop 조인을 사용했고, 선행집합의 건수가 많다면, 후행집합의 조인의 시도횟수가 증가하므로 성능이 느려진다. 따라서 적절한 인덱스를 이용하여 선행집합의..

Database/Oracle 2023.04.19

[Oracle] EXISTS()와 IN()

EXISTS() - 문법: EXISTS(subquery) - 서브쿼리만 사용 가능 - 처리 순서: 메인쿼리 -> 서브쿼리 - 서브쿼리의 결과가 단 한 건이라도 존재하면 결과값을 True, 없으면 False로 리턴하고 더이상 쿼리를 수행하지 않는다. SELECT a.USER_NO , a.USER_NM , a.DEPT_NO FROM USR a WHERE a.JOB = 'EMPLOYEE' AND EXISTS (SELECT 1 FROM DEPT b WHERE b.USER_NO = a.USER_NO) - 실행 결과 USER_NO USER_NM DEPT_NO 101 TOM 26 102 SAM 24 DEPT 테이블에서 SAM 2건, TOM 1건, JENNY 0건으로 JENNY를 제외하고 조회가 된다. EXISTS()..

Database/Oracle 2023.04.17

[Oracle/Error] ora-01950: 테이블스페이스 'users'에 대한 권한이 없습니다

ora-01950: 테이블스페이스 'users'에 대한 권한이 없습니다 위 오류 발생 시 아래의 구문을 실행시키면 된다. ALTER USER 사용자계정명 DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; 만약 아래와 같은 오류가 발생한다면, ALTER SESSION SET "_ORACLE_SCRIPT"=true;; 구문 실행 후 ALTER USER 사용자계정명 DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; 구문을 다시 실행하면 'User 사용자계정명이(가) 변경되었습니다.' 라고 뜨면서 정상적으로 변경된다. 이외에 유저 생성 시 해당 유저에게 접속 권한과 리소스 권한을 부여하고 싶다면, GRANT CONNECT, RES..

Database/Oracle 2023.04.07

[Oracle/Error] 데이터베이스 접속이 재설정되었습니다.

저번에 'ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다.'라는 오류가 발생해서 alter session set "_ORACLE_SCRIPT"=true; 를 실행한 후에 계정 생성했었다. 그런데 그 이후로 계정 생성 권한을 가진 계정 뿐만 아니라 생성한 계정까지 계속 '데이터베이스 접속이 재설정되었습니다. 보류 중인 트랜잭션이나 세션 상태가 유실되었습니다.' 라는 알림창이 떴다. 개발 서버를 돌리면서 저 알림창 외에 다른 오류가 발생하지는 않았지만 혹시나 하는 마음에 구글링을 해보았다. 그 결과 아래의 쿼리를 실행하면 더이상 뜨지 않는다는 것을 발견했다. ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:NONE'; 이 쿼리를 실행한 결과, 각 계정마다..

Database/Oracle 2023.04.04

[Oracle/Error] ORA-00936 : 누락된 표현식

ORA-00936 : 누락된 표현식 위의 에러는 주로 다음의 경우에 발생한다. - 콤마 또는 컬럼명을 잘못 작성했을 때 - FROM, WHERE 등의 예약어가 없을 때 나는 INSERT문에 콤마를 하나 더 작성해서 위 에러가 발생하였다. INSERT INTO ( NAME , AGE , GENDER ) VALUES ( , "Michael" , 23 , "M" ); 예를 든 쿼리인데, NAME 컬럼값 작성하는 부분 앞에 콤마를 추가해서 에러가 났었다. 한참 동안 못 찾아서 엄청 헤맸는데 발견하고 나니 너무 허무했었던....

Database/Oracle 2023.04.04

[MSSQL/Error] JDBC 연결 에러 발생

om.microsoft.sqlserver.jdbc.internals.SQLServerException - *** SQLException:ConnectionID:1 ClientConnectionId: 29608d36-2412-43e5-8d1c-8773b07a3cf4 com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 오류: "sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExcep..

Database/MSSQL 2023.03.24