no image
[ORACLE] 트리거(Trigger)를 이용한 테이블 수정 이력 관리
데이터베이스에서 데이터의 변경 이력을 관리하는 것은 매우 중요하다.사용자가 데이터를 수정하거나 삭제하는 경우, 그 내역을 저장하여 추후에 어떤 변경이 있었는지 추적할 수 있어야 한다.이를 위해 Oracle에서는 트리거를 사용하여 테이블의 수정 이력을 관리할 수 있다.이번 포스팅에서는 트리거를 이용하여 수정 이력을 관리하는 방법을 알아보자. 1. 사용자 작업 테이블 생성먼저 사용자가 직접 데이터를 삽입(insert), 수정(update), 삭제(delete)할 수 있는 테이블을 생성한다.예를 들어, users 테이블이라고 가정하여 생성해 보자.(실제 운영 테이블은 예시와는 비교도 안될 정도로 복잡할텐데, 예시니까^^. 참조만 부탁드립니다)CREATE TABLE users ( id NUMBER PRIMAR..
2024.06.21
no image
[ORACLE] 데이터 랜덤값으로 변경하기(dbms_random)
서론오늘은 보안상의 이유로 기존 데이터를 익명화하기 위하여 데이터를 랜덤값 처리 했다.종종 테스트용 데이터를 생성하기 위하여 랜덤 함수를 사용함으로 정해 두는 것이 좋을 듯싶다. 본론아래 예시들을 작성할 텐데, 작성하기 전에 사용되는 함수에 대해서 알아보자 dbms_random.stringdbms_random.string 함수는 지정된 길이와 문자열 타입으로 랜덤한 문자열을 생성하는 오라클 함수이다. TRUNCTRUNC 함수는 숫자를 지정한 자릿수로 절삭하여 반환하는 함수로, 주로 숫자를 다룰 때 활용된다. 예시1. 랜덤한 문자열 생성하기#이 쿼리는 길이가 10인 랜덤한 알파벳 문자열을 생성SELECT dbms_random.string('X', 10) AS random_string FROM dual; 2..
2024.04.30
no image
[ORACLE] 시퀀스(Sequence) 생성, 변경, 삭제
ORACLE Sequence란?ORACLE Sequence는 데이터베이스 객체로, 순번을 생성하고 제어하는 데 사용된다.순번은 일련의 숫자 값을 생성하는 객체로, 주로 테이블의 기본 키 값을 생성하는 데에 활용된다.Sequence를 사용하면 여러 사용자가 동시에 접근해도 고유한 값이 보장된다는 장점이 있다.  Sequence 생성하기ORACLE에서 Sequence를 생성하는 방법은 간단하다. 다음과 같이 CREATE SEQUENCE 문을 사용하여 생성할 수 있다.-- ############################-- SEQUENCE 생성하기 -- []에 있는 값은 임의로 변경해 주시면 됩니다.-- {}에 있는 값은 선택하여 사용해 주시기 바랍니다.-- ##########################..
2024.03.18
no image
[ORACLE] ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE
오류 메시지 확인먼저, 발생한 오류 메시지를 살펴보자.ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE오라클 데이터베이스에서 Oracle Text 인덱스 관리 작업 중 운영 DB에서 테스트 DB로 데이터를 이관(Insert)할 때 해당 오류가 발생했다.참고로, 테스트와 운영 DB 테이블 구조가 동일하다.INSERT INTO [테스트.테이블명]SELECT * FROM [운영.테이블명]@maindb a WHERE NOT EXISTS (SELECT * FROM [운영.테이블명] WHERE [PK로 잡힌 모든 값]);  해결방법1. 권한 확..
2024.02.29
no image
[ORACLE] Timestamp를 이용하여 데이터 복구
ORACLE DB에서 Timestamp를 이용하여 특정 시간이나 일 전의 데이터를 복구하는 방법이다.해당 기능은 데이터 손상이나 실수로 삭제된 데이터 복구할 때 빠르게 활용 가능하다. 1. Timestamp 사용법ORACLE에서는 Timestamp 데이터 형식을 사용하여 정확한 시간을 나타낼 수 있다.Timestamp 형식은 'YYYY-MM-DD HH24:MI:SS.FF'와 같은 형태로 표현된다.  2. 특정 시간의 데이터 복구--날짜를 이용한 Timestamp--2024년 1월 17일 09시 데이터 조회SELECT * FROM table_name AS OF TIMESTAMP (TO_DATE('2024-01-17 09:00:00', 'YYYY-MM-DD HH24:MI:SS')) WHERE ~~~;--20..
2024.01.17
no image
[ORACLE] ORA-12170: TNS:Connect timeout occurred
오류 발생 서버 정보구분정보OSWindows Server 2016DBOracle 19c포트1521 원인DB 서버에 접근이 불가능한 경우에 발생한다.2가지 사항 확인이 필요하다. 1. 서버 접속 정보  - IP나 HOSTNAME, 포트를 잘 못 작성했을 수 있다.2. 방화벽  - 해당 DB 포트(ex. 1521, 1522 등등)가 방화벽에서 허용해주지 않아서 발생할 수 있다. 해결방법1. 서버 접속 정보 같은 경우는 개별 확인이 필요합니다.2. 포트 방화벽 허용 (tcp/1521) [고급 보안이 포함된 Windows 방화벽] → [새 규칙..] [포트] 선택 후 다음(N) → [특정 로컬 포트 1521] 입력 [연결 허용] → [규칙] 선택 → [이름 및 설명] 설정 [인바운드 규칙 추가] 확인
2023.08.28
no image
[ORACLE] ORA-12514: TNS : 리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함
오류 발생 서버 정보구분정보OSWindows Server 2016DBOracle 19c 리스너 상태 확인lsnrctl status 명령어를 입력 시 아래와 같이 출력된다.C:\Users\Administrator>lsnrctl statusLSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 27-8월-2023 21:50:18Copyright (c) 1991, 2019, Oracle. All rights reserved.(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=223.xxx.xxx.xxx)(PORT=1521)))에 연결되었습니다리스너의 상태------------------------별칭 ..
2023.08.27
no image
[ORACLE] ORA-12541: TNS : 리스너가 없습니다.
오류 발생 서버 정보구분정보OSWindows Server 2016DBOracle 19c 해결방법TNSListener 서비스 상태 확인실행창(Ctrl + r)을 열어주신 뒤에 services.msc 입력 후 확인 → OracleOraDB19Home1TNSListener 상태 확인  OracleOraDB19Home1TNSListener가 실행 중인지 확인이 필요합니다.위 사진은 현재 TNSListener가 실행 중이지 않은 상태이므로,마우스 우클릭을 통해 시작 버튼을 눌러주셔야 합니다.  시작 버튼을 눌러주시면 얼마 뒤 아래와 같이 실행중 상태로 변경되는 것을 확인하실 수 있습니다.  위 방법을 통하여 ORA-12541 오류를 해결할 수 있지만 해당 오류를 해결한 뒤에 ORA-12514 오류가 발생하는 경우..
2023.08.27
no image
[ORACLE] 오라클 19C 사용자계정 생성
1. 오라클 계정 생성 시 c## 붙여야 하므로 이를 붙이지 않기 위해 아래와 같이 설정ALTER SESSION SET "_ORACLE_SCRIPT”=TRUE; 2. 사용자(계정) 생성CREATE USER USERID IDENTIFIED BY "userpw"; 3. 권한 부여GRANT CONNECT, RESOURCE TO USERID; 4. 테이블 스페이스 권한 부여오라클 11g 까지는 RESOURCE 롤에 UNLIMITED TABLESPACE 권한이 있었지만 12C 이후에는 별도로 부여해야 데이터 입력이 가능합니다. (즉, 19c에서는 아래와 같이 실행시켜야지 테이블 생성 후 데이터 삽입이 가능함)GRANT UNLIMITED TABLESPACE TO USERID; 5. ALL_USERS 테이블 확인하기..
2023.08.16