<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'denali' and 'Catalogs'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=denali,Catalogs&amp;orTags=0</link><description>Search results matching tags 'denali' and 'Catalogs'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SSIS Server, Catalogs, Environments &amp;amp;amp; Environment Variables in SSIS in Denali</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx</link><pubDate>Sat, 13 Nov 2010 18:50:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30518</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;In the last few days I have written 3 blog posts covering some new features in SQL Server Integration Services (SSIS) in the next version of SQL Server, code-named Denali:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx"&gt;Introduction to SSIS Project in Denali&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters in SSIS in Denali&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/12/the-new-execute-package-task-in-ssis-in-denali.aspx"&gt;The new Execute Package Task in Denali&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In this blog post I’m moving onto talking about the new SSIS server and some new terminology associated with it.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;In SSIS 2005 and 2008 there was the notion of an SSIS server but it didn’t particularly do very much:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_04D60784.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="382" height="165" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_002FD6FD.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Not much in there except for the ability to view running packages and also see what you have stored. Not particularly useful in my opinion and certainly not something I have ever used.&lt;/p&gt;  &lt;p&gt;That all changes in SSIS code-named Denali. The SSIS server is now an integral part of the new way of doing things that involves the new deployment model that I explained in the posts linked to above. For starters the SSIS server is no longer a separate service that you connect to, it now appears as a node in Object Explorer when connecting to a SQL Server database instance:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_57B0F4E8.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="333" height="227" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6B5DDE7C.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When you first try and expand that node you’ll discover that there is nothing underneath it so you need to create yourself a Catalog which requires you to specify a database master key:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3BBFBFF0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="305" height="305" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5376F756.png"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_58793505.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="595" height="406" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_649AAF2C.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You don’t get to choose the name of the Catalog (not in this CTP anyway), it is called [SSISDB] and you can only have one of them per SQL Server instance. Under the covers a database with the same name as the Catalog is created:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_4CB3C806.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="382" height="379" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_190B5BA8.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that in order to create the Catalog you must enable SQLCLR which (for easy reference) is done using:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:darkred;"&gt;sp_configure &lt;/span&gt;&lt;span style="color:red;"&gt;'clr enabled'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;1&lt;/span&gt;&lt;span style="color:gray;"&gt;;         &lt;br&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;GO         &lt;br&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;RECONFIGURE         &lt;br&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;GO&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A Catalog stores (amongst other things):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Deployed Projects&lt;/li&gt;    &lt;li&gt;Environments&lt;/li&gt;    &lt;li&gt;Package execution logs&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This last item, Package execution logs, is important. In previous SSIS versions you the developer were responsible for configuring all of your logging options such as what events you were going to log, which containers you were going to collect logs for, and where you were going to store those logs. Back in 2003 I used a competitor tool called Informatica and in the intervening period I have became incredibly frustrated that SSIS did not include any built-in logging infrastructure because Informatica &lt;i&gt;did&lt;/i&gt; include it and I hated having to go through the rigmarole of setting up a logging infrastructure and all the associated paraphernalia on every single new SSIS project that I went onto, especially as it is so time consuming. I, like I know many others have done, came up with my own method of doing it (read &lt;a target="_blank" href="http://consultingblogs.emc.com/jamiethomson/archive/2005/06/11/SSIS_3A00_-Custom-Logging-Using-Event-Handlers.aspx"&gt;Custom Logging Using Event Handlers&lt;/a&gt; – my &lt;a target="_blank" href="http://consultingblogs.emc.com/jamiethomson/archive/2007/06/26/Blog-stats.aspx"&gt;2nd most popular ever SSIS-related blog post&lt;/a&gt;) as did Davide Mauri (read &lt;a target="_blank" href="http://dtloggedexec.davidemauri.it/default.aspx"&gt;DTLoggedExec&lt;/a&gt;) because the logging mechanisms in SSIS have been so woefully inadequate.&lt;/p&gt;  &lt;p&gt;In SSIS code-named Denali that all goes away; the SSIS server is responsible for managing all of your deployed projects/packages and in turn manages both the execution of them and the collection of log information. It is this fundamental shift that has me most excited about SSIS code-named Denali; instead of having lots of options for logging we now have a definitive one and over time it is the one that everyone will use. That consistency has to be a good thing because we as developers can get on with the serious business of implementing business logic rather than worrying about dull matters like deployment and logging.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Within the Catalog you create a one-level folder hierarchy (you must create at least one folder) and under each folder is a collection of Projects and a collection of Environments.The Projects folder is the place into which you deploy your &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx"&gt;SSIS Projects&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1DA16662.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="370" height="340" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4E546E0D.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;N.B. My naming convention here which categorises Projects into business units (HR, Marketing) within an organisation is for demonstration only – it is not a recommendation.&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notice also in this screenshot that each folder in the Catalog has a node called “Environments”. In SSIS code-named Denali an Environment is an object type that you can create multiple instances of – in this case I have created Development, Test &amp;amp; Production. Environments are fairly self-explanatory – they are a wrapper for all environment-specific information (e.g. Connection Strings) that you want to maintain outside of a package and when you execute a package you have to choose which Environment to execute it against. In short Environments are the replacement for SSIS configurations and they work hand-in-hand with &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters&lt;/a&gt; that are also getting introduced in SSIS code-named Denali. Let’s take a closer look:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_25695904.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="749" height="510" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7154B9B0.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There’s nothing of interest on the General tab, the interesting stuff is in the Variables tab. Here I have defined one Environment Variable called CustomerName and given it a value which in this case is a string “Beatrice”. Just as with &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters&lt;/a&gt; they can be set to Sensitive which means that they will be encrypted on the server. When we execute a package from the same folder we can replace a Parameter value (either a Project or a Package Parameter) with a value from an Environment Variable.&lt;/p&gt;  &lt;p&gt;The properties page of a SSIS Project that has been deployed to a Catalog has a References tab where we can associate a Project with one or more Environment objects in the Catalog – this is called an Environment Reference:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_35B4AAF0.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="750" height="511" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_32531348.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are two types of Environment References:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Relative – &lt;/b&gt;The referenced Environment must be in the same folder as the Project&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Absolute – &lt;/b&gt;The referenced Environment can be anywhere in the Catalog&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the difference between the two is that any Project using absolute references can be moved to other folders in the Catalog without fear of them breaking – it is up to you to decide which type of reference suits you best. Notice that Environments {Development, Test, Production} appear twice in the screenshot above which is because an Environment that is available for a Relative Environment Reference can also be referenced as an Absolute Environment Reference.&lt;/p&gt;  &lt;p&gt;Once we have added the required Environment References to our Project they appear like so:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_4061DC78.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="747" height="502" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7E0EC434.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We now have our environments, each of which contain a Variable called CustomerName (not shown here so you’ll have to trust me on that), associated with our Project. If we wish the project to make use of that Environment Variable when one of its packages is executed then we must associate that Environment Variable with a Project Parameter which we also do in the Project Properties dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2FB9BBBD.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="809" height="477" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3377608D.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that we can also associate an Environment Variable with a Package Parameter in the same way.&lt;/p&gt;            &lt;p&gt;This bit might take a bit of explaining. Observe the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A Project Parameter (of a project called ProjectParametersDemo) called CustomerName that has a Server Default value of “Harry”&lt;/li&gt;    &lt;li&gt;A Package Parameter (of a package called Child.dtsx) called CustomerName that has a Server Default of “William”&lt;/li&gt;    &lt;li&gt;I have clicked on the ellipsis next to the Project Parameter and am assigning it the value of an Environment Variable, also called CustomerName&amp;nbsp; (there is no requirement for Environment Variables to have the same name as a Parameter by the way – I just happened to have named them identically here)&lt;/li&gt;    &lt;li&gt;At this point I have not told it &lt;i&gt;which&lt;/i&gt; Environment it should take the value from, only that it &lt;i&gt;should &lt;/i&gt;be taken from an Environment.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We are now ready to execute a package from our Project which we do by right-clicking on it and selecting “Run…”:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1AB8137D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="324" height="255" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_78EC3AEB.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This brings up the Run Package dialog and it is in here that we tell the execution engine &lt;i&gt;which &lt;/i&gt;of our three environments should be used to override our CustomerName parameter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2B036569.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="679" height="420" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_1A3BBABB.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We select one of them, click OK, and our package executes. The logging output from our execution is displayed in a new Package Running Information dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_44C775CB.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="654" height="492" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_45702BF5.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One final note on logging. The fairly limited information that gets captured in the current CTP (depicted above) is not the same as what will be in the product upon release – there is a lot more to come. For example, the name of the container that raised the event is currently embedded at the start of the log message – at the very least I am expecting that to become a field of its own.&lt;/p&gt;  &lt;p&gt;That’s it, that’s how you execute a package. Let’s review the steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Design your packages in BIDS as a SSIS Project, including Project and Package Parameters as appropriate&lt;/li&gt;    &lt;li&gt;Set up Environment objects on your SSIS server containing relevant Environment Variables&lt;/li&gt;    &lt;li&gt;Deploy your SSIS Project to the SSIS server by using the SSIS Deployment Wizard (not something I have covered here or in previous blog posts)&lt;/li&gt;    &lt;li&gt;Associate your Project with a set of Environments&lt;/li&gt;    &lt;li&gt;Specify Project and Package Parameters overrides using Environment Variables (this step can actually be done within the Deployment Wizard)&lt;/li&gt;    &lt;li&gt;Choose which Environment to use for a particular execution instance and start the execution&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are quite a few steps here though I feel the whole process will become fairly intuitive once someone gets introduced to it. It is certainly very flexible as Parameters can either maintain their Server Default values or get overridden using an Environment Variable. I like the fact that multiple execution environments can be maintained from a single SSIS instance although time will tell whether people choose to use this setup or instead have a SSIS server for each environment – the infrastructure that I have covered in this blog post fully supports both.&lt;/p&gt;  &lt;p&gt;One other thing to note is that these UI screens are merely front-ends to some stored procedures, views and functions so everything that I’ve shown here can also be done with T-SQL scripts which I think is great news because we can now call SSIS packages from within our T-SQL scripts. This gives us great flexibility over how we build our solutions.&lt;/p&gt;            &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>