2012-08-02 2 views

답변

2

사용한 시스템의 수를 거쳐 두 (I는 "하드"그들에게 전화) 암시 적 및 명시 적 스키마 참조, 모든 경우에 응용 프로그램 코드에서 스키마 이름을 하드 코딩하면 삶이 어려워집니다.

오라클이 동의어를 사용하는 이유입니다.

스키마 이름을 하드 코딩하는 유일한 시간은 배포 스크립트입니다 (예 : 객체를 생성 할 때 객체를 생성해야하는 스키마를 명시하고 싶습니다.

개발자가 "동일한 인스턴스에 dev 데이터베이스의 사본을 가질 수 있습니까?"라고 물으면 다음과 같이 말할 수 있습니다. , "문제 없습니다 - 몇 분만 기다려주세요". 나는 새로운 스키마를 만들고 테이블을 복사한다.그런 다음 로그인 사용자의 동의어를 업데이트하여 새 스키마를 가리 킵니다. Voila, 하나의 인스턴스에 두 개의 데이터베이스. 그러나 응용 프로그램 코드에서 스키마 이름을 하드 코딩하도록하면 동의어 변환이 완료되지 않으므로 불가능합니다.

2

기본 스키마가 CRITTERS 인 사용자로 로그인했기 때문에 둘 다 작동합니다. 기본 스키마가 다른 경우 다른 사용자로 로그인하면 정규화 된 형식의 쿼리를 사용해야합니다.

3

여러 스키마를 사용하는 경우, 아니오. 그것은 모두 상황에 관한 것입니다. 암시 적보다 암묵적인 것이 낫습니다.

+2

전적으로. 이것을 확장하려면 시간을 절약 할 수 있다면 항상 명료해야합니다. QA_CRITTERS 스키마가 필요한지 누가 알 수 있습니까? 그것은 명백한 스키마를 사용하지 않는 모든 곳을 추적하는 데 몇 시간과 시간을 소비하는 것을 빨기도합니다. –

+0

시간을 절약 할 수 없어도 항상 명시하십시오! 나중에 고마워 할 것입니다! –

1

오라클 응용 프로그램의 첫 번째 문을 사용하면 액세스 할 객체 상태로 명시 적입니다 :

alter session set current_schema = MYSCHEMA; 

나는 하나 개의 데이터베이스 서버 (예) 내에서 서로 다른 스키마 (데이터베이스)에 내 응용 프로그램을 가리킬 수 있습니다 이쪽으로. 따라서 스키마 계정으로 로그인하지 마십시오. 스키마 계정은 잠겨 있어야하고 ddl 변경 (업그레이드) 중에 만 열어야합니다.

의 내가 방송사와 나는 여러 채널을 실행한다고 가정 해 봅시다 : RTL1, RTL2, RTL3, RTL4, 등등 ... 같은 응용 프로그램이 데이터베이스 서버에서 다른 데이터베이스 (오라클 용어 스키마)에

지금 로그온 할 수 있습니다 나는 RTL1 내 응용 프로그램을 실행 :

alter session set current_schema = RTL1; 
select * from top_stories; 

는 지금은 RTL2 내 응용 프로그램을 실행 등

alter session set current_schema = RTL2; 
select * from top_stories; 

...

,

내가 볼 수있는 # 1 디자인 결함은 응용 프로그램 데이터베이스 서버와 일대일 관계입니다. 관리, 저장 및 백업을 풀 타임 작업으로 만듭니다. 오라클은 하나의 데이터베이스 서버에서 수천 개의 애플리케이션과 데이터베이스/스키마를 실행할 수 있습니다.

하지만 항상 그렇습니다. 때로는 하나의 데이터베이스 서버에서 하나의 응용 프로그램을 실행하는 것이 좋습니다.

그래서 어떤 스키마에도 내 응용 프로그램을 설치하지 않도록 노력하고 있습니다. 다른 스키마의 객체에 액세스해야하는 경우 뷰 및/또는 동의어를 사용합니다.

이 방법은 아주 잘 작동하고 난 쿼리하여 접근하고 개체를 알고 :

select sys_context('USERENV','CURRENT_SCHEMA') from dual;  
관련 문제