C# - Bulk Copy műveletek

SQL Server adatmentés 1. rész

forráskód letöltése
Vannak esetek, amikor szükség van az adatbázis valamely részének, vagy egészének exportálására, illetve importálására. Ekkor jöhet jól az MS SQL Server beépített eszköze, mely egyszerűvé és rugalmassá teszi az adatok mentését, és visszatöltését. Cikksorozatunkban bemutatjuk a szoftver beépített BULK COPY lehetőségét, amelynek segítségével egy parancssori eszközzel, vagy SQL utasítással egy speciálisan formázható szöveges állományba menthetjük az adatbázis tábláinak tartalmát.
Viszonylag gyakori művelete az adatbázis adminisztrációnak az adatok export, illetve import művelete. A MS SQL Server BCP.EXE nevű parancssori eszközével nagy mennyiségű adatot lehet az adatbázis tábláiból egy ASCII állományba menteni, vagy onnan visszatölteni. A program alapértelmezésben a <SQL Server mappa>\80\Tools\Binn mappában található, indításkor parancssori argumentumok formájában adhatjuk át a mentés, vagy betöltés paramétereit.
A program felhasználásával van lehetőségünk arra, hogy egy egész táblát kimentsünk, vagy egy lekérdezést fogalmazzunk meg, és ebben specifikáljuk a mentendő adatok körét. Mai cikkünkben a mentéssel foglalkozunk.
Rengeteg kapcsolót használhatunk, mi csak a leggyakrabban használtakkal foglalkozunk. Szintaxis:
bcp <adatbázisnév>.<táblanév | nézetnév | lekérdezés> [in | out | queryout] <adatfájl neve> <kapcsolók>
Amennyiben a tábla teljes adatállományát mentjük, akkor elegendő az első argumentumban megadni a tábla teljes nevét, másodikként az OUT kulcsszót, majd az adatfájl nevét elérési úttal.
Lekérdezést is megadhatunk aposztrófok között, ekkor ezt a tábla neve helyett kell megtennünk, majd a QUERYOUT kulcsszóval jelezni, hogy szelektív adatmentés következik.
A legjellemzőbb kapcsolók:
  • -P: egy jelszó megadása az adatbázis eléréséhez.
  • -t: megadható, hogy az állományban az egyes mezőket milyen karakter válassza el egymástól. Pl. a \t (tab) karakter.
  • -r: az egyes rekordokat milyen karakter válassza el egymástól. Pl. a \n (új sor) karakter.
  • A szöveges állomány mellett generálódik egy, a formátumot tartalmazó fájl.
  • Minden futáskor interaktív módon meg kell adni bizonyos információkat a program számára.
  • A program természetesen alapértelmezett adatokat is használhat, ha azt szeretnénk.
  • Az állomány a következő oszlopokat tartalmazza:
  • Bal sarokban látható a bcp.exe alkalmazás verziószáma, és az oszlopszám (8.0)
  • 1. oszlop: mezősorrend
  • 2. oszlop: adattípusok
  • 3. oszlop: prefixum hossza
  • 4. oszlop: oszlop adathossza
  • 5. oszlop: mezőhatároló karakter
  • 6. oszlop: oszlopsorrend
  • 7. oszlop: oszlopnév
  • 8. oszlop: nyelvi beállítások.
Az interaktív mentéskor négy kérdésre kell válaszolnunk. Ezek mind ismétlődnek oszloponként, mivel oszloponként van lehetőségünk megadni, hogy milyen formátumban, és feltételekkel akarjuk tárolni az adatokat. A kérdések a következők:
  • Milyen típusban kívánjuk tárolni az oszlop adatait? (karakteres, natív)
  • Mekkora legyen a prefix oszlop mérete? (3. oszlop)
  • Mekkora legyen egy-egy oszlop szélessége, melyben az adatokat tároljuk? (egy számot kell megadnunk)
  • Az oszlopokat milyen karakter válassza el egymástól? (a –t kapcsolóval jeleztük, hogy egy TAB karakter, így ez a kérdés kihagyható).
Az egyes kérdéseknél ENTER leütésével fogadható el az alapértelmezett érték, így ha minden feltétel megfelel – márpedig az alapértelmezett értékek általában megfelelnek -, akkor csak ENTER-eket kell ütnünk.
A művelet utolsó kérdése, hogy kívánjuk-e menteni a formázási információkat egy állományba. Az alapértelmezett beállítás YES. Utolsó kérdés a formázó állomány nevére utal, ha nem változtatunk, akkor bcp.fmt néven generálódik a példa mappájába.
Példa
A mellékelt példában a Form mezőit kitöltve a MŰVELET gombra kell kattintanunk a mentés indításához.
Meg kell adnunk, hogy milyen meghajtóra installáltuk a MS SQL Server programunkat, hogy meg tudjuk a BCP-t keresni programból.
Amennyiben kijelöltük a jelölőnégyzetet, akkor elérhetővé válik egy szerkesztődoboz egy helyes SQL utasítás megadásához.
A programot a Process osztály Start metódusával indítjuk el. A generált szöveges állomány a megadott meghajtó gyökérmappájába kerül. A programban a pubs adatbázis publishers táblájának adatain végezhetünk el mentési műveleteket.
Egy lehetséges végrehajtandó utasítás a következőképpen nézhet ki:
bcp pubs.dbo.publishers out C:\test\publishers.txt –t \t –r \n –P sample
Abban az esetben, ha egy SQL utasítást specifikáltunk, a következő argumentumokkal futhat a BCP.EXE program:
 bcp "SELECT pub_id, pub_name FROM pubs.dbo.publishers" queryout C:\test\publishers.txt -t \t –r \n –P sample

SQL Server adatmentés cikksorozat

Bulk Copy műveletek - SQL Server adatmentés 1. rész

Adatok betöltése állományból - SQL Server adatmentés 2. rész