私は読み取り専用ユーザーでOracleデータベースに接続しており、SQL Developerで接続を設定しているときにサービス名を使用したため、SID(スキーマ)がわかりません。
接続しているスキーマ名を見つけるにはどうすればよいですか?
ERダイアグラムを生成 にしたいので、これを探しています。そのプロセスでは、1つのステップでスキーマを選択するように求められます。ユーザー名を選択しようとすると、すべてのテーブルがスキーマユーザーにマップされていると推測されるため、任意のテーブルを取得します。
編集:コメントで提供された以下のSQL Frankによって部分的に答えを得ました、私の場合はスキーマである所有者名を与えました。しかし、すべての場合に適用できる一般的なソリューションであるかどうかはわかりません。
select owner, table_name from all_tables.
Edit:スキーマはすべてのdbオブジェクトの所有者であるため、上記のsqlはすべての場合に正しいソリューションだと思います。だから私はスキーマを取得するか、所有者の両方が同じです。以前、スキーマに関する私の理解は正しくなく、別の question を経験しましたが、見つかったスキーマもユーザーです。
フランク / a_horse_with_no_name これを答えに入れて、受け入れられるようにします。
読み取り専用ユーザーを作成するには、アクセスするテーブルを所有しているユーザーとは異なるユーザーを設定する必要があります。
ユーザーを作成し、読み取り専用ユーザーにSELECT権限を付与するだけの場合、各テーブル名の前にスキーマ名を追加する必要があります。これを回避するには、基本的に2つのオプションがあります。
ALTER SESSION SET CURRENT_SCHEMA=XYZ
CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1
したがって、所有者スキーマの名前を知らされていない場合、基本的に3つのオプションがあります。最後のものは常に動作するはずです:
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL
SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER
SELECT * FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'CTXSYS', 'MDSYS');
呼び出し SYS_CONTEXT
は、現在のスキーマを取得します。 Tomに「現在のスキーマを取得する方法」を尋ねる :
select sys_context( 'userenv', 'current_schema' ) from dual;