SQLite 데이터베이스 검사기
SQLite 파일을 SQL 엔진 없이 바이트 그대로 읽습니다. 100바이트 헤더에서 페이지 크기, 텍스트 인코딩, 롤백/WAL 모드, 프리리스트 페이지 수, 애플리케이션이 넣어 둔 user_version과 application_id, 마지막으로 기록한 SQLite 버전을 꺼내고, 1번 페이지의 sqlite_schema b-트리를 훑어 테이블·인덱스·뷰·트리거와 각각의 CREATE 문을 나열합니다. 행 수는 추정이 아니라 각 테이블의 b-트리를 리프까지 따라가며 실제로 센 값입니다. 다만 WAL 모드에서는 최근 커밋이 -wal 파일에 남아 있어 본 파일만으로는 적게 나올 수 있고, WITHOUT ROWID 테이블은 인덱스 b-트리에 행을 저장하므로 틀린 수를 보여 주는 대신 '알 수 없음'으로 둡니다. 컬럼 이름과 타입, PK·NOT NULL 표시는 CREATE 문을 해석해 얻으므로 특이한 DDL에서는 어긋날 수 있어 원문을 항상 함께 보여 줍니다. SQLCipher 같은 암호화 파일은 헤더까지 암호화되어 매직 문자열이 없으므로 반쯤 읽는 대신 거부합니다. 행 내용은 일부러 표시하지 않습니다. 파일에 무엇이 얼마나 들어 있는지를 답하는 도구입니다.
사용법
- .sqlite, .db, .sqlite3 파일을 상자에 끌어다 놓거나 클릭해서 고르세요. 파일은 브라우저 밖으로 나가지 않습니다.
- 헤더부터 보세요. 페이지 크기 × 페이지 수가 파일 크기이고, 빈 페이지는 VACUUM으로 되돌려받을 공간입니다.
- 저널 모드를 확인하세요. WAL이면 -wal 파일에 남은 커밋이 이 파일에 없으므로 행 수는 최솟값으로 보아야 합니다.
- 테이블 목록에서 행 수, 컬럼과 선언된 타입, 각 테이블에 걸린 인덱스를 확인하세요.
- 컬럼 해석이 이상하면 테이블 아래의 CREATE 문을 펼쳐 원본 DDL을 기준으로 판단하세요.
자주 묻는 질문
- 여기 나온 행 수가 애플리케이션이 보는 값과 다릅니다.
- 대부분 WAL 때문입니다. WAL 모드에서 SQLite는 변경된 페이지를 별도의 -wal 파일에 덧붙이고 체크포인트 때에만 본 파일에 합칩니다. 그래서 -wal 없이 복사한 데이터베이스는 마지막 체크포인트 시점의 스냅숏이고, 최근 삽입이 빠져 보입니다. 복사 전에 PRAGMA wal_checkpoint(TRUNCATE)를 실행하거나 -wal과 -shm 파일을 함께 옮기세요. 다른 원인은 WITHOUT ROWID 테이블인데, 이 경우에는 틀린 수 대신 '알 수 없음'으로 표시합니다.
- SQLCipher로 암호화한 데이터베이스도 열 수 있나요?
- 열 수 없고, 엉뚱한 값을 보여 주는 대신 그렇다고 알려 줍니다. SQLCipher는 헤더까지 암호화하므로 파일이 "SQLite format 3"으로 시작하지 않고, 키 없이는 해석할 것이 없습니다. 이 검사 덕분에 암호화된 파일과 손상된 파일도 구분됩니다. 잘렸을 뿐 암호화되지 않은 파일은 헤더가 읽히므로, 읽을 수 있는 만큼 읽고 페이지 수가 파일 길이와 맞지 않는다고 경고합니다.
- 빈 페이지는 무엇이고 VACUUM을 해야 하나요?
- 행을 지워도 SQLite 파일은 줄지 않습니다. 비워진 페이지는 프리리스트에 올라가 이후 삽입에 재사용됩니다. 즉 빈 페이지는 파일이 이미 확보해 둔, 앞으로 다시 쓸 공간입니다. VACUUM은 그 페이지 없이 파일을 다시 만들어 공간을 파일 시스템에 돌려주므로 대량 삭제 후나 배포 전에는 의미가 있지만, 파일 전체를 다시 쓰고 열린 연결을 무효화하므로 운영 중인 데이터베이스에 가볍게 돌릴 작업은 아닙니다.
- user_version과 application_id는 무엇인가요?
- SQLite가 스스로는 건드리지 않고 애플리케이션이 자유롭게 쓰라고 헤더에 마련한 32비트 칸 두 개입니다. 보통 user_version은 스키마 마이그레이션 번호로 써서 코드가 기대하는 버전과 비교해 그 사이 마이그레이션을 실행하고, application_id는 파일 형식을 구분하는 매직 넘버로 써서 file(1) 같은 도구가 어떤 종류의 SQLite 파일인지 알아보게 합니다. 아무도 설정하지 않았으면 둘 다 0입니다.
- 스키마 버전과 스키마 형식은 어떻게 다른가요?
- 스키마 버전(스키마 쿠키)은 스키마가 바뀔 때마다 올라가는 카운터로, 준비된 구문이 다시 컴파일해야 하는지 판단할 때 씁니다. 스키마 형식은 1~4 사이의 파일 레이아웃 세대로, 그 파일이 어떤 기능을 쓸 수 있는지를 뜻합니다. 4면 내림차순 인덱스와 불리언 리터럴이 허용되며, 최근 수십 년의 SQLite는 모두 4로 기록합니다.
- 파일이 어딘가로 업로드되나요?
- 아닙니다. 브라우저의 File API로 읽고 페이지 안의 자바스크립트가 직접 해석합니다. 서버로 보내지 않고, 보낼 서버 쪽 구성 요소 자체가 없습니다. 페이지를 연 뒤 네트워크를 끊고 파일을 검사해 보면 그대로 동작하는 것으로 확인할 수 있습니다.
관련 도구
NumPy .npy / .npz 검사기
.npy·.npz 헤더를 브라우저에서 읽습니다. dtype, shape, 바이트 순서, 필드 배치와 값 미리보기까지. NumPy 설치도 업로드도 필요 없습니다.
Ogg 컨테이너 검사기
.ogg, .oga, .opus를 페이지 단위로 분석합니다. 그래뉼 위치, 세그먼트 테이블, CRC32 검증, 그리고 컨테이너가 담은 논리 스트림까지 보여줍니다.
gzip(.gz) 구조 분석기
.gz 헤더를 필드 단위로 읽고 모든 멤버를 훑은 뒤, 브라우저에서 CRC32와 실제 크기를 다시 계산해 트레일러를 검증합니다.
TZif(zoneinfo) 파일 검사기
컴파일된 zoneinfo 파일을 브라우저에서 엽니다. 헤더, 지역 시간 타입, 모든 전이, 윤초, POSIX TZ 푸터까지 해석합니다.
ELF 바이너리 검사기
리눅스 실행 파일·.so·.o를 브라우저에서 엽니다. 아키텍처, 필요한 공유 라이브러리, 빌드 ID, PIE·NX·RELRO 적용 여부까지.
ICS 캘린더 뷰어 · 반복 일정 전개
.ics 초대장이나 캘린더 내보내기 파일을 열어 실제 내용을 확인하고, 반복 규칙이 만들어내는 진짜 날짜까지 펼쳐 봅니다.