시작하기
제품 소개
개요
Querydog는 Oracle / MySQL / MariaDB / PostgreSQL / MSSQL / SQLite 등 다양한 이기종 데이터베이스를 단일 인터페이스에서 운영할 수 있게 해주는 멀티 DB 워크벤치입니다.
AI(Google Gemini, OpenAI GPT, Anthropic Claude, Alibaba Qwen, Moonshot Kimi, 로컬 Ollama)와 결합하여 자연어 질의를 SQL/DDL로 변환하고, 이기종 DB 간 타입 차이를 자동으로 보정합니다.
주요 기능
- Oracle / MySQL / MariaDB / PostgreSQL / MSSQL / SQLite 지원
- AI 기반 SQL/DDL 자동 생성 및 변환
- DDL · Data 전송, 백업, 스케줄링 통합
- Oracle PL/SQL → MariaDB 마이그레이션 (코드·잡 변환과 검증)
- DB 비교, 영향도 분석 등 운영 도구 내장
- 접속 비밀정보를 사용자별 암호화 저장소에 보관
- 연결별 읽기 전용 잠금(🔒) — 운영 DB 오조작 차단
시작하기
화면 구성
개요
Querydog 메인 화면은 메뉴/툴바, DB 트리 패널, 작업 탭 영역(쿼리·데이터·AI), 결과 탭, 상태 바로 구성됩니다. 각 패널은 독(Dock) 방식으로 분리·이동·닫기가 가능합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 좌측 DB 트리에서 Tables / Views / Sequences / Triggers / Functions 탐색
- 중앙 작업 탭에서 시작 / 데이터 / 쿼리 / AI 화면 전환
- 하단 결과 탭에서 표 결과 / 메시지 / 실행 이력 확인
- 상단 툴바에서 연결 전환 · 실행 · 포맷 등 자주 쓰는 명령 호출
- DB 트리에서 Tables 노드 더블클릭 시 별도 테이블 목록 창 오픈
DB 연결
DB 연결 관리
개요
여러 데이터베이스 연결 프로필을 생성·편집·저장하고 원클릭으로 전환합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- Oracle / MySQL / MariaDB / PostgreSQL / MSSQL / SQLite 연결 프로필 관리
- 접속 비밀정보를 사용자 AppData에 암호화 저장 (Connection.ini에 비밀번호 미저장)
- 연결 테스트 버튼으로 즉시 접속 확인 — MariaDB/MySQL 은
lower_case_table_names가 0 이면 경고를 함께 표시 (Oracle 이관 타겟은 DB 생성 전에 1 권장) - 데이터베이스·스키마 목록 자동 조회 및 콤보 선택
- 활성 연결의 컨텍스트(Database/Schema)를 트리·쿼리·전송에서 공유
- 잠금(읽기 전용) — 조회(SELECT)만 허용하고 모든 변경 작업을 차단
- 숨김 — 트리와 연결 목록에서 감춤
진입 경로
메뉴 > 도구 > 연결 설정에서 등록 후 툴바 연결 버튼
외부 프로그램에서 열기
연결 창의 안내는 선택한 실제 파일 경로와 SQLCipher 3/4 호환 버전에 맞춰 갱신됩니다. Navicat/DBeaver에서 여실 때 해당 안내와 암호화 지원 드라이버를 확인하십시오.
SQLCipher 암호화 SQLite
- 연결 편집에서 DB 타입을 SQLite로 선택합니다.
- SQLCipher 암호화를 켜고 파일의 암호를 입력합니다.
- 기본은 SQLCipher 4이며 기존 3 형식 파일은 SQLCipher 3 호환을 선택합니다.
-
파일을 선택하고 연결 테스트를 실행합니다. 새 파일은 암호 입력 후 새 파일 생성으로 만듭니다.
-
암호 저장을 켜면 Windows 사용자별 DPAPI로 암호화해 AppData에 보관합니다. 해제하면 현재 실행 중에만 기억하며 재시작 후 연결 편집에서 다시 입력해야 합니다.
- 일반 SQLite 파일은 자동 암호화하지 않습니다. 일반 파일은 SQLCipher 옵션을 끄고 연결합니다.
- 암호화 파일도 객체 탐색·SQL 실행·편집·전송·백업·복원을 사용할 수 있습니다.
- SQL 및 QDB 백업은 기존 내보내기 형식입니다. 원본 SQLCipher 파일의 암호화가 백업 파일에 자동 적용되지는 않습니다.
- 다른 암호를 쓰는 새 SQLCipher 파일로 데이터를 전송할 수 있습니다. 기존 파일의 암호 변경이나 다른 SQLite 암호화 엔진의 형식은 이 옵션에서 지원하지 않습니다.
읽기 전용 잠금 🔒
운영 DB 를 실수로 변경하는 것을 막는 안전장치입니다. 연결 편집 창의 잠금 을 켜면 그 연결에서는 조회만 됩니다.
| 차단되는 것 | 허용되는 것 |
|---|---|
| INSERT / UPDATE / DELETE / MERGE | SELECT |
| CREATE / ALTER / DROP / TRUNCATE | 실행 계획, 객체 탐색 |
| 데이터 그리드 셀 편집·행 추가·삭제 | 데이터 조회·내보내기 |
| 전송·마이그레이션의 타겟 지정 | 전송·마이그레이션의 소스 지정 |
- 잠긴 연결은 트리와 연결 목록에 🔒 로 표시됩니다.
- 데이터 보기 창은 자물쇠가 눌린 상태로 열리며 해제되지 않습니다.
- Querydog의 실행 경로에서 변경을 제한하는 기능이며 DB 계정의 서버 권한을 바꾸지는 않습니다.
운영 DB 를 마이그레이션 소스로 쓸 때는 잠금을 켠 채로 두는 것을 권합니다 — 읽기만 하므로 작업에 지장이 없고, 실수로 변경하는 것을 줄일 수 있습니다.
DB 연결
데이터베이스 생성
개요
새 데이터베이스를 GUI 로 생성합니다. DB 종류별로 필요한 옵션이 자동으로 표시됩니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- MySQL/MariaDB : Charset(utf8mb4 등) + Collation 콤보 자동 매핑
- PostgreSQL : Owner / Encoding / Template / Tablespace 지정
- MSSQL : 데이터/로그 파일 경로, Recovery Model 선택
- Oracle : 신규 스키마(USER) 생성 + 기본 권한 부여
진입 경로
DB 트리 루트 우클릭 > 데이터베이스 생성
쿼리
SQL 에디터
개요
SQL 파일을 작성·저장·실행하고 결과를 표와 메시지로 확인합니다. 멀티 탭 쿼리 독으로 여러 SQL을 동시에 열어 독립 실행할 수 있습니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- SQL 구문 강조 (키워드 · 문자열 · 주석 · 숫자 색상 구분)
- 멀티 탭 쿼리 독 — 여러 SQL을 동시에 실행
- SQL 포맷팅 : Fast 모드 / SQLFluff 모드
- 쿼리 실행 (
F5) / 선택 영역 실행 / 실행 중단 - 실행 결과를 표 또는 메시지 탭으로 구분 표시
- 쿼리 이력 — 실행 SQL과 시각, 성공/오류 자동 기록
- 엑셀로 저장 / AI 오류 분석 지원
- 저장 위치 :
~/Documents/Querydog/Query/<연결명>/
쿼리
SQL 자동완성
개요
현재 SQL 문맥과 연결 메타데이터를 바탕으로 후보를 표시합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 테이블·뷰·컬럼 및 별칭 해석
- CTE·중첩 쿼리 문맥 후보
진입 경로
쿼리 에디터
SQL 자동완성
DB 연결 후 테이블·뷰·컬럼 정보를 바탕으로 후보를 표시합니다. 별칭. 입력과
CTE·중첩 쿼리의 현재 위치를 해석해 관련 컬럼을 제안합니다. 컬럼 정보는 백그라운드에서
불러오므로 연결 직후에는 목록이 채워질 때까지 기다리십시오.
| 조작 | 동작 |
|---|---|
Ctrl+Space |
자동완성 후보를 직접 엽니다 |
위·아래 방향키 → Enter |
후보를 선택해 삽입합니다 |
Esc |
후보 창을 닫습니다 |
Tab / Shift+Tab |
후보 창을 닫고 에디터 들여쓰기를 처리합니다 |
자동완성은 SQL 작성을 돕는 기능이며 실행 결과를 보장하지 않습니다.
쿼리
PL/SQL · SP 추적 실행
개요
아래 절차와 주의사항을 확인해 주십시오.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
진입 경로
쿼리 에디터의 디버거 기능
개요
프로그램 코드를 한 줄씩 따라가듯이, PL/SQL 블록이나 저장 프로시저가 실행되는 과정을 추적해 드립니다. 중간에 변수 값이 어떻게 바뀌는지 눈으로 확인하실 수 있습니다.
사용법
- 쿼리 에디터에 익명 블록을 작성하시거나, 트리에서 프로시저나 함수를 선택하십시오.
- 추적 실행을 시작하십시오. 프로시저에 입력값이 필요하면 파라미터 입력 창이 열립니다.
- 한 번 입력하신 값은 저장되어 다음 실행 때 그대로 다시 채워집니다.
- 추적 실행 패널에서 진행 상황과 변수 값을 확인하십시오.
주요 기능
- 익명 블록 추적 실행 — 에디터에 작성하신 블록을 그대로 추적해 드립니다.
- 프로시저 · 함수 추적 실행 — 이미 데이터베이스에 만들어져 있는 루틴을 추적해 드립니다.
- 프로시저 파라미터 입력 — 입력값을 저장해 두었다가 다음 실행 때 복원해 드립니다.
- Watch (변수 추적) — 눈여겨보실 변수를 지정하시면 값의 변화를 따라가 드립니다.
- Watch 타임라인 — 변수 값이 언제 어떻게 바뀌었는지 시간 순으로 보여 드립니다.
- 출력 표시 —
DBMS_OUTPUT등 실행 중 출력 내용을 함께 보여 드립니다. - 실행 제어 — 진행과 중단 등 추적 흐름을 조작하실 수 있습니다.
- 진단 로그 — 추적이 뜻대로 되지 않을 때 원인을 찾으실 수 있도록 상세 기록을 남겨 드립니다.
지원 데이터베이스
Oracle · MySQL · MariaDB · PostgreSQL · MSSQL 에서 사용하실 수 있습니다. 서버가 제공하는 방식이 제각각이라 내부 동작은 다르지만, 사용법은 모두 같습니다. 브레이크포인트에서 멈추는 단계 실행이 아니라, 어느 라인까지 실행됐고 그때 변수 값이 무엇이었는지를 따라가는 추적 방식입니다.
DB 별 예제
다음은 DB별 절차 언어 문법 예제입니다. 각 예제에 해당하는 DB 연결에서 실행하십시오. SQLite는 이 PL/SQL·저장 프로시저 추적 예제의 실행 대상이 아닙니다.
아래 블록을 쿼리 에디터에 붙여 넣으시고, Watch 에 v_total 과 v_grade
(MSSQL 은 @total 과 @grade)를 등록하신 뒤 추적 실행을 시작해 보십시오.
루프를 돌며 합계가 10 → 30 → 60 → 100 → 150 으로 변하고, 마지막에 등급이
HIGH 로 정해지는 과정을 보실 수 있습니다.
Oracle (PL/SQL)
DECLARE
v_no NUMBER := 0;
v_total NUMBER := 0;
v_grade VARCHAR2(10);
BEGIN
WHILE v_no < 5 LOOP
v_no := v_no + 1;
v_total := v_total + v_no * 10;
END LOOP;
IF v_total >= 100 THEN
v_grade := 'HIGH';
ELSE
v_grade := 'LOW';
END IF;
DBMS_OUTPUT.PUT_LINE('합계=' || v_total || ' 등급=' || v_grade);
END;
MySQL · MariaDB
BEGIN
DECLARE v_no INT DEFAULT 0;
DECLARE v_total INT DEFAULT 0;
DECLARE v_grade VARCHAR(10) DEFAULT '';
WHILE v_no < 5 DO
SET v_no = v_no + 1;
SET v_total = v_total + v_no * 10;
END WHILE;
IF v_total >= 100 THEN
SET v_grade = 'HIGH';
ELSE
SET v_grade = 'LOW';
END IF;
END
MSSQL (T-SQL) — Watch 는 @total, @grade
DECLARE @no INT = 0;
DECLARE @total INT = 0;
DECLARE @grade VARCHAR(10) = '';
WHILE @no < 5
BEGIN
SET @no = @no + 1;
SET @total = @total + @no * 10;
END
IF @total >= 100
BEGIN
SET @grade = 'HIGH';
END
ELSE
BEGIN
SET @grade = 'LOW';
END
MSSQL 은 IF/ELSE 분기를 위 예제처럼
BEGIN ... END로 감싸 주십시오. 감싸지 않은 한 줄 분기는 구조가 깨지지 않도록 추적을 건너뛰기 때문에, 그 라인의 변수 변화가 기록되지 않습니다.
PostgreSQL (PL/pgSQL)
DO $$
DECLARE
v_no int := 0;
v_total int := 0;
v_grade text := '';
BEGIN
WHILE v_no < 5 LOOP
v_no := v_no + 1;
v_total := v_total + v_no * 10;
END LOOP;
IF v_total >= 100 THEN
v_grade := 'HIGH';
ELSE
v_grade := 'LOW';
END IF;
RAISE NOTICE '합계=% 등급=%', v_total, v_grade;
END $$;
알아두시면 좋은 점
- 원본 소스에 추적용 문장을 끼워 넣은 사본을 실행하는 방식이라, 데이터베이스에 만들어져 있는 프로시저를 추적하셔도 원본은 절대 수정되지 않습니다. 추적용 임시 사본은 실행이 끝나면 자동으로 정리됩니다.
- 추적 중에는 원래 코드보다 실행이 조금 느립니다. 대량 루프를 통째로 추적하시기 보다는 문제가 되는 구간을 좁혀서 추적하시기를 권해 드립니다.
쿼리
AI Query Designer
개요
자연어로 요청하면 AI가 SQL 또는 DDL을 생성하고 에디터에 직접 삽입합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 채팅 인터페이스로 자연어 질문 입력
- 현재 연결의 테이블/스키마 정보를 AI에 자동 전달
- 생성된 SQL을 클릭 한 번으로 에디터에 삽입
- 지원 AI : Google Gemini / OpenAI GPT / Anthropic Claude / Alibaba Qwen / Moonshot Kimi / Ollama(로컬)
- API 키 / 모델 / 시스템 프롬프트는 환경 설정에서 관리
- Cross DB 능력 인식 — 자연어로 여러 연결을 결합한 SQL 자동 생성
지원 프로바이더
| 프로바이더 | API 키 발급처 | 비고 |
|---|---|---|
| Google Gemini | Google AI Studio | 기본값. 무료 티어가 있어 카드 없이 키만 발급하면 됩니다 |
| OpenAI GPT | platform.openai.com | |
| Anthropic Claude | console.anthropic.com | |
| Alibaba Qwen | Alibaba Cloud Model Studio | 국제 리전 기본. 중국 리전은 Base URL 을 바꿔 입력 |
| Moonshot Kimi | Moonshot Open Platform | 국제 기본(api.moonshot.ai). 중국은 api.moonshot.cn |
| Ollama | — | 로컬 실행. API 키 없이 사용 가능 |
API 키는 사용자가 직접 발급해 넣습니다(BYOK). 키는 사용자 AppData 의 .env 에
저장되며 연결 정보와 함께 배포되지 않습니다.
쿼리
Visual Query Builder
개요
드래그 앤 드롭으로 JOIN 쿼리를 시각적으로 구성합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 테이블 카드 추가 후 컬럼 연결선으로 JOIN 구성
- JOIN 타입 : INNER / LEFT / RIGHT / OUTER / CROSS
- 필드 선택, WHERE 조건, ORDER BY, GROUP BY 시각적 설정
- SQL 미리보기 패널 실시간 업데이트
- Cross DB 소스 보존 —
-- CROSS_DB_SOURCES주석 자동 기록
진입 경로
쿼리 에디터의 Visual Query Builder 버튼 (Pro)
쿼리
Cross DB 쿼리
개요
서로 다른 연결의 테이블을 한 SQL 안에서 JOIN 하여 조회할 수 있습니다.
화면
Querydog 1.0.1에서 공개용 SQLite·PostgreSQL 연결로 실행한 SQL 예시입니다. 실행은 완료됐으며 시험 테이블에 일치하는 행이 없어 결과는 0행입니다.

