3

そうですね、ここで私の質問です。

Oracle XEでいくつかのテーブルを作成するETLツールで遊んでいました。次に、それらのテーブルにアクセスすることも削除することもできないことに気付きました。

スクリーンショットでわかるように(画像を投稿できなかったので、テキストをコピーして貼り付ける必要がありました)。「dba_tables」にクエリを実行するとそのテーブルが表示されますが、それを削除すると、Oracle は「存在しません」と表示します。

SQL> select table_name from dba_tables where owner='HR';

TABLE_NAME
------------------------------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
DetailedOrders
COUNTRIES

8 rows selected.

SQL> drop table HR.DetailedOrders cascade constraints;
drop table HR.DetailedOrders cascade constraints
              *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL>

私も試しました:同じ名前で空のテーブルを作成します-成功!それからそれを落として下さい -- 成功! dba_tables または user_tables にクエリを実行すると、まだ存在します。

それは既知の問題ですか?どうすれば修正できますか?

ありがとう、

ジェレミー

4

1 に答える 1

4

これらのコマンドを実行するときに、どのユーザーとしてログインしていますか?

以外のユーザーとしてログインしていると仮定するとHR(おそらくそうであるように聞こえます)、クエリを実行してテーブルが存在することを確認できますが、テーブルを操作するDBA_TABLES権限はありません。 . SELECT ANY DICTIONARYこれは、アカウントに権限やSELECT_CATALOG_ROLEロールなどの権限が付与されているが、権限が明示的に付与されていないことを意味します。hr.DetailedOrders. 権限のないテーブルで何かをしようとしたときに発生するエラーは ORA-00942 であり、データベースに存在する可能性のあるテーブルに関する情報を攻撃者に誤って提供しないようにエラー メッセージが設計されています。テーブルが実際に存在しないことが問題なのか、テーブルが存在するのに特権を持っていないことが問題なのかを教えてくれます。これにより、特に へのアクセスが許可されているアカウントを使用している場合、エラーが少し混乱する可能性がありますDBA_TABLES

「同じ名前で空のテーブルを作成する」とはどういう意味ですか? DetailedOrders現在のスキーマでテーブルを作成することについて話しているのですか? もしそうなら、それもうまくいくと予想されます(テーブルを削除するのと同じように)。各スキーマは個別の名前空間です。DetailedOrdersそのため、必要に応じて、データベース内のすべてのスキーマに1 つのオブジェクトを含めることができます。それらの一部はテーブル、一部はビュー、一部はストアド プロシージャである可能性もあります。もちろん、これはあまり意味がありませんが、確実に実行できます。

さらに、DetailedOrdersテーブルは大文字と小文字を区別する識別子として作成されたようです。これはひどい考えです。Oracle はデフォルトで大文字と小文字を区別しない識別子を使用しますが、識別子を二重引用符で囲むと、大文字と小文字を区別する識別子を強制的に使用することができます。これは、大文字と小文字を区別する識別子と大文字と小文字を区別しない識別子について詳しく説明している StackOverflow スレッドです。ただし、簡単な答えは、実際にテーブルをドロップする機能がある場合は、次のようにする必要があるということです

DROP TABLE HR."DetailedOrders"

ここで、テーブルの名前は二重引用符で囲まれ、大文字と小文字はデータ ディクショナリに表示される大文字と小文字が一致します。また、テーブルをクエリするたびにこれを行う必要があります。多くのツールは大文字と小文字を区別する識別子をうまく処理できず、データベースで大文字と小文字を区別する識別子を作成すると、将来の開発者はあなたの名前を呪うでしょう。しかし、あなたはそれを行うことができます。

于 2013-02-25T23:05:53.353 に答える