简化SQL Server 备份和还原到云

作者信息: 该帖是由MicrosoftData Platform组的GuyBowerman 和 Karthika Raman所著。

SQL Server 2012 SP1 Cumulative Update 2有一项新功能,可以简化当从户内平台SQL Server到 Windows Azure 时的SQL Server 数据库备份和还原能力。现在,您可以直接使用 SQL Server Native Backup创建备份到Windows Azure Storage。请参阅下面的内容来获得新功能的简介,点击链接了解详细。

要下载更新,请转到SQLRelease Services Blog

概述:

除了硬盘和磁带,现在您可以使用 SQL Server 的本机备份功能来备份您的 SQL Server Database到 Windows AzureBlob 存储服务。在此版本中,您可以使用 T-SQL 和SMO备份到Windows AzureBlob存储。在SQL Server 户内实例上的SQLServer Databases或在宿主环境中,如运行在 Windows Azure VMs上的 SQL Server 实例都可以利用此功能。

好处:

· 灵活、 可靠和无限的线下存储来提高灾难恢复: 将您的备份存储在 Windows AzureBlob 服务上是一种方便、 灵活且易于访问线下的选择。创建您的 SQL Server 备份的线下存储就像修改您现有的脚本/作业一样容易。线下存储通常距正式数据库的位置足够远,以防止单一的灾难可能会把线下和正式数据库的位置都影响到。您还可以还原备份到运行在 Windows Azure Virtual Machine上的SQL Server Instance,用于户内数据库的灾难恢复。万一灾难发生了,选择geo replicate Blob存储,将产生一个额外的保护层,该保护层可以影响整个区域。另外,随时随地您都可以很容易地读取备份来进行恢复。

· 备份存档: Windows AzureBlob Storage服务提供了更好的一个办法为那些经常使用磁带来存档备份的用户。磁带存储可能需要物理上传输到一个外部设施并且还要保护这些媒体不受破坏。在 Windows Azure Blob Storage上存储备份为您提供了一种即时、 高度可用和持久的存档方法。

· 没有硬件管理的开销: 使用Windows Azure存储服务就没有了硬件的管理开销。Windows Azure 服务管理硬件,并为geo-replication保证冗余和提供针对硬件故障的保护。

· 目前,通过创建附带的磁盘就可以将运行在 WindowsAzure Virtual Machine的 SQL Server 实例备份到 Windows Azure Blob 存储服务上。然而,可以附加到 Windows Azure 虚拟机的磁盘数量是有限制的。最大实例不超过16 个。如果直接备份到 WindowsAzure Blob Storage,可以不拘于最大16 个磁盘的限制。

· 此外,存储在 Windows AzureBlob 存储服务中的备份文件可以直接提供给户内 SQL Server或其他运行在 Windows Azure Virtual Machine上的SQL Server,不需要数据库连接/分离或下载再附加 VHD的操作了。

· 成本效益: 只需支付所用的服务。是线下备份存档节省成本的一种方法。Windows Azure pricing calculator可以帮助您估计成本。

存储: 收费会依据您使用的空间,服务器的数量和冗余级别而定价。更多详细和最新的信息,请参阅PricingDetailsData Management 章节。

数据传输:入站数据传输到 Windows Azure是免费的。出站传输根据带宽使用情况,并根据累进特定区域的量而收费。更多详细信息,请参阅条PricingDetailsDataTransfers章节。

它是如何工作的:

备份到 Windows Azure Storage设计得像一个备份设备(磁盘/磁带)。使用 MicrosoftVirtual Backup Device Interface (VDI),Windows Azure Blob存储被编码成"虚拟备份设备",用于访问 Blob 存储的 URL 格式则被视为一种设备。支持 Azure 存储作为目标设备的主要原因是它提供了一致和天衣无缝的备份和还原的过程,类似于我们现在的磁盘和磁带。

当备份或还原过程被调用,并指定 Windows AzureBlob 存储使用 URL"设备类型"时,引擎就会调用VDI 客户端进程,这也是该特征的一部分。备份数据被发送到 VDI 客户端进程,并再被发送到 Windows AzureBlob 存储。

如上所述,URL 像我们现在使用的备份设备一样,但它并不是一个物理设备,所以有一些限制。有关它支持的方法的全部清单,请参阅SQLServer Backup and Restore with Windows Azure Blob Storage Service

如何使用它

要写一个Windows AzureBlob 存储的备份,您必须首先创建一个 Windows Azure Storage帐户,再创建一个 SQL Server Credential保存存储帐户的身份验证信息。使用TRANSACT-SQL 或SMO就可以发出备份和还原命令了。

下面的 TRANSACT-SQL 示例介绍了创建凭据、 做完整的数据库备份和从完整数据库备份还原数据库的过程。有关创建存储帐户和执行简单还原操作的完整的实例,请参见Tutorial:Getting Started with SQL Server Backup and Restore to Windows Azure BlobStorage Service

