Database/Oracle 32

[Oracle] 테이블 스페이스(Table Space) 변경

솔루션 릴리즈 파일을 설치 및 테스트를 위해 오라클에서 데이터베이스와 계정을 새로 생성했다.해당 DB로 설치한 후 테스트를 하는데 계속 테이블 스페이스가 부족하다는 에러가 발생했다.그래서 현재 세션에서 사용 중인 테이블 스페이스를 조회했다.SELECT tablespace_nameFROM dba_segmentsWHERE owner = USER;위 쿼리로 조회했더니 테이블 스페이스 용량이 매우 작은 것으로 할당되어 있었다. DB 생성할 때 테이블 스페이스를 용량 큰 걸로 지정해놓은 줄 알았는데 제대로 설정되지 않았다. 테이블과 인덱스의 테이블 스페이스를 변경하는 쿼리는 다음과 같다. - 테이블의 table space 변경 쿼리ALTER TABLE 테이블명 MOVE TABLESPACE USERS; - 인덱스의..

Database/Oracle 2024.09.02

[Oracle/Error] ORA-28000: the account is locked

리눅스에 솔루션을 설치한 후 오라클 계정에 접속하려하니 'ORA-28000: the account is locked'라는 에러가 발생하면서 접속이 되지 않았다. 내가 접속하려는 계정이 잠겨있다는 것이다. 이는 다음과 같은 원인으로 발생할 수 있다.Oracle 서버를 디폴트(DEFAULT)로 설치할 경우, 일부 계정은 잠금(Locked) 상태로 생성된다.Oracle 서버를 설치할 때, 관리자가 일부러 계정을 사용할 수 없도록 잠금 상태로 변경한다.(관리자: 계정에 대한 잠금/해제 권한을 가진 사용자)로그인에 여러 번 실패하면 계정이 잠긴다.(실패 횟수는 FAILED_LOGIN_ATTEMPTS에 설정) 이러한 경우에는 관리자 계정으로 접속하여 다음 쿼리를 실행하면 계정 잠금이 해제된다.ALTER USER 잠..

Database/Oracle 2024.07.27

[Oracle/Error] ORA-01013: user requested cancel of current operation

솔루션 패치 후에 특정 기능의 화면이 정상적으로 보이지 않아 서버 쪽 로그를 확인해보았다.ORA-01013: user requested cancel of current operation 에러가 발생하였는데, 이는 특정 기능을 위한 update 쿼리를 실행하면서 타임아웃이 발생하여 생긴 에러이다. 나의 경우는 오라클 DB에서 테이블 컬럼 추가 후 commit을 하지 않아서 해당 에러가 발생한 것이다.DB가 auto commit을 하지 않도록 설정되어 있어서 ddl 실행 후 commit을 따로 해줘야 했는데, 이를 까먹어버려서 해당 컬럼을 사용하려는데 없어서 사용하지 못하고 타임아웃이 발생되었다. commit 후 재기동하니 해당 에러는 발생하지 않았다.

Database/Oracle 2024.07.10

[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