2009-10-01 5 views
0

는 내가 테이블, 인덱스, 기본 키 제약 조건 등을 만드는 거대한 스크립트가 오라클 SQL 개발자n00b 오라클 질문

을 사용하고 있습니다.

내 DB 이름은 : 나는 SYSDBA로이 dbo_other에 로그인

dbo_other.

그때 내 스크립트를 실행하면 테이블 '테이블'

그러나, 나는 추가하여 스크립트를 추가하는 경우 'dbo_other을.'아래 왼쪽 패널에 표시되지 않습니다 모든 테이블 이름 앞에 테이블이 나타납니다.

이것은 매우 지루하고 시간이 오래 걸립니다.

이 문제를 방지 할 수있는 방법이 있습니까? 왜 그들은 dbo_other를 추가하지 않고 dbo_other에 나타나지 않을까요? 모든 테이블 이름 앞에서 ?? 오른쪽 위 모서리에 쿼리를 실행하면 드롭 다운에 dbo_other가 선택되었습니다!

내가 만든 테이블에서 select * 할 수도 있습니다 (하지만 왼쪽 사이드 바에서는 보이지 않습니다). 또한 pl/sql 개발자로 테이블을 볼 수 있습니다.

왜 oracle sql 개발자는 dbo_other를 사용하여 SQL 작성을 원하십니까?

각 테이블에 추가하지 않으려면 어떻게해야합니까? 어쩌면 스크립트의 상단에서 수행 할 수있는 작업이므로 나중에 나오는 모든 작업에 영향을 미칩니 까?

답변

6

왜 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 스키마에있는 모든 개체가 생성됩니다. 목에 엄청난 고통이 될 것입니다. 나는 동등하고 반대의 복귀 스크립트가 있기를 바랍니다.

WRT 스크립트를 제대로 실행하려면 DBO_OTHER (보통 - 즉 SYSDBA 또는 SYSOPER없이)로 연결해야합니다. 이는 결국 기본값입니다.

+1

테이블 소유권 ++ –

0

왼쪽 패널의 "테이블"트리에는 Oracle SQL Developer에 로그인 한 사용자가 소유 한 테이블 만 포함됩니다. 스크립트가 다른 사용자의 스키마에 테이블을 만드는 경우 "다른 사용자"옆의 +를 클릭하고 해당 사용자를 찾은 다음 해당 테이블에서 +를 클릭해야합니다.

다른 사람들은 말했듯이, 필요하지 않다면 SYSDBA를 사용해서는 안되며, 스크립트가 대략적인 설명에 기반하여 일반 사용자로 실행되어야하는 것처럼 들립니다.

0

나는이 작은 jem을 우연히 발견했기 때문에 기본적으로 로그인하지 않은 스키마/사용자에 대한 작업을 수행 할 수 있습니다. 즉, 기본적으로 select 문 등은 자신의 스키마 대신이 새로운 스키마에서 작동합니다.

ALTER 세션 설정 CURRENT_SCHEMA =

예 : 나 자신 + 표 + 표 2 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.>