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