Share via


Alterações em recursos do Mecanismo de Banco de Dados que causam interrupção no SQL Server 2008

Este tópico descreve alterações de quebra no Mecanismo de Banco de Dados. Essas alterações podem danificar aplicativos, scripts ou funcionalidades baseados em versões anteriores do SQL Server. Talvez você encontre esses problemas ao atualizar. Para obter mais informações, consulte Usando o Supervisor de Atualização para preparar para atualizações.

Agrupamentos

Recurso

Descrição

Novos agrupamentos

O SQL Server 2008 introduz novos agrupamentos totalmente alinhados aos agrupamentos fornecidos pelo Windows Server 2008. Esses 80 novos agrupamentos melhoraram a exatidão lingüística e foram indicados por referências à versão *_100. Se você escolher um agrupamento novo para o servidor ou para o banco de dados, lembre-se de que o agrupamento pode não ser reconhecido pelos clientes com drivers de clientes mais antigos. Agrupamentos não reconhecidos podem fazer com que o aplicativo retorne erros e apresente falhas. Considere as seguintes soluções:

  • Atualize o sistema operacional do cliente para que os agrupamentos de sistemas subjacentes sejam atualizados.

  • Se houver um software cliente do banco de dados instalado no cliente, considere a possibilidade de aplicar uma atualização de serviço ao software cliente do banco de dados.

  • Escolha um agrupamento existente, mapeado para uma página de código no cliente.

Para obter mais informações, consulte Definindo e alterando agrupamentos.

CLR (Common Language Runtime)

Recurso

Descrição

Assemblies do CLR

Quando um banco de dados é atualizado para SQL Server 2008, o assembly do Microsoft.SqlServer.Types para dar suporte a novos tipos de dados é instalado automaticamente. As regras do Supervisor de Atualização detectam qualquer tipo de usuário ou assemblies de usuário com nomes conflitantes. O Supervisor de Atualização aconselhará renomear qualquer assembly em conflito, bem como qualquer tipo em conflito, ou usar nomes de duas partes no código para fazer referência a esse tipo de usuário preexistente.

Se uma atualização de banco de dados detectar um assembly de usuário com um nome conflitante, ele o renomeará automaticamente e o colocará no banco de dados em modo de suspeição.

Se existir um tipo de usuário com nome conflitante durante a atualização, nenhuma etapa especial será efetuada. Depois da atualização, existirão o tipo de usuário antigo e o novo tipo do sistema. O tipo de usuário estará disponível somente por meio de nomes de duas partes.

Assemblies CLR

O SQL Server 2008 instala o .NET Framework 3.5 SP1, que atualiza bibliotecas no GAC (cache de assembly global). Se você tiver bibliotecas sem suporte registradas em um banco de dados do SQL Server, o aplicativo do SQL Server poderá parar de funcionar após a atualização para o SQL Server 2008. Isso ocorre porque o serviço de reparo ou a atualização de bibliotecas no GAC não atualiza os assemblies dentro do SQL Server. Se existir um assembly em um banco de dados do SQL Server e no GAC, as duas cópias do assembly devem ser idênticas. Caso isso não aconteça, ocorrerá um erro quando o assembly for usado pela integração CLR do SQL Server. Para obter mais informações, consulte Bibliotecas do .NET Framework compatíveis.

Depois de atualizar o banco de dados, mantenha ou atualize a cópia do assembly dentro dos bancos de dados do SQL Server com a instrução ALTER ASSEMBLY. Para obter mais informações, consulte o Artigo 949080 da Base de Dados de Conhecimento.

Para detectar se você está usando uma biblioteca do .NET Framework sem suporte no aplicativo, execute a seguinte consulta no banco de dados.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Rotinas CLR

O uso da representação dentro de funções CLR definidas pelo usuário, de agregações definidas pelo usuário ou de UDTs (tipos definidos pelo usuário) pode causar o erro 6522 no aplicativo após a atualização para o SQL Server 2008.