주요 기능
[연결명].(database.)스키마.테이블형식으로 출처 표기- 각 연결에서 WHERE 조건을 푸시다운한 SELECT 발행
- 결과를 Python(pandas) 레벨에서 JOIN 후 그리드에 표시
- SELECT 전용 — INSERT/UPDATE/DELETE 미지원
- 큰 데이터에는
max_rows결과 행 제한 권장
진입 경로
쿼리 에디터에서 SQL 실행 시 자동 분기
예시 SQL
SELECT a.COL1, b.COL2
FROM [연결A].schema.tableA a
JOIN [연결B].schema.tableB b ON a.id = b.id
WHERE a.COL1 > 100
쿼리
데이터 감사 이력
개요
앱에서 수행한 DB 변경 작업을 한곳에 기록·조회합니다. 권한 변경뿐 아니라 객체 삭제, 데이터베이스 삭제, 백업 복원, 그리드 편집 등 되돌리기 어려운 작업을 성공·실패와 함께 남깁니다.
기록은 앱 내부 SQLite(Data/querydog_history.db)에 보관되며, 대상 DB에는
아무것도 쓰지 않습니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 일시 / 수행 계정 / 연결 / 이벤트 유형 / 작업 / 객체 / 실행 SQL 표시
- 기간·수행 계정·연결·이벤트 유형·DB 종류로 필터, 실패만 보기
- 최근 500건 표시, CSV / Excel 내보내기
- 실패한 시도도 기록 — 삭제가 막힌 것 자체가 감사 대상
- 소요 시간과 반영 행 수를 함께 보관
- 비밀번호는 마스킹 후 저장
- 이력 전체 초기화 (확인 후 실행)
진입 경로
메뉴 > 도구 > 데이터 분석 > 데이터 감사이력 (Pro)
기록되는 작업
| 이벤트 유형 | 기록 대상 |
|---|---|
| 권한 | 사용자 생성·삭제·잠금 해제, GRANT / REVOKE |
| SQL 실행 | SQL 에디터에서 직접 실행한 문장 |
| DDL 전송 / 데이터 전송 | DB 간 전송 작업 |
| 객체 DDL | 테이블·뷰·시퀀스·트리거 삭제, 테이블 비우기, 이름 변경, 인덱스 생성·삭제, 루틴 저장·삭제 |
| 데이터베이스 | 데이터베이스 생성 · 속성 변경 · 삭제 |
| 백업 복원 | 백업 파일로부터의 복원 |
| 그리드 편집 | 테이블 데이터 그리드에서 저장한 변경 |
| 데이터 가져오기 | 파일 → 테이블 가져오기 (취소 포함) |
| 테이블스페이스 | 크기 변경, 자동확장, 파일 추가, 조각 정리, 축소, 삭제 |
| 세션 | 세션 강제 종료 |
| 유지보수 | 데이터 최적화, LOB 공간 축소 |
기록 단위
그리드 편집과 데이터 최적화는 작업 1회 = 이력 1건 으로 남습니다.
셀 단위로 남기면 이력이 뒤덮이기 때문입니다.
그리드 편집의 행 단위 상세 변경 내역은 logs/save_audit.jsonl 에 별도로 쌓입니다.
기록되지 않는 것
DB 비교의 동기화 SQL 은 파일로 저장만 하고 실행하지 않으므로 이 목록에 없습니다.
저장한 SQL 을 에디터에서 실행하면 SQL 실행 으로 기록됩니다.
스키마/객체
Table Designer
개요
테이블 구조를 시각적으로 설계하고 DDL을 생성합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 컬럼 편집 : 이름 / 타입 / 길이 / NULL / PK / 자동증가 / 기본값 / 주석
- DB 타입별 데이터 타입 목록 자동 적용
- 인덱스 탭 : 인덱스 이름, 종류(INDEX/UNIQUE), 대상 컬럼
- Foreign Key 탭 : 참조 테이블·컬럼, 삭제 옵션
- CREATE TABLE DDL 미리보기 실시간 생성
진입 경로
DB 트리 > 테이블 우클릭 > 테이블 디자이너 열기
스키마/객체
테이블 목록
개요
아래 절차와 주의사항을 확인해 주십시오.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
진입 경로
객체 탐색기 > Tables 더블클릭
개요
한 스키마 안의 테이블을 건수와 용량 등과 함께 한 줄씩 보여 드리는 창입니다. 테이블을 복사하시거나 다른 스키마로 옮기실 때도 이 창을 사용하시면 됩니다.
여는 방법
DB 트리 > 스키마 > Tables 더블클릭
주요 기능
- 목록 컬럼 — 테이블 이름과 함께 행수와 크기 등을 표시해 드립니다.
- 컨텍스트 메뉴 (우클릭) — 복사와 붙여넣기 등 테이블 단위 작업을 실행하실 수 있습니다.
- 테이블 클립보드 복사 · 붙여넣기 — 테이블을 통째로 복사해 붙여넣으실 수 있습니다.
같은 이름이 이미 있으면
(1),(2)처럼 자동으로 번호를 붙여 드립니다. - 다중 선택 (러버밴드) — 빈 곳에서 드래그하시면 여러 테이블을 한 번에 선택하실 수 있습니다.
유의하실 점
- 이 창 안에서의 드래그는 모두 다중 선택 동작입니다. 쿼리 창으로 테이블을 보내시려면 왼쪽 DB 트리에서 드래그해 주십시오.
스키마/객체
테이블 보기 · 셀 편집
개요
아래 절차와 주의사항을 확인해 주십시오.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
진입 경로
테이블 목록에서 테이블 더블클릭
개요
테이블을 여시면 엑셀처럼 생긴 표(그리드)가 나타납니다. 칸을 직접 고치신 뒤
저장하시면 Querydog 가 알맞은 INSERT · UPDATE · DELETE 문을 만들어 실행해
드립니다.
여는 방법
DB 트리 > 스키마 > Tables 더블클릭 → 테이블 목록 창 → 테이블 더블클릭
행 상태 색상
편집하신 행은 저장하시기 전까지 상태가 색으로 표시됩니다.
| 상태 | 의미 |
|---|---|
| 추가 | 새로 넣으신 행입니다 (아직 저장 전입니다) |
| 수정 | 값을 고치신 행입니다 |
| 삭제 | 지우기로 표시하신 행입니다 |
| 충돌 | 다른 분이 먼저 고치셔서 값이 달라진 행입니다 |
셀 편집 보조 기능
- FK 룩업 픽커 — 외래키 컬럼은 참조 테이블의 값을 목록에서 고르셔서 넣으실 수 있습니다. 코드값을 외우지 않으셔도 됩니다.
- CHECK / ENUM / Boolean 자동 위젯 — 정해진 값만 들어갈 수 있는 컬럼은 콤보나 체크박스로 바뀝니다.
- NULL / DEFAULT / 공백 구분 — 비어 있음(NULL)과 기본값, 빈 문자열을 구분해서 표시하고 입력하실 수 있습니다.
- 인라인 큰 텍스트 / JSON / XML / BLOB 에디터 — 긴 내용이 든 칸은 더블클릭하시면 전용 편집기가 열립니다.
- 컬럼 단위 트랜스폼 — 한 컬럼 전체에 같은 변환을 한 번에 적용하실 수 있습니다.
- 편집 잠금 토글 — 실수로 값이 바뀌지 않도록 그리드를 읽기 전용으로 잠그실 수 있습니다.
- 그리드 찾기 · 바꾸기 — 그리드 안에서 값을 찾아 바꾸실 수 있습니다.
- 셀 클립보드 복사 · 붙여넣기 — 범위를 지정하셔서 복사하고 붙여넣으실 수 있습니다.
저장과 안전장치
- INSERT 시 자동 PK 채움 — 시퀀스와 IDENTITY, AUTO_INCREMENT 를 인식해 기본키를 자동으로 넣어 드립니다.
- 행 단위 부분 실패 처리 — 여러 행을 저장하시다 한 행이 실패해도 그 행만 남고 나머지는 정상적으로 저장됩니다.
- 편집 충돌 감지 — 화면에 띄우신 뒤 다른 분이 먼저 고치신 행은 덮어쓰지 않고 충돌로 알려 드립니다.
- 편집 상태 자동 저장 (Drafts) — 저장하시기 전에 프로그램을 닫으셔도 편집 중이던 내용이 보관됩니다.
- 저장 SQL 을 SQL 에디터로 보내기 — 실행될 SQL 을 직접 확인하시거나 손보고 싶으실 때 사용하시면 됩니다.
파일에서 바로 넣기
- CSV / Excel 드래그앤드롭 임포트 — 파일을 그리드 위로 끌어다 놓으시면 가져오기가 시작됩니다.
- 클립보드 임포트 — 엑셀에서 복사하신 내용을 그대로 붙여넣어 가져오실 수 있습니다.
LOB 자동 숨김
사진과 문서 같은 큰 데이터(LOB)가 든 컬럼은 처음에 ... 로 접어서 보여 드립니다.
화면이 무거워지지 않도록 하기 위한 것이며, 더블클릭하시면 내용을 펼쳐 보실 수 있습니다.
스키마/객체
LOB 관리
개요
아래 절차와 주의사항을 확인해 주십시오.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
진입 경로
테이블 보기 도크 > LOB 관리
개요
사진이나 문서처럼 큰 데이터가 들어 있는 컬럼(LOB)은 용량을 많이 차지합니다. 내보내기 → 비우기 → 공간 축소 순서로 정리하시면 됩니다.
여는 방법
테이블 보기 도크 → 상단 액션 바 → LOB 관리 버튼
작업 순서
- 파일 내보내기 (필수) — 지우시기 전에 반드시 내용을 파일로 먼저 저장해 주십시오. 이 단계를 건너뛰시면 데이터를 되살릴 수 없습니다.
- NULL 비움 (선택) — 컬럼 값을 비워 실제 데이터를 지웁니다.
- 공간 축소 — 비우신 뒤에도 남아 있는 빈 공간을 데이터베이스에 돌려 드립니다.
주요 기능
- LOB 파일 내보내기 — 컬럼에 든 내용을 파일로 저장하실 수 있습니다.
- LOB NULL 비움 — 내보내신 뒤 컬럼 값을 비우실 수 있습니다.
- 공간 축소 — 비운 뒤 남은 빈 공간을 회수하실 수 있습니다.
- BLOB 변환 가이드 (Oracle LONG RAW / RAW) — 오래된 타입을 BLOB 으로 바꾸시는
방법을 상황별로 안내해 드립니다. 소량이면 단순 변환을, 운영 중 무중단이 필요하시면
DBMS_REDEFINITION을 사용하시는 식입니다.
유의하실 점
- LOB 처리 방식은 데이터베이스 종류마다 다릅니다. 공간 축소가 즉시 반영되지 않는 데이터베이스도 있습니다.
- 되돌릴 수 없는 작업이므로, 내보내기 파일이 정상인지 먼저 확인해 주십시오.
스키마/객체
ER 다이어그램
개요
테이블과 관계를 설계하고 문서로 내보내거나 실제 DB 구조로 반영합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 다이어그램 파일 저장·열기
- PDF·PNG·SVG 내보내기
- AI 설계 보조
진입 경로
도구 > 데이터 설계 > ER Diagram
다이어그램 편집과 실제 DB 반영
도구 > 데이터 설계 > ER Diagram에서 여십시오. 테이블과 관계를 편집하고,
AI 사용으로 설계에 관한 질의와 보조 작업을 진행하실 수 있습니다.
- 저장 / 열기는 다이어그램의 테이블·관계·배치를 파일로 보관하고 다시 여는 기능입니다.
- 내보내기에서 PDF·PNG·SVG 형식을 선택하실 수 있습니다.
- 데이터 저장하기는 실제 DB에 구조를 생성하는 별도 기능입니다. 타겟 연결·DB·스키마를 고르고, 편집 가능한 DDL 미리보기를 검토한 뒤 실행 확인을 거칩니다.
- 기존 테이블이 있으면 DROP은 기본적으로 꺼져 있습니다. 켜면 기존 테이블과 데이터가 삭제될 수 있으므로 미리보기의 대상과 SQL을 확인하십시오. 다이어그램 파일 저장만으로 DB가 바뀌지는 않습니다.
스키마/객체
Schema Manager
개요
스키마 단위로 객체를 일괄 관리합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 스키마 생성 / 삭제 / 권한 부여
- 스키마별 객체(테이블, 뷰, 시퀀스, 트리거, 함수) 일람
- DB별 스키마 개념 차이 자동 보정
위 화면은 스키마 생성 입력창 예시입니다. 전체 스키마 목록이나 실제 생성 결과는 포함하지 않습니다.
스키마/객체
Index Manager
개요
테이블별 인덱스를 시각적으로 조회·생성·삭제합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 인덱스 종류(UNIQUE / 일반 / FULLTEXT / SPATIAL) 표시
- 컬럼 / 정렬 / Include 컬럼 지원
- 사용 통계 표시 — 미사용 인덱스 식별 보조
스키마/객체
사용자 관리
개요
DB 사용자 계정과 권한을 관리합니다. DB 종류별로 전용 화면이 제공됩니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 사용자 생성 / 수정 / 삭제
- 역할 템플릿 (
config/role_templates.json) 으로 권한 묶음 일괄 적용 - 비밀번호 정책 / 만료 / 잠금 설정
- 권한 부여(GRANT) / 회수(REVOKE) GUI
- MSSQL 사용자 매핑(mpc) 그리드 지원
- 모든 권한 변경은 자동으로 Permission History 에 기록
진입 경로
메뉴 > 도구 > 사용자 관리
조회·저장 결과 확인
- 사용자와 권한을 조회하는 동안, 조회에 실패했을 때에는 저장이 제한됩니다. 새로고침해 정상 조회한 뒤 변경하십시오.
- MySQL/MariaDB는 같은 사용자명이어도 호스트가 다르면 다른 계정입니다.
저장 전에
사용자@호스트를 확인하십시오. PostgreSQL 사용자명의 대소문자도 유지됩니다. - 저장 오류가 나면 이미 성공 응답을 받은 SQL, 실패한 SQL, 다른 DB에 먼저 커밋된 변경을 확인하십시오. 모든 DB에서 전체 변경이 롤백되는 것은 아닙니다. 새로고침으로 실제 상태를 확인한 후 다시 저장하십시오.
- Oracle에서 저장 후 검증 조회에 실패하거나 결과가 다르면 검증 미완료/불일치로 안내합니다. 저장 성공과 검증 완료를 같은 의미로 보시면 안 됩니다.
DB 별 화면
아래 화면은 현재 폼을 시험 데이터 없이 렌더링한 UI 예시이며, 실제 DB 사용자 목록이나 권한 조회 결과가 아닙니다.
Oracle

