Skip to main content
Glama
felipeassis10

db-legacy-migration-agent

db-legacy-migration-agent

레거시 관계형 DB 스키마(DB2, Oracle PL/SQL, MySQL, MSSQL)를 파싱하고, 생성된 Prisma ORM 스키마TypeScript 쿼리 헬퍼를 사용하여 PostgreSQL로 자동 트랜스파일하는 CLI 및 MCP 서버입니다.


목차


Related MCP server: db-mcp

개요

레거시 엔터프라이즈 시스템은 종종 벤더별 SQL 방언(Oracle PL/SQL, IBM DB2, Microsoft T-SQL)에 의존하는데, 이는 상당한 수동 작업 없이는 최신 스택으로 직접 마이그레이션할 수 없습니다. 이 도구는 구조 변환 단계를 자동화합니다:

입력

출력

CREATE TABLE (Oracle, DB2, MySQL, MSSQL)

schema.prisma 모델 정의

PL/SQL CREATE PROCEDURE / CREATE FUNCTION

최선의 TypeScript 등가물

레거시 DDL의 모든 조합

TypeScript Prisma Client 쿼리 헬퍼

전체 DDL 파일

정밀도 손실 분석이 포함된 검증 보고서


아키텍처

src/
├── parser/
│   └── sql-transpiler.ts     # DDL lexer/parser + Prisma/TS code generator
├── engine/
│   └── schema-validator.ts   # Precision-loss & semantic mismatch validator
├── mcp/
│   └── server.ts             # MCP server (stdio transport)
└── cli.ts                    # Commander.js interactive CLI
tests/
└── transpiler.test.ts        # Jest unit tests (40+ assertions)

핵심 모듈

src/parser/sql-transpiler.ts

전체 트랜스파일 파이프라인을 담당합니다:

  1. 토큰화 — 주석 제거, 공백 정규화, 따옴표로 묶인 식별자 처리

  2. DDL 파싱 — 열, 제약 조건, FK, 인덱스가 포함된 CREATE TABLE

  3. PL/SQL 파싱 — 매개변수 방향이 포함된 CREATE [OR REPLACE] PROCEDURE/FUNCTION

  4. 타입 매핑{ prismaType, postgresType }에 대한 40개 이상의 레거시 타입 매핑

  5. Prisma 스키마 생성@@map, @db.* 어노테이션, 복합 PK, FK 관계

  6. TypeScript 쿼리 생성PrismaClient를 사용한 CRUD 헬퍼

  7. PL/SQL 구조 변환BEGIN/END, IF/THEN/ELSIF, FOR/WHILE LOOP, :=, DBMS_OUTPUT

src/engine/schema-validator.ts

트랜스파일된 테이블 정의에 대해 규칙 엔진을 실행하고 구조화된 ValidationIssue 레코드를 생성합니다:

  • 치명적(Critical) — 데이터 손실이 보장됨 (예: BIGINT_OVERFLOW, NULLABLE_PK)

  • 경고(Warning) — 검토가 필요한 의미론적 불일치 (예: ORACLE_DATE_HAS_TIME, XMLTYPE_NO_NATIVE)

  • 정보(Info) — 정보성 메모 (예: LOB_TO_TEXT, DB2_GRAPHIC_TYPE)

src/mcp/server.ts

stdio 전송을 통해 세 가지 도구를 노출하는 MCP 서버:

도구

설명

parse_legacy_ddl

전체 파싱 + 생성: AST, Prisma 스키마, TS 쿼리 반환

generate_prisma_schema

schema.prisma 콘텐츠만 반환

validate_type_mapping

구조화된 또는 텍스트 검증 보고서 반환


시작하기

사전 요구 사항

  • Node.js ≥ 18

  • npm ≥ 9

설치

npm install

빌드

npm run build

CLI 전역 링크 (선택 사항)

npm link
db-migrate --help

CLI 명령어

transpile <file>

DDL 파일을 파싱하고 출력 디렉토리에 schema.prisma, queries.ts, ast.json을 생성합니다.

