SQL Server 2008 R2 SP1升级到SQL Server 2012后的注意事项

1.      CLR Procedure

SqlMsmq.dll需要重新注册.并且目录需要改到.net Framework 4.0目录中

drop proc MSMQSend

drop assembly [Message];

 

CREATE assembly Message

AUTHORIZATION dbo

from 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\SqlMsmq.dll'

with permission_set = unsafe

GO

 

CREATE PROCEDURE MSMQSend

@queuePath  nvarchar(200),

@messageLabel nvarchar(300),

@messageBody    nvarchar(MAX)

AS

EXTERNAL NAME Message.[SqlMsmq.SqlMsmq].SendMessage;

GO

 

 

2.      Service Broker

SSB 支持2012版本与2008版本的互相通讯.不受版本的影响.

两个instance的Service Broker可能出现的情况:

a)         当Cluster Nodes Move到另外一个节点以后,由于作为source 的conversation handle已经被重置,同时还未发送成功的消息(即还停留在sys.transmission_queue中的消息也会被清空),所以没有办法使用以前的conversation了.所以在升级以前需要做一些手工处理.

                       i.              在升级Current Node前,需要先防止再往Service Broker的发送队列中添加消息.

                     ii.              清理DialogPool中的缓存: Truncate table SSBInitiator.dbo.DialogPool(WmsDialogPool,WmsTarget.dbo.WmsDialogPool);

3.      Linked Server

Linked Server由于Provide的修改,原来使用的SQLNCLI10需要显示地指定分布式事务(无论是在查询或者更新的时候).所以在升级为2012以后,需要把linked Server重置配置一下.将Provide设置成SQLOLEDB.

4.      Agent Job

正在执行的Agent Job,由于cluster node的move,将会被cancel掉.此时,将不会发出agent job失败的mail.所以在升级完成以后,需要检查一下,当下是不是有什么agent job被cancel掉了.

5.      语法上的注意事项

如下语句,在本地发现了一个bug:

;WITH result AS(

   SELECT TOP(10) *

   FROM [dbo].[Product] AS p WITH(NOLOCK)

)

SELECT * FROM [result]

由于with result as是Execute中新增的子句,当cte使用这样的别名的时候,就会出现错误:

Msg 102, Level 15, State 1, Line 2

Incorrect syntax near 'result'.

posted @ 2013-02-05 11:38  老玉米  阅读(3878)  评论(0编辑  收藏  举报