MySQL

MariaDB

MSSQL

PostgreSQL

데이터 이동/운영
DDL/Data 전송
개요
원본 DB에서 대상 DB로 스키마 구조(DDL)와 데이터를 전송합니다.
주요 객체 전송 순서: Sequence → Type(행 타입 → 컬렉션 타입) → Table(FK 없는 테이블 우선) → View → Trigger
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 원본 / 대상 연결 각각 선택 후 전송 객체 체크박스 선택
- AI DDL 변환 — 이기종 DB 간 타입 차이를 AI가 자동 보정
- 규칙 기반 DDL 변환 — 사전 정의된 타입 매핑 사용
- DDL 미리보기 및 수동 편집 후 실행
- 데이터 전송 : 배치 단위 INSERT, 진행률 표시
- 전송 설정을 템플릿으로 저장 (
Data/transfer_templates.json) — 스케줄 실행에 사용 - [전송 순서 분석] — 소스 연결의 스키마(DB)들이 서로를 참조하는 관계(뷰·MView·루틴 → 다른 스키마, 교차 스키마 FK)를 읽어 참조되는 쪽이 먼저 오는 권장 순서를 보여 줌. 서로 참조하는 스키마가 있으면 "테이블 전체 먼저 → 뷰는 나중에" 계획을 제시. Oracle · MariaDB/MySQL · PostgreSQL · MSSQL 소스 지원
- Oracle → Oracle 전송에서 소스보다 타겟 문자셋의 바이트 폭이 넓어(KO16MSWIN949 → AL32UTF8 등)
VARCHAR2(4000 CHAR)로도 4,000바이트를 넘는 데이터가 있는 컬럼은 소스 데이터를 재서 CLOB 으로 자동 승격 (미리보기 상단과 경고에 표시) — 선언 길이만으로는 잡히지 않던 ORA-12899 누락 방지 - 타겟 MariaDB/MySQL 의
lower_case_table_names가 0 이면 타겟 선택 시 상태 줄에 표시하고, Oracle 등 이기종 소스에서 DDL 전송·데이터 복사를 시작할 때 한 번 경고 — 리눅스 기본값 0 은 DB·테이블 이름과 별칭의 대소문자를 구분해 혼용 표기가 실행 시 실패하므로 DB 생성 전에 1 을 권장
전송 순서 분석과 권한 복사
전송 순서 분석은 스키마 사이의 뷰·루틴·FK 참조를 조사해 먼저 옮길 스키마를 보여 줍니다. 서로 참조하는 경우에는 테이블을 먼저 옮긴 뒤 뷰 등을 처리하십시오.
권한 복사 (유료)는 Pro에서 표시되는 별도 버튼입니다. 객체를 먼저 준비한 뒤, 권한을 복사할 객체를 체크하고 실행하십시오. 사전 준비 상태와 적용 SQL을 확인합니다.
- Oracle→Oracle, PostgreSQL→PostgreSQL, MSSQL→MSSQL, MySQL→MySQL, MariaDB→MariaDB처럼 동일 DB 종류에서 지원합니다.
- 일반 데이터 전송의 무료 구분과 달리, MySQL↔MariaDB 간 권한 복사는 지원하지 않습니다.
- 선택한 객체에 직접 부여된 권한을 대상으로 합니다. 시스템 권한·역할 멤버십·소유권을 통째로 복제하지 않으며, 필요한 대상 사용자·역할과 객체를 먼저 준비해야 합니다.
- 읽기 전용 타겟이나 비교·전송 등 작업 진행 중에는 실행할 수 없습니다.
비교 표시
비교 중에는 전송 버튼이 비활성화됩니다. 약 N은 추정 행수, ?는 미확인 값입니다.
행수가 같다고 모든 컬럼 값이 같다는 뜻은 아닙니다.
전송 모드
모드 하나가 「DDL 전송」과 「데이터 복사」 두 버튼의 동작을 함께 결정합니다.
| 모드 | DDL 전송 | 데이터 복사 |
|---|---|---|
| 🗑 재생성 (타겟 삭제) | 대상의 기존 객체를 DROP 한 뒤 전부 다시 생성 | TRUNCATE 후 전량 INSERT (PK 없어도 됨) |
| 🔄 동기화 (기본값) | 대상에 없는 객체만 생성 | PK 기준 비교 (PK/UNIQUE 필요) |
| ⏩ 증분 (Pro) | 동기화와 동일 | 키 대조 누락 보충 + 기준 이후 변경 행 갱신 |
재생성 모드로 DDL을 전송하면 적용 직전에 삭제될 객체 목록을 확인하는 창이 뜹니다.
복사 조건(WHERE)은 세 모드 모두 소스 행을 제한합니다. 재생성은 조건을 먼저 검증한 뒤 타겟을 비우며, 조건에 맞는 행이 0건이면 타겟도 비워집니다. {first(n)}·{last(n)} 수량 조건은 재생성·증분에서만 지원하고 동기화에서는 차단합니다.
하위 필드 선택은 세 모드 모두 지원합니다. PK/UNIQUE 키 전체를 선택해야 하며, 동기화·증분에서 기존 행 갱신을 켜도 미선택 컬럼은 유지합니다. 새 행의 미선택 컬럼은 타겟의 기본값·NULL 허용 조건을 따릅니다.
동기화·증분 DDL은 기존 뷰·물리화 뷰도 보존합니다. 물리화 뷰가 타겟 테이블로 변환되는 경우도 같은 이름의 객체가 있으면 생략하며, 존재 여부 조회 실패 시 해당 DDL 생성을 중단합니다.
어느 모드를 골라야 하나
대상을 버려도 되면 재생성, 지켜야 하면 동기화.
속도가 아니라 대상의 기존 데이터를 잃어도 되는지로 고르는 것이 안전합니다.
| 상황 | 권장 |
|---|---|
| 대상이 원본의 완전한 사본이어야 함 (삭제까지 반영) | 🗑 재생성 |
| 대상에만 있는 데이터를 지켜야 함 (통합 DB, 운영 중 생성분) | 🔄 동기화 |
| 대상 테이블에 PK/UNIQUE 가 없음 | 🗑 재생성 |
| FK 로 참조되는 테이블 | 🔄 동기화 |
| 전송이 중간에 끊길 수 있는 환경 | 🔄 동기화 |
| 운영 중이라 조회가 멈추면 안 됨 | 🔄 동기화 |
재생성은 대상을 비운 뒤 채우므로, 중간에 실패하면 대상이 비거나 절반만 찬 상태로 남습니다. 복사가 끝나기 전까지 조회하는 쪽에서는 데이터가 없는 것처럼 보입니다. 동기화는 기존 데이터를 유지한 채 더하므로 이런 구간이 없고, 실패해도 다시 실행하면 이어집니다.
동기화는 소스·타겟 양쪽에 일치하는 PK/UNIQUE 키가 확인된 테이블만 복사합니다. 키가 없거나 조회에 실패하거나 양쪽 키 컬럼이 다르면 해당 테이블을 건너뛰고 로그와 결과에 이유를 표시합니다. 키가 없는 테이블을 일반 INSERT로 자동 전환하지 않습니다. 다른 정상 테이블의 전송은 계속 진행합니다. 이 처리는 기존에 쌓인 중복 행을 삭제하지 않습니다.
재생성의 대상 비우기
TRUNCATE 로 비우고, 쓸 수 없는 경우(SQLite 는 문법이 없고, FK 참조 대상이거나 권한이
없는 경우) DELETE 로 자동 전환합니다. 둘 다 실패하면 해당 테이블 복사를
건너뛰고 오류로 기록합니다. 비우기 실패 상태에서 INSERT를 계속하지 않습니다.
기존 행 갱신
동기화·증분 모드의 하위 옵션입니다.
- 끄면 대상에 이미 있는 행은 그대로 두고 새 행만 추가합니다.
- 켜면 키가 겹치는 행을 원본 값으로 덮어씁니다(UPSERT). PK(없으면 UNIQUE)가 있는 테이블에만 적용되며, 키가 없는 테이블은 복사하지 않고 이유를 표시합니다.
전송량 관점에서도 차이가 큽니다.
- 끄면 대상에 없는 행만 골라 보내므로, 이미 채워진 대상일수록 전송량이 크게 줄어듭니다.
- 켜면 동기화는 복사 조건에 맞는 모든 행을 보냅니다. 증분은 누락 행과 기준 이후 변경 행을 보냅니다.
증분 전송과 누락 검증
증분은 소스·타겟의 PK/UNIQUE 키를 대조해 대상에 없는 행을 보충합니다. 날짜·숫자·복합 PK·Oracle 변경 SCN 기준 모두, 워터마크 이전의 누락 행을 포함합니다. 기준 날짜가 NULL인 행도 키가 유효하면 누락 보충 대상입니다. 키가 없거나 양쪽 키가 다르면 오류로 중단하며, 키의 NULL도 허용하지 않습니다.
- 「기존 행 갱신」을 끄면 타겟에 없는 행만 추가하고 기존 행을 보존합니다.
- 켜면 선택된 증분 기준 이후의 기존 행도 갱신합니다. 날짜 경계값은 포함합니다. 기준값이 없으면 복사 조건에 맞는 기존 행도 다시 갱신합니다.
- 삭제는 반영하지 않습니다. 수정 날짜나 번호가 바뀌지 않은 기존 행의 수정도 감지하지 못합니다.
Oracle의
ORA_ROWSCN을 선택하면 변경 SCN으로 갱신 대상을 판단할 수 있습니다. - 소스·타겟 키를 매번 읽고, 커밋 뒤 복사 대상으로 고른 키가 타겟에 있는지 확인합니다. 따라서 키 대조 비용은 발생하지만, 대량 누락도 바인드 한도 안에서 나눠 전송합니다.
- 저장 오류·값 절단·누락 검증 실패·기준값 파일 저장 실패는 완료로 처리하지 않습니다. 워터마크를 유지하고 다음 실행에서 키를 다시 대조합니다.
- 일부 컬럼만 선택해도 증분 판정은 유지합니다. 선택 컬럼에 키 전체를 포함해야 합니다.
증분을 처음 실행하거나 타겟을 재생성했을 때
| 대상 상태 | 동작 |
|---|---|
| 비어 있음 | 오래된 워터마크를 무시하고 복사 조건에 맞는 행을 처음부터 복사 |
| 데이터가 들어 있음 | 워터마크와 무관하게 누락 키를 보충하고, 갱신 옵션에 따라 변경 행도 처리 |
| 중간에 빠진 구간이 있음 | 날짜·숫자·PK·SCN 기준 모두 빠진 키를 찾아 나눠 복사 |
⚙ 증분 설정에서 기준 컬럼을 지정하거나 워터마크를 초기화할 수 있습니다.
기준값은 Data/transfer_incremental.json에 소스·타겟·스키마·테이블 단위로 저장됩니다.
수량 조건 {first(n)} / {last(n)}은 남은 복사 후보를 고른 뒤 적용합니다.
동일한 날짜값을 가진 행도 다음 실행에서 빠짐없이 이어서 선택합니다.
수량 제한과 「기존 행 갱신」은 함께 사용할 수 없습니다. 갱신에는 수량 조건을 제거하세요.
복사 조건
데이터 복사 시 선택한 모든 테이블에 공통 적용할 조건입니다. WHERE 키워드는
쓰지 않아도 됩니다(붙여도 자동 처리).
status = 'A' AND reg_dt >= '2026-01-01'
메타 토큰
{ } 토큰을 섞으면 테이블별 정보·날짜·행 수로 자동 치환됩니다. 컬럼명은 그대로 쓰면 됩니다.
reg_date >= {today-30d} AND {last(1000)}
→ 모든 테이블에 "최근 30일 + PK 역순 1,000행" 적용
| 구분 | 토큰 | 의미 |
|---|---|---|
| 수량 | {last(n)} |
기준 컬럼 내림차순 상위 n행 (PK 역순) |
| 수량 | {first(n)} |
기준 컬럼 오름차순 상위 n행 (PK 순) |
| 수량 | {last(n%)} {first(n%)} |
행 수 대신 비율로 지정 (테이블마다 행 수를 세어 환산) |
| 날짜 | {today} {now} {today-Nd} |
오늘 / 현재 일시 / N일 전 (m=개월, y=년) |
| 컬럼 | {pk(n)} |
n번째 기본키 컬럼 (1부터 시작) |
| 컬럼 | {identity} |
자동증가 컬럼 (AUTO_INCREMENT / IDENTITY / serial) |
| 값 | {max(col)} {min(col)} {count} |
해당 컬럼 최대·최소값 / 행 수 |
| 이름 | {table} {schema} |
현재 테이블명 / 스키마명 |
"n번째 컬럼" 토큰은 제공하지 않습니다
{col(n)} {date(n)} {num(n)} {str(n)} 처럼 위치로 컬럼을 지정하는 토큰은
지원하지 않습니다. 테이블마다 n번째 컬럼의 의미가 다르고(어떤 테이블은 등록일,
어떤 테이블은 삭제일), 잘못 지정해도 오류 없이 엉뚱한 데이터가 복사되기 때문입니다.
컬럼은 이름을 직접 쓰고, 테이블 전체에 공통 적용할 때는 수량 토큰을 쓰세요.
일부만 복사하기
테스트 환경을 만들 때처럼 데이터 일부만 옮기는 경우입니다.
토큰을 몰라도 됩니다 — 프리셋 버튼
복사 조건 입력란 옆 프리셋 버튼을 누르면 자주 쓰는 조건을 골라 넣을 수 있습니다.
PK 순 1,000행 / PK 순 10% / PK 역순 1,000행 / PK 역순 10% / 최근 30일 / 최근 N일... /
조건 지우기 — 고른 결과가 입력란에 그대로 표시되므로 그대로 쓰거나 직접 수정하면 됩니다.
최근 30일 은 날짜 컬럼명이 reg_date 로 채워지고 그 부분이 선택된 상태로 들어오니,
대상 테이블의 실제 컬럼명을 바로 입력해 덮어쓰면 됩니다.
프리셋은 모두 정렬이 보장되는 {last} / {first} 를 사용하므로, 같은 프리셋으로
여러 번 복사해도 항상 같은 데이터를 얻습니다.
| 목적 | 입력 |
|---|---|
| PK 역순 100행 | {last(100)} |
| PK 순 100행 | {first(100)} |
| PK 역순 10% (크기 비례) | {last(10%)} |
| PK 순 10% | {first(10%)} |
| 최근 7일치만 | reg_date >= {today-7d} |
| 조건 + 수량 | status = 'A' AND {last(500)} |
| 자동증가 컬럼 기준 | {identity} > 1000 |
{last(n)} 과 {first(n)} 은 기준 컬럼을 정렬해 상위 n건을 고릅니다. 기준 컬럼은
PK 전체(복합 PK 는 선언 순서대로)이고, PK 가 없으면 첫 날짜 컬럼 → 첫 숫자 컬럼으로
대체합니다(어떤 컬럼을 썼는지 경고로 알려 줍니다). ORDER BY 가 명시되므로
몇 번을 실행해도 같은 행이 복사됩니다 — 테스트 DB 를 다시 만들어도 데이터가 동일합니다.
날짜가 문자열(VARCHAR)로 저장된 테이블
레거시 스키마에서 흔합니다. {today-Nd} 토큰은 날짜형 컬럼 전용이라 이 경우에는
쓸 수 없습니다 — 토큰이 TO_DATE('2026-01-01','YYYY-MM-DD') 같은 날짜 리터럴로
치환되어 문자열 컬럼과 비교되기 때문입니다. 프리셋 ▸ 최근 30일 이 제안하는 날짜 컬럼
목록에도 잡히지 않습니다.
대신 문자열을 그대로 비교하면 됩니다. YYYYMMDD 나 YYYY-MM-DD HH:MM:SS 처럼
자릿수가 고정된 형식은 사전순 정렬이 곧 시간순이라 변환 없이 정확합니다.
| 저장 형식 | 최근 1년 | 특정 연도 |
|---|---|---|
'20210503' |
IN_DATE >= '20250824' |
IN_DATE LIKE '2025%' |
'2019-02-26 12:02:00' |
IN_TIME >= '2025-08-24' |
IN_TIME >= '2025-01-01' AND IN_TIME < '2026-01-01' |
시각까지 쓰지 않아도 됩니다. '2025-08-24' 는 '2025-08-24 00:00:00' 보다 짧아
문자열 비교에서 더 작으므로, 그날 0시부터 전부 포함됩니다.
기간 끝은 < 로 자르세요
IN_TIME <= '2025-12-31' 로 쓰면 '2025-12-31 14:30:00' 이 빠집니다.
뒤에 시각이 붙은 값이 더 큰 문자열이기 때문입니다.
IN_TIME < '2026-01-01' 처럼 다음 구간의 시작을 < 로 자르는 편이 안전합니다.
0 패딩이 되어 있어야 합니다
이 방법은 모든 값의 자릿수가 같아야 성립합니다. '2019-2-26' 처럼 월이 한 자리로
섞여 있으면 '2019-2-26' > '2019-12-01' 이 되어 12월이 2월보다 앞으로 갑니다.
옮기기 전에 한 줄로 확인하세요 — 길이가 한 종류로만 나오면 안전합니다.
SELECT LENGTH(IN_TIME) AS 길이, COUNT(*) AS 건수
FROM 스키마.테이블 GROUP BY LENGTH(IN_TIME) ORDER BY 2 DESC;
TO_DATE() 로 감싸지 마세요
TO_DATE(IN_TIME,'YYYY-MM-DD HH24:MI:SS') >= ... 로도 결과는 같지만, 컬럼에 함수를
씌우면 인덱스를 쓰지 못합니다. 수백만 행 테이블에서 차이가 큽니다. 문자열 비교는
인덱스를 그대로 타므로, 형식만 일정하면 더 빠르고 결과도 정확합니다.
전송 모드별 사용 규칙
| 모드 | 일반 조건 (status='A', 날짜) |
수량 조건 ({first}/{last}) |
|---|---|---|
| 🗑 재생성 | ✅ (조건 밖 데이터는 삭제) | ✅ 샘플 테스트 DB 만들기 |
| 🔄 동기화 | ✅ 부분 동기화 | ❌ 사용 불가 |
| ⏩ 증분 | ✅ | ✅ 나눠서 보내기 |
동기화는 타겟을 소스와 빠짐없이 맞추는 모드라 수량 제한과 목적이 상충합니다 —
그 구간만 맞추게 되고, 반복 실행해도 다음 구간으로 넘어가지 않습니다. 그래서 동기화에서는
프리셋 메뉴의 수량 항목이 비활성화되고, 직접 입력해도 실행 시 안내가 나옵니다.
나눠서 보내기 (증분 + 수량 토큰)
대용량 테이블을 여러 번에 걸쳐 조금씩 옮길 수 있습니다. 전송 모드를 ⏩ 증분으로
두고 복사 조건에 {first(1000)} 을 넣으면, 실행할 때마다 다음 1,000행이 이어집니다.
| 실행 | 전송 범위 |
|---|---|
| 1회차 | 1 ~ 1,000행 |
| 2회차 | 1,001 ~ 2,000행 |
| 3회차 | 2,001 ~ 3,000행 … |
이미 타겟에 있는 키를 수량 제한 전에 제외하므로 같은 행을 다시 보내지
않습니다. 네트워크가 불안정하거나 운영 중 부하를 나눠야 할 때 유용합니다.
비율({first(10%)})을 쓰면 남은 행 기준으로 계산됩니다.
"PK 역순"이 곧 "최신"은 아닙니다
PK 가 자동증가 번호나 날짜라면 {last(n)} 이 최신 데이터와 일치하지만,
PRJ_ID 같은 문자열 코드가 PK 면 알파벳 역순일 뿐입니다.
최신 데이터가 필요하면 reg_date >= {today-30d} 처럼 날짜 조건을 직접 쓰세요.
수량 토큰은 WHERE 조건이 아니라 SELECT 의 정렬 + 행 제한으로 적용되며, DB별 문법
(Oracle ROWNUM, MSSQL TOP, 그 외 LIMIT)으로 자동 변환됩니다.
비율(n%)로 지정하면 테이블마다 COUNT(*) 로 행 수를 세어 환산합니다. 랜덤 샘플이 아니라
행 수 지정과 같은 방식이며, 소수 비율({last(2.5%)})도 쓸 수 있습니다. 테이블 크기 편차가
클 때 원본의 크기 비율을 유지하려면 비율, 최소 데이터만 필요하면 행 수가 적합합니다.
수량 토큰의 결과 행 수
정렬 후 앞에서 n건을 자르므로 기준 컬럼 값이 중복돼도 정확히 n행입니다.
다만 다른 조건(status='A' 등)과 함께 쓰면 그 조건을 만족하는 행이 n개보다 적을 때
적게 나옵니다.
{identity} 지원 범위
Oracle 은 12c 이상의 IDENTITY 컬럼만 감지합니다. 11g 이하에서 흔한 시퀀스 +
트리거 방식은 자동증가로 인식할 수 없어 그 테이블은 건너뜁니다 — 이 경우
{pk(1)} 이나 컬럼명을 직접 쓰세요.
재생성 모드 + 복사 조건
대상을 전부 비운 뒤 조건에 맞는 행만 넣습니다. 조건 밖의 기존 데이터는 사라지므로 실행 전 확인 창이 뜹니다. 조건에 맞는 행만 갱신하려면 동기화 + 기존 행 갱신을 쓰세요.
주의사항
- 작은따옴표 문자열 안의
{ }는 토큰으로 해석하지 않습니다 (memo LIKE '%{"a":1}%'안전). 문자열 밖에서 중괄호 문자가 필요하면{{}}로 이스케이프합니다. - 어떤 테이블에서 토큰을 해석할 수 없으면(예: 날짜 컬럼 없음) 그 테이블만 건너뛰고 경고에 남으며, 나머지는 정상 복사됩니다.
- 전체 목록은 복사 조건 입력란 옆 사용법 링크에서 볼 수 있습니다.
데이터 이동/운영
Oracle 마이그레이션
개요
Oracle 의 PL/SQL 코드(프로시저·함수·패키지·트리거)와 잡을 MariaDB 로 옮깁니다. 테이블·시퀀스·뷰·데이터는 DDL / Data 전송 이 담당하므로, 이 창은 전송을 끝낸 뒤 코드를 옮기는 다음 단계입니다.
MariaDB 는 SQL_MODE=ORACLE 에서 PL/SQL 의 상당 부분을 그대로 실행합니다.
따라서 전부 변환하지 않고 원본을 그대로 컴파일해 보고, 안 되는 것만 고치는 방식으로 동작합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 변환 대상 : PROCEDURE / FUNCTION / PACKAGE / TRIGGER / JOB
- 변환하지 않음 : 테이블 · 시퀀스 · 뷰 · 인덱스 · 데이터 (전송 화면이 담당)
- 평가 — 객체를 수집하고 미지원 구문을 스캔해 예상 변환률을 산출
- 컴파일 — 전용 검증 DB 에서 시험 후 삭제 (타겟 객체 무손상)
- AI 보정 — 컴파일에 실패한 것만 최대 N 라운드까지 자동 수정
- 참조 검증 — 컴파일이 확인하지 않는 참조 실재 여부를 별도로 대조
- DBMS_JOB / 스케줄러 잡을 MariaDB EVENT 로 변환
- 프로젝트 저장 — 며칠에 걸쳐 이어서 작업
진입 경로
메뉴 > 도구 > 데이터 이동 > Oracle 마이그레이션 (툴바에 추가 가능)
사용 순서
사전 — 테이블을 먼저 옮깁니다
DDL / Data 전송 으로 테이블·시퀀스·뷰를 먼저 보냅니다. ① 평가 탭 맨 위의 [전송 창 열기] 를 누르면 소스·타겟이 미리 채워진 전송 창이 열립니다.
- 테이블 구조·시퀀스·뷰 DDL 을 먼저 전송한 뒤에 데이터를 전송합니다.
- 이기종 DDL 전송에서는 테이블과 참조 스키마를 먼저 보내야 뷰 전송 시 문제가 생기지 않습니다.
- 전송은 한 번에 끝나지 않아도 됩니다. 여러 번에 나누어 보내고, 실패한 것은 고쳐서 다시 보내세요. 큰 테이블은 DDL 만 옮겨도 준비된 것으로 봅니다.
- 준비가 끝났는지는 [준비 상태 확인] 으로 확인합니다. 소스의 테이블·뷰·시퀀스가 타겟에 있는지, PL/SQL 이 참조하는 객체와 다른 스키마가 빠지지 않았는지, 타겟의 대소문자 정책을 표로 보여 줍니다.
MariaDB 는 참조 테이블이 없어도 루틴을 만들어 줍니다. 확인 없이 컴파일하면 성공처럼 보이다가 실행 때 실패합니다. 그래서 ② 컴파일을 시작할 때 준비 확인이 없거나 누락이 있으면 한 번 묻습니다 (막지는 않습니다 — 일부러 건너뛴 테이블이 있을 수 있으니까요).
타겟이 리눅스 MariaDB 라면
lower_case_table_names=1을 권합니다. Oracle 은 식별자 대소문자를 구분하지 않아 PL/SQL 과 앱 SQL 에View_Prj_Master같은 혼용 표기가 그대로 남는데, 이 설정이 0 이면 테이블 이름은 물론 테이블 별칭까지 구분해 실행 시 실패합니다. DB 를 만들기 전에 정해야 하며, 이미 대문자로 만든 테이블은 재전송이 필요합니다.
본 작업
| 순서 | 할 일 | 확인할 것 |
|---|---|---|
| 1 | 프로젝트 이름 입력 | Data/migration/<이름>.json 에 저장돼 이어서 작업 가능 |
| 2 | 소스(Oracle) 연결·스키마 선택 | 🔒 잠긴 연결도 됩니다 (읽기만 하므로) |
| 3 | 타겟(MariaDB) 연결·DB 선택 | ORACLE 모드 가능 표시 확인 |
| 4 | 옵션 확인 | 첫 실행은 타겟에 생성하지 않음 을 켜세요 |
| 5 | ① 평가 — [전송 창 열기] 로 테이블·시퀀스·뷰 전송 → [준비 상태 확인] | 없음 0, 외부 스키마 없음 |
| 6 | ① 평가 — [객체 수집] → [미지원 구문 스캔] | 난이도 색과 사유, 예상 변환률 |
| 7 | [저장] | 준비 확인 결과도 함께 저장됩니다 |
| 8 | ② PL/SQL — [컴파일 실행] | 진행률과 객체별 결과 |
| 9 | ③ 리포트 — [집계 새로고침] | 유형별·사유별 집계, 준비 상태 |
| 10 | 결과가 만족스러우면 타겟에 생성하지 않음 해제 후 재실행 |
확인창 → 실제 생성 |
8단계에서 자동으로 도는 것
- 스키마 접두사 치환 —
SBE_ERP.→sbe_erp.(타겟이 대소문자를 구분하면 이걸 안 맞추면 런타임에 실패합니다) - 검증 전용 DB 생성 — 타겟의 테이블 구조만 복제 → 컴파일 → DB 삭제
- AI 보정 — 실패한 것만, 최대 N 라운드
- 참조 검증 — 참조 대상이 타겟에 실제로 있는지 대조
난이도 표시
| 난이도 | 뜻 |
|---|---|
| 자동 | 원본 그대로 컴파일될 것으로 봅니다 |
| 주의 | 컴파일은 되지만 동작이 달라질 수 있습니다 (빈 문자열=NULL, 날짜 산술 등) |
| 보정 | 구문을 바꾸면 됩니다 — AI 보정 대상 |
| 수동 | 대응 기능이 없어 사람이 재설계해야 합니다 |
| 미지원 | 암호화(WRAPPED) 소스, 객체 타입 등 — 옮길 수 없습니다 |
왜 "컴파일 성공"만으로는 부족한가
MariaDB 는 루틴 안의 테이블·함수 참조를 컴파일 시점에 확인하지 않습니다(늦은 바인딩). 없는 테이블을 읽는 프로시저도 컴파일은 통과하고 호출할 때 실패합니다.
그래서 컴파일 뒤에 참조 검증을 따로 돌려, 다음을 잡아냅니다.
- 타겟에 스키마(DB)가 없음 — 다른 스키마도 함께 옮겨야 합니다
- 타겟에 객체가 없음 — 의존 순서나 누락
- 대소문자 불일치 — 자동 치환으로 해결되지 않는 객체 이름의 케이스 차이
리포트의 변환률은 컴파일 기준과 실제 동작 가능 기준이 다를 수 있으므로 함께 보십시오.
AI 에 맡기지 않는 것
다음 구문은 일부러 AI 에 보내지 않고 수동 확인으로 넘깁니다.
| 구문 | 이유 |
|---|---|
PRAGMA AUTONOMOUS_TRANSACTION |
트랜잭션 경계가 바뀌어도 컴파일은 통과합니다 |
(+) 아우터 조인 |
MariaDB 12.x 에서는 그대로 동작하지만, 그 이전 타겟에서 재작성하면 조인 방향이 틀려도 컴파일은 통과하고 결과만 조용히 달라집니다 |
DBMS_CRYPTO |
알고리즘·키·패딩이 달라 기존 암호문을 풀지 못합니다 |
테이블을 돌려주는 함수 (PIPELINED)
MariaDB 에는 테이블을 반환하는 함수가 없습니다. 본문이 "SELECT 하나를 커서 FOR 루프로 돌며
PIPE ROW 로 내보내는" 단순형이면, 팩이 결과 집합을 돌려주는 프로시저로 자동 변환합니다.
SELECT 는 손대지 않고 껍데기만 바꾸며, 호출부는 SELECT … FROM TABLE(f(…)) 에서 CALL f(…) 로
바꿔야 합니다 (컴파일 결과 메시지에 표시됩니다). 루프 안에 분기·계산이 섞인 함수는 수동으로 남습니다.
컴파일로 검증할 수 없는 것은 자동화하지 않는다는 원칙입니다.
잡 → EVENT 변환
Oracle 의 DBMS_JOB 과 스케줄러 잡을 MariaDB CREATE EVENT 로 바꿉니다.
| Oracle | MariaDB |
|---|---|
SYSDATE + (60/1440) |
EVERY 1 HOUR |
SYSDATE + 30/1440 |
EVERY 30 MINUTE |
TRUNC(SYSDATE+1) + 3/24 |
EVERY 1 DAY STARTS ... 03:00 |
FREQ=HOURLY |
EVERY 1 HOUR |
FREQ=DAILY;BYHOUR=3 |
EVERY 1 DAY STARTS ... 03:00 |
해석할 수 없는 주기는 추측하지 않고 수동 확인으로 남깁니다.
⚠️ 이벤트 스케줄러가 꺼져 있으면 EVENT 를 만들어도 실행되지 않습니다.
SET GLOBAL event_scheduler = ON;으로 켜고, 영구 적용은my.cnf에event_scheduler=ON을 넣으십시오.
머티리얼라이즈드 뷰
MariaDB 에는 MV 가 없습니다. 뷰로 바꾸면 안 되는 경우가 많습니다.
- MV 는 갱신할 때만 데이터가 바뀌는 시점 고정 복사본입니다. 뷰는 항상 최신이라 "특정 시점 기준" 으로 보던 화면의 숫자가 달라집니다.
- 대량 집계를 미리 계산해 둔 것이라면, 뷰로 바꾸면 조회할 때마다 그 계산이 돕니다.
권장 대응은 테이블 + 갱신 프로시저 + EVENT 조합입니다. MV 를 갱신하던 잡은 그 프로시저를 부르도록 바꾸면 원래 동작이 유지됩니다.
현재 제한
- 현재 탭은 ① 평가 → ② PL/SQL → ③ 리포트입니다. 테이블·시퀀스·뷰는 DDL / Data 전송 화면을 쓰십시오. 별도 스키마 탭은 없습니다.
- 리포트의 Excel 내보내기는 준비 중입니다.
- 구문 스캔과 PL/SQL 컴파일 타겟은 현재 MariaDB / MySQL 만 지원합니다. PostgreSQL이 연결 목록에 표시되어도 컴파일 지원을 뜻하지 않습니다. 이 기능은 Pro입니다.
데이터 이동/운영
전송 검증 보고서
개요
전송 완료 후 원본/대상 데이터를 비교하여 차이를 확인합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 원본/대상 행 수 비교
- 키 일치 여부 검증
- 누락/초과 데이터 집계
- 결과를 표·요약·CSV로 확인
데이터 이동/운영
DDL 실행 보고서
개요
전송 시 실행된 DDL의 성공/실패 상태와 오류 메시지를 표시합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 객체별 성공 / 실패 상태
- 오류 메시지 및 실행된 SQL 표시
- 실패 객체만 재실행 가능
데이터 이동/운영
Data Import
개요
CSV / Excel / TXT 파일을 테이블에 적재합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 파일 자동 미리보기 (인코딩 자동 감지)
- 컬럼 매핑 — 파일 컬럼 ↔ 테이블 컬럼 자동 매칭
- 타입 자동 감지 — 정수 / 실수 / 날짜 / 문자열 추정
- 신규 테이블 생성 옵션 — 매핑 결과로 CREATE TABLE 자동 생성
- 헤더 행 위치 / 시트 선택 / 행 범위 지정
- 진행률 표시 및 실패 행 로그
데이터 이동/운영
Data Export
개요
테이블 또는 쿼리 결과를 외부 파일로 내보냅니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 출력 포맷 : CSV / Excel(.xlsx) / JSON / SQL INSERT
- Excel 헤더 스타일·컬럼 너비 자동 적용
- 내보낼 컬럼·행 필터 지정
- 대용량은 청크 단위로 처리
분석/비교
DB 비교
개요
두 데이터베이스의 구조와 데이터를 비교합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 구조 비교 : 테이블 / 컬럼 / 인덱스 / 제약조건 / 시퀀스 / 뷰 / 트리거
- 레코드 수량 비교 : 테이블별 행 수 차이
- 차이 항목을 색상으로 강조
- Excel 보고서 출력 —
구조/레코드 수량시트 분리 - 동기화 SQL 자동 생성 (
Data/sync_*.sql)
진입 경로
메뉴 > 도구 > 데이터 분석 > 데이터 비교 (Pro)
분석/비교
영향도 분석
개요
DROP / ALTER / RENAME 같은 변경문 실행 전 영향 범위를 분석합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 대상 객체에 의존하는 뷰 / 함수 / 트리거 / FK 추적
- 위험도(Risk Level) : LOW / MEDIUM / HIGH / CRITICAL 자동 판정
- 영향받는 객체 트리 시각화
- AI 보조 의견 — 변경의 부수 효과 및 권장 절차
진입 경로
변경 SQL 작성 시 '영향도 분석' 버튼 또는 메뉴 > 도구
분석/비교
세션 모니터
개요
연결된 모든 서버에 지금 접속해 있는 세션을 한 표로 모아 보여주고, 문제가 되는 세션을 강제 종료할 수 있는 관제 화면입니다. 서버가 갑자기 느려졌을 때 어떤 쿼리가 돌고 있는지 확인하거나, 폭주한 쿼리와 방치된 연결을 정리할 때 사용합니다. 오라클과 MariaDB처럼 종류가 다른 서버도 함께 표시됩니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 연결된 모든 서버를 한 표에 통합 — 서버 / 종류 컬럼으로 구분
- 세션 ID / 사용자 / DB / 명령 / 경과(초) / 상태 / 실행 중 SQL 표시
- 서버마다 병렬 조회 — 한 서버가 느리거나 끊겨도 나머지는 먼저 표시
- 자동 새로고침 (2~600초) — 조회는 백그라운드로 실행되어 화면이 멈추지 않음
- 검색(서버/사용자/DB/쿼리/상태) + 「활성 세션만」 필터, 헤더 클릭 정렬
- 행 선택 시 하단에 실행 중 SQL 전문 미리보기 — 자동 갱신 후에도 선택 유지
- 세션 강제 종료(KILL) — 서버 · 사용자 · 클라이언트 · SQL 요약이 담긴 확인창 후 실행
- Querydog 자신이 사용 중인 연결은 🐶 로 표시하고 종료 시 강화 경고
- 서버마다 모니터 전용 연결을 사용 — 열어 둔 채 쿼리를 실행해도 서로 간섭 없음
- 서버 내부 백그라운드 프로세스는 제외하고 클라이언트 세션만 표시 (PG autovacuum 등)
- 세션 수 추이 그래프는 서버 워치 대시보드 담당 (하단 버튼으로 이동)
- 지원 DB : Oracle / PostgreSQL / MySQL / MariaDB / MSSQL
진입 경로
메뉴 > 도구 > 데이터 분석 > 세션 모니터 (Ctrl+Shift+S)
표 읽는 법
| 컬럼 | 의미 |
|---|---|
| 서버 | 접속 대상 연결명. 마우스를 올리면 그 세션의 접속 클라이언트가 표시됩니다 |
| 종류 | DB 종류 (oracle / mariadb / postgresql / mssql) |
| 세션 ID | 서버가 부여한 식별자. 서버가 다르면 같은 번호가 나올 수 있습니다 |
| DB | 세션이 사용 중인 데이터베이스 |
| 경과(초) | DB 별로 기준이 다릅니다 (Oracle 은 마지막 호출 이후, MySQL 은 현재 상태 지속 시간) |
| 상태 | DB 별 원문 값 (ACTIVE/INACTIVE, Query/Sleep, active/idle, running/sleeping) |
컬럼 머리글에 마우스를 올리면 위 차이가 툴팁으로 표시됩니다.
세션 ID 는 서버 안에서만 고유합니다
통합 표에서는 서로 다른 서버의 세션 ID 가 겹칠 수 있습니다. 강제 종료 대상은 내부적으로 (서버, 세션) 쌍으로 식별하므로 엉뚱한 서버의 세션이 종료되지 않으며, 확인창에도 서버명이 함께 표시됩니다.
DB 별 조회 원천
| DB | 세션 목록 | 세션 종료 |
|---|---|---|
| Oracle | V$SESSION + V$SQL (+ 명령 이름은 V$SQLCOMMAND) |
ALTER SYSTEM KILL SESSION 'sid,serial#' |
| PostgreSQL | pg_stat_activity |
pg_terminate_backend(pid) |
| MySQL / MariaDB | SHOW FULL PROCESSLIST |
KILL id |
| MSSQL | sys.dm_exec_sessions + sys.dm_exec_requests |
KILL spid |
세션 종료는 되돌릴 수 없습니다
종료된 세션의 진행 중 트랜잭션은 롤백되고 연결이 끊어집니다. 확인창에 표시되는 사용자 · 호스트 · 실행 중 SQL 을 반드시 확인한 뒤 실행하세요.
권한 안내
전체 세션 조회와 종료에는 DB 별 관리 권한이 필요합니다
(Oracle ALTER SYSTEM, PostgreSQL pg_signal_backend/superuser,
MySQL PROCESS + SUPER 또는 CONNECTION_ADMIN, MSSQL ALTER ANY CONNECTION).
권한이 없으면 자기 세션만 보이거나 종료 시 권한 오류 메시지가 표시됩니다.
분석/비교
서버 워치
개요
열려 있는 모든 연결의 세션 수를 백그라운드로 주기 수집해, 급증하거나 임계값을 넘으면 알려주는 경량 감시 기능입니다. 여러 서버를 쓸 때 "어느 서버에서 문제가 터졌는지"를 화면을 보고 있지 않아도 알 수 있게 해주며, 미니 대시보드로 서버별 추이를 한눈에 볼 수 있습니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 열린 연결 자동 감시 — 연결마다 전용 수집 스레드 + 전용 접속 (기존 작업과 간섭 없음)
- 급증 판정 : 평소(이동 평균) 대비 배수 초과 / 활성 세션 임계값 / 대기(블로킹) 세션 임계값
- 부하 2종 구분 : 활성 세션(바쁜 부하) + 대기 세션(락에 막힌 부하 — 있으면 타일 주의색)
- 알림 : 상태바 ⚠ 버튼(클릭 → 세션 모니터 드릴다운) + 선택 시 OS 트레이 풍선 알림
- 알림 쿨다운으로 반복 알림 억제 — 단 수치가 1.5배 더 악화되면 즉시 재알림
- 미니 대시보드 도크 : 서버별 타일(상태색·세션/활성·QPS·스파크라인), 클릭 드릴다운
- 대시보드는 도킹/플로팅 자유 배치, 플로팅 시 「항상 위」 옵션
- 처리량 표시 : DB 누적 카운터 차분 — MySQL/Oracle
QPS, PostgreSQLTPS, MSSQLBatch/s로 원천에 맞게 표기 (권한 없으면 자동 생략) - 타일에 마우스를 올리면 각 수치의 산출 근거를 DB 별로 표시
- 수집 실패 시 자동 백오프 후 재연결 — 오류 팝업 없이 타일이 회색으로 표시
- 조회 권한이 없는 계정은 「권한 없음」으로 표시하고 재시도를 중단 (무의미한 반복 조회 방지)
- 지원 DB : Oracle / PostgreSQL / MySQL / MariaDB / MSSQL
진입 경로
환경 설정 > 서버 워치 탭에서 켜기 · 대시보드는 메뉴 > 도구 > 데이터 분석 > 서버 워치 대시보드
설정 항목
| 항목 | 기본값 | 설명 |
|---|---|---|
| 서버 워치 사용 | 꺼짐 | 원격 서버에 주기 조회 부하가 생기므로 기본은 꺼져 있습니다 |
| 급증 시 OS 트레이 풍선 알림 | 꺼짐 | 풍선 클릭 시 대시보드가 열립니다 |
| 수집 주기 | 30초 | 10~600초 |
| 급증 판정 배수 | 2.0배 | 평소(최근 10회 이동 평균) 대비 |
| 급증 판정 최소 세션 수 | 10개 | 소규모 변동 오탐 방지 바닥값 |
| 활성 세션 절대 임계값 | 사용 안 함 | 지정 시 활성 세션이 이 값을 넘으면 알림 |
| 대기(블로킹) 세션 임계값 | 사용 안 함 | 락에 막혀 기다리는 세션이 이 값 이상이면 알림 |
| 알림 쿨다운 | 10분 | 같은 서버의 반복 알림 억제 시간 |
대시보드만 열어도 동작합니다
서버 워치 설정이 꺼져 있어도 대시보드를 열면 감시가 자동 시작되고, 닫으면 설정값 상태로 돌아갑니다.
수집 부하
연결당 주기마다 아주 가벼운 카운터 조회 1회만 보냅니다. 세션 목록 전체를 읽는 세션 모니터와 달리 서버 부하가 거의 없지만, 그래도 필요할 때만 켜는 것을 권장합니다.
「권한 없음」으로 표시된다면
상태 조회 권한이 없는 계정입니다. 특히 Oracle 은 권한이 없으면 조회 자체가 실패해 수집이 되지 않습니다(다른 DB 는 일부 정보만 제한됩니다). 재시도해도 결과가 같으므로 해당 서버의 수집은 중단되며, 권한을 부여한 뒤 연결을 다시 맺거나 서버 워치를 껐다 켜면 재개됩니다.
-- Oracle: 상태 조회 권한 부여 (필요한 뷰만 주려면 V_$SESSION 등 개별 지정)
GRANT SELECT_CATALOG_ROLE TO 사용자;
DB 별 필요 권한 — Oracle SELECT_CATALOG_ROLE, MySQL/MariaDB PROCESS,
PostgreSQL pg_monitor, MSSQL VIEW SERVER STATE.
자동화/스케줄
데이터베이스 백업
개요
DB 전체 또는 선택한 객체를 파일로 백업합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- 백업 형식 : DB 표준 덤프 또는 SQL INSERT 스크립트
- gzip 압축 옵션
- 백업 대상 선택 (전체 / 스키마 / 테이블 단위)
- 진행률 표시 및 로그 출력
- 마지막 백업 위치/정책을 프로필별로 기억
자동화/스케줄
백업 스케줄
개요
OS 스케줄러에 헤드리스 백업 실행기(tools/backup_runner.py)를 등록합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- Windows (
schtasks) / Linux·macOS (cron) 자동 감지 - 매일 / 매주 / 매월 / 한 번 주기
- 보관 일수(자동 삭제) 설정
- 등록된 Querydog 백업 스케줄 목록 조회·수정·삭제
자동화/스케줄
쿼리 스케줄
개요
저장된 SQL 파일을 정기적으로 자동 실행합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- Windows 작업 스케줄러(
schtasks) 또는 cron 자동 등록 - 매일 / 매주 / 매월 / 한 번 주기, 시각, 요일/일자 지정
- 결과 출력 모드: CSV 파일 (전체 행) / 로그만 (최대 100행 요약)
- 로그 / CSV 출력 디렉토리 별도 지정
- DB / Schema 컨텍스트가 SQL 파일 헤더 주석에 자동 보존
- 등록된 Querydog 쿼리 스케줄 목록 조회·수정·삭제·새로고침
진입 경로
쿼리 트리 > SQL 파일 우클릭 > 쿼리 스케줄 등록
현재 제한
스케줄 실행기(tools/query_runner.py)는 단일 커넥션으로 동작하므로
현재는 Cross DB 쿼리 미지원 입니다. (지원 계획 별도 보유)
자동화/스케줄
전송 스케줄
개요
저장된 전송 템플릿을 OS 스케줄러에 등록해 자동 실행합니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- Windows / Linux·macOS 자동 감지
- 매일 / 매주 / 매월 / 한 번 주기
- 등록된 Querydog 전송 스케줄 한눈에 조회·관리
- 실행기는 헤드리스 CLI (
tools/transfer_runner.py)
부가 기능
MySQL DB 매니저
개요
MySQL/MariaDB 인스턴스 운영에 특화된 관리 화면입니다.
화면
현재 코드의 UI 예시 (2026-10-01). 시험 데이터만 사용했으며 DB 접속·작업 실행 결과는 아닙니다.

