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
SintomasSQL 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)'. 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) 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çãoA Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo. CausaEste 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 contornarUma 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çãoSQL 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.
Tradução automáticaIMPORTANTE: 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/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções de Artigos
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar ao topo