npx ts-node src/cli.ts transpile ./examples/oracle_hr.sql \
  --dialect oracle \
  --out ./output

옵션:

플래그

기본값

설명

-d, --dialect

oracle

소스 방언: db2 | oracle | mysql | mssql

-o, --out

./output

출력 디렉토리

--no-ts

TypeScript 쿼리 생성 건너뛰기

--no-validate

트랜스파일 후 검증 건너뛰기


validate <file>

타입 매핑을 검증하고 구조화된 보고서를 출력합니다.

npx ts-node src/cli.ts validate ./examples/oracle_hr.sql \
  --dialect oracle \
  --format text

옵션:

플래그

기본값

설명

-d, --dialect

oracle

소스 방언

-f, --format

text

text 또는 json

--fail-on-warnings

경고가 발견되면 종료 코드 1 (CI 파이프라인용)

종료 코드:

코드

의미

0

문제 없음 또는 정보만 있음

1

경고 발견 (--fail-on-warnings 사용 시에만)

2

치명적 문제 발견


parse-inline <ddl>

빠른 테스트 — 명령줄에서 DDL 문자열을 직접 파싱합니다.

npx ts-node src/cli.ts parse-inline \
  "CREATE TABLE T (ID NUMBER(10) NOT NULL, NAME VARCHAR2(100), CONSTRAINT PK_T PRIMARY KEY (ID));"

mcp

AI 어시스턴트 통합을 위해 stdio를 통해 MCP 서버를 시작합니다.

npx ts-node src/cli.ts mcp

MCP 서버

MCP 서버는 모든 MCP 호환 AI 어시스턴트(예: Claude Desktop, IBM Bob)에 등록할 수 있습니다.

도구: parse_legacy_ddl

{
  "tool": "parse_legacy_ddl",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle",
    "include_typescript": true
  }
}

반환: 전체 AST, Prisma 스키마, TypeScript 쿼리, 경고.

도구: generate_prisma_schema

{
  "tool": "generate_prisma_schema",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle"
  }
}

반환: schema.prisma 콘텐츠를 일반 문자열로 반환.

도구: validate_type_mapping

{
  "tool": "validate_type_mapping",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle",
    "format": "json"
  }
}

반환: 구조화된 ValidationReport JSON 또는 사람이 읽을 수 있는 텍스트.


타입 매핑 참조

레거시 타입

Prisma 타입

PostgreSQL 타입

참고 사항

NUMBER(p) / NUMERIC

Decimal

DECIMAL(p)

정밀도 보존

NUMBER(p,s)

Decimal

DECIMAL(p,s)

스케일 보존

NUMBER(p) p≤9

Int

INTEGER

32비트에 적합

NUMBER(p) 10≤p≤18

BigInt

BIGINT

64비트에 적합

NUMBER(p) p>18

Decimal

DECIMAL(p)

⚠ BigInt 오버플로우 발생

VARCHAR2(n)

String

VARCHAR(n)

CHAR(n)

String

CHAR(n)

고정 길이 패딩

CLOB / NCLOB / LONG

String

TEXT

ℹ 별도의 LOB 세그먼트 없음

BLOB / RAW

Bytes

BYTEA

ℹ 인라인 저장

DATE (Oracle)

DateTime

DATE

⚠ Oracle DATE는 시간 포함

TIMESTAMP

DateTime

TIMESTAMP

TIMESTAMP WITH TIME ZONE

DateTime

TIMESTAMPTZ

BINARY_FLOAT

Float

REAL

⚠ 단정밀도

BINARY_DOUBLE

Float

DOUBLE PRECISION

XMLTYPE

String

XML

⚠ Prisma 네이티브 XML 없음

BIGINT

BigInt

BIGINT

DECIMAL(p,s)

Decimal

DECIMAL(p,s)

BOOLEAN

Boolean

BOOLEAN

JSON / JSONB

Json

JSON / JSONB


검증 규칙

코드

심각도

트리거

권장 사항

