AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 280018
Accepted
Jefferson B. Elias
Jefferson B. Elias
Asked: 2020-11-20 22:51:28 +0800 CST2020-11-20 22:51:28 +0800 CST 2020-11-20 22:51:28 +0800 CST

Incapacidade de consultar a tabela subjacente de uma exibição vinculada ao esquema

  • 772

Migrei um banco de dados do SQL Server 2008R2 para o SQL Server 2019 (ambos Enterprise Edition) usando a técnica de restauração de backup e um conjunto de ações pós-transferência como DBCC UPDATEUSAGEou UPDATE STATISTICS XXX.

Na atualização das estatísticas, recebo o seguinte erro:

Msg 402, Level 16, State 1, Procedure ZZZZ, Line 5 [Batch Start Line 0]
The data types datetime and time are incompatible in the add operator.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'ZZZZ' because of binding errors.

Eu sei que a mensagem é bastante explícita (a visão, que estava sintaticamente correta em 2008R2 não está mais em 2019). Não entendo por que uma exibição definida WITH SCHEMABINDINGcomo inválida impediria a atualização de estatísticas em uma tabela subjacente.

Além disso, recebo a mesma mensagem de erro ao consultar a tabela subjacente com uma WHEREcláusula, exceto se eu forçar um FULLSCAN com a seguinte dica:

OPTION(TABLE HINT( $mytable, FORCESCAN ))

Eu sei que o SQL Server irá disparar um erro em caso de alteração de DDL para objetos vinculados ao esquema subjacentes, mas não entendo por que, se a exibição for inválida, os objetos subjacentes não poderão ser usados ​​normalmente.

Tenho certeza de que há uma explicação (como os mecanismos de proteção para exibições vinculadas ao esquema não podem ser processadas devido à invalidez da exibição), mas não consigo encontrá-la com certeza na documentação.

Eu corri um DBCC CHECKDBsem problema. Mudei o nível de compatibilidade para 150.

sql-server upgrade
  • 2 2 respostas
  • 375 Views

2 respostas

  • Voted
  1. Best Answer
    Paul White
    2020-11-21T03:21:45+08:002020-11-21T03:21:45+08:00

    Da documentação :

    Uma consulta não precisa fazer referência explicitamente a uma exibição indexada na FROMcláusula para que o Otimizador de consulta use a exibição indexada. Se a consulta contiver referências a colunas nas tabelas base que também estão presentes na visualização indexada e o Otimizador de consulta estimar que o uso da visualização indexada fornece o mecanismo de acesso de menor custo, o Otimizador de consulta escolhe a visualização indexada, semelhante à forma como escolhe índices de tabela base quando eles não são referenciados diretamente em uma consulta.

    Quando você tem uma exibição indexada inválida em seu banco de dados, esse recurso Enterprise Edition pode produzir erros quando o otimizador considera o uso da exibição indexada em vez do acesso à tabela base.

    Esse recurso de correspondência automática de exibição indexada pode ser desabilitado com a EXPAND VIEWS dica de consulta :

    EXPAND VIEWS
    Especifica que as exibições indexadas são expandidas. Também especifica que o Otimizador de Consulta não considerará nenhuma exibição indexada como substituto de nenhuma parte da consulta. Uma exibição é expandida quando a definição da exibição substitui o nome da exibição no texto da consulta.

    Essa dica de consulta praticamente não permite o uso direto de exibições indexadas e índices em exibições indexadas no plano de consulta.

    Quando você atualizou seu banco de dados, um aviso foi emitido:

    Aviso: O objeto "ZZZZ" não pôde ser vinculado e foi ignorado durante a atualização. Considere revisar e corrigir sua definição.

    Isso é fácil de perder e pode até não ser visível para o usuário em alguns cenários. Ainda assim, a lição é clara: um banco de dados com objetos inválidos pode produzir erros inesperados.

    DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKStambém detectará o problema.

    Se você precisar executar o banco de dados no SQL Server 2019, use o nível de compatibilidade do banco de dados 100 até conseguir resolver os problemas de atualização. Isso permitirá que as datas sejam adicionadas às horas usando o operador de adição.

    • 13
  2. Tibor Karaszi
    2020-11-21T02:45:43+08:002020-11-21T02:45:43+08:00

    Com relação a quando você consulta a tabela subjacente, talvez o otimizador produza um plano que use o índice de exibição em vez da tabela?

    O plano de execução deve informar ou tente a dica EXPAND VIEWS.

    • 4

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve