본문 바로가기

오라클6

오라클 복구 쿼리 실수로 delete문을 실행하여 데이터를 지워 당황한 적이 있었는데 다행히 오라클은 복구를 할 수 있는 방법이 있었습니다. 다음은 삭제된 데이터를 조회하는 예시와 복구 방법입니다. 10분 전 데이터 조회 쿼리 SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) 2024년 1월 31일 데이터 조회 쿼리 SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(TO_DATE('20240131000000', 'YYYYMMDDHH24MISS')) 10분 전 데이터 복구 쿼리 INSERT INTO "테이블" SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10.. 2024. 1. 31.
cx_Oracle 설치하기 파이썬에서 cx_Oracle을 사용하여 오라클에 접속해보자. sudo의 권한을 가지고 있다고 가정하고 진행해보자. 우선 오라클 클라이언트에 접속하기 위해서는 네이티브 모듈이 필요하다. 상세한 방법은 다음을 참고하여도 좋다. https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html 진행 방법으로는 다음과 같다. 1. 설치할 폴더 생성 mkdir /opt/oracle 2. 모듈 다운로드 wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-basic-linux.x64-21.6.0.0.0dbru.zip 3. 압축 풀기 unzip insta.. 2023. 8. 17.
오라클 connect by level 사용법 서비스를 개발하다보면 시간별, 월별 그래프 등을 보여줘야할 때가 있다. 예를들어 과거 1년간의 월별 그래프를 표현한다고 치자. 12개월간의 데이터가 모두 수집되어 있으면 고민할 필요 없이 SQL을 작성하여 그래프를 표현할 것이다. 하지만 수집에 누락이 있다던지의 문제로 인해 데이터가 비어있는 경우가 있을 수 있다. 이럴때는 CONNECT BY LEVEL을 이용하여 미리 시간 데이터를 만들어 놓고 JOIN을 통하여 차트 데이터를 구현한다. 다음은 현재시간을 기준으로 월별, 일별, 년도별을 출력하는 예제이다. - 과거 1년간 월별 출력 SELECT V_MONTH FROM ( SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -LEVEL+1), 'YYYYMM') AS V_MONTH FROM DUA.. 2022. 2. 15.
오라클에서 인덱스가 없는 테이블에 인덱스 생성하기 (인덱스 생성을 빠르게) 어느날 고객으로부터 화면 조회가 느리다는 이야기를 들었다. 확인해 보니 해당 화면은 A라는 테이블을 사용 중 이었고 해당 테이블에는 인덱스가 없었다. A라는 테이블에는 약 3억건의 데이터가 있었다. 단순 SELECT조회도 느렸고 FULL PARALLEL의 힌트를 줘도 느렸다. 그래서 인덱스를 생성하게 되었는데. 두가지의 방법을 생각해 보았다. 1. 먼저 TEMP테이블을 생성 후 인덱스를 생성한 뒤 기존의 테이블의 데이터를 SELECT 후 INSERT하는 방법. 그리고 기존 테이블은 지우고 TEMP 테이블을 기존 테이블명으로 변경한다. 2. 기존 테이블에 CREATE INDEX를 이용하여 생성한다. 3억건이나 되는 테이블이니 당연히 1번이 빠를 거라고 생각하였지만 보통 귀찮은 일이 아니다. 그래서 찾아보니.. 2020. 11. 9.
오라클 날짜 관련 - 현재일자 구하기SELECT SYSDATE FROM DUAL;SELECT CURRENT_DATE FROM DUAL; - DATE형식을 STRING FORMAT으로 변형TO_CHAR( SYSDATE , '데이트형식') FROM DUAL; - 데이트형식CC : 세기YYYY : 년도Y,YYY : 년도에 콤마추가YEAR : 년도를 글자로 변형Q : 분기MM : 달RM : 달을 로마숫자로 표기MONTH : 달을 글자로 변형WW: 년도의 주W : 이달의 주DDD : 년도의 일자DD : 월의 일자D : 주의 일자DAY : 요일DY : 요일의 약자J : Julian Date , 4712BC의 1월1일부터.HH : 시간 (12)HH24 : 시간(24)MI : 분SS : 초SSSSS : 자정이후 경과된 초 - 달의 마지.. 2019. 2. 27.
오라클 random함수 사용하기 랜덤한 숫자 생성하기 SELECT DBMS_RANDOM.VALUE(0, 1000) FROM DUAL * 정수로 값이 떨어지게 하려면 ROUND함수를 이용하자. 랜덤한 문자 생성하기 SELECT DBMS_RANDOM.STRING('u', 10) FROM DUAL * 첫번째 인자. 'u', 'U' : 대문자'l', 'L' : 소문자'a', 'A' : 대소문자 구분없는 영문자'x', 'X' : 영문자와 숫자 혼합'p', 'P' : 문자 혼합두번째 인자는 자릿수 랜덤으로 정렬하기 ORDER BY DBMS_RANDOM.RANDOM() 랜덤한 날짜생성하기 TO_DATE( TRUNC ( DBMS_RANDOM.VALUE( TO_CHAR(SYSDATE - 10, 'YYYYMMDD'), TO_CHAR(SYSDATE, 'Y.. 2018. 11. 29.