CORRECÇÃO: Vários problemas ocorrem quando utiliza um servidor ligado que foi criado pelo fornecedor de SQL Native Client do SQL Server 2008

Modelo: Correcção genérica

BUGS #: do 127399 (Manutenção do conteúdo)erros #: 401247 (SQL VSTS)

A Microsoft distribui correcções do Microsoft SQL Server 2008, como um ficheiro para transferência. Uma vez que as correcções são cumulativas, cada nova versão inclui todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008.

Sintomas

Num computador que esteja a executar o Microsoft SQL Server 2008, detecta um ou mais dos seguintes problemas quando criar um servidor ligado utilizando o fornecedor de SQL Native Client (Sqlncli.dll).

Nota Estes problemas também ocorrem no Microsoft SQL Server 2005 Service Pack 3 (SP3). No entanto, a correcção incluída neste artigo não se aplica ao SQL Server 2005 SP3.

Problema 1

Considere o seguinte cenário:

  • No SQL Server Management Studio, abra a janela de novo servidor ligado e criar um servidor ligado, utilizando um das seguintes configurações:

    • Fornecedor de SQL Native Client com tipo de servidor de SQL Server

    • Fornecedor de SQL Native Client (não SQL nativo cliente 10), com tipo de servidor de outra origem de dados

    • Fornecedor Microsoft OLE DB para SQL Server com tipo de servidor de outra origem de dados

  • Expanda o catálogo de Servidores ligados no SQL Server Management Studio para ver os servidores ligados.

Neste cenário, o serviço SQL Server encerra inesperadamente ou é gerado um ficheiro de informação mini várias vezes na pasta de registo de erros do SQL Server. Este problema continua até que seja parado o serviço SQL Server. Além disso, o SQL Server Management Studio comunica o seguinte erro:

Título: Microsoft SQL Server Management Studio
------------------------------
Falha ao obter dados para este pedido. (Microsoft.SqlServer.Management.Sdk.Sfc)

Para obter ajuda, clique em: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476
------------------------------
OBTER INFORMAÇÕES ADICIONAIS:
Ocorreu uma excepção ao executar uma instrução Transact-SQL ou batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------

Tempo limite expirou. O tempo limite decorreu antes da conclusão da operação ou o servidor não está a responder. (Microsoft SQL Server, erro: -2)



Nota Este problema não ocorre se executar uma consulta de servidor ligado quando utiliza o fornecedor de SQL Native Client com tipo de servidor que o SQL Server.

Problema 2

Considere o seguinte cenário:

  • Criar um servidor ligado utilizando o Microsoft OLE DB Provider para controladores ODBC.

  • A origem de dados ODBC é criada utilizando o fornecedor de cliente nativo SQL com o tipo de servidor como outra origem de dados.

Neste cenário, o servidor ligado não retorna nenhum resultado.

Resolução

A correcção deste problema publicada pela primeira vez na actualização cumulativa 7 para SQL Server 2008 Service Pack 1. Para mais informações sobre este pacote de actualização cumulativa, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:-

979065 Pacote de actualização cumulativa 7 para SQL Server 2008 Service Pack 1
Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008. Recomendamos que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:-

970365 Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Correcções do Microsoft SQL Server 2008 são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

Mais informações

Pode confirmar a versão dos ficheiros Sqlncli.dll e Sqlservr.exe por executar consulta seguinte:

select * from sys.dm_os_loaded_modules where name like '%sqlncli.dll' or name like '%sqlservr.exe'

Se estiver a utilizar o Microsoft SQL Server 2008 Service Pack 1 (SP1) ou versões posteriores do Microsoft SQL Server 2008, a consulta irá devolver as seguintes informações de versão:

  • O ficheiro de Sqlncli.dll terá uma versão posterior 9.0:3207.0.

  • O ficheiro de Sqlservr.exe tem uma versão posterior ou igual a 10.0:2531.0, mas anteriormente que 10.0:2766.0.

