Artigo: 815594 - Última revisão: segunda-feira, 22 de Setembro de 2003 - Revisão: 3.2

Erro: Uma falha na asserção é gerada durante uma declaração de INSERT BULK

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

SQL Server pode causar a asserção de revenda falhas seguintes durante um processo que envolve frequentes, cíclica BULK INSERT instruções seguidas de instruções DELETE. Para gerar o assert, a actividade BULK INSERT tem de ser funcionar em modo nonlogged:
	2003-02-18 20:59:45.83 spid54    SQL Server Assertion: File: <access.c>, line=3721 
	Failed Assertion = '(logMode != nonlogged) || (dbt->dbt_dbid == TEMPDBID)'.
Nota para operar em modo nonlogged, utilize a opção TABLOCK.

A call stack similar to the following is also generated in the SQL Server error log:
* -------------------------------------------------------------------------------
* Short Stack Dump
* 0087A90E Module(sqlservr+0047A90E) (CStackDump::GetContextAndDump+0000002E)
* 0087C41F Module(sqlservr+0047C41F) (stackTrace+00000223)
* 00931097 Module(sqlservr+00531097) (utassert_fail+000002E3)
* 008075E4 Module(sqlservr+004075E4) (ChangeGhostPageState+000000D5)
* 00808855 Module(sqlservr+00408855) (DataSplitMgr::SplitPage+000000F4)
* 00572C15 Module(sqlservr+00172C15) (indexsplit+00000068)
* 00572AE7 Module(sqlservr+00172AE7) (SplitIndexNode+0000003D)
* 00406CEC Module(sqlservr+00006CEC) (srchindex+000002C1)
* 004372AF Module(sqlservr+000372AF) (InsertRowIntoNCIndex+0000018A)
* 0080121A Module(sqlservr+0040121A) (RowsetSS::InsertRow+000000D1)
* 0040E01C Module(sqlservr+0000E01C) (CValRow::SetDataX+00000035)
* 0040AE83 Module(sqlservr+0000AE83) (SetDataWithPop+0000001C)
* 0041C5BE Module(sqlservr+0001C5BE) (CEs::GeneralEval4+00000075)
* 00486561 Module(sqlservr+00086561) (CQScanUpdate::GetRow+000001DA)
* 006F9B06 Module(sqlservr+002F9B06) (CQScanSequence::Open+000000DA)
* 004214C4 Module(sqlservr+000214C4) (CQueryScan::Startup+0000010D)
* 0041D505 Module(sqlservr+0001D505) (CStmtQuery::ErsqExecuteQuery+0000026B)
* 0041E09C Module(sqlservr+0001E09C) (CStmtDML::XretExecuteNormal+000002AE)
* 0041DECA Module(sqlservr+0001DECA) (CStmtDML::XretExecute+0000001C)
* 0041B442 Module(sqlservr+0001B442) (CMsqlExecContext::ExecuteStmts+000003B9)
* 0041AA88 Module(sqlservr+0001AA88) (CMsqlExecContext::Execute+000001B6)
* 0041B9B6 Module(sqlservr+0001B9B6) (CSQLSource::Execute+00000357)
* 0047F78C Module(sqlservr+0007F78C) (CSQLSource::SeExecute+00000051)
* 0047F6DC Module(sqlservr+0007F6DC) (ExecSql+000000EA)
* 0047F590 Module(sqlservr+0007F590) (CBcpImport::ExecInsertStmt+00000447)
* 0047D869 Module(sqlservr+0007D869) (BcpImportMain+00000196)
* 0047D714 Module(sqlservr+0007D714) (CStmtBulkIns::XretExecute+0000005F)
* 0041B442 Module(sqlservr+0001B442) (CMsqlExecContext::ExecuteStmts+000003B9)
* 0041AA88 Module(sqlservr+0001AA88) (CMsqlExecContext::Execute+000001B6)
* 0041B9B6 Module(sqlservr+0001B9B6) (CSQLSource::Execute+00000357)
* 0048A63B Module(sqlservr+0008A63B) (language_exec+000003E1)
* 0042708C Module(sqlservr+0002708C) (process_commands+0000010E)
* 41075002 Module(UMS+00005002) (ProcessWorkRequests+00000272)
* 41074698 Module(UMS+00004698) (ThreadStartRoutine+00000098)
* 7800A27B Module(MSVCRT+0000A27B) (beginthread+000000CE)
* 77E8758A Module(KERNEL32+0000758A) (SetFilePointer+0000018A)
Additionally, after this type of process, if you then use DELETE operations on the BULK INSERT destination table, the DBCC CHECKDB and DBCC CHECKTABLE Transact-SQL references may report the following errors:
Servidor: Erro 8952, nível de 16, estado 1, linha 1
Erro da tabela: base de dados 'BulkTest' Índice 'FilterKeys.IX_FilterKeys_FileID' (ID 2057058364) (índice ID 2). Chave inválido ou extra para as chaves:
Servidor: Erro 8956, nível de 16, estado 1, linha 1
Índice de linha (3: 12: 59) com valores (FileID = '{B08ED36E-EADF-47DF-B426-A793C683BB4A}') aponta para a linha de dados identificada pelo (RID = (3:46405:14)).

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Causa

Este erro ocorre quando uma operação BULK INSERT acciona uma página dividida num nó de índice que provoca a página de índice recém-criado que contém "registos fantasmas." O processo que faz com que a página de espaço livre de página (PFS) controlar da nova página seja marcado como contendo registos fantasma não deverá ocorrer durante uma operação nonlogged.

Como contornar

Uma vez que este problema só ocorre numa área de dados dinâmicos (ou o SQL Server tabela não tem nenhum índice agrupado), colocar um índice agrupado BULK INSERT tabela de destino para resolver este problema.

Mais Informação

SQL Server utiliza registos duplicados como uma optimização de concorrência para operações de DELETE. Quando uma linha é eliminada (ou movida) a partir de uma página de folha de índice, o espaço não é libertado imediatamente para o SQL Server. Em vez disso, está marcado como "fantasma". Um processo de sistema do SQL Server (limpeza do registo de ghost) funciona em segundo plano para remover estes registos de modo assíncrono.

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbprb KB815594 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 815594  (http://support.microsoft.com/kb/815594/en-us/ )