Oracle 19

[DB] Oracle에서 다양한 방법으로 테이블 백업하기

Oracle에서 기존 테이블을 백업 테이블로 만들 때, CREATE TABLE과 AS SELECT 문을 사용하여 테이블의 구조와 데이터를 쉽게 복사할 수 있다. 본 글에서는 테이블 백업을 위한 여러 가지 방법을 소개하고, 각 방법을 상황에 맞게 선택할 수 있도록 설명한다.1. A 테이블을 그대로 백업 테이블로 복사하기- 테이블o, 데이터o, 인덱스x, 제약조건xCREATE TABLE A_backup ASSELECT *FROM A; 이 방법은 A 테이블의 모든 데이터와 구조를 그대로 A_backup 테이블에 복사한다.테이블의 모든 컬럼과 데이터가 포함되며, 인덱스나 제약 조건은 복사되지 않는다.2. A 테이블의 구조만 백업하고 데이터는 복사하지 않기- 테이블o, 데이터x, 인덱스x, 제약조건xCREATE ..

Dev/DB 2024.11.21

[DB] ORA-12505 에러 원인 및 해결 방법

에러 원인1. 잘못된 SID 입력: 클라이언트가 연결하려는 데이터베이스의 SID가 잘못 기입2. 리스너 설정 문제: 리스너가 해당 SID를 인식하지 못하거나 데이터베이스 인스턴스가 리스너에 등록되지 않았을 경우3. 리스너 비활성화: Oracle Listener가 실행 여부 확인4. 네트워크 문제: 클라이언트와 서버 간의 네트워크가 불안정하거나 방화벽 설정이 문제 해결 방법1) SID 확인- tnsnames.ora 파일을 열어 설정된 SID가 정확한지 확인SELECT instance_name FROM v$instance; 2) 리스터 상태 확인# 리스너 실행 여부 확인lsnrctl status#리스너 실행lsnrctl start 3) 리스너에 SID 등록 여부 확인- 리스너가 데이터베이스 인스턴스를 인식하..

Dev/DB 2024.11.10

[DB] 오라클 DBA_TAB_PRIVS 테이블 계정 권한 조회하기

A 업체에게 GRANT 명령으로 부여된 권한이 있는 지 확인이 필요한 경우가 있다.DBA_TAB_PRIVS 테이블은 Oracle 데이터베이스에서 특정 계정이나 역할에 부여된 테이블 및 뷰 권한을 확인할 수 있는 뷰다.DBA, 개발자, 데이터베이스 관리자들이 특정 사용자가 어떤 테이블에 접근할 수 있는지 조회할 때 자주 사용되며, 보안 관리와 권한 설정을 효과적으로 관리할 수 있게 도와준다. 주요 컬럼 설명컬럼명데이터 타입설명GRANTEEVARCHAR2권한을 부여받은 사용자 또는 역할의 이름OWNERVARCHAR2테이블 또는 뷰의 소유자 (소유 계정 이름)TABLE_NAMEVARCHAR2권한이 부여된 테이블 또는 뷰의 이름GRANTORVARCHAR2권한을 부여한 사용자의 이름PRIVILEGEVARCHAR2..

Dev/DB 2024.11.07

[ORACLE] Function과 Procedure의 효율적인 사용 방법

최근 데이터 이관 작업을 진행하면서 예외 처리에 대해 Function을 사용하여 효율적으로 트러블 슈팅을 진행했다.트러블 슈팅 진행 과정에서 한가지 의문점이 생겼다.Function(함수)과 Procedure(프로시저) 둘 다 비슷한 구조를 가졌지만 어떤 시점에서 어떤 객체를 사용해야지 더 적절한 선택인지에 대한 의문이 생겼다.그에 따라서 Function과 Procedure의 차이점, 각 장단점, 그리고 적절한 상황 판별에 대해서 써본다. 1. Function과 Procedure의 기본 개념Function (함수)정의: Function은 특정 작업을 수행한 후 반드시 하나의 값을 반환하는 SQL 객체다.주용도: 주로 값을 계산하거나 데이터를 변환하는데 사용된다. 이를 통해 반환값을 다른 SQL문 또는 PL..

Dev/DB 2024.09.08

