{"id":550,"date":"2011-07-06T13:44:00","date_gmt":"2011-07-06T13:44:00","guid":{"rendered":"\/blogs\/bobb\/post\/A-First-Look-at-Data-Tier-Applications-20.aspx"},"modified":"2013-07-05T10:35:42","modified_gmt":"2013-07-05T17:35:42","slug":"a-first-look-at-data-tier-applications-2-0","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/","title":{"rendered":"A First Look at Data-Tier Applications 2.0"},"content":{"rendered":"<p>\nThe next version of Data-Tier Applications is version 2.0. You can get a CTP of it today; where the CTP is located really gives away the game. It&#39;s located at SQL Azure Labs, listed under SQL Azure &quot;Import\/Export&quot;. The writeup on this page identifies a few interesting things:\n<\/p>\n<p>\n1. It&#39;s a preview of the Denali Data-Tier Application Framework (although its not the version in Denali CTP1).<br \/>\n2. It&#39;s meant to be &quot;a solution for archival and migration scenarios&quot;.<br \/>\n3. (Easy implication on my part) &#8211; they&#39;re concentrating on SQL Azure &quot;database movement&quot; for now. Although you can use it with SQL Server, coverage includes exactly what&#39;s in SQL Azure.\n<\/p>\n<p>\nWith respect to the second point listed, DAC 2.0 supports two new operations: import and export. This import and export is on an entire database at a time, as opposed to say, BCP, which is table-by-table. It also imports\/exports data and schema at once, unlike BCP which needs a schema to be defined ahead of time. This import\/export is NOT backup\/restore. There&#39;s no point-in-time recovery, and, if the export is executed on an &quot;active&quot; database, there&#39;s no guarentee that its transactionally consistent. It&#39;s just of copy of all of the schema and data into one container called (are you ready for this?) a .bacpac. The data is actually stored row-at-a-time, in JSON (Javascript Object Notation) format.\n<\/p>\n<p>\nBetter than that (depending on your point of view), DAC 2.0 adds support for additional database objects and types, including ALL of the database objects supported by SQL Azure Database (but not objects <strong>not<\/strong> supported by SQL Azure, like Service Broker objects). Objects added in the CTP include:\n<\/p>\n<p>\nGeometry, Geography, and HierarchyId data types<br \/>\nSpatial Indexes<br \/>\nStatistics<br \/>\nSynonyms<br \/>\nCursorParams<br \/>\nSecurity-Related Objects<br \/>\n&nbsp; Permissions<br \/>\n&nbsp; Role Memberships<br \/>\n&nbsp; Logins and Users (I don&#39;t see Denali&#39;s Contained Database logins, but I bet these will be added eventually)\n<\/p>\n<p>\n<br \/>\nThe CTP offering consists of five components: new versions of the four components in earlier DAC versions (DAC framework, SMO, SQLClrTypes, T-SQL LanguageService) and one new component: the T-SQL ScriptDom. The T-SQL ScriptDom is a component that generates SQL Server version-specific scripts for create and alter\/update.\n<\/p>\n<p>\nWhen you install DAC 2.0 CTP (the components actually show up in Add\/Remove Programs as e.g. &quot;Microsoft SQL Server &quot;Denali&quot; Data-Tier App Framework (CTP 2.1)&quot;, there are four such components), it does&nbsp;NOT replace existing DAC components. It installs side-by-side in the GAC and in the &quot;110&quot; subdirectory SQL Server in program files. I didn&#39;t install it on Denali CTP1 system, but installed it on an OS with SQL Server 2008 R2. It doesn&#39;t affect any GUI components, and existing VS 2010 (RTM or SP1) and SQL Server 2008 R2 (RTM or SP1) DAC 1.0 or 1.1 functionality continues to work as it used to.\n<\/p>\n<p>\nBecause there&#39;s no GUI components or new VS Projects&nbsp;for now, it comes with a command-line utility. Unless you program it using the object model, you interact using the utility for now (although the code for the command-line utility is available on CodePlex). The utility, DACImportExportCli.exe (sounds like they&#39;ll implement a Windows Azure service over it, no?), contains at least one exciting feature: BACPACs can be imported\/exported from\/to Windows Azure Blob storage. You just name your Windows Azure storage server and cert as command-line parameters and &quot;it all happens in the cloud&quot; (and no, I&#39;m not contracting to write advertising slogans, thanks).\n<\/p>\n<p>\nSo, to wrap this up, both SQL Azure Database and SQL Server Denali work with the concept of the portable, movable, database. It&#39;s meant to be unencombered by server-level (or MSDB-level)&nbsp;objects, and supports a subset of database objects that increases with each new SQL Azure Database Service Release. And the vehicle for wrapping these databases up and moving them around is the DAC. In addition to working with multiple SQL Server versions, it also encapsulates the differences between applying database schema changes to disperate versions. As an example, at TechEd 2011, Adrian Bethune illustrated how to change the data type of a clustering key on SQL Server Denali and SQL Azure Database. It&#39;s different on Azure because you can&#39;t simply drop and re-create the clusting key, so DAC&nbsp;accomplishes it differently on each instance. Very interesting&#8230;\n<\/p>\n<p>\n@bobbeauch<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The next version of Data-Tier Applications is version 2.0. You can get a CTP of it today; where the CTP is located really gives away the game. It&#39;s located at SQL Azure Labs, listed under SQL Azure &quot;Import\/Export&quot;. The writeup on this page identifies a few interesting things: 1. It&#39;s a preview of the Denali [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,13,31],"tags":[],"class_list":["post-550","post","type-post","status-publish","format-standard","hentry","category-sql-azure-database","category-data-tier-applications-dac","category-sql-server-2012"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A First Look at Data-Tier Applications 2.0 - Bob Beauchemin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A First Look at Data-Tier Applications 2.0 - Bob Beauchemin\" \/>\n<meta property=\"og:description\" content=\"The next version of Data-Tier Applications is version 2.0. You can get a CTP of it today; where the CTP is located really gives away the game. It&#039;s located at SQL Azure Labs, listed under SQL Azure &quot;Import\/Export&quot;. The writeup on this page identifies a few interesting things: 1. It&#039;s a preview of the Denali [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Bob Beauchemin\" \/>\n<meta property=\"article:published_time\" content=\"2011-07-06T13:44:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-07-05T17:35:42+00:00\" \/>\n<meta name=\"author\" content=\"Bob Beauchemin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bob Beauchemin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/\",\"name\":\"A First Look at Data-Tier Applications 2.0 - Bob Beauchemin\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website\"},\"datePublished\":\"2011-07-06T13:44:00+00:00\",\"dateModified\":\"2013-07-05T17:35:42+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Azure SQL Database\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/category\/sql-azure-database\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"A First Look at Data-Tier Applications 2.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/\",\"name\":\"Bob Beauchemin\",\"description\":\"SQL Server Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e\",\"name\":\"Bob Beauchemin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g\",\"caption\":\"Bob Beauchemin\"},\"sameAs\":[\"http:\/www.sqlskills.com\/blogs\/bobb\/\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/author\/bobb\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A First Look at Data-Tier Applications 2.0 - Bob Beauchemin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/","og_locale":"en_US","og_type":"article","og_title":"A First Look at Data-Tier Applications 2.0 - Bob Beauchemin","og_description":"The next version of Data-Tier Applications is version 2.0. You can get a CTP of it today; where the CTP is located really gives away the game. It&#39;s located at SQL Azure Labs, listed under SQL Azure &quot;Import\/Export&quot;. The writeup on this page identifies a few interesting things: 1. It&#39;s a preview of the Denali [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/","og_site_name":"Bob Beauchemin","article_published_time":"2011-07-06T13:44:00+00:00","article_modified_time":"2013-07-05T17:35:42+00:00","author":"Bob Beauchemin","twitter_misc":{"Written by":"Bob Beauchemin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/","url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/","name":"A First Look at Data-Tier Applications 2.0 - Bob Beauchemin","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website"},"datePublished":"2011-07-06T13:44:00+00:00","dateModified":"2013-07-05T17:35:42+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/a-first-look-at-data-tier-applications-2-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/bobb\/"},{"@type":"ListItem","position":2,"name":"Azure SQL Database","item":"https:\/\/www.sqlskills.com\/blogs\/bobb\/category\/sql-azure-database\/"},{"@type":"ListItem","position":3,"name":"A First Look at Data-Tier Applications 2.0"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/","name":"Bob Beauchemin","description":"SQL Server Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/bobb\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e","name":"Bob Beauchemin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g","caption":"Bob Beauchemin"},"sameAs":["http:\/www.sqlskills.com\/blogs\/bobb\/"],"url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/author\/bobb\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts\/550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/comments?post=550"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts\/550\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/media?parent=550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/categories?post=550"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/tags?post=550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}