创建凭据

下面的示例演示了如何创建一个存储 Windows Azure Storage身份验证信息的凭据。

备份完整的数据库

下面的示例演示了如何备份 AdventureWorks2012 数据库到 Windows Azure Blob 存储服务上。

还原数据库

若要还原完整的数据库备份,请按以下步骤操作。

资源:

Concepts/Script Examples

Best Practices /Troubleshooting

Getting Started Tutorial

请将您针对该功能提出的反馈意见和(或)文档发送到karaman@microsoft.com或 guybo@microsoft.com。

Reference: http://blogs.msdn.com/b/windowsazure/archive/2013/01/24/sql-server-backup-and-restore-to-cloud-simplified.aspx

<think>好的,我现在需要帮助用户解决SQL Server中的错误102:“Incorrect syntax near '<'”。首先,我需要理解这个错误通常是什么原因引起的。根据之前的引用资料,比如引用[2]提到的CTE错误是因为在WITH前有其他语句没有用分号分隔,引用[4]中的参数占位符问题,可能类似的语法错误都是由于SQL语句结构不正确导致的。 用户提到错误发生在'<'符号附近,这可能意味着在SQL语句中存在不合法的比较运算符,或者在字符串中没有正确转义尖括号。比如,可能在写动态SQL或者XML查询时,没有正确使用尖括号,或者在比较的时候错误地使用了'<'而没有空格,导致解析错误。 接下来,我需要考虑常见的解决方案。首先,检查'<'周围的上下文,确认是否在比较表达式中正确使用,例如WHERE age < 30,这里可能需要确认是否有空格或者正确的语法结构。其次,如果是在字符串或XML中使用'<‘,可能需要转义或者使用CDATA标签。此外,检查是否有未闭合的括号或引号,这可能导致解析器误判后续的'<'符号位置。 另外,参考引用[3]中关于关键字'user'的错误,可能是因为使用了保留关键字作为表名或列名而没有用方括号括起来。虽然用户当前的错误是关于'<',但也需要确认'<'周围是否有其他保留关键字需要处理。 还需要考虑参数化查询的问题,如引用[4]中的例子,使用参数占位符时是否正确,比如在TOP后面使用参数可能导致问题,可能需要用动态SQL拼接。或者检查是否有拼写错误或缺少逗号、括号等。 最后,总结可能的解决方案,分步骤给出,并提醒用户检查常见错误点,比如符号周围的空格、保留字、参数使用等。同时,根据用户提供的引用资料中的案例,可能需要检查语句前的其他语句是否缺少分号,但用户当前的错误在'<'附近,这可能不适用,但可以作为补充建议。</think>针对SQL Server错误102 "Incorrect syntax near '<'",以下是分步解决方案: ### 错误原因分析 该错误通常由以下情况引起: 1. 比较运算符`<`使用不规范,如`WHERE id<5`缺少空格 2. XML/HTML片段未正确转义,如`SELECT '<tag>'`未处理特殊字符 3. 动态SQL拼接错误,如`EXEC('SELECT * FROM table WHERE id < ' + @value)` 4. 保留关键字冲突,如`SELECT <from>`未标识关键字 ### 解决方案步骤 1. **检查运算符格式** ```sql -- 错误示例 WHERE age<30 -- 正确写法(添加空格) WHERE age < 30 ``` 运算符两侧必须保留空格[^2] 2. **处理特殊字符** ```sql -- 错误示例 SELECT '<header>content</header>' -- 正确写法(XML类型转换) SELECT CAST('<header>content</header>' AS XML) ``` 或使用转义字符: ```sql SELECT '<tag>' -- HTML实体编码 ``` 3. **验证动态SQL** ```sql DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM Orders WHERE OrderDate < ''' + CONVERT(NVARCHAR(20), GETDATE(), 120) + '''' EXEC sp_executesql @sql ``` 确保字符串正确拼接,日期值需显式转换[^4] 4. **标识保留关键字** ```sql -- 错误示例 CREATE TABLE test (from NVARCHAR(50)) -- 正确写法(使用方括号) CREATE TABLE test ([from] NVARCHAR(50)) ``` 5. **检查上下文语法** - 确认`<`符号前没有未闭合的括号 - 验证语句中`SELECT/UPDATE/DELETE`子句顺序 - 检查是否存在缺失的逗号分隔符 ### 验证示例 错误语句: ```sql SELECT * FROM employees WHERE salary<5000 AND department='IT' ``` 修正后: ```sql SELECT * FROM employees WHERE salary < 5000 AND department = 'IT' ``` ### 其他注意事项 - 使用SSMS的`Parse Query`功能预检语法 - 分步执行多语句查询时,确保语句间用分号分隔[^2] - 参数化查询时验证变量类型匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值