SqlCopy 1.0.21

SqlCopy

Tool .NET 9 CLI pentru replicare selectiva a bazelor de date SQL Server. Cazul principal de utilizare: baze de date remote de 100GB-2TB din care ai nevoie local doar de cateva GB - toate obiectele programatice (proceduri, view-uri, functii, triggere), toate structurile de tabele, dar date doar din tabele de interes.

Caracteristici

  • Pur managed - Dapper + Microsoft.Data.SqlClient + sys.* catalog views (fara dependinte native SMO)
  • Full async - toate operatiile pe IO sunt asincrone
  • Paralelism pe niveluri FK - tabelele independente se transfera simultan, ordinea constrangerilor este garantata
  • AOT/trimming friendly - cod managed, fara reflection masiv
  • 4 comenzi: transfer (direct), script (genereaza .sql), list (inventory rapid), inventory (manifest editabil)
  • Filtrare flexibila: wildcard si regex, separat pe tabele vs. obiecte programatice
  • Manifest workflow: marcare manuala data/structure/skip per tabel
  • Praguri automate: structure-only peste un numar de randuri sau dimensiune in MB
  • Skip blob columns: VARBINARY(MAX), NVARCHAR(MAX), XML etc.
  • Toleranta la erori: configurabil (--continue-on-error)
  • Autentificare: Windows si SQL Auth
  • CLI: Spectre.Console cu progress bars
  • Logging: Serilog cu fisiere zilnice

Instalare

# Ca dotnet tool global (recomandat)
dotnet tool install -g SqlCopy

# Sau build local
git clone <repository-url>
cd sql-copy
dotnet build
dotnet publish src/SqlCopy -c Release -o ./publish

Cerinte: .NET 9 SDK, acces la SQL Server (sursa si/sau destinatie).

Update / Versiune

# Update la cea mai recenta versiune
dotnet tool update -g SqlCopy

# Verifica versiunea instalata
sqlcopy --version

# Reinstalare fortata (daca update-ul nu prinde o versiune noua)
dotnet tool uninstall -g SqlCopy
dotnet tool install -g SqlCopy

Versiunile sunt publicate pe NuGet si urmaresc tag-urile git (vMAJOR.MINOR.PATCH) prin MinVer.

Quick start

# Transfer simplu (creeaza DB-ul la destinatie daca nu exista)
sqlcopy transfer -s (local) --source-db ProductionDB \
  -d localhost --dest-db DevDB --create-db

# Cu paralelism (4 tabele simultan per nivel FK)
sqlcopy transfer -s remote --source-db BigDB \
  -d localhost --dest-db LocalDB \
  --create-db --parallelism 4

# Doar tabelele de configurare cu date, restul structure-only
sqlcopy transfer -s remote --source-db BigDB \
  -d localhost --dest-db DevDB \
  --data-tables "dbo.Config,dbo.Users,dbo.Products" \
  --create-db

Workflow recomandat (manifest)

# 1. Genereaza un manifest cu toate tabelele si dimensiunile
sqlcopy inventory -s remote --source-db ProductionDB -o manifest.txt

# 2. Editeaza manifest.txt - marcheaza fiecare tabel cu data/structure/skip
#    Tabele mici/de configurare -> data
#    Tabele mari de istoric    -> structure
#    Tabele de audit/loguri    -> skip

# 3. Transfer cu manifestul
sqlcopy transfer -s remote --source-db ProductionDB \
  -d localhost --dest-db DevDB \
  --manifest manifest.txt --create-db

Documentatie completa

Vezi docs/MANUAL.md pentru:

  • Toate optiunile fiecarei comenzi
  • Reguli de prioritate intre filtre, manifest, data-tables, structure-only
  • Workflow-uri tipice
  • Note si limitari (feature-uri SQL Server neacoperite: temporal, partitioning, in-memory OLTP)
  • Wildcard si regex patterns

Comenzi pe scurt

Comanda Scop
transfer Transfer direct intre doua servere (schema + date paralel)
script Genereaza scripturi SQL organizate pe foldere (DDL only)
list Listeaza obiectele din baza de date (cu top N optional)
inventory Genereaza manifest editabil cu toate tabelele

Fisier de parametri

Orice comanda poate citi argumente dintr-un fisier cu -@fisier:

sqlcopy transfer -@params.txt

params.txt:

# Comentariile incep cu #
-s remote
--source-db ProductionDB
-d localhost
--dest-db DevDB
--create-db
--parallelism 4
--manifest manifest.txt

Coduri de iesire

Cod Descriere
0 Succes
1 Eroare (partial sau total)

Logging

Fisiere log in logs/sqlcopy-YYYYMMDD.log cu detalii despre fiecare operatie, erori cu side (Source/Destination), si decizii de transfer per tabel.

Troubleshooting

Eroare de conexiune

Error: A network-related or instance-specific error occurred

Verifica: SQL Server pornit, firewall pe 1433, numele server-ului, credentialele.

Eroare de permisiuni

Error: The SELECT permission was denied on object

Utilizatorul are nevoie de minim db_datareader pe sursa si db_owner pe destinatie.

Timeout la transfer date

sqlcopy transfer ... --timeout 7200  # 2 ore

Constrangeri FK care esueaza la sfarsit

Daca ai cicluri sau dependente intre DB-uri, foloseste --no-fk pentru a sari complet peste constrangerile FK.

Licenta

MIT License

This package has no dependencies.

Version Downloads Last updated
1.0.38 4 05/18/2026
1.0.37 2 05/16/2026
1.0.36 2 05/16/2026
1.0.35 2 05/16/2026
1.0.34 2 05/16/2026
1.0.33 2 05/16/2026
1.0.32 2 05/15/2026
1.0.31 2 05/15/2026
1.0.30 2 05/15/2026
1.0.29 2 05/15/2026
1.0.28 2 05/15/2026
1.0.27 2 05/15/2026
1.0.26 2 05/15/2026
1.0.25 2 05/15/2026
1.0.24 2 05/15/2026
1.0.23 2 05/15/2026
1.0.22 2 05/15/2026
1.0.21 2 05/15/2026
1.0.20 2 05/15/2026
1.0.19 2 05/15/2026
1.0.18 2 05/15/2026
1.0.17 2 05/15/2026
1.0.16 2 05/15/2026
1.0.15 2 05/15/2026
1.0.14 2 05/14/2026
1.0.13 6 03/11/2026
1.0.12 4 03/11/2026
1.0.11 5 03/11/2026
1.0.10 5 03/11/2026
1.0.9 5 03/11/2026
1.0.8 5 03/11/2026
1.0.7 5 03/11/2026
1.0.6 5 03/11/2026
1.0.5 5 03/11/2026
1.0.4 5 03/10/2026
1.0.3 5 03/10/2026
1.0.2 5 03/10/2026
1.0.1 4 02/19/2026
1.0.0 5 02/19/2026