Skip to main content

Cum putem sa importam/exportam un volum mare de date pe SQL Azure

Intr-un post anterior am discutat despre "SQL Azure Data Sync" - "Microsoft Sync Framework". Isi face treaba foarte bine dar este o solutie putin mai complicata. Parca as vrea o solutie mai simpla, care sa nu necesite cunostinte de programare.
Mai jos o sa va propun 3 variante:
  1. Generare scripturi
  2. BCP utility
  3. Data-tier Application Component Packages( DACPAC)
(solutiile date necisita SQL Server 2008 R2)

1. Generare scripturi
In prima varianta este nevoie sa generam scripturile de mana prin SQL Management Studio. Pentru a putea face acest lucru trebuie sa selectam baza de date la care vrem sa facem back-up, click dreapta pe ea, iar apoi Task-Generate Scripts. Atentia, este foarte important sa schimbam valoarea campului "Script for the database engine" din meniul "Advanced Scripting Option". Valoarea pe care trebuie sa o selectam este "SQL Azure Database". Aceasta optiune ne permite sa generam scripturi compatibile cu SQL Azure.
Odata ce avem fisierul generat, putem sa mergem pe portal la Windows Azure si sa cream o noua baza de date. Initial aceasta o sa fie goala, dar odata baza de date creata putem sa ne conectam cu ajutorul la "SQL Management Studio". La server name o sa scriem DNS-ul bazei noastre de date - [nume].database.windows.net. Click dreapta pe baza de date unde trebuie sa cream un nou query. In acesta o sa rulam scriptul generat la primul pas.
Ce nu imi place la aceasta solutie este ca deșii se poate automatiza procesul avem nevoie de "SQL Management Studio".

2. BCP utility
Iata ca am ajuns la a doua varianta. Acest utilitar vine cu Sql Server. In linii mari stie sa copieze informatia dintr-o baza de date intr-un format dorit de catre utilizator. Nu stie din pacate sa copieze direct informatia dintr-o baza de date in alta. Din aceasta cauza trebuie sa il apelam de doua ori. Odata pentru export, iar mai tarziu pentru import.
Cea ce trebuie spus despre BCP este ca nu stie sa faca export si la schema. Stie doar sa faca export la continutul tabelelor, dar face acest lucru extrem de bine.
De exemplu, pentru a putea exporta datele din tabele Cars trebuie sa rulam:
bcp TestDb.dbo.Cars out "C:\Cars.txt" -T -c -U local@localhost -P 123456789
Odata executa aceasta linie de cod, o sa avem in fisierul "C:\Cars.txt" tot continutul pentru tabela Cars. Pentru a putea face import la date in SQL Azure trebuie sa rulam
bcp TestDbCloud.dbo.Cars in "C:\Cars.txt" -c -U "radu.vunvulea@numeServerSqlAzure -S numeServerSqlAzure.database.windows.net -P 123456789
Putem sa filtram tabelul printr-un select scris de noi. Pentru mai multe informatii despre BCP
http://msdn.microsoft.com/en-us/library/ms187086%28SQL.105%29.aspx

3. Data Tier Packages( DACPAC)
Este un mecanism aparut cu VS2010 si SQL Server 2008 RC2. Acesta ne permite sa facem "deploy" la baza de date direct din VS2010. A.i. nu mai avem nevoie sa scripturi SQL pentru deployment.
Din pacate in momentul acesta DACPAC nu este inca un produs matur. La orice schimbare a baze de date acesta genereaza din nou baza de date de la 0. Scripturile pe care le genereaza sunt puse intr-un singur fisier( din pacate nu avem fisiere separate pentru create, modificare si inserare). Un alt minus esta ca nu stie sa copieze si user permission bazei de date pentru care genereaza scriptul. L-am incercat pe un proiect mic, dar mi-a lasat un gust amar, se descurca destul de greu si cu o baza de date destul de simpla.
Templat-ul pentru solutii DACPAC se gaseste in VS2010 sub numele "SQL Server Data-tier Application". Nu o sa explic pas cu pas cum se foloseste. Cred ca merita de spus modul in care se face deploy prin DACPAC. Pasii de mai jos se fac in mod automat:
  • creează o noua baza de date;
  • creează tabelele;
  • se face disable la constrîngeri;
  • baza de date deja existenta se trece pe single user( daca exista deja o baza de date cu numele dat);
  • toate datele din baza de date deja existenta se copiaza in noua baza de date;
  • vechia baza de date se redenumeste;
  • noua baza de date i-a denumirea corespunzătoare;
  • vechia baza de date se sterge;
