1

外部の DB 管理者が本番データベースをエクスポートし、テスト環境にインポートしました。Oracle 9.2 を使用しています。インポートされたデータベース オブジェクト (テーブル、ビュー、idex、パッケージなど) の大部分は正常に動作しますが、特定の 3 つのテーブルに問題があります。これらのテーブルでは SELECT、UPDATE、DELETE を実行できますが、このテーブルではビューを作成できません。テーブル。

つまり、次のように動作します。

 create or replace view v_test_view as select 1 x from dual; // we can create views
 create or replace view v_test_view  as select 1 x from someTable;
 select * from problematicTable; // we can select data from problematic table

しかし、これは機能しません:

 create or replace view v_test_view  as select 1 x from problematicTable;
--> ORA-01031: insufficient privileges

背景情報:

  • データベース管理者は、インポート/エクスポート ユーティリティを使用してデータベース スキーマをコピーしました
  • 実動 Oracle とテスト Oracle のバージョンは正確に同じではありません (実動は 9.2.0.8、テストは 9.2.0.7)。
  • 最初のインポートが完了した後、問題のあるテーブルはオブジェクト カタログ (およびデータベース開発ツール) に表示されましたが、このテーブルから SELECT しようとすると、「無効な識別子」が返されました。その後、テーブルが再インポートされ、テーブルから SELECT できるようになりましたが、ビューを作成することはできません。

何か案は?

更新: 状況はさらに奇妙に見えます。1 つの Oracle セッションを使用すると、このテーブルからデータを選択できます。別の Oracle セッションで (同じユーザーを使用してログインします! )、「ORA-00904: 無効な識別子」が表示されます。

更新#2: インポートに使用されたエクスポートデータは、問題のあるもの(TEST2)と同じOracleインスタンスにある別のテスト環境(TEST1と呼びましょう)にデータをインポートするために正常に使用されました。これら 2 つの環境の違いは、TEST1 は本番環境と同じユーザー (スキーマ名) を使用するのに対し、TEST2 は別のユーザーを使用することです (オブジェクトが別のスキーマ名にインポートされたようです)。問題のあるテーブルには、正常に機能するテーブルとは異なる特別なセキュリティ プロパティはありません。

マトラ

4

2 に答える 2

3

ビューを作成しているユーザーは、ROLE を介して問題のあるテーブルの選択を許可されていますか? その場合は、テーブルに明示的な許可を与えてみてください。

オラクルから:

「スキーマ内にビューを作成するには、そのスキーマが、ビューの基になっているすべてのテーブルまたはビューから行を選択、挿入、更新、または削除するために必要な権限を持っている必要があります。ビューの所有者には、これらの権限が付与されている必要があります。役割を介してではなく、直接。理由は、役割に付与された権限はオブジェクトを介して継承できないためです。」

于 2009-04-09T22:16:36.760 に答える
0

インポートに問題があったようです。DB 管理者が問題を解決するために行ったことは次のとおりです。

  • 問題のあるテーブルを削除する
  • 問題のあるテーブルの構造(列、制約、インデックス) を再インポートする
  • 構造が再作成された後、彼はデータを再インポートしました
  • 彼はまた、データを前後にコピーするために CREATE TABLE AS SELECT で遊んだ

テーブル構造を再作成しているときに、現在のスキーマの空き領域が不足していることに気付きました (自動拡張に設定されていませんでした)。奇妙なことに、最初のインポートでは容量不足について文句がありませんでした。

したがって、理論的には、不十分なスペースが破損したデータ ディクショナリの原因でした。

于 2009-04-14T18:24:50.707 に答える