1. ホーム
  2. sql

[解決済み] Invalid object name: dbo.etc "エラーの根本原因は?

2022-02-09 10:26:25

質問

今は会社を辞めた人が始めた、かなり大きなプロジェクトの保守プログラミングをしているのですが...。

会社のデータベースの一つをバックアップして、テストサーバーに再接続したところです。そこまでは問題なく動いているようです。

次に、プログラムの通常のログイン手順を実行し、その部分も動作しているように見えます。

しかし、プログラムの中でストアドプロシージャを実行する段階になると、次のようなエラーが返されます。 Invalid object name 'Informix.dbo.customer' .

元のデータベースで同じ関数を実行すると、正常に動作し、期待通りのデータが返されます。

私が見つけた同様のエラーの説明は、スキーマに言及しているようですが、そこで少し奇妙なことが起こります。元のデータベースには、明らかに があります。 dbo を含む "Users" フォルダと、通常の db_owner などを含む "Database Roles" フォルダ、および "Application Roles" という名前の空のフォルダがあるだけです。

バックアップ、リストアされたデータベースのSecurityフォルダは、あらゆる種類のゴミでいっぱいです。dboの他に3人のユーザー、"Schemas"フォルダ、"Certificates"フォルダ、2つの暗号化キーフォルダ...。どれも削除できないんです。

SQLログインシステムについての私の限られた理解では、私がログインしているユーザーは、このランダムながらくたのコレクションから非boパーミッションを得ているので、dboが所有するデータベースの部分へのアクセスを拒否されているようです。

私自身の理解では、この問題の核心は何なのでしょうか。 Invalid object name というエラーが発生します。また、現実的な問題として、この状況を修正し、実際に使用しているプログラムをテストデータベース上で本番データベースと同じように動作させるにはどうしたらよいでしょうか?

解決方法は?

私の理解が正しければ、データベース(SomeDB)内でプロシージャ(SomeProc)を実行しているときに、次のようなエラーが発生します。 Invalid object name 'Informix.dbo.customer' ? これは単に、SomeProc が "Informix" というデータベース内の "dbo" というスキーマにある "customer" というオブジェクトを見つけることができないことを意味します。これにはいくつかの理由が考えられます。

  1. オブジェクトが存在しない。スキーマおよび/またはデータベースが存在しないことが原因である可能性があります。
  2. オブジェクトは存在するが、プロシージャを実行しているユーザーにはそれを見る権限さえない。
  3. オブジェクトは存在するが、データベースが大文字と小文字を区別しており、名前の一部がコード内の名前と一致しない。

あなたの場合、原因が何であるかはもっと調査する必要がありますが、完全な推測として、あなたの本番サーバーにはInformixとSomeDBの両方のデータベースがあり、テストサーバーにはSomeDBしかないのでは?

最後に、質問を投稿する際には、必ずSQL Serverのバージョン(2000/2005/2008)とエディション(Express、Standard、Enterprise)を明記してください。