簡體   English   中英

如何在 Oracle 中查找模式名稱? 當您使用只讀用戶在 sql 會話中連接時

[英]How to find schema name in Oracle ? when you are connected in sql session using read only user

我使用只讀用戶連接到 oracle 數據庫,並且在 sql developer 中設置連接時使用了服務名稱,因此我不知道 SID(架構)。

如何找出我連接到的架構名稱?

我正在尋找這個,因為我想生成 ER 圖,並且在該過程中的一個步驟中它要求選擇模式。 當我嘗試選擇我的用戶名時,我沒有得到任何表,因為我猜所有表都與模式用戶映射。

編輯:我通過評論中提供的以下 sql Frank 部分得到了我的答案,它給了我所有者名稱,在我的情況下是架構。 但我不確定它是否適用於所有情況的通用解決方案。

select owner, table_name from all_tables.

編輯:我認為上面的 sql 在所有情況下都是正確的解決方案,因為架構是所有 db 對象的所有者。 所以要么我得到架構要么所有者都是相同的。 早些時候我對架構的理解不正確,我通過另一個問題發現架構也是一個用戶。

Frank / a_horse_with_no_name回答這個問題,這樣我就可以接受了。

調用SYS_CONTEXT以獲取當前模式。 來自Ask Tom“如何獲取當前架構

select sys_context( 'userenv', 'current_schema' ) from dual;

要創建只讀用戶,您必須設置與擁有要訪問的表的用戶不同的用戶。

如果您只是創建用戶並向只讀用戶授予 SELECT 權限,則需要在每個表名前添加架構名稱。 為避免這種情況,您基本上有兩種選擇:

  1. 在會話中設置當前模式
ALTER SESSION SET CURRENT_SCHEMA=XYZ
  1. 為所有表創建同義詞:
CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1

因此,如果您沒有被告知所有者架構的名稱,您基本上有三個選擇。 最后一個應該總是有效的:

  1. 查詢當前架構設置:
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL
  1. 列出你的同義詞:
SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER
  1. 調查所有表(除了一些眾所周知的標准模式):
SELECT * FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'CTXSYS', 'MDSYS');

以下3個說法如何?

-- 更改為您的架構

ALTER SESSION SET CURRENT_SCHEMA=yourSchemaName;

-- 檢查當前模式

SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL;

-- 生成刪除表語句

SELECT 'drop table ', table_name, 'cascade constraints;' FROM ALL_TABLES WHERE OWNER = 'yourSchemaName';

復制結果粘貼運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM