Chapter 12: Managing SQL Azure Accounts, Databases, and DataHubs SQL Azure is the SQL Server team’s name for a set of highly scalable cloud services based on a customized version of SQL Server 2008 and related services hosted in Microsoft data centers. SQL Azure is intended to provide the capabilities of an enterprise-grade data center without the capital cost of its physical facilities or the operating expenses for its management or maintenance. SQL Azure provides high availability by replicating a total of three redundant copies of your data to separate physical servers. SQL Azure achieves scalability while maintaining transactional consistency by partitioning data into individual 10GB or smaller databases. When this chapter was written, only the first of these services—SQL Azure Database (SADB) v1, a scalable and available relational database— had been released as a Community Technical Preview (CTP). SADB was scheduled for commercial availability during Microsoft’s Professional Developers Conference (PDC) in mid-November 2009. Ultimately, SQL Azure will consist of the following services: SQL Azure Database to provide core SQL Server database capabilities (release during PDC 2009) Data Sync to enable synchronizing cloud and on-premises databases with the Microsoft Sync Framework to be released “soon after” PDC 2009 Secure Data Hub, an “aggregation of enterprise, partner, desktop and device data within SQL Azure” based on the “Huron” incubator project with no current CTP or release timetable Business Intelligence (BI) and Reporting Services (RS) with no current CTP or release timetable This chapter concentrates on creating a SQL Azure account, getting connected to an SADB v1 server, and creating user databases with SQL Server Management Studio (SSMS) 2008 [Express] and the sqlcmd utility. This chapter was written before SADB released to the Web (RTW) as a commercial product with service fees. When you connect to the commercial version, the credit card you specify when creating your account will be charged US$9.99 per month for a database size up to 1GB (Web Edition) and US$99.99 per month for up to 10GB of space (Business Edition), plus US$0.10 per GB of data ingress and US$0.15 per GB of data egress. type="note" The current version of this chapter is based on the SQL Azure Database August 2009 CTP. Sections covering the four other SQL Azure elements will be added to this online chapter as CTPs become available. Service fees for SADB might change on or after commercial release. Service-level guarantees specific to SADB were not included in Microsoft’s “Confirming Commercial Availability and Announcing Business Model” blog post of July 14, 2009 (http://bit.ly/jee5w, http://blogs.msdn.com/windowsazure/archive/2009/07/14/c onfirming-commercial-availability-and-announcingbusiness-model.aspx) . Tracking SSDS’s Migration to a Relational Database Ray Ozzie announced SQL Server Data Services (SSDS) at the MIX08 conference in Las Vegas during his March 5, 2008 keynote address. SSDS became available as a CTP later in the first half of 2008 and provided an on-demand, pay-per-use data model, which offered the following features: A flexible, schemaless entity model that lets users add new attributes to the entity type when needed; the system indexes the attributes automatically. Simplified data types for attribute values: string, numeric, datetime, boolean, and binary. REST-based and LINQ-like queries; SOAP was also supported. Plain old XML (POX) was the only wire format then available; AtomPub was promised. No projections; the unit of storage was a complete entity. Highly scalable by partitioning of sizes in the 10s of GB. Secure data access with SSL, LiveID authentication, and authorization at the account (billing unit), authority (collection of containers), container (set of entity sets), and type (entity type) levels. A promise of data synchronization and bulk uploads with the Microsoft Sync platform. type="note" For more background on the MIX08 SSDS announcement and early reaction to SSDS in the computer trade press, see the “SQL Server Data Services to Deliver Entities from the Cloud” post of March 7, 2008, to the OakLeaf blog (http://bit.ly/SJydJ, http://oakleafblog.blogspot.com/2008/03/sql-serverdata-services-to-deliver.html) and “Spelunking SQL Server Data Services” (http://bit.ly/gS7RR, http://oakleafblog.blogspot.com/2008/03/spelunking-sqlserver-data-services.html). The initial SSDS architects chose the Entity-Attribute-Value (EAV) data model implemented by a hierarchical set of Authority, Container, and Entity (ACE) objects, rather than the traditional relational data model because EAV databases were understood to be easier to scale out to extreme sizes typified by Google’s BigTable and Yahoo!’s Hadoop examples. The problem with this approach was the difficulty that potential customers encountered when attempting to distinguish SSDS tables from the similar EAV tables offered by Azure Data Services. Further, the Azure marketing team was strongly promoting the benefits of leveraging developers’ experience with .NET programming and Visual Studio to ease the burden of migrating conventional ASP.NET applications and .NETbased services from on-premises data centers to those in the cloud. Developers and their management were more interested in leveraging their relational database design and Transact-SQL (T-SQL) query skills than the potential for increased scalability. Architects and developers also had misgivings about the “eventual consistency” properties of EAV tables rather than the immediate, transactional update consistency of SQL Server clusters. type="note" On October 27, 2008, Ray Ozzie announced that Windows Azure would be the name of Microsoft’s new Platform as a Service (PaaS) cloud computing contender. SSDS was renamed SQL Data Services (SDS) at PDC 2008. Microsoft’s marketing folks are well known for listening intently to their users, including millions of developers, and acting on user feedback. The SSDS team finally understood the error of their EAV approach about one year later and announced a mid-course correction to their SSDS plans on March 10, 2009. Also on that day, David Robinson, this book’s Technical Editor, added “The no spin details on the new SDS features” post (http://bit.ly/AW3Jm, http://blogs.msdn.com/ssds/archive/2009/03/10/9469 228.aspx) to what’s now the SQL Azure Team Blog: Today we announced the details of our plans to accelerate the delivery of core relational database features as part of SDS. There has been quite a bit of buzz about SDS over the past couple weeks and it is great to be able to share the details more broadly. If we flash back about a year ago to Mix 08, Nigel Ellis got up on stage to introduce the community to SDS which, at the time, was a flexible entity based cloud database that you accessed using standard internet protocols. We made this announcement with the promise that more relational capabilities would be coming - and they did. But the universal feedback we received from our TAP partners and other early adopters was the need for a relational database delivered as a service. This was extremely valuable feedback and drove us to more aggressively investigate ways in which we could deliver these features. As a result of that work and based on the progress we’ve since made in the product team, we are announcing that SDS will deliver full relational database capabilities as a service. The SDS team changed its name and rebranded the service to SQL Azure on July 9, 2009. type="note" For additional details about SDS’s change from the EAV to relational data model, see the February 24, 2009, “A Mid-Course Correction for SQL Data Services” (http://bit.ly/85YOa, http://oakleafblog.blogspot.com/2009/02/mid-coursecorrection-for-sql-data.html) and the March 10, 2009, “SQL Data Services Abandons REST for TDS API and Knocks My Socks Off” (http://bit.ly/gWgyB, http://oakleafblog.blogspot.com/2009/03/sql-dataservices-abandons-rest-for-tds.html) posts. Reviewing Current SQL Azure Database Documentation and Resources MSDN’s SQL Azure Database documentation, which is available online at http://bit.ly/12N3Mp, http://msdn.microsoft.com/enus/library/ee336279.aspx, contains the following chapters: Introducing SQL Azure Database SQL Azure Database Concepts Developer's Guide Guidelines and Limitations Transact-SQL Reference SQL Azure Database Copyright and Legal Information type="note" The Transact-SQL Reference chapter is especially useful because it contains lists of supported, partially supported, and unsupported T-SQL reserved words. The Windows Azure team released the Windows Azure Platform Training Kit – August [2009] Update for downloading on August 17, 2009, at http://bit.ly/3Nwdbn, http://www.microsoft.com/downloads/details.aspx?Fa milyID=413E88F8-5966-4A83-B30953B7B77EDF78&displaylang=en. The kit offers the following SQL Azure Database–specific elements in .pptx, .docx, or .htm format: Presentations Introduction to SQL Azure Building Applications using SQL Azure Scaling Out with SQL Azure Demonstrations Preparing your SQL Azure Account Connecting to SQL Azure Managing Logins and Security in SQL Azure Creating Objects in SQL Azure Migrating a Database Schema to SQL Azure Moving Data Into and Out Of SQL Azure using SSIS Building a Simple SQL Azure App Scaling Out SQL Azure with Database Sharding Hands On Labs Migrating Applications to Windows Azure Introduction to SQL Azure Migrating Databases to SQL Azure Demonstrations and Hands On Labs require a sample database, so you must have a free trial or paid commercial SQL Azure account in which to create the database. type="note" You can find the SQL Azure – Getting Started forum at http://bit.ly/ARCwN, http://social.msdn.microsoft.com/forums/enUS/ssdsgetstarted/threads/. Obtaining and Redeeming an Azure Invitation Token for an SADB CTP Prior to SADB’s commercial release as a paid service in November 2009, early adopters need an invitation to join the current CTP by submitting a GUID token. If free accounts are still available when you read this book, go to the Microsoft Connect sign-up page at http://bit.ly/9W9Wd, https://connect.microsoft.com/site/sitehome.aspx?S iteID=547, complete the survey, and wait for an e-mail message from SQL Azure Talk (ssdstlk@microsoft.com), which directs you to visit https://sql.azure.com, where you sign in with a valid Windows Live ID and enter your invitation code (token), such as 53E249D7-56AE-AD22-AF02-5AD53784A47D in the text box (see Figure 12-1). type="note" The preceding invitation code isn’t valid. If you previously completed the survey to receive a token for the free SSDS or SDS trial, you won’t be able to complete the survey at this point but you should have received an e-mail invitation previously. If not and the free trial is still in effect, leave a message in the SQL Azure – Getting Started forum. Figure 12-1. The SQL Azure Portal’s Invitation Code page for creating a free trial account. [f1201.bmp] type="note" When this chapter was written, early SQL Azure adopters had requested continuation of free trial accounts for developers but it wasn’t known if Microsoft intended to do this. The portal page for creating a paid commercial SQL Azure account is likely to be similar to Figure 12-1. Clicking Submit with a free trial invitation token opens the Terms of Use page (see Figure 12-2). Figure 12-2. The SQL Azure Terms of Use page. [f1202.bmp] Review the Terms of Use and click I Accept, if you accept them, to open the Create Server page. SQL Azure requires assigning a Service Administrator account, equivalent to SQL Server’s sa account, with a username and password (see Figure 12-3). Free trial accounts are created only in the USA_Northwest (Quincy, Washington) data center; you can create paid commercial accounts in any other data center, such as USA_Southwest (San Antonio, Texas). type="note" On August 4, 2009, Microsoft announced that all Windows Azure accounts will be migrated from the Quincy data center to other U.S. data center(s) before starting commercial service in November 2009 due to a disagreement with the state of Washington about the payment of sales taxes on data center construction and hardware costs. SQL Azure uses SQL Server authentication only and doesn’t support Windows authentication. Figure 12-3. The SQL Azure Create Server page for assigning the Server Administrator Username and Password. [f1203.bmp] Click the Create Server button to open the My Projects page, which contains a Manage link for the SDS-Only CTP Project trial project’s assigned name or the name you selected for a paid commercial project (see Figure 12-4). Figure 12-4. The SQL Azure Portal’s My Projects management page. [f1204.bmp] Creating a User Database On the My Projects page, click the Manage link to open the Server Administration page, which enables you to add databases to or drop them from the server. Click Create Database to open a dialog that lets you name the user database (see Figure 12-5). Figure 12-5. The SQL Azure Portal’s Server Administration page for adding or dropping user databases. [f1205.bmp] type="note" The Server Administration page connects to the selected server’s default master database. SQL Azure assigns a DNS-compatible name to the server. SQL Azure doesn’t permit database administrators or users to add objects directly to master. Click Create to close the dialog, add the user database to the server, and enable the Drop Database button when you select a user database (see Figure 12-6). Figure 12-6. The SQL Azure Portal’s Server Administration page after adding an empty Northwind user database. [f1206.bmp] Alternatively, you can create or drop a user database by opening the master database in SSMS 2008 [Express] and executing a CREATE DATABASE DatabaseName or DROP DATABASE DatabaseName T-SQL command. type="note" The next section describes how to connect to databases with SSMS 2008 [Express]. You can’t connect to SQL Azure databases with SSMS 2005 [Express]. Clicking the upper Connection Strings button opens a message with ADO.NET, ODBC, and OLE DB connection strings for the Master database that you can copy to the Clipboard: ADO.NET Server=tcp:k8jv7gpmwb.ctp.database.windows.net;Database=master; User ID=rogerj;Password=myPassword;Trusted_Connection=False; ODBC Driver={SQL Server};Server=tcp:k8jv7gpmwb.ctp.database.windows.net;Database=master; Uid=rogerj;Pwd=myPassword; OLE DB Provider=SQLNCLI10;Server=tcp:k8jv7gpmwb.ctp.database.windows.net;Database=mast er; Uid=rogerj;Pwd=myPassword; type="note" The tcp: prefix specifies that the connection will use SQL Server’s native Tabular Data Stream (TDS) protocol over TCP port 1433. SQL Azure connections are encrypted by default; the server will terminate the connection if the client doesn’t accept encryption. Connection strings for paid commercial databases won’t include the ctp. segment. With a user database selected, click the lower Connection Strings button to open a message that contains examples of ADO.NET, ODBC, and OLE DB connection strings for the selected user database (see Figure 127): Figure 12-7. Connection strings for ADO.NET, ODBC, and OLE DB drivers for the Northwind database. [f1207.bmp] ADO.NET Server=tcp:k8jv7gpmwb.ctp.database.windows.net;Database=Northwind; User ID=rogerj;Password=myPassword;Trusted_Connection=False; ODBC Driver={SQL Server};Server=tcp:k8jv7gpmwb.ctp.database.windows.net; Database=Northwind;Uid=rogerj;Pwd=myPassword; OLE DB Provider=SQLNCLI10;Server=tcp:k8jv7gpmwb.ctp.database.windows.net; Database=Northwind;Uid=rogerj;Pwd=myPassword; Click the ADO.NET entry’s Copy to Clipboard link to save the connection string. type="note" The ability to migrate server connections from a local SQL Server 2008 [Express] instance to SADB in the cloud by simply changing the connection string is a widely publicized SADB feature. Connecting to SADB Master and User Databases with SSMS 2008 [Express] SSMS 2008 is the most convenient tool for executing single and batched T-SQL commands to the master and user databases. Unfortunately, the standard SSMS 2008 [Express] version’s Object Browser feature isn’t compatible with the SADB August 2009 CTP; you’ll also encounter error messages during the connection process. type="note" The team expects to provide support for additional SSMS features in the commercial version scheduled for release in mid-November 2009. SADB wasn’t compatible with the Server Explorer feature of Visual Studio 2008 or 2010 Beta 1 when this chapter was written. You need SQL Server 2005 or 2008 [Express] to emulate SADB in projects that use the Development Fabric. A standalone version of SSMS 2008 Express is available from http://bit.ly/PECbN, https://www.microsoft.com/downloads/details.aspx?Family ID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b&displaylang=en. SSMS 2005 [Express] doesn’t work with SADB. To connect to the SADB server that you provisioned in the preceding section with standard SSMS 2008 versions, launch SSMS 2008 [Express] and click Cancel in the Connect to Database dialog that opens on startup. Choose Tools, Options to open the Options dialog with the Environment, General option selected by default, change the Open New Query Window in the At Startup list, and click OK to save the change. type="note" If you attempt to connect to SADB from SSMS startup, you receive the “Invalid object name ‘sys.configurations’.” error message shown in Figure 12-8. Figure 12-8. The error message generated by attempting to connect to SADB on opening an unpatched SSMS version. [f1208.bmp] Click SSMS’s New Query toolbar button to open the Connect to Database dialog; accept the default Database Engine Server Type; copy the ADO.NET connection string sample to the Server Name text box, trim the entry to the server name, including the tcp: prefix; and (optionally) mark the Remember Password check box. Select SQL Server Authentication in the Authentication list, and type the server administrator credentials you created in the preceding section in the Login and Password text boxes (see Figure 12-9). Figure 12-9. Specifying SADB login parameters in the standard Connect to Database dialog. [f1209.bmp] SADB doesn’t support the T-SQL USE command and, therefore, requires you to specify the database to which to connect. So, click the Options >> button to expand the dialog. Accept the <default> or type master for the master database or the name of an existing user database in the Connect to Database combo box, and mark the Encrypt Connection check box (see Figure 12-10). Figure 12-10. Specifying the SADB database for an encrypted connection. [f1210.bmp] type="note" SADB connections are encrypted with Transport Level Security (TLS) by default but marking[I prefer the en-uk term “tick”] the Encrypt Connection check box will please your organization’s data security auditors. Click Connect to open the connection and click OK to dismiss the spurious “Unable to apply connection settings” message (see Figure 12-11). Figure 12-11. Connecting to an unpatched SADB database issues this error message, which you can safely disregard. [f1211.bmp] If the user database you specified in the Connect to Database dialog doesn’t exist, the connection will silently default to the master database, which is indicated by the presence of CloudNode.MasterDb in the highlighted Available Databases toolbar list and in the status bar. To create the user database, execute the CREATE DATABASE DatabaseName command (see Figure 12-12). Figure 12-12. The Available Databases list and status bar identify the connection’s database name. [f1212.bmp] type="note" An active connection to a user database is indicated by CloudNode.dbo.UserDb[…] replacing CloudNode.MasterDb in the Available Databases list and status bar. To conserve resource consumption, SADB automatically closes connections after five minutes of inactivity. To reopen a closed connection click the Connect or Change Connection buttons at the extreme left of the SQL Editor toolbar. Using the sqlcmd Utility with SADB The sqlcmd utility is an alternative to SSMS that lets you manage database connections at the command prompt. The following instruction with valid server administrator credentials typed or pasted at the Windows command prompt opens a connection to the Northwind database running on the SADB server created earlier in the chapter: sqlcmd -S k8jv7gpmwb.ctp.database.windows.net -U rogerj@k8jv7gpmwb -P Pas$w0rd -d Northwind The following table describes common sqlcmd command-line arguments: Argument -? -S -U -P -d -i -o Description Show syntax summary Server (use complete DNS name) Server administrator name in login@servername (name only) format Server administrator password User database name (default is master) Query input (T-SQL) file path\name Query output file path\name Figure 12-13 shows the result of executing sqlcmd -?. Figure 12-13. The Windows command prompt displaying the sqlcmd syntax summary. [f1213.bmp] After connecting to SADB, executing T-SQL statements and batched queries with sqlcmd is a simple process. At the sequentially numbered #> prompt, type a valid T-SQL command, and press Enter. Type GO and press Enter to execute the preceding command(s) and reset the prompt number to 1. Type quit or exit to close the session. Figure 12-14 shows sqlcmd’s window after executing the SELECT name FROM sys.tables command against the Northwind database you create with SSMS and a modified version of the InstNwind.sql script in the next chapter. Figure 12-14. Using sqlcmd to display a list of table names in a sample Northwind database. [f1214.bmp] Comparing SADB with SQL Server 2008 R2 Databases SADB servers and databases are virtual objects abstracted from a customized, multi-tenant version of clustered SQL Server instances and don’t correspond to individual physical server instances. Therefore, you administer databases, tables, indexes, tuning, query optimization, logins, users, and roles but not physical storage, such as servers, files, and fixed disk drives. SADB automatically handles data replication and loadbalancing for high availability, including transparent fail-over when a server dies. Backup is handled by data replication; restore operations after data loss or corruption are automatic. SADB blocks statements and options that attempt to directly manipulate physical resources, such as RESOURCE GOVERNOR, filegroup references, and some physical server DDL statements. Attempts to set server options, such as SET ANSI_NULLS ON, generate error messages. CRL database objects, SQL Service Broker, SQL trace flags, SQL Server Profiler and Database Tuning Advisor tools and utilities aren’t available. Deprecated data types, such as text, ntext, and image aren’t supported but you can substitute varchar(max), nvarchar(max), and varbinary(max) for them, as you’ll see in the next chapter. SADB currently doesn’t permit use of SQL Server 2008’s geography and geometry spatial data types. If you need to encrypt data, you must do so in the client application; SADB doesn’t support the column-level or rowlevel encryption introduced by SQL Server 2005 or SQL Server 2008’s Transparent Data Encryption (TDE). The “Transact-SQL Reference” chapter of MSDN’s SQL Azure documentation (http://bit.ly/15Ja0Q, http://msdn.microsoft.com/enus/library/ee336281.aspx) includes tables that list supported, partially supported, and unsupported T-SQL statements. Summary SQL Azure Database is the basic element of SQL Azure. SADB provides a highly scalable and available relational database as a public cloud computing resource running together with the Windows Azure Platform in Microsoft’s newly constructed data centers, except at Quincy, Washington. The SADB Web Edition supports transactional-consistent databases up to 1GB in size; the Business Edition is limited to 10GB or less. SADB grew out of early adopters’ dissatisfaction with technical previews of SQL Server Data Services (SSDS), which offered a flexible, highly scalable, schemaless Entity-Attribute-Value data model but was missing the relational features that IT groups and developers expected from a service carrying the SQL Server name. In March 2009, Microsoft announced that SSDS would morph to a fully relational version called SQL Data Services (SDS), which enable developers to leverage their data architecture and Transact-SQL skills. SDS became SQL Azure Database in July 2009 and the first SADB CTP became available to invitees on August 17, 2009. The CTP version required requesting an invitation from the Microsoft Connect site that resulted in a token, which was redeemable from the SQL Azure portal for a single server with multiple databases at no charge. The commercial version, which is expected to release in midNovember 2009 at Microsoft’s Professional Developers Conference in Los Angeles, will require a credit card to cover a charge of US$9.99 per month (Web Edition) or US$99.99 per month (Business Edition), plus US$0.10 per GB of data ingress and US$0.15 per GB of data egress. SADB auto-assigns a unique DNS address to each server. SQL Server Management Studio 2008 [Express] and the sqlcmd command-line utility connect to SADB with the TCP protocol on port 1433 using SQL Server’s traditional Tabular Data Stream format via encrypted transmissions. Using TDS lets developers change from connections to local SQL Server 2005 or 2008 [Express] instances for development to SADB databases in the cloud simply by changing the connection string. Future modifications to SSMS 2008 [Express] will result in SADB gaining fullfeatured management by SSMS. Microsoft manages SADB’s physical infrastructure, such as server instances, disk drives and files, as well as backup and restore operations, so many T-SQL DDL commands aren’t supported. However, developers have full control over databases, tables, indexes, tuning, query optimization, logins, users, and roles. SADB doesn’t support deprecated and new SQL Server 2008 spatial datatypes, nor does it offer data encryption.