Ce aduce in plus DACPAC si ii prevad un viitor este versionarea. In mod normal versionarea bazei de date este un lucru destul de complex si cu multe batai de cap.

Comments

  1. Nu s-ar putea si cu SSIS (SQL Server Integration Services) ? (daca export/import-ul e vazut ca un ETL..)

    ReplyDelete
  2. Da, se poate folosii si SSIS, unde se poate deveni orice flow pentru date. Trebuie doar un mic know how despre SSIS. Pentru o baza de date mare si complexa, unde pot sa existe mai multe flow-uri SSIS ar fi extrem de util.
    Cea mai simpla solutie mi s-a parut cea cu BCP.

    ReplyDelete

Post a Comment

Popular posts from this blog

Windows Docker Containers can make WIN32 API calls, use COM and ASP.NET WebForms

After the last post , I received two interesting questions related to Docker and Windows. People were interested if we do Win32 API calls from a Docker container and if there is support for COM. WIN32 Support To test calls to WIN32 API, let’s try to populate SYSTEM_INFO class. [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_INFO { public uint dwOemId; public uint dwPageSize; public uint lpMinimumApplicationAddress; public uint lpMaximumApplicationAddress; public uint dwActiveProcessorMask; public uint dwNumberOfProcessors; public uint dwProcessorType; public uint dwAllocationGranularity; public uint dwProcessorLevel; public uint dwProcessorRevision; } ... [DllImport("kernel32")] static extern void GetSystemInfo(ref SYSTEM_INFO pSI); ... SYSTEM_INFO pSI = new SYSTEM_INFO(...

How to audit an Azure Cosmos DB

In this post, we will talk about how we can audit an Azure Cosmos DB database. Before jumping into the problem let us define the business requirement: As an Administrator I want to be able to audit all changes that were done to specific collection inside my Azure Cosmos DB. The requirement is simple, but can be a little tricky to implement fully. First of all when you are using Azure Cosmos DB or any other storage solution there are 99% odds that you’ll have more than one system that writes data to it. This means that you have or not have control on the systems that are doing any create/update/delete operations. Solution 1: Diagnostic Logs Cosmos DB allows us activate diagnostics logs and stream the output a storage account for achieving to other systems like Event Hub or Log Analytics. This would allow us to have information related to who, when, what, response code and how the access operation to our Cosmos DB was done. Beside this there is a field that specifies what was th...

Cloud Myths: Cloud is Cheaper (Pill 1 of 5 / Cloud Pills)

Cloud Myths: Cloud is Cheaper (Pill 1 of 5 / Cloud Pills) The idea that moving to the cloud reduces the costs is a common misconception. The cloud infrastructure provides flexibility, scalability, and better CAPEX, but it does not guarantee lower costs without proper optimisation and management of the cloud services and infrastructure. Idle and unused resources, overprovisioning, oversize databases, and unnecessary data transfer can increase running costs. The regional pricing mode, multi-cloud complexity, and cost variety add extra complexity to the cost function. Cloud adoption without a cost governance strategy can result in unexpected expenses. Improper usage, combined with a pay-as-you-go model, can result in a nightmare for business stakeholders who cannot track and manage the monthly costs. Cloud-native services such as AI services, managed databases, and analytics platforms are powerful, provide out-of-the-shelve capabilities, and increase business agility and innovation. H...