[DB] Oracle AWR 스냅샷을 활용한 SQL 성능 분석

Oracle 데이터베이스의 성능을 분석하는 데 있어 AWR(Automatic Workload Repository) 스냅샷은 매우 중요한 역할을 한다. AWR 스냅샷은 특정 시점의 데이터베이스 성능 데이터를 캡처하여 저장하며, 이를 통해 데이터베이스 성능 문제를 진단하고 최적화하는 데 유용한 정보를 제공한다.AWR 스냅샷을 활용하여 특정 시간대의 SQL 성능을 분석하는 SQL 쿼리에 대해 확인해보자. 1. 스냅샷(Snapshot) ID 추출하기먼저, 특정 시간대에 해당하는 AWR 스냅샷의 SNAP_ID를 추출한다.DBA_HIST_SNAPSHOT 뷰에는 각 스냅샷의 시작 시간(BEGIN_INTERVAL_TIME)과 끝 시간(END_INTERVAL_TIME)이 저장되어 있다.SELECT SNAP_ID FROM..

Dev/DB 2024.08.20

[ORACLE] 오라클 쿼리 로그 확인하기

금일 오전에 테스트 서버 권한관리 테이블에 데이터가 싹 사라져 있었다..사용자 권한에 따라서 페이지 메뉴 탭이 구분되어 보이는데, 관리자를 제외한 모든 사용자가 메뉴 탭을 확인하지 못하는 상황이 발생되었다. 테스트 서버라서 다행이다.자, 이제 누가 권한관리 테이블을 언제, 어떤 계정으로, 어떤 쿼리를 통해 삭제했는지 확인해보자. Oracle versionDBMSOracle 10gToad for Oracle 1. V$SQL 뷰를 통해 쿼리 로그 확인V$SQL 뷰는 현재 메모리에 있는 SQL 문에 대한 정보를 제공한다.이 뷰를 사용하면 최근 실행된 SQL 문을 확인할 수 있다.SELECT sql_id, sql_textFROM v$sqlWHERE sql_text LIKE '%검색하고자 하는 내용%';--실행한..

Dev/DB 2024.08.13

[DB] SQL에서 순차적인 번호 부여하기: ROW_NUMBER() 함수 사용법

데이터베이스를 다루다 보면 특정 조건에 따라 순차적인 번호를 부여해야 할 때가 있다.이번 포스팅에서는 SQL의 ROW_NUMBER() 함수를 사용하여 각 그룹 내에서 순차적인 번호를 부여하는 방법에 대해 알아보자. 예시 상황다음과 같은 [구매내역] 테이블이 있다고 가정하자.구매번호아이템코드구매일자물품명단가수량1001A0012024-01-01노트북100021001A0022024-01-01마우스5011001A0012024-01-01노트북100011002A0032024-01-02키보드7011002A0042024-01-02모니터20021002A0032024-01-03키보드702 각 [구매번호]와 [아이템코드]내에서 순차적인 [항목번호]를 부여하고 싶다면, ROW_NUMBER() 함수를 사용하여 다음과 같이 쿼리..

Dev/DB 2024.07.17

[ORACLE] 트리거(Trigger)를 이용한 테이블 수정 이력 관리

데이터베이스에서 데이터의 변경 이력을 관리하는 것은 매우 중요하다.사용자가 데이터를 수정하거나 삭제하는 경우, 그 내역을 저장하여 추후에 어떤 변경이 있었는지 추적할 수 있어야 한다.이를 위해 Oracle에서는 트리거를 사용하여 테이블의 수정 이력을 관리할 수 있다.이번 포스팅에서는 트리거를 이용하여 수정 이력을 관리하는 방법을 알아보자. 1. 사용자 작업 테이블 생성먼저 사용자가 직접 데이터를 삽입(insert), 수정(update), 삭제(delete)할 수 있는 테이블을 생성한다.예를 들어, users 테이블이라고 가정하여 생성해 보자.(실제 운영 테이블은 예시와는 비교도 안될 정도로 복잡할텐데, 예시니까^^. 참조만 부탁드립니다)CREATE TABLE users ( id NUMBER PRIMAR..

Dev/DB 2024.06.21