Első
posztomban írtam arról, hogyan kérdezhetjük le az SSIS csomagok listáját PowerShell-el SQL Server 2008 alatt. Az új, 2012-es kiadásban azonban egy
teljesen új módszert és környezetet kapunk csomagjaink telepítéséhez és kezeléséhez.
(Ezzel párhuzamosan – a korábbi SQL
Server-ekkel való kompatibilitás miatt – a korábbi struktúra is megmarad
egyelőre.)
Ha a csomagok listájára van szükségünk, az SQL Server 2012 (RC0)-ban az SSISDB-ben (T-SQL) vagy a Microsoft.SqlServer.Management.IntegrationServices névtérben (.Net, PowerShell) kell kutakodnunk. A T-SQL megoldás nagyjából így néz ki:
- use SSISDB
 - go
 - select
 - pack.name as [PackageName]
 - ,pack.[description] as [Description]
 - ,fold.name as [Folder Name]
 - ,proj.name as [Project Name]
 - ,fold.created_by_name as [OwnerName]
 - ,proj.created_time as [Project Created Time]
 - ,proj.last_deployed_time as [Project Last Deployed Time]
 - ,cast (pack.version_major as varchar(10))
 - + '.' + cast (pack.version_minor as varchar(10))
 - + '.' + cast (pack.version_build as varchar(10))
 - as [Version]
 - ,pack.version_comments
 - ,proj.object_version_lsn as [Project Version]
 - from
 - catalog.packages pack
 - inner join catalog.projects proj on pack.project_id = proj.project_id
 - inner join catalog.folders fold on proj.folder_id = fold.folder_id;
 
Érdemes azonban
alaposabban végigbogarászni az SSISDB-t, mert olyan információkra bukkanhatunk,
amikről korábban nem is álmodtunk (pl. catalog.executions).
PowerShell-el
közelítve a dologhoz, hasonló listát kaphatunk, ha végigzongorázzuk a Catalogs.Folders.Projects.Packages
matrjoskát:
- Add-type -path "C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Management.IntegrationServices\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Management.IntegrationServices.dll";
 - $ssis = New-Object Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices;
 - $constr = "Data Source=localhost;Initial Catalog=master;Integrated Security=SSPI;"
 - $con = New-Object System.Data.SqlClient.SqlConnection $constr
 - $ssis.Connection = $con;
 - # Well, we can use here a foreach in the catalogs, but currently only the SSISDB catalog supported.
 - $folders = $ssis.Catalogs["SSISDB"].Folders;
 - $regex = [regex]"(?i)[0-9]"
 - foreach ($folder in $folders)
 - {
 - foreach ($project in $folder.Projects)
 - {
 - $project.Packages | ft name, `
 - @{name="Folder name"; expression={$folder.name}}, `
 - @{name="Project name"; expression={$project.name}}, `
 - @{name="Actual Version"; expression={$project.objectversionLsn}; align="center"}, `
 - @{name="All Version"; expression={$regex.matches($project.versions)}; align="center"}, `
 - @{name="Last Deployed Time"; expression={$project.LastDeployedTime.LocalDateTime}; align="center"} `
 - -autosize -wrap | out-string | sort -property name;
 - }
 - };
 
Persze, az új
struktúra előnyei nem a csomagok listázásánál csúcsosodnak ki. Az SSIS 2012
(RC0) egyik remek újdonsága például, hogy a már telepített project verziók között szabadon válthatunk (feltéve, hogy az SSISDB katalógus Periodically Remove Old Versions tulajdonsága False, mert ellenkező esetben a Maximum Number of Versions per Project-nél régebbi verzióinkat az SQL Server szanálja). 
Erre – természetesen – nem csak a GUI-n keresztül van lehetőségünk. Az SSISDB tárolt eljárásai közt ott lapul a catalog.restore_project,
Erre – természetesen – nem csak a GUI-n keresztül van lehetőségünk. Az SSISDB tárolt eljárásai közt ott lapul a catalog.restore_project,
- exec catalog.restore_project 'Sample Folder', 'Sample Project', 5;
 
az
IntegrationServices assembly-ben pedig az Restore() metódus.
- $ssis.Catalogs["SSISDB"].Folders["Version Rollback Sample"].Projects["Sample Project 3"].Versions[5].Restore();
 
(Az $ssis változóból sejthető, de azért
tisztázzuk: ez akkor működik, ha az adott session-ben már betöltöttük az
assembly-t és csatlakoztunk a szerverhez (ő lenne az $ssis)).
Nincsenek megjegyzések:
Megjegyzés küldése