본문 바로가기

서버/DB15

오라클 복구 쿼리 실수로 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.
postgresql sequence 사용하기 postgresql의 sequence에 대해서 다음과 같은 명령어들이 있다. 다음의 가상 테이블이 있다고 가정한다. table명 : member column명 : member_id, member_name 시퀀스 생성 -- serial4를 입력하여 자동으로 시퀀스를 생성하는 방법 CREATE TABLE member ( member_id serial4 NOT NULL, member_name varchar NOT NULL, ); -- mem_seq를 수동으로 생성하고 관리하는 방법 CREATE SEQUENCE mem_seq START 1; CREATE TABLE member ( member_id int4 NOT NULL DEFAULT nextval('mem_seq'::regclass), -- 회원번호 memb.. 2023. 8. 24.
postgresql lock 테이블 조회 및 kill lock 테이블 조회 select b.relname, a.locktype, page, virtualtransaction, pid, mode, granted from pg_locks a, pg_stat_all_tables b where a.relation = b.relid order by relation asc; process kill select pg_cancel_backend(pid); 2023. 4. 19.
postgresql dump & restore - 자주 사용하는 postgresql dump 및 restore 명령어 -d DB명 -h : DB주소 -p : port번호 -U : 유저명 -F : 백업 포맷 지정 (p: plain-text, c: custom-format, d: directory, t: tar) -f : 백업 파일명 -t : 특정 테이블명 -j : Backup시 병렬처리 여부 및 그 정도 -v : 진행 과정 표시 - 이외의 다른 명령어들은 공식 홈페이지를 참조 https://www.postgresql.org/docs/current/app-pgdump.html pg_dump 예시 pg_dump -h localhost -p 5432 -d testdb -U postgres -v -F t > /backup/test_backup.tar 위의 명.. 2023. 2. 16.
오라클 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.
Maximum execution time of 120 seconds exceeded codeigniter3, MySQL을 사용하던 중 발생. query가 장시간 실행될 때 발생한다. 원인은 php.ini의 설정 중 max_execution_time의 값이 120으로 설정되어 있기 때문. 다음의 해결방법이 있다. 1. max_execution_time의 값을 조정. - 어플리케이션 전체에 영향을 받게 된다. 2. 스크립트 상단에 set_time_limit(0)을 설정. - 해당 스크립트 부분에서만 영향을 받게 된다. 2021. 11. 4.
오라클에서 인덱스가 없는 테이블에 인덱스 생성하기 (인덱스 생성을 빠르게) 어느날 고객으로부터 화면 조회가 느리다는 이야기를 들었다. 확인해 보니 해당 화면은 A라는 테이블을 사용 중 이었고 해당 테이블에는 인덱스가 없었다. A라는 테이블에는 약 3억건의 데이터가 있었다. 단순 SELECT조회도 느렸고 FULL PARALLEL의 힌트를 줘도 느렸다. 그래서 인덱스를 생성하게 되었는데. 두가지의 방법을 생각해 보았다. 1. 먼저 TEMP테이블을 생성 후 인덱스를 생성한 뒤 기존의 테이블의 데이터를 SELECT 후 INSERT하는 방법. 그리고 기존 테이블은 지우고 TEMP 테이블을 기존 테이블명으로 변경한다. 2. 기존 테이블에 CREATE INDEX를 이용하여 생성한다. 3억건이나 되는 테이블이니 당연히 1번이 빠를 거라고 생각하였지만 보통 귀찮은 일이 아니다. 그래서 찾아보니.. 2020. 11. 9.
postgresql에서 auto increment 설정(자동 index증가) My Sql에서는 sequence번호를 자동으로 생성해주는 auto increament 기능이 있어서 편하게 사용했다. 최근 postgrespostgresql를 관계형 DB로 사용할 기회가 생겨 테이블 스키마를 생성하던 중 해당 문제에 직면하였고 해결하였기에 기록을 하고자 글을 쓴다. 코드의 예시는 다음과 같다. CREATE SEQUENCE example_id_seq; CREATE TABLE example_table ( id integer NOT NULL DEFAULT nextval(example_id_seq) PRIMARY KEY, name varchar NOT NULL, nick varchar NOT NULL ); ALTER SEQUENCE example_id_seq OWNED BY example_t.. 2020. 6. 29.
mysql 접속이 느려졌을 때 대처방안. 어느날 mysql에 접속하려고 하니 접속이 현저히 느려진 현상이 발생했습니다. 이유를 몰라 구글링을 하던 중 다음과 같은 해결방법을 찾게 되었습니다. mysql.cnf (환경에 따라 파일명이 조금씩 다를 수 있습니다.)의 설정을 변경하는 것인데요. 해당 환경설정 파일에서 다음을 추가해주세요. [mysqld] skip-name-resolve 추가 후 mysql을 재시작 해주세요. 원인은 방화벽, 인터넷 환경, 라우팅 등 다양하게 있겠지만 한가지의 원인으로 외부에서 database 접근시 DNS의 문제가 있을 수도 있으며 해당 설정은 DNS호스트 이름 검색을 사용하지 않도록 설정하는 것이라고 합니다. 저의 경우는 해당설정을 하고 나니 이전 보다는 빠른 접속이 가능해졌습니다. 2020. 6. 25.