Releases: StefanMaron/BusinessCentral.DbReader
Release list
v0.1.0
First release.
bcdb reads Business Central data straight out of the file a BC database
arrives in — a SQL Server backup (.bak) or a cloud export (.bacpac). There
is no SQL Server to install, nothing to restore or import, and no service tier.
It reads the file directly.
Install
Download the binary for your platform below and run it. Nothing else is
needed, not even .NET:
chmod +x bcdb-linux-x64
./bcdb-linux-x64 tables MyDatabase.bak
Or install it as a .NET tool, which gives you the same native binary:
dotnet tool install -g bcdb
Commands
bcdb tables <file> tables, row counts, compression, company
bcdb companies <file> the companies in the database
bcdb read <file> --table <name> decode rows to text or JSON
bcdb describe <file> --table <name> --symbols <apps> AL fields and types
bcdb check <file.bak> cross-check the page map
bcdb serve <file> open once, answer many reads over stdin
Table names can be the AL name ("No. Series") or the raw SQL object name. With
--symbols pointed at the .app packages the database was built from, output
uses AL field names and AL types.
A one-shot read of one table takes about 50 ms on the 936 MB BC 28.1 demo
backup. serve opens the file once and answers later reads in a few
milliseconds each, which is the right mode for a program reading table by table.
What has been verified
Every structural rule and decoded value is checked against a real SQL Server
reading the same bytes. For the two BC demo backups the page map reproduces a
fresh restore byte for byte on more than 99.9% of pages, with every remaining
difference accounted for as allocation bookkeeping rather than table data. One
23 GB production database and one 52 MB cloud export were validated the same
way, column for column against SELECT. PROVENANCE.md records where each
non-obvious fact came from.
Anything the reader cannot decode faithfully throws an error naming the column
and type. It never returns a default value in place of one it could not read.
Known limits
Backups taken WITH COMPRESSION, encrypted backups, multi-file databases, and
differential or log backups are refused. money, sql_variant, xml and
sparse columns are refused by name. In a .bacpac, so are smalldatetime and
datetimeoffset, whose row framing no observed export exercises.
Verifying a download
Check the file against SHA256SUMS, and check how it was built with:
gh attestation verify <file> --repo StefanMaron/BusinessCentral.DbReader
The Windows binary is Authenticode-signed as "Stefan Maron Consulting", and so
is the copy inside the .NET tool package.
The macOS binaries are not notarized: that needs a Developer ID certificate
and so a paid Apple Developer Program membership, which this project does not
carry. macOS only quarantines files downloaded by a browser, so
dotnet tool install -g bcdb is unaffected. For a binary downloaded from this
page, clear the flag once with xattr -d com.apple.quarantine <file>.