Se estiver a utilizar o Microsoft SQL Server 2008 RTM ou versões posteriores do SQL Server 2008 RTM, a consulta irá devolver as seguintes informações de versão:

  • O ficheiro de Sqlncli.dll tem uma versão posterior à versão 9.0:3207.0.

  • O ficheiro de Sqlservr.exe tem uma versão posterior ou igual a 10.0:1600.0, mas anteriormente que 10.0:1835.0.

Pode executar o script seguinte para detectar se um servidor ligado encontrará os problemas descritos na secção "Sintomas":

declare @ServerName sysnamedeclare @ProductName sysname
declare @ProviderName sysname
declare crs cursor local fast_forward
for ( SELECT srv.name AS [Name], srv.product AS[ProductName], srv.provider AS [ProviderName]
FROM sys.servers AS srv
WHERE (srv.server_id != 0)and(srv.name='<Server Name>') )
open crs
fetch crs into @ServerName,@ProductName,@ProviderName
while @@fetch_status >= 0
begin
create table #tmp_catalog_exist_test (id int null,[description]sysname null,flags varchar null)
insert into #tmp_catalog_exist_test(id,[description],flags)
EXEC master.dbo.xp_prop_oledb_provider @ProviderName
fetch crs into @ServerName,@ProductName,@ProviderName
end
deallocate crs
go

Chamada dois stacksfrom SQL Server 2008 SP1 (compilação 10.0.2531.0):ChildEBP RetAddr 4603aeac 02c79496 kernel32!RaiseException+0x53
4603aef8 02703706 sqlservr!CDmpDump::Dump+0x95
4603af34 02703e6d sqlservr!SQLDumperLibraryInvoke+0x169
4603b028 026f9cf0 sqlservr!CImageHelper::DoMiniDump+0x2b0
4603bddc 026f95f5 sqlservr!stackTrace+0x693
4603bdfc 02a0e2e4 sqlservr!stackTraceCallBack+0x40
4603c08c 78158c0e sqlservr!ex_terminator+0x85
4603c0d8 78158576 msvcr80!_CallSETranslator+0xa3
4603c10c 7815894b msvcr80!FindHandlerForForeignException+0x58
4603c16c 78158a57 msvcr80!FindHandler+0x33b
4603c1a0 78158b11 msvcr80!__InternalCxxFrameHandler+0xd9
4603c1dc 7c828772 msvcr80!__CxxFrameHandler3+0x26
4603c200 7c828743 ntdll!ExecuteHandler2+0x26
4603c2a8 7c82857e ntdll!ExecuteHandler+0x24
4603c2a8 0154c80b ntdll!KiUserExceptionDispatcher+0xe
4603c5ac 015bf8c5 sqlservr!CVariableInfo::PbGetBlock+0x53
4603c5d4 015bf962 sqlservr!CVarPageMgr::PbAllocate+0x14c
4603c5ec 015bfd85 sqlservr!CMemObj::Alloc+0x2f
4603c61c 01537c2b sqlservr!CMemThread<CMemObj>::Alloc+0x5e
4603c638 015bef96 sqlservr!CMemPartitioned<CMemThread<CMemObj> >::Alloc+0x64
4603c658 0159bed5 sqlservr!operator new+0x21
4603c678 014ab62f sqlservr!operator new[]+0x54
4603c6a0 011ad344 sqlservr!SEColumnMetadataCache::InitRowsetAndHoBtColumnIdMaps+0x100
4603c7c0 011ae6da sqlservr!SEColumnMetadataCache::PopulateSEColumnAttributesFromMetadata+0x1fc
4603c828 011ae2e6 sqlservr!VisibleHoBt::PopulateHoBtColumnAttributesFromMetadata+0x130
4603c92c 011adcce sqlservr!VisibleHoBt::RefreshFromMetadataManager+0x32a
4603c998 011adeba sqlservr!VisibleHoBt::Refresh+0x9d
4603c9d0 011adfbe sqlservr!BaseSharedHoBt::Init+0x61
4603cb20 0159e687 sqlservr!HoBtFactory::GetHoBtAccess+0x28b
4603cb3c 0109c0a9 sqlservr!HoBtAccess::Init+0x55
4603cdf8 01513dc9 sqlservr!HoBtFactory::CreateHoBt+0x52f
4603e594 0109bdf7 sqlservr!SECreateRowset+0x6d4
4603e6b0 010984aa sqlservr!DDLAgent::SECreateRowsets+0x5ef
4603e838 01c27bb5 sqlservr!CIndexDDL::CreateRowsets+0x826
4603e854 016055c4 sqlservr!CIndexDDL::CreateEmptyHeap+0xb0
4603ea78 01096408 sqlservr!CTableCreate::CreateRelation+0x648
4603ed80 01c9fb74 sqlservr!CTableCreate::LCreateImpl+0xaf9
4603ee78 01e5198e sqlservr!CStmtCreateTable::XretCreateTableExecute+0x1b2
4603ee94 01572ddf sqlservr!CXStmtCreateTableDDL::XretExecute+0x3e
4603ef38 0156bf19 sqlservr!CMsqlExecContext::ExecuteStmts<1,1>+0x2f1
4603f014 0156b0c1 sqlservr!CMsqlExecContext::FExecute+0x71a
4603f0d0 01fa1d2f sqlservr!CSQLSource::Execute+0x6d2
4603f890 01fa64ed sqlservr!ExecuteSql+0x7de
4603f940 01fa69a5 sqlservr!CSpecProc::ExecuteSpecial+0xd3
4603fa34 0156b8c2 sqlservr!CSpecProc::Execute+0x245
4603fbc4 0156b4d5 sqlservr!process_request+0x301
4603fd14 015be5a5 sqlservr!process_commands+0x2f3
4603fd84 015be6d6 sqlservr!SOS_Task::Param::Execute+0x117
4603fdc4 015be38f sqlservr!SOS_Scheduler::RunTask+0xbc
4603fe00 0112f47d sqlservr!SOS_Scheduler::ProcessTasks+0x12f
4603fe80 0112e2fa sqlservr!SchedulerManager::WorkerEntryPoint+0x243
4603fe98 015943b9 sqlservr!SystemThread::RunWorker+0x7d
4603ff04 0112e8e8 sqlservr!SystemThreadDispatcher::ProcessWorker+0x2bd
4603ff78 781329bb sqlservr!SchedulerManager::ThreadEntryPoint+0x142
4603ffb0 78132a47 msvcr80!_callthreadstartex+0x1b
4603ffb8 77e6482f msvcr80!_threadstartex+0x66
4603ffec 00000000 kernel32!BaseThreadStart+0x34



