Database
 sql >> Base de Dados >  >> RDS >> Database

Solução de problemas de erros de tabela não encontrada


Recentemente, um de nossos clientes estava enfrentando problemas ao tentar inserir alguns dados Oracle® em uma tabela do SQL Server. A inserção estava falhando porque a tabela de destino na instância do SQL Server não estava presente no banco de dados ao qual o cliente estava se conectando.

Em última análise, a solução para este problema foi a mais simples. Este solucionador de problemas inclui esta solução e outras, na tentativa de apresentar uma lista de possíveis correções para o problema em ordem lógica. Embora a solução de problemas seja baseada em um driver ODBC Easysoft usando o SQL Server como seu banco de dados de destino, muitas das etapas são aplicáveis ​​a outros drivers baseados em unixODBC para outros bancos de dados.
  1. Verifique sua fonte de dados (DSN) para seu banco de dados de destino.
    Isso geralmente será definido em /etc/odbc.ini.

    Importante Não ignore essas etapas apenas porque seu DSN é uma cópia de uma configuração de trabalho em outra máquina. Especialmente se essa configuração de trabalho estiver em outra plataforma e/ou usar uma versão diferente do driver. Versões diferentes de um driver ODBC podem analisar o arquivo odbc.ini de maneira diferente, por exemplo, algumas podem usar a última versão de um atributo DSN ou DSN que encontram quando há duplicatas, outras podem usar a última. Além disso, um driver diferente em uma plataforma diferente pode parar de analisar o arquivo odbc.ini se houver um caractere de problema no arquivo, como um retorno de carro.
    • Verifique se há apenas uma cópia da fonte de dados. Se houver várias versões da fonte de dados, renomeie-as ou remova outras versões. Ou seja, você quer isso:
      [MYDSN]
      Database=MYDB
      

      -Ou-
      [MYDSN1]
      Database=MYDB1
      
      [MYDSN2]
      Database=MYDB2
      

      Não
      [MYDSN]
      Database=MYDB
      
      [MYDSN]
      Database=MYDB
      
    • Quando tiver certeza de que possui apenas uma cópia do DSN, verifique se o DSN possui apenas uma linha especificando o banco de dados de destino. Ou seja, você quer isto:
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      .
      .
      .
      [ANOTHERDSN]
      

      Não
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      Database=MYDB2
      .
      .
      .
      [ANOTHERDSN]
      

      -Ou-
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      Database=
      .
      .
      .
      [ANOTHERDSN]
      
  2. Se você não especificar explicitamente um banco de dados, verifique com seu DBA se o banco de dados padrão para seu usuário é aquele que você acha que é. Por exemplo, no SQL Server é possível configurar um login para se conectar a um determinado banco de dados, então em:
    [MYDSN]
    Database=MYDB
    Server=MYMACHINE
    User=MYUSER.
    .
    .
    [ANOTHERDSN]
    

    MYUSER pode se conectar inicialmente para dizer AdventureWorks se o logon tiver sido configurado para um banco de dados específico ou o banco de dados mestre se não tiver.
  3. Verifique se você está se conectando ao DSN que pensa estar. Mesmo que você tenha adicionado seu DSN a uma versão pré-existente de, digamos, /etc/odbc.ini, isso não significa que seu gerenciador de drivers está procurando neste arquivo. Dependendo de como o gerenciador de driver é construído ou o ambiente está definido, ele pode estar procurando em um local diferente. Para verificar, tente comentar o atributo Driver na fonte de dados. Se ainda conseguir se conectar, você está usando uma versão diferente do DSN. Use um programa como strace ou truss para descobrir qual arquivo odbc.ini está sendo usado. Por exemplo:
    $ more /etc/odbc.ini
    [MYDSN]
    #Driver=Easysoft ODBC-SQL Server
    $ /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN
    SQL>
    $ strace -o -f /tmp/odbc.log /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN
    $ grep odbc.ini /tmp/odbc.log
    

    Se você copiou um DSN de outra máquina, tente repetir esse processo nessa máquina para verificar a localização do DSN de origem.
  4. Verifique se você está se conectando ao DBMS que pensa estar. Por exemplo, se não for muito perturbador, tente pausar/parar a instância/serviço de destino para o DBMS. Se você ainda puder se conectar, você está se conectando a um DBMS em outra máquina. Talvez sua rede tenha sido configurada de forma que outra máquina pareça ter o mesmo endereço IP que o especificado no DSN.
  5. No isql, digite "ajuda". Na lista de tabelas retornadas, qual nome do banco de dados é mostrado? É aquele que você espera? Se não, o que acontece se você digitar:
    use database
    

    Substituir banco de dados com o nome do banco de dados de destino. Se você não puder alterar o banco de dados, verifique com seu DBA se há um gatilho de logon que controle o acesso aos bancos de dados por endereço IP. No SQL Server Management Studio, os gatilhos de logon estão em INSTANCE> Objetos de servidor> Acionadores.