Os cenários a seguir são executados com êxito no SQL Server 2005, mas falham no SQL Server 2008. São apresentadas resoluções para cada cenário.

  1. Uma função CLR definida pelo usuário, uma agregação definida pelo usuário ou um método UDT que utiliza representação tem um parâmetro de tipo nvarchar(max), varchar(max), varbinary(max), ntext, text, image ou um UDT grande e não tem o atributo DataAccessKind.Read no método.

    Para resolver este problema, adicione o atributo DataAccessKind.Read ao método, recompile o assembly e reimplante a rotina e o assembly.

  2. Uma função CLR com valor de tabela que tem um método Init que executa representação.

    Para resolver este problema, adicione o atributo DataAccessKind.Read no método, recompile o assembly e reimplante a rotina e o assembly.

  3. Uma função CLR com valor de tabela que tem um método FillRow que executa representação.

    Para resolver este problema, remova a representação do método FillRow. Não acesse recursos externos usando o método FillRow. Em vez disso, acesse recursos externos do método Init.

Exibições de gerenciamento dinâmico

Exibição

Descrição

sys.dm_os_sys_info

Foram removidas as colunas cpu_ticks_in_ms e sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

A coluna resource_semaphore_id não é uma ID exclusiva no SQL Server 2008. Essa alteração pode afetar a solução de problemas da execução de consultas. Para obter mais informações, consulte sys.dm_exec_query_resource_semaphores (Transact-SQL).

Erros e eventos

Recurso

Descrição

Erros de logon

No SQL Server 2005, o erro 18452 é retornado quando um logon do SQL é usado para conexão a um servidor configurado para usar somente a Autenticação do Windows. No SQL Server 2008, o erro 18456 é retornado.

Plano de execução

Recurso

Descrição

Esquema Showplan XML

Um novo elemento SeekPredicateNew é adicionado ao esquema Showplan XML, e a seqüência de xsd de inclusão (SqlPredicatesType) é convertida em um item <xsd:choice>. Em vez de um ou mais elementos SeekPredicate, um ou mais elementos SeekPredicateNew podem aparecer agora no Showplan XML. Os dois elementos são mutuamente exclusivos. SeekPredicate é mantido no esquema Showplan XML para compatibilidade com versões anteriores. No entanto, os planos de consulta criados no SQL Server 2008 podem conter o elemento SeekPredicateNew. Os aplicativos que esperam recuperar somente o filho de SeekPredicate do nó ShowPlanXML/BatchSequence/Lote/Instruções/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates poderá falhar, se o elemento SeekPredicate não existir. Reescreva o aplicativo para esperar o elemento SeekPredicate ou SeekPredicateNew neste nó. Para obter mais informações, consulte Aperfeiçoamentos de processamento de consultas em tabelas e índices particionados.

Esquema Showplan XML

Um novo atributo IndexKind é adicionado ao tipo complexo de ObjectType no esquema do Showplan XML. Haverá falha nos aplicativos que validam estritamente os planos do SQL Server em relação ao esquema do SQL Server 2005.

Transact-SQL

Recurso

Descrição

Evento DDL ALTER_AUTHORIZATION_DATABASE

No SQL Server 2005, quando o evento DDL ALTER_AUTHORIZATION_DATABASE é acionado, o valor 'object' é retornado no elemento ObjectType do xml EVENTDATA para esse evento quando o tipo de entidade do protegível na operação de linguagem de definição de dados (DDL) é um objeto. No SQL Server 2008, o tipo real (por exemplo, 'table' ou 'function') é retornado.

CONVERT

Se um estilo inválido for passado para a função CONVERT, será retornado um erro quando o tipo de conversão for de binário em caractere ou de caractere em binário. Em versões anteriores do SQL Server, o estilo inválido era definido como o estilo padrão para conversões de binário em caractere e de caractere em binário.

GRANT/DENY/REVOKE EXECUTE em assemblies

A permissão EXECUTE não pode ser concedida, negada ou revogada para assemblies. Essa permissão não tem nenhum efeito e agora provoca um erro. Em vez disso, conceda, negue ou revogue a permissão EXECUTE nos procedimentos armazenados ou nas funções que fazem referência ao método de assembly.

Permissões GRANT/DENY/REVOKE em tipos de sistema