ORACLE_NUMBER_NO_SCALE

경고

스케일이 없는 NUMBER(p) → 정수 또는 실수일 수 있음

명시적 스케일 추가

BIGINT_OVERFLOW

치명적

NUMBER(p) p>18이 BigInt로 매핑됨

Decimal / NUMERIC 사용

FLOAT_SINGLE_PRECISION

경고

BINARY_FLOAT 또는 FLOAT(≤24) → REAL

DOUBLE PRECISION 사용

LOB_TO_TEXT

정보

CLOB/NCLOB/LONG → TEXT

LOB 스트리밍 API 업데이트

BLOB_TO_BYTEA

정보

BLOB/RAW → BYTEA

1GB 초과 값에는 lo API 사용

ORACLE_DATE_HAS_TIME

경고

Oracle DATE → PostgreSQL DATE

시간이 필요하면 TIMESTAMP 사용

LOCAL_TZ_SEMANTICS

경고

TIMESTAMP WITH LOCAL TIME ZONE

TZ 변환 로직 확인

CHAR_LARGE_LENGTH

경고

CHAR(n) n>255

VARCHAR(n)으로 교체

VARCHAR2_EXCEEDS_ORACLE_LIMIT

정보

VARCHAR2(n) n>4000

무제한에는 TEXT 사용

XMLTYPE_NO_NATIVE

경고

XMLTYPE

XML 작업에는 $queryRaw 사용

DB2_GRAPHIC_TYPE

정보

DB2 GRAPHIC/VARGRAPHIC

UTF-8 트랜스코딩 확인

NO_PRIMARY_KEY

경고

테이블에 PK 없음

id 또는 @@id 추가

NULLABLE_PK

치명적

PK 열이 nullable로 파싱됨

소스 DDL 수정


프로젝트 구조

db-legacy-migration-agent/
├── src/
│   ├── parser/
│   │   └── sql-transpiler.ts    # Type mappings, DDL parser, Prisma & TS generators
│   ├── engine/
│   │   └── schema-validator.ts  # Rule engine, ValidationReport, formatter
│   ├── mcp/
│   │   └── server.ts            # MCP server with 3 tools
│   └── cli.ts                   # Commander.js CLI entrypoint
├── tests/
│   └── transpiler.test.ts       # Jest unit tests
├── dist/                        # Compiled output (after `npm run build`)
├── output/                      # Generated files (schema.prisma, queries.ts, ast.json)
├── package.json
├── tsconfig.json
└── README.md

테스트 실행

# Run all tests
npm test

# With coverage
npm test -- --coverage

# Watch mode
npm test -- --watch

예상 출력: 트랜스파일러 파싱, 타입 매핑, PL/SQL 변환, 검증기 규칙에 걸쳐 40개 이상의 어서션.


기여하기

  1. 저장소를 포크하고 클론합니다

  2. npm install을 실행하여 의존성을 설치합니다

  3. src/에 기능/수정 사항을 추가합니다

  4. tests/에 테스트를 추가하거나 업데이트합니다

  5. PR을 제출하기 전에 npm testnpm run typecheck를 실행합니다


라이선스

MIT

F
license - not found
Not graded
quality - not tested
Not graded
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An extensible MCP server for database operations that supports PostgreSQL for managing schemas, tables, data, and user permissions. It features automatic migration recording for DDL changes and integrates with various AI-powered editors like Cursor, Zed, and Claude Code.
    22
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A lightweight MCP server for relational databases, enabling dynamic connections to PostgreSQL and MySQL, SQL execution, and transaction control.
    7
    51
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that analyzes TypeScript/Prisma projects, builds dependency graphs, and protects against dangerous modifications and silent regressions.
    14
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that reads your database schema from SQL DDL, Prisma, Drizzle, TypeORM, or SQLAlchemy, generates a Mermaid ER diagram, and writes it into your documentation, with drift detection to keep diagrams up-to-date.
    5
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • MCP server for interacting with the Supabase platform

  • Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/felipeassis10/db-legacy-migration-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server