ChildEBP RetAddr
45b8e3a4 02c79496 kernel32!RaiseException+0x53
45b8e3f0 02703706 sqlservr!CDmpDump::Dump+0x95
45b8e42c 02703e6d sqlservr!SQLDumperLibraryInvoke+0x169
45b8e520 026f9cf0 sqlservr!CImageHelper::DoMiniDump+0x2b0
45b8f2d4 026f95f5 sqlservr!stackTrace+0x693
45b8f2f4 02a0e2e4 sqlservr!stackTraceCallBack+0x40
45b8f584 78158c0e sqlservr!ex_terminator+0x85
45b8f5d0 78158576 msvcr80!_CallSETranslator+0xa3
45b8f604 7815894b msvcr80!FindHandlerForForeignException+0x58
45b8f664 78158a57 msvcr80!FindHandler+0x33b
45b8f698 78158b11 msvcr80!__InternalCxxFrameHandler+0xd9
45b8f6d4 7c828772 msvcr80!__CxxFrameHandler3+0x26
45b8f6f8 7c828743 ntdll!ExecuteHandler2+0x26
45b8f7a0 7c82857e ntdll!ExecuteHandler+0x24
45b8f7a0 0154c80b ntdll!KiUserExceptionDispatcher+0xe
45b8faa4 015bf8c5 sqlservr!CVariableInfo::PbGetBlock+0x53
45b8facc 015bf962 sqlservr!CVarPageMgr::PbAllocate+0x14c
45b8fae4 015bfd85 sqlservr!CMemObj::Alloc+0x2f
45b8fb14 012658f8 sqlservr!CMemThread<CMemObj>::Alloc+0x5e
45b8fb4c 01265991 sqlservr!SNIPacketNew+0x81
45b8fb80 012d7941 sqlservr!SNIPacketAllocateEx2+0x1be
45b8fba0 012dbc5c sqlservr!TDSSNIClient::NewPacket+0x55
45b8fbcc 012dbea5 sqlservr!CNetConnection::FInit+0x132
45b8fbf8 012dc150 sqlservr!CPhysicalConnection::PNetConnCreateDefault+0xe4
45b8fd14 015be5a5 sqlservr!TDSSNIClient::ProcessCommon+0x2e8
45b8fd84 015be6d6 sqlservr!SOS_Task::Param::Execute+0x117
45b8fdc4 015be38f sqlservr!SOS_Scheduler::RunTask+0xbc
45b8fe00 0112f47d sqlservr!SOS_Scheduler::ProcessTasks+0x12f
45b8fe80 0112e2fa sqlservr!SchedulerManager::WorkerEntryPoint+0x243
45b8fe98 015943b9 sqlservr!SystemThread::RunWorker+0x7d
45b8ff04 0112e8e8 sqlservr!SystemThreadDispatcher::ProcessWorker+0x2bd
45b8ff78 781329bb sqlservr!SchedulerManager::ThreadEntryPoint+0x142
45b8ffb0 78132a47 msvcr80!_callthreadstartex+0x1b
45b8ffb8 77e6482f msvcr80!_threadstartex+0x66
45b8ffec 00000000 kernel32!BaseThreadStart+0x34

