Releases: HeliosDatabase/Any2HeliosDB
Release list
v1.3.0 — Oracle thick-mode + SYSDBA (NNE servers)
Oracle thick-mode + SYSDBA connection options — unblocks Oracle sources that mandate Native Network Encryption (NNE).
Added
[source] thick = true— connect via the Oracle Instant Client (thick mode), required for servers mandating NNE (thin mode raisesDPY-3001). Optionalclient_dirfor the Instant Client lib dir; env$A2H_ORACLE_THICK/$ORACLE_CLIENT_DIRhonored.[source] sysdba = true— connect with SYSDBA (for theSYSuser).- Actionable connect-failure hints for the NNE / SYS cases.
Thin mode (pure-Python, no client, no external deps) stays the default — only NNE servers need thick.
pip install -U any2heliosdb
v1.2.0 — a2h mcp auth (private Bearer token file)
a2h mcp auth — generate a private Bearer token file for the MCP server.
Added
a2h mcp auth— generates a cryptographically-strong Bearer token straight into a0600token file the MCP server reads (--tokens-file/$A2H_MCP_TOKENS_FILE, default~/.config/a2h/mcp-tokens), keeping the secret off the command line and out of the project config. Flags:--role(viewer|operator|admin), append (default) vs--rotate,--show.
The MCP server was already HTTP + Bearer + RBAC (and refuses to start on HTTP with zero tokens); this adds secure token-file generation. 243 unit tests.
pip install -U any2heliosdb
v1.1.0 — PostgreSQL logical CDC + Nano concurrency
PostgreSQL logical-decoding CDC + HeliosDB-Nano concurrency. Validated end-to-end against HeliosDB-Nano 3.60.7.
Added
- PostgreSQL logical-decoding CDC source (
test_decoding): true log-based capture with native deletes → zero-downtime PostgreSQL → HeliosDB CDC. - Parallel load on HeliosDB-Nano ≥ 3.60.7 (older Nano/Lite serialize automatically).
- asciinema demo casts in
docs/demos/— Pagila & Oracle, migrate + CDC.
Fixed
- Parallel loader serializes instead of hanging on targets that block concurrent writes.
delete_keysreports rows actually deleted (realrowcount), so silent target no-ops surface.
Re-validated against Nano 3.60.7, which fixes five engine issues surfaced by a2h (concurrent-write stall, multi-table DROP, timestamptz→TIMESTAMP cast, DECIMAL-PK DELETE, BYTEA NUL). 240 unit tests.
pip install -U any2heliosdb
v1.0.0 — Oracle/PostgreSQL → HeliosDB-Nano + stock PostgreSQL
Any2HeliosDB v1.0.0 — first stable release
A modern, Python successor to Ora2Pg that migrates Oracle / MySQL / PostgreSQL / SQL Server → HeliosDB (Nano / Lite / Full) or stock PostgreSQL.
The v1.0.0 primary target — fully migrate Oracle → (PostgreSQL + HeliosDB-Nano) — is validated end-to-end: schema, data, sequences, views, PK/FK/CHECK constraints, and FK-indexes, including a million-row chunked/parallel load with crash-resume, and hardened through a three-round gpt-5.5 (xhigh) adversarial review (final verdict: safe to tag).
Highlights since 0.9.x
- Oracle procedural & advanced objects surfaced (routines, triggers, materialized views, partitioned tables): counted in
a2h assess, gap-reported, and written to a<schema>.review.sqlcompanion for manual porting. (Auto-translation of PL/SQL → PL/pgSQL is the v2.0.0 roadmap — seedocs/reference/oracle-object-support.md.) - Consistent read snapshot for chunked load + resume (
AS OF SCN, captured once and reused across resume; graceful fallback with a warning if a table was just altered). - Oracle
seq.NEXTVALdefaults →nextval('seq')(preserve-case aware) so sequence-default columns migrate with a working auto-increment. - PostgreSQL-source sequences migrate with correct resume points (validated Pagila → Nano: 15 tables / 49,636 rows, all validators green).
- Robustness: safe identifier quoting, real-CHECK preservation (metadata-aware), collision-free
TEST_DATAchecksums, atomic nativeload_range, config-fingerprinted resume.
Install
pip install -U any2heliosdb
Apache-2.0. See CHANGELOG.md for the full list.
v0.9.5 — PostgreSQL-source sequences + native TIMESTAMP fractional
PostgreSQL → HeliosDB-Nano is now fully operational — tables, data, FKs, indexes, sequences, and views all migrate and validate.
Added
- PostgreSQL-source sequence migration. The PG source adapter now introspects sequences (
pg_sequences, falling back toinformation_schema.sequences) and preserves each SERIAL/IDENTITY column'sDEFAULT nextval('seq')(normalized to a bare, schema-unqualified reference). Each target sequence'sSTARTis set to the next value the source would produce (from livelast_value/is_called) so post-migration inserts resume past the loaded rows instead of colliding. Sequences are created before tables so aDEFAULT nextvalresolves atCREATE TABLEtime, and the emitter carries the sourceCACHEsize. The Oracle/MySQL emitters skip a PGnextval()default (those dialects spell auto-increment differently), so migrate-back is unaffected.- Validated Pagila → HeliosDB-Nano 3.60.0: 15 tables / 49,636 rows, all 13 sequences created with correct resume points (
actor200→201,customer599→600),DEFAULT nextvalfunctional (insert without the PK auto-increments), and TEST_COUNT / TEST_DATA / TEST_INDEX 15 / 15 / 15.
- Validated Pagila → HeliosDB-Nano 3.60.0: 15 tables / 49,636 rows, all 13 sequences created with correct resume points (
Fixed
- Native (Oracle-wire) TIMESTAMP fractional seconds dropped. python-oracledb defaults a
datetimebind toDB_TYPE_DATE(7-byte, no fractional seconds), truncating sub-second precision client-side before it reaches HeliosDB. The native driver now binds datetime positions asDB_TYPE_TIMESTAMP(setinputsizes), soTIMESTAMP(6)values round-trip exactly — completing the native Oracle → HeliosDB-Full path (TEST_DATA 0 mismatches incl. BLOB / RAW / fractional TIMESTAMP).
pip install -U any2heliosdb
v0.9.4 — native close-handshake resilience + source-case validators
Native (Oracle-wire) Oracle → HeliosDB-Full migration is now end-to-end.
Fixed
- Native target no longer hangs on close. A successful, committed native
migratepreviously blocked in oracledb'sProtocol._resetwaiting on HeliosDB-Full's unanswered logoff handshake.close()is now best-effort (5s cap + swallow), andconnect()sets a generous 300s per-call timeout so a stalled bulk array-INSERT fails fast instead of blocking forever. - Validators read native-target data.
test-count/test-data/test-indexnow render identifiers in the same case the migration created them (keep_source_case = preserve_case OR oracle-dialect), instead of folding to lowercase and querying an empty, wrong-cased relation. TEST_COUNT and TEST_INDEX now pass on a native Oracle → HeliosDB-Full migrate. a2h test-indexfalse positive on HeliosDB-Nano removed — rewritten to a portable, fail-safe GROUP-BY ground-truth form (no nested cast-subquery, no bind params; an unrenderable probe is DEGRADED-skipped, never failed). Validated on Oracle → HeliosDB-Nano 3.58.5 and Oracle → stock PostgreSQL.
Note: TEST_DATA on DATE/TIMESTAMP/RAW columns over the native path is gated on a HeliosDB-Full TTC read-path type-tagging fix (target-side) — the data is stored correctly; only the read-back column metadata is currently wrong.
pip install -U any2heliosdb