주요 기능
- 데이터베이스 / 테이블 / 사용자 통합 일람
- 캐릭터셋 / Collation 일괄 변경
- Engine(InnoDB / MyISAM) 변환
- 활성 프로세스 모니터 및 KILL
- 권한 부여/회수 그리드
진입 경로
도구 > 사용자 관리 > Database 관리 버튼 (MySQL/MariaDB 연결)
부가 기능
환경 설정
개요
전역 설정을 관리합니다.
화면
Querydog 1.0.1 실행 화면 (2026-10-01). 연결명은 사용자가 공개 허용한 항목만 표시했습니다.

주요 기능
- AI 설정 : 제공자 / 모델 / API 키 / 시스템 프롬프트
- 테마 : 라이트 / 다크 (위젯 기본 스타일은 시스템 유지)
- 포맷터 : Fast / SQLFluff 선택, 룰셋 경로
- 결과 행 제한 (
max_query_result_rows) — 메모리 보호용 상한 - 로그 보관 기간 / 로그 디렉토리
- 백업/스케줄 기본값
진입 경로
메뉴 > 도구 > 환경 설정 (AI 설정은 도구 > AI 설정)
그리드와 트리

기타 설정
현재 설정 폼을 시험 환경에서 렌더링한 UI 예시입니다.

