0

私はOracle Sql Developerを使用しています

テーブル、インデックス、主キー制約などを作成する巨大なスクリプトがあります。

私のDB名は: dbo_other

この dbo_other に sysdba としてログインしました。

スクリプトを実行すると、左側のパネルの [テーブル] の下にテーブルが表示されません

ただし、「dbo_other」を追加してスクリプトを追加すると、すべてのテーブル名の前にテーブルが表示されます。

これは非常に面倒で時間がかかります。

これを回避する方法はありますか?dbo_other を追加せずに dbo_other に表示されないのはなぜですか。すべてのテーブル名の前に?? 右上隅でクエリを実行すると、ドロップダウンで dbo_other が選択されています!!

作成したテーブルから select * を実行することもできます (ただし、左側のサイドバーには表示されません)。さらに、pl/sql 開発者でテーブルを表示できます。

Oracle SQL 開発者が dbo_other を使用して作成することを要求するのはなぜですか??

また、テーブルごとに追加しないようにする方法はありますか? スクリプトの上で何かを実行して、後続のすべてに影響を与えることができるでしょうか?

4

3 に答える 3

7

SYSDBAアカウントを使用してデータベースにログインするのはなぜですか?これは非常に強力であり、何をしているのかわからない場合は、データベースにひどい損害を与える可能性があります。開発環境では、実行できる害には限界がありますが、本番環境で作業を行う前に、良い習慣を身に付けるのが最善です。

AS SYSDBAの興味深い点は、ログインのユーザー名部分をオーバーライドすることです。OSユーザーが特権を持っている場合は、SYSとして使用できます。見てみな:

SQL> conn apc
Enter password:
Connected.
SQL> show user
USER is "APC"
SQL> conn apc as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL>

したがって、そのスクリプトを実行すると、SYSスキーマにこれらすべてのオブジェクトが作成されます。これは首の大きな痛みになるでしょう。等しく反対の復帰スクリプトがあることを願っています。

スクリプトを正しく実行するために必要なのは、DBO_OTHERとして接続することだけです(通常-つまり、デフォルトであるSYSDBAまたはSYSOPERなしで)。スクリプトは、現在のスキーマにテーブルを作成します。

複数のスキーマでオブジェクトを作成する必要がある場合は、ログアウトして再度ログインする必要はありません。スキーマはユーザーとは異なり、を実行することでスキーマを切り替えることができますalter session set current schema = WHOEVR;。これは非常に便利なトリックであり、私はしばらく前にそれをブログに書きました。詳細をご覧ください

ユーザーは、現在のスキーマを変更しても追加の特権を取得しないことに注意してください。ユーザーは、現在実行できることのみを実行できます。したがって、複数のスキーマでオブジェクトを作成するような場合、実行ユーザーはパワーユーザーであり、DBAなどのCREATE ANY特権を持つユーザーである必要があります(ただし、SYSDBAではありません)。

于 2009-10-01T16:07:11.733 に答える
1

私はちょうどあなたがログインしていないスキーマ/ユーザーに対してデフォルトでアクションを実行できるこの小さなジェムに出くわしました。つまり、デフォルトでは、selectステートメントなどは独自のスキーマではなくこの新しいスキーマで動作します。

セッションセットの変更current_schema=

例:自分+ table1 + table2 SomeoneElse + SuperTable1 + SuperTable2

log in as "Myself" 
select * from SuperTable1

Error: ORA-00942: table or view does not exist

alter session set current_schema = SomeoneElse 
select * from SuperTable1 <This will work.>
于 2010-09-13T14:06:47.643 に答える
0

左側のパネルの「テーブル」ツリーには、ログインしたユーザーが Oracle SQL Developer で所有するテーブルのみが含まれます。スクリプトが別のユーザーのスキーマにテーブルを作成する場合は、[その他のユーザー] の横にある + をクリックし、適切なユーザーを見つけて、そのテーブルの + をクリックする必要があります。

他の人が言ったように、必要でない限り SYSDBA を使用しないでください。大まかな説明に基づいて、スクリプトを通常のユーザーとして実行する必要があるように思えます。

于 2009-10-01T16:21:07.500 に答える