Archive for August, 2007

Dnevni zagon DTSX paketa v MS SQL 2005

Tuesday, August 28th, 2007

Ena izmed novosti v MS SQL 2005 je ta, da se dtsx paketi kreirajo znotraj Visual Studia 2005.
V tem vodiču bom pokazal kako narediti dtsx patek, ki bo skrbel za dnevni prenos podatkov iz enega na drugi sql strežnik.

Nov projekt naredimo takole:
File->New->Project->Bussines Intelligence projects->Integration Services Project
NewProject

Najlažje naredimo nov dtsx paket s pomočjo čarovnika:
Solution Explorer -> desni klik na “SSIS Packages” -> SSIS Import and Export Wizard
wizard

Ko čarovnik zahteva podatke o izvornem stežniku vpišemo vse potrebne podatke in izberemo izvorno bazo.
from

Enako naredimo še za ciljni strežnik:
to.png

Odvisno od tega za kaj želimo narediti izberemo eno od dveh možnosti. Prva možnost je tudi enostavnejša.
specify

Na levi izberemo tabelce iz katerih bomo kopirali podatke, na desni pa tabelce kamor bodo podatki skopirani.
V kolikor boste prenaÅ¡ali veliko tabel označite “Optimize for many tables”.
beta.png
ÄŒe se izvorna in ciljna polja različno imenujejo je potrebno klikniti “Edit…” ter določiti katero izvorno polje se bo preneslo v katero ciljno polje.

ÄŒe boste vsakič prenaÅ¡ali vse podatke, potem izberite Å¡e “Delete rows in destination table”, zato da se zapisi ne bodo podvajali.
map.png

Samo še: Next->Finish->Close in dtsx paket je narejen, ni se pa še izvršil. Paket poženete s tipko F5.

Če ni nobene napake bo diagram parkrat zeleno/rumeno utripnil nato pa povsem pozelenel. :D Smo že na pol poti do cilja.

Kliknite “Stop debugging” kvadratek in gremo naprej.
stop.png

Desno spodaj kjer so “Properties” poiščite “Protection level” ter ga nastavite na “EncryptSensitiveWithPassword”. Privzeta nastavitev “EncryptSensitiveWithUserKey” namreč ne omogoča zagona paketka na drugih računalnikih/strežnikih.
encrypt

Pri “Package password” pa kliknite na gumb s tremi pikami, ter dvakrat vpiÅ¡ite geslo, ki ga boste kasneje uporabili kot parameter klica paketa.

Pritisnite Å¡e “Ctrl-Shift-B” in paket je popolnoma dokončan.

Dnevni zagon paketa

Paket kličemo iz CommandPrompt-a takole:

dtexec /F "c:\temp\sql\tutorial\Paketek.dtsx" /de geslo
cmd.png

Pravilna sintaksa je torej dtexec /F temu sledi pot do datoteke “c:\temp\sql\tutorial\Paketek.dtsx” nato /de kot decrypt ter nato vaÅ¡e geslo ki ste ga določili v Visual Studiu.

Dnevni zagon tega lahko naredite tako, da naredite datoteko npr. kopiraj.bat v katero zapišete:
dtexec /F "c:\temp\sql\tutorial\Paketek.dtsx" /de geslo
Nato pa preko Control Panel->Scheduled tasks->Add New Scheduled task dolčite kako pogosto se naj ta bat file poganja.

Drugi način kako narediti dnevni zagon paketa pa je s pomočjo JOB-a v SQLu.
Tudi iz SQL queryja je namreč mogoče dostopati do CMD-ja, preko procedure xp_cmdshell.
Le ta je zaradi varnosti privzeto onemogočena, vendar pa jo lahko omogočite takole:

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE

Ko je xp_cmdsheel omogočena lahko kličemo paket preko:
exec master.dbo.xp_cmdshell 'dtexec /F "c:\temp\sql\tutorial\Paketek.dtsx" /de geslo'

Torej vse kar je še potrebno storiti je da v SQL Server Management Studiu na želenem strežniku izberemo:
SQL Server Agent -> Jobs -> desni klik na Jobs in NewJob.
jobs.png

Pog General vpiÅ¡emo ime job-a. Pri Steps->New vpiÅ¡emo Step Name: KlicPaketka, ter pri Command: exec master.dbo.xp_cmdshell ‘dtexec /F “c:\temp\sql\tutorial\Paketek.dtsx” /de geslo’
korak.png

Pri Schedules->New pa določimo kdaj naj se ta paketek izvaja.

To je to:)