툴바 사용자정의

서버 워치

AI 세부 설정
현재 코드의 UI 예시입니다. 실제 API 키나 계정 정보는 포함하지 않았습니다.

부록
헤드리스 CLI
개요
스케줄러나 외부 워크플로에서 호출할 수 있는 CLI 도구입니다.
주요 기능
tools/query_runner.py— 저장된 SQL을 실행하고 결과를 CSV/로그로 저장tools/transfer_runner.py— 저장된 전송 템플릿으로 DB 간 전송 수행tools/backup_runner.py— 저장된 백업 정책으로 DB 백업 수행
사용 예시
소스 실행 환경에서 프로젝트 폴더를 기준으로 PowerShell에서 실행합니다.
& "C:/Application/python/python.exe" tools/query_runner.py --conn "연결명" --query "쿼리.sql" --output csv --log-dir logs --output-dir logs
& "C:/Application/python/python.exe" tools/query_runner.py --list # 모든 저장 쿼리 나열
& "C:/Application/python/python.exe" tools/query_runner.py --list --conn "연결명" # 특정 연결의 쿼리만 나열
& "C:/Application/python/python.exe" tools/transfer_runner.py --template "템플릿이름"
& "C:/Application/python/python.exe" tools/transfer_runner.py --template "템플릿이름" --log-dir "D:/Logs"
전송 실행기와 화면 실행의 관계
transfer_runner.py 는 화면에서 실행할 때와 동일한 복사 엔진을 사용합니다.
템플릿에 저장된 전송 모드(재생성 / 동기화 / 증분)와 「기존 행 갱신」 설정이 그대로 적용되며,
증분 기준값(Data/transfer_incremental.json)도 화면 실행과 같은 파일을 공유합니다.
실행 규칙은 공유하지만, 실제 결과는 실행 시점의 DB 상태·권한·저장된 암호에 따라 달라집니다. SQLCipher 암호를 현재 세션에만 보관하면 별도 예약 프로세스에서 사용할 수 없습니다. 현재 CLI는 화면의 일부 컬럼 선택값을 복사 엔진에 전달하지 않습니다. 일부 컬럼만 전송할 때에는 화면에서 실행하십시오.
전송 모드는 템플릿을 저장한 시점의 값입니다. 스케줄 등록 창에서 어떤 모드로 실행될지 확인할 수 있습니다.
모든 헤드리스 실행기는 GUI 없이 동작하며, Windows에서는 콘솔 창이 깜빡이지 않도록 처리되어 있습니다.
부록
파일 구조
개요
Querydog 가 사용하는 주요 파일과 디렉토리는 다음과 같습니다.
주요 기능
- 연결 정보 :
Data/Connection.ini - 환경 설정 :
Data/Querydog_setting.ini - 전송 템플릿 :
Data/transfer_templates.json - 증분 기준값 :
Data/transfer_incremental.json - Oracle 마이그레이션 프로젝트 :
Data/migration/<이름>.json - 역할 템플릿 :
config/role_templates.json - 저장 쿼리 (Windows) :
~/Documents/Querydog/Query/<연결명>/ - 저장 쿼리 (Linux/macOS) :
~/.local/share/Querydog/Query/<연결명>/ - 로그 파일 :
logs/ - 권한 변경 이력 : 앱 내부 SQLite (
permission_history테이블) - Cython 보호 모듈 :
mixins/*.pyd,core/*.pyd등