As permissões não podem ser concedidas, negadas ou revogadas para tipos de sistema. Em versões anteriores do SQL Server, essas instruções tinham êxito, mas não tinham nenhum efeito. No SQL Server 2008, um erro é retornado.

Cláusula OUTPUT

Para evitar comportamento não-determinístico, a cláusula OUTPUT não pode fazer referência a uma coluna de uma exibição ou função com valor de tabela embutida quando essa coluna é definida por um dos seguintes métodos:

  • Uma subconsulta.

  • Uma função definida pelo usuário que executa acesso a dados de usuário ou de sistema ou que supostamente executa tal acesso.

  • Uma coluna computada que contém em sua definição uma função definida pelo usuário que executa acesso a dados de usuário ou de sistema.

Quando o SQL Server detecta essa coluna na cláusula OUTPUT, o erro 4186 é gerado. Para obter mais informações, consulte MSSQLSERVER_4186.

Cláusula OUTPUT INTO

A tabela de destino da cláusula OUTPUT INTO não pode ter gatilhos habilitados.

Opção no nível de servidor classificação pré-computada

Esta opção não tem suporte no SQL Server 2008. Modifique os aplicativos que usam este recurso o mais rápido possível.

Dica de tabela READPAST

A dica de tabela READPAST não pode ser especificada quando a opção do banco de dados READ_COMMITTED_SNAPSHOT está definida como ON e qualquer uma das condições a seguir é verdadeira:

  • O nível de isolamento da transação da sessão é READ COMMITTED.

  • A dica de tabela READCOMMITTED também é especificada na consulta.

Para especificar a dica READPAST nesses casos, remova a dica de tabela READCOMMITTED, se ela estiver presente, e inclua a dica de tabela READCOMMITTEDLOCK na consulta.

sp_helpuser

Os seguintes nomes de colunas que são retornados no conjunto de resultados do procedimento armazenado sp_helpuser foram alterados.

Nome da coluna anteriorNome da nova coluna
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_in_role

Criptografia Transparente de Dados

A criptografia transparente de dados (TDE) é executada no nível de E/S: a estrutura da página é descriptografada na memória e criptografada somente quando a página é gravada no disco. Os arquivos de banco de dados e os arquivos de log são criptografados. Os aplicativos de terceiros que ignoram o mecanismo regular do SQL Server para acessar páginas (por exemplo, verificando os dados ou os arquivos de log diretamente), falharão quando um banco de dados usar TDE porque os dados estão criptografados nos arquivos. Esses aplicativos podem aproveitar a API Criptográfica do Windows para desenvolver uma solução para descriptografar os dados fora do SQL Server.

XQuery

Recurso

Descrição

Suporte à data/hora

No SQL Server 2005, os tipos de dados xs:time, xs:date e xs:dateTime não têm suporte para fuso horário. Os dados de fuso horário são mapeados para o fuso horário de UTC. O SQL Server 2008 fornece comportamento de conformidade padrão, o que resulta nas seguintes alterações:

  • Os valores sem fuso horário são validados.

  • O fuso horário fornecido ou a ausência de um fuso horário é preservada.

  • A representação de armazenamento interna é modificada.

  • A resolução de valores armazenados é aumentada.

  • Anos negativos não são permitidos.

Modifique os aplicativos e as expressões XQuery para considerar os novos valores de tipo. Para obter mais informações, consulte Usando XML com tipos de dados de hora, data, datetime2 e datetimeoffset.

Expressões XQuery e Xpath

No SQL Server 2005, as etapas em uma expressão XQuery ou XPath que começam com dois-pontos (':') são permitidas. Por exemplo, a instrução a seguir contém um teste de nome (CTR02) dentro da expressão de caminho que começa com um dois pontos.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

No SQL Server 2008 esse uso não é permitido porque não está de acordo com os padrões XML. O erro 9341 é retornado. Remova o dois pontos iniciais ou especifique um prefixo para o teste de nome, por exemplo, (n$/CTR02) ou (n$/p1:CTR02).

Histórico de alterações

Conteúdo atualizado

Alteração de quebra adicionada para expressões XQuery e Xpath.