IT

Oracle에서 개체의 소유자를 어떻게 찾을 수 있습니까?

itgroup 2023. 6. 17. 09:01
반응형

Oracle에서 개체의 소유자를 어떻게 찾을 수 있습니까?

테이블의 외부 키를 찾고 싶지만 이름이 같은 테이블의 사용자/스키마가 둘 이상 있을 수 있습니다.현재 로그에 기록된 사용자가 보고 있는 항목을 어떻게 찾을 수 있습니까?주인에게 주는 기능이 있습니까?만약 공개 동의어가 있다면요?

ALL_OBJECTS 보기를 쿼리할 수 있습니다.

select owner
     , object_name
     , object_type
  from ALL_OBJECTS
 where object_name = 'FOO'

동의어 찾기

select *
  from ALL_SYNONYMS
 where synonym_name = 'FOO'

분명히 말씀드리자면, 만약에 사용자 사용자의 SQL 문은 스키마 자격이 없는 개체 이름을 참조합니다(예: 'FOO'). Oracle은 먼저 사용자의 스키마에서 해당 이름의 개체(사용자 스키마의 동의어 포함)를 확인합니다.Oracle이 사용자 스키마에서 참조를 확인할 수 없는 경우 Oracle은 공용 동의어를 확인합니다.

특정 table_name에 대한 제약 조건을 구체적으로 찾는 경우

select c.*
  from all_constraints c 
 where c.table_name = 'FOO'
 union all
select cs.*
  from all_constraints cs
  join all_synonyms s 
    on (s.table_name = cs.table_name
     and s.table_owner = cs.owner 
     and s.synonym_name = 'FOO'
       )

HTH

부록:

사용자에게 DBA_view에 대한 액세스 권한이 부여된 경우(예: 사용자에게 SELECT_CATALOG_ROLE이 부여된 경우) '로 대체할 수 있습니다.DBA_을 대신하여ALL_앞의 SQL 예제에서 사용할 수 있습니다.ALL_x보기에는 권한이 부여된 개체만 표시됩니다.DBA_x보기는 권한이 있는지 여부에 관계없이 모든 데이터베이스 개체를 표시합니다.

저는 Oracle에서 테이블의 주인을 찾는 방법을 구글링하면서 이 질문이 최고의 결과라고 생각했기 때문에 다른 사람들의 편의를 위해 테이블에 대한 답변을 제공할 것이라고 생각했습니다.

오라클 DB에서 특정 테이블의 소유자를 찾으려면 다음 쿼리를 사용하십시오.

select owner from ALL_TABLES where TABLE_NAME ='<MY-TABLE-NAME>';

흥미로운 질문 - 이 기능을 수행하는 Oracle 함수는 없을 것 같습니다(UNIX의 "which" 명령과 거의 유사). 그러나 이름에 대한 해결 순서는 다음과 같습니다.

select * from 
(
 select  object_name objname, object_type, 'my object' details, 1 resolveOrder 
  from user_objects
  where object_type not like 'SYNONYM'
 union all
 select synonym_name obj , 'my synonym', table_owner||'.'||table_name, 2 resolveOrder
  from user_synonyms
 union all
 select  synonym_name obj , 'public synonym', table_owner||'.'||table_name, 3 resolveOrder
  from all_synonyms where owner = 'PUBLIC'
)
where objname like upper('&objOfInterest')

ALL_TABLES 및 ALL_CONSTARGS와 같은 Oracle 뷰에는 쿼리를 제한하는 데 사용할 수 있는 소유자 열이 있습니다.현재 사용자가 액세스할 수 있는 개체만 나열하는 ALL 대신 USER로 시작하는 이러한 테이블의 변형도 있습니다.

이러한 보기 중 하나가 문제를 해결하는 데 도움이 될 것입니다.그들은 항상 비슷한 문제로 저를 위해 잘 일했습니다.

Oracle 세션 내에서 현재 사용자의 이름을 찾으려면USER기능.

제약 조건의 소유자, 외부 키가 포함된 테이블의 소유자 및 참조된 테이블의 소유자는 모두 다를 수 있습니다.관심 있는 테이블 소유자인 것처럼 들리지만, 이 경우에는 원하는 것에 근접해야 합니다.

select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
  and Constraint_Type = 'R' and Owner = User;

@entpnerd가 말했듯이, 저는 당신이 opper() 절을 사용할 것을 제안합니다.

select * 
from ALL_TABLES 
where upper(TABLE_NAME) = upper('<table_name>')

언급URL : https://stackoverflow.com/questions/947140/how-can-i-find-the-owner-of-an-object-in-oracle

반응형