In faza de test, rulati pachetul SSIS ca pe orice proiect de VS - click pe butonul "Start Debugging".
In primul rand va puteti da seama de ceea ce se intampla in timpul
rularii dupa culoarea task-urilor: galben - in desfasurare, verde - OK,
rosu - eroare.
Tab-ul "Execution Results" listeaza pasii din cursul executiei pachetului.
Mai departe, SSIS ofera destul de multe facilitati de "logging" si "debug".
1. Logging-ul "tine evidenta" evenimentelor SSIS. Informatia poate fi
"notata" intr-un fisier text, xml, in tabelul msdb.dbo.sysdtslog90,
intr-un "trace" (sursa pentru SQL Profiler) sau in windows event log.
Configurati log-ul la nivel de pachet sau de task accesand meniul SSIS
---> Logging.
Alegeti un "log provider" la nivel de pachet - destinatia de stocare a
informatiei - de exemplu un fisier XML (SSIS log providers for XML
files). Alegeti "New Connection" din drop-down-ul "Configuration",
selectati "Usage type ---> Create File" si specificati numele
fisierului XML.
In tab-ul Details alegeti evenimentele pe care vreti sa le logati:

In ecranul "Advanced" puteti alege datele care vor fi notate la destinatie:

Exemplu de fisier XML de log
Elementul "source" contine sursa informatiei - pachet, container, task.
* Aveti grija de dimensiunea fisierelor de log...
Pentru exemplificarea logging-ului la nivel de task, creati un "Execute SQL Task" care executa o procedura stocata de forma:
CREATE PROCEDURE [dbo].[DM_SSISLDExample]
@Headline varchar(100),
@NewsID int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO News(Headline)
VALUES(@Headline)
SET @NewsID = SCOPE_IDENTITY()
END
* Structura tabelului News:
CREATE TABLE [dbo].[News](
[NewsID] [int] IDENTITY(1,1) NOT NULL,
[NewsGUID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_News_NewsGUID] DEFAULT (newid()),
[Headline] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
.
.
.
CONSTRAINT [PK_News] PRIMARY KEY CLUSTERED
(
[NewsID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
In editorul task-ului alegeti un "connection type" ADO.NET (necesar
daca lucrati cu proceduri) si setati IsQueryStoredProcedure = True
Creati variabilele:
- "news_id" de tipul Int32, la nivel de pachet
- "headline" de tipul string, la nivel de Execute SQL Task
In Parameter Mapping stabiliti corespondenta intre parametrii procedurii si variabile:
* news_id va lua valoarea parametrului output @NewsID si poate fi folosita de catre un alt task.
SSIS permite stocarea informatiei de log in destinatii diferite pentru
componente diferite. De exemplu, la nivel de "Execute SQL Task" puteti
alege ca "log provider" SSIS Log provider for SQL Server. Informatia va
"merge" in tabelul msdb.dbo.sysdtslog90.
*mai intai adaugati providerul dorit la nivel de pachet
* pentru acest provider creati o noua conexiune OLEDB pe baza msdb
*
folositi proprietatea LoggingMode = UseParentSettings daca vreti ca
setarile de logging ale task-ului sa fie cele ale unui container
parinte
2. SSIS permite utilizarea de breakpoints la niver de container
("ForEach loop container", "For loop container", etc.) si de task.
Breakpoint-ul se asociaza cu un eveniment - de exemplu cu OnPreExecute
si OnPostExecute. Dati un "right click" pe task si alegeti "Edit
Breakpoints":
Puteti urmari valoarea variabilei news_id inainte si dupa executia
task-ului (---> OnPreExecute, OnPostExecute) in ferestrele "Watch"
si "Locals".
Fereastra "Call Stack" afiseaza task-ul curent (marcat prin sageata galbena) si parintele sau.
3. Pentru debug pe un script task editati scriptul VB (righ click pe
script task ---> Edit ---> Script ---> Design Script) si
creati break points:
Imaginea de mai jos reda ceea ce se vede in "Edit Breakpoints":

Cand este atins break pointul, debugger-ul lanseaza VB:
4. Comportament bizar
Am incercat sa apas pe butonul "step over". A aparut mesajul de eroare din imagine: