SqlCopy 1.0.12
SqlCopy
Aplicatie .NET 9 pentru copierea bazelor de date SQL Server folosind SMO (SQL Server Management Objects).
Caracteristici
- Doua moduri de lucru:
- Script-based: Genereaza scripturi SQL cu clasa
Scripter, le salveaza local si optional le executa la destinatie - Transfer direct: Transfer direct intre servere cu clasa
Transfer
- Script-based: Genereaza scripturi SQL cu clasa
- Obiecte suportate: Tabele, View-uri, Proceduri stocate, Functii, Triggere, Scheme, Tipuri definite de utilizator
- Filtrare obiecte: Wildcard patterns (
*,?) si expresii regulate - Toleranta la erori: Continua transferul chiar daca unele obiecte esueaza
- Autentificare: Windows Authentication si SQL Server Authentication
- Interfata CLI: Spectre.Console cu progress bars si output colorat
- Logging: Serilog cu fisiere log zilnice
Instalare
Cerinte
- .NET 9 SDK
- Acces la SQL Server (sursa si/sau destinatie)
Build
git clone <repository-url>
cd sql-copy
dotnet build
Publicare executabil
dotnet publish -c Release -o ./publish
Utilizare
Comenzi disponibile
| Comanda | Descriere |
|---|---|
script |
Genereaza scripturi SQL din baza de date sursa |
transfer |
Transfer direct catre baza de date destinatie |
list |
Listeaza obiectele din baza de date |
Comanda script
Genereaza scripturi SQL pentru toate obiectele din baza de date sursa.
# Generare scripturi (doar local)
sqlcopy script -s "localhost" --source-db "MyDatabase" -o "./scripts"
# Generare scripturi si executie la destinatie
sqlcopy script -s "localhost" --source-db "MyDatabase" -o "./scripts" \
--execute -d "remote-server" --dest-db "TargetDB"
# Cu SQL Authentication
sqlcopy script -s "localhost" --source-db "MyDatabase" -o "./scripts" \
--sql-auth -u "sa" -p "password123"
# Fara date (doar schema)
sqlcopy script -s "localhost" --source-db "MyDatabase" -o "./scripts" --no-data
# Cu filtrare
sqlcopy script -s "localhost" --source-db "MyDatabase" -o "./scripts" \
--exclude "tmp_*" --exclude "log_*" --exclude-regex "^backup_.*"
Optiuni script:
| Optiune | Descriere | Default |
|---|---|---|
-s, --source |
Server sursa | (obligatoriu) |
--source-db |
Baza de date sursa | (obligatoriu) |
-o, --output |
Folder output pentru scripturi | ./scripts |
--execute |
Executa scripturile la destinatie | false |
-d, --dest |
Server destinatie (daca --execute) | - |
--dest-db |
Baza de date destinatie | - |
--no-data |
Nu genera scripturi pentru date | false |
--no-indexes |
Nu genera scripturi pentru indexi | false |
--no-triggers |
Nu genera scripturi pentru triggere | false |
--no-constraints |
Nu genera scripturi pentru constrangeri | false |
Comanda transfer
Transfer direct intre doua servere SQL.
# Transfer simplu
sqlcopy transfer -s "localhost" --source-db "MyDatabase" \
-d "remote-server" --dest-db "TargetDB"
# Creare baza de date destinatie daca nu exista
sqlcopy transfer -s "localhost" --source-db "MyDatabase" \
-d "remote-server" --dest-db "TargetDB" --create-db
# Stergere obiecte existente la destinatie
sqlcopy transfer -s "localhost" --source-db "MyDatabase" \
-d "remote-server" --dest-db "TargetDB" --drop-first
# Doar schema, fara date
sqlcopy transfer -s "localhost" --source-db "MyDatabase" \
-d "remote-server" --dest-db "TargetDB" --no-data
# Cu credentiale diferite pentru destinatie
sqlcopy transfer -s "localhost" --source-db "MyDatabase" \
-d "remote-server" --dest-db "TargetDB" \
--sql-auth -u "sa" -p "sourcepass" \
--dest-user "sa" --dest-password "destpass"
Optiuni transfer:
| Optiune | Descriere | Default |
|---|---|---|
-s, --source |
Server sursa | (obligatoriu) |
--source-db |
Baza de date sursa | (obligatoriu) |
-d, --dest |
Server destinatie | (obligatoriu) |
--dest-db |
Baza de date destinatie | (obligatoriu) |
--create-db |
Creeaza baza de date daca nu exista | false |
--drop-first |
Sterge obiectele existente la destinatie | false |
--batch-size |
Randuri per batch pentru transfer date | 10000 |
--timeout |
Timeout bulk copy (secunde) | 3600 |
--no-data |
Nu transfera datele | false |
--no-schema |
Nu transfera schema | false |
--skip-blob-tables |
Sari peste coloanele blob pentru tabelele specificate | - |
--skip-blob-columns |
Sari peste coloanele blob specificate (doar date) | - |
--structure-only-tables |
Transfera doar structura pentru tabelele specificate | - |
--structure-only-min-rows |
Transfera doar structura pentru tabele cu randuri peste prag | - |
--structure-only-min-size |
Transfera doar structura pentru tabele peste prag (MB) | - |
Comanda list
Listeaza obiectele din baza de date.
# Toate obiectele
sqlcopy list -s "localhost" --source-db "MyDatabase"
# Doar tabele
sqlcopy list -s "localhost" --source-db "MyDatabase" -t tables
# Doar proceduri
sqlcopy list -s "localhost" --source-db "MyDatabase" -t procedures
# Cu filtru
sqlcopy list -s "localhost" --source-db "MyDatabase" -t tables --filter "*Order*"
Tipuri de obiecte (-t): all, tables, views, procedures, functions, triggers
Optiuni comune
| Optiune | Descriere | Default |
|---|---|---|
--windows-auth |
Foloseste Windows Authentication | true |
--sql-auth |
Foloseste SQL Server Authentication | false |
-u, --user |
Username SQL Auth | - |
-p, --password |
Parola SQL Auth | - |
--exclude |
Pattern wildcard de exclus (poate fi repetat) | - |
--exclude-regex |
Pattern regex de exclus (poate fi repetat) | - |
--include |
Pattern wildcard de inclus (poate fi repetat) | - |
--include-regex |
Pattern regex de inclus (poate fi repetat) | - |
--continue-on-error |
Continua la erori | true |
-v, --verbose |
Output detaliat | false |
Filtrare obiecte
Wildcard patterns
*- orice secventa de caractere?- un singur caracter
--exclude "tmp_*" # Exclude obiectele care incep cu tmp_
--exclude "*_backup" # Exclude obiectele care se termina cu _backup
--exclude "log_???" # Exclude log_001, log_abc, etc.
--include "Sales*" # Include doar obiectele care incep cu Sales
Regex patterns
--exclude-regex "^tmp_.*" # Exclude obiectele care incep cu tmp_
--exclude-regex ".*_[0-9]{4}$" # Exclude obiectele care se termina cu 4 cifre
--include-regex "^(Sales|Orders)_" # Include doar Sales_ si Orders_
Combinare filtre
- Daca sunt specificate pattern-uri
--include, obiectul trebuie sa se potriveasca cel putin unuia - Pattern-urile
--excludeau prioritate - obiectele excluse nu vor fi procesate - Schemele
syssiINFORMATION_SCHEMAsunt excluse automat
Structura output scripturi
scripts/
├── Schemas/
│ └── dbo.sql
├── UserDefinedTypes/
│ └── dbo.MyType.sql
├── Tables/
│ ├── dbo.Customers.sql
│ ├── dbo.Orders.sql
│ └── dbo.Products.sql
├── Views/
│ └── dbo.vw_OrderDetails.sql
├── StoredProcedures/
│ ├── dbo.sp_GetCustomer.sql
│ └── dbo.sp_CreateOrder.sql
├── UserDefinedFunctions/
│ └── dbo.fn_CalculateTotal.sql
├── Triggers/
│ └── trg_AuditLog.sql
└── Data/
├── dbo.Customers.data.sql
├── dbo.Orders.data.sql
└── dbo.Products.data.sql
Logging
Fisierele log sunt create in folderul logs/ cu format sqlcopy-YYYYMMDD.log.
logs/
├── sqlcopy-20241223.log
├── sqlcopy-20241224.log
└── ...
Exemple avansate
Migrare completa cu filtrare
sqlcopy script \
-s "production-server" --source-db "ProductionDB" \
-o "./migration-scripts" \
--sql-auth -u "readonly_user" -p "password" \
--exclude "tmp_*" \
--exclude "log_*" \
--exclude-regex "^audit_.*" \
--execute \
-d "staging-server" --dest-db "StagingDB" \
--dest-user "admin" --dest-password "adminpass" \
--continue-on-error \
-v
Transfer doar tabele specifice
sqlcopy transfer \
-s "localhost" --source-db "ERP" \
-d "reporting-server" --dest-db "Reporting" \
--include "Sales*" \
--include "Orders*" \
--include "Customers" \
--create-db
Backup schema fara date
sqlcopy script \
-s "localhost" --source-db "MyDB" \
-o "./schema-backup-$(date +%Y%m%d)" \
--no-data
Coduri de iesire
| Cod | Descriere |
|---|---|
| 0 | Succes |
| 1 | Eroare (partial sau total) |
Troubleshooting
Eroare de conexiune
Error: A network-related or instance-specific error occurred
Verificati:
- Serverul SQL este pornit
- Firewall permite conexiuni pe portul 1433
- Numele serverului este corect
- Credentialele sunt corecte
Eroare de permisiuni
Error: The SELECT permission was denied on object
Utilizatorul trebuie sa aiba cel putin permisiuni db_datareader pentru sursa si db_owner pentru destinatie.
Timeout la transfer date
Mariti timeout-ul:
sqlcopy transfer ... --timeout 7200 # 2 ore
Licenta
MIT License
This package has no dependencies.
| Version | Downloads | Last updated |
|---|---|---|
| 1.0.13 | 3 | 03/11/2026 |
| 1.0.12 | 1 | 03/11/2026 |
| 1.0.11 | 2 | 03/11/2026 |
| 1.0.10 | 2 | 03/11/2026 |
| 1.0.9 | 2 | 03/11/2026 |
| 1.0.8 | 2 | 03/11/2026 |
| 1.0.7 | 2 | 03/11/2026 |
| 1.0.6 | 2 | 03/11/2026 |
| 1.0.5 | 2 | 03/11/2026 |
| 1.0.4 | 2 | 03/10/2026 |
| 1.0.3 | 2 | 03/10/2026 |
| 1.0.2 | 2 | 03/10/2026 |
| 1.0.1 | 1 | 02/19/2026 |
| 1.0.0 | 2 | 02/19/2026 |