Solução alternativa

Para contornar estes problemas, siga estes passos:

Workaround 1:

1. Elimine o servidor ligado com falhas.

2. Crie um novo servidor ligado utilizando o fornecedor de 10.0 de cliente nativo (SQLNCLI10) do SQL Server. Para tal:
r. botão direito do rato em Servidores ligados e seleccione o Novo servidor ligado.
b. Seleccione outra origem de dados e escolha 10.0 de cliente nativo do SQL Server para o fornecedor.

Workaround 2:

  1. Crie uma subchave de registo com o nome "SQLNCLI" no seguinte caminho:

    HKLM\Software\Microsoft\DataAccess

  2. Crie uma entrada de registo do tipo REG_DWORD com o nome "SQLOSPartitioning" nesta subchave.

  3. Defina o valor desta entrada como 0x0.

Estado

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Mais informações

Software de regra

Título de regra

Descrição da regra

Versões de produtos contra os quais a regra é avaliada

O System Center Advisor

SQL Server em falta actualização KB979779 para impedir a Corrupção de memória de cliente nativo SQL

Um fornecedor de SQL Native Client que corresponde ao SQL Server 2005 está presente neste servidor. Esta versão do SQLNCLI.dll poderia ser potencialmente carregado no SQL Server 2008 e do SQL Server 2008 R2 ao enumerar os fornecedores e a criação de servidores ligados. Versões específicas do SQL Server 2008 e do SQL Server 2008 R2, poderá detectar problemas e deixa de reagir quando criar ou utilizar um servidor ligado criado com este afectados SQLNCLI.dll. Actualizar as instâncias do SQL Server 2008 e o SQL Server 2008 R2 afectadas com as correcções necessárias ou evitar a utilização deste SQLNCLI.dll durante a criação de servidores ligados.

SQL Server 2008

SQL Server 2008 R2



Referências

Para mais informações sobre o modelo de Assistência Incremental para o SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

935897 um modelo de Assistência Incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicados



Para mais informações sobre o esquema de atribuição para actualizações do SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

822499 Novo esquema de atribuição de nomes para pacotes de actualização de software do Microsoft SQL Server

Para mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:

824684 descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Palavras de pesquisa

SQLNCli ex_terminator

Autor: bruceye
Writer:v-xinbi
Tech Reviewer: mikez; jhalmans; cshao; madhana; bruceye
Editor:v-sbrenn

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×