sql >> データベース >  >> RDS >> Database

テーブルが見つからないエラーのトラブルシューティング

    最近、お客様の1人が、SQLServerテーブルにOracle®データを挿入しようとしたときに問題が発生していました。 SQL Serverインスタンスのターゲットテーブルが、顧客が接続しているデータベースに存在しなかったため、挿入が失敗していました。

    最終的に、この問題の解決策は最も単純なものでした。このトラブルシューティングには、問題の潜在的な修正のリストを論理的な順序で提示するために、このソリューションとその他のソリューションが含まれています。トラブルシューティングは、SQLServerをターゲットデータベースとして使用するEasysoftODBCドライバーに基づいていますが、手順の多くは、他のデータベース用の他のunixODBCベースのドライバーに適用できます。

    1. ターゲットデータベースのデータソース(DSN)を確認します。

      これは通常、/ etc/odbc.iniで定義されます。

      重要 DSNが別のマシンで動作しているセットアップからのコピーであるという理由だけで、これらの手順をバイパスしないでください。特に、その作業セットアップが別のプラットフォーム上にある場合、および/または異なるバージョンのドライバーを使用している場合。 ODBCドライバーのバージョンが異なれば、odbc.iniファイルの解析も異なります。たとえば、重複がある場合に検出されたDSNまたはDSN属性の最後のバージョンを使用するものもあれば、最後のバージョンを使用するものもあります。さらに、キャリッジリターンなどの問題のある文字がファイルにある場合、別のプラットフォーム上の別のドライバーがodbc.iniファイルの解析を停止することがあります。

      • データソースのコピーが1つしかないことを確認します。データソースに複数のバージョンがある場合は、名前を変更するか、他のバージョンを削除します。つまり、次のようにします:
        [MYDSN]
        Database=MYDB
        

        —または—

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

        ない

        [MYDSN]
        Database=MYDB
        
        [MYDSN]
        Database=MYDB
        
      • DSNのコピーが1つしかないことが確実な場合は、DSNにターゲットデータベースを指定する行しかないことを確認してください。つまり、次のようにします:
        [MYDSN]
        Database=MYDB
        Server=MYMACHINE
        .
        .
        .
        [ANOTHERDSN]
        

        ない

        [MYDSN]
        Database=MYDB
        Server=MYMACHINE
        Database=MYDB2
        .
        .
        .
        [ANOTHERDSN]
        

        —または—

        [MYDSN]
        Database=MYDB
        Server=MYMACHINE
        Database=
        .
        .
        .
        [ANOTHERDSN]
        
    2. データベースを明示的に指定しない場合は、DBAに、ユーザーのデフォルトのデータベースが想定しているデータベースであることを確認してください。たとえば、SQL Serverでは、特定のデータベースに接続するようにログインを構成できます。そのため、
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      User=MYUSER.
      .
      .
      [ANOTHERDSN]
      

      MYUSERは、ログインが特定のデータベースに構成されている場合はAdventureWorksに、構成されていない場合はマスターデータベースに最初に接続する場合があります。

    3. 自分が思っているDSNに接続していることを確認します。 DSNを既存のバージョン(たとえば/etc/odbc.ini)に追加したとしても、ドライバーマネージャーがこのファイルを検索しているわけではありません。ドライバーマネージャーの構築方法や環境の設定によっては、別の場所を探している可能性があります。確認するには、データソースのDriver属性をコメントアウトしてみてください。それでも接続できる場合は、別のバージョンのDSNを使用しています。 straceやtrussなどのプログラムを使用して、使用されているodbc.iniファイルを確認します。例:
      $ 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
      

      別のマシンからDSNをコピーした場合は、そのマシンでこのプロセスを繰り返して、ソースDSNの場所を確認してください。

    4. 自分が思っているDBMSに接続していることを確認します。たとえば、それほど混乱がない場合は、DBMSのターゲットインスタンス/サービスを一時停止/停止してみてください。それでも接続できる場合は、別のマシンのDBMSに接続しています。おそらく、ネットワークは、別のマシンがDSNで指定されたものと同じIPアドレスを持っているように見えるように構成されています。
    5. isqlで、「help」と入力します。返されたテーブルのリストには、どのデータベース名が表示されていますか?それはあなたが期待するものですか?そうでない場合は、次のように入力するとどうなりますか。
      use database
      

      データベースを置き換えます ターゲットデータベースの名前を使用します。データベースを変更できない場合は、IPアドレスによってデータベースへのアクセスを制御するログオントリガーがあるかどうかをDBAに確認してください。 SQL Server Management Studioでは、ログオントリガーは INSTANCEの下にあります>サーバーオブジェクト>トリガー。


    1. verify_queryable_inventoryがORA-20008を返しました:タイムアウトしました

    2. Slick2.0の一般的なCRUD操作

    3. OracleデータベースでPL/SQL関数を作成する方法

    4. SUMによるMySQLグループ