2010-07-01 3 views
2

오라클에서 JBoss 5.1.0GA를 사용하고 있는데 this을 보았습니다. 오라클과 달리 TIMERS 테이블을 생성해야하는 스키마의 이름을 명시 적으로 명시해야한다고 경고했습니다. 동일한 테이블 이름이 스키마에서 두 번 사용될 수 있습니다.오라클 스키마 테이블 이름 제한

이 글을 읽은 후 StackOverflow에서 this question을 보았고 오라클의 객체 계층 구조에 대한 설명을 원합니다.

단일 Oracle 데이터베이스 서버가 있다고 가정합니다. 이 과정에서 우리는 D1과 D2라는 두 개의 데이터베이스를 생성합니다. 각 데이터베이스 내부에서 S1과 S2의 두 가지 스키마를 생성합니다. 각 데이터베이스에 각 스키마 내부에서, 우리는 하나의 테이블을 생성 - T1을 T4까지 :

+-D1 
| +---S1 
| | +---T1 
| +---S2 
|  +---T2 
+-D2 
    +---S1 
    | +---T3 
    +---S2 
     +---T4 

내가 그때 D1/S2 내부 T1라는 다른 테이블을 추가하는 경우가 있기 때문에 작동하지 않습니다 생각, 내가 잘못 알고 테이블 이름은 스키마 내에서 고유해야하며 T1은 이미 D1/S1에 있지만 T1/T2 또는 S2에 T1을 추가하면 T1이라는 두 테이블이 다른 데이터베이스에 있기 때문에 괜찮을 것입니까?

오라클 스키마에 대한 나의 이해가 결함이 있습니다 (이전에 많이 사용했던 데이터베이스가 아닙니다). 그래서 바보 같은 질문을하는 것이 유감입니다. 사전에

감사

리치

답변

4

데이터베이스 계층 구조 레벨은 Oracle에 없습니다. 인스턴스 (프로세스 세트)는 최대 하나의 데이터베이스 (파일 세트) 만 가질 수 있습니다. 데이터베이스 내에서 오라클의 사용자와 동일한 스키마를 찾을 수 있습니다.

각 스키마에는 독립적 인 네임 스페이스가 있습니다. 스키마 S1S2은 모두 동일한 데이터베이스에 T1이라는 테이블을 가질 수 있습니다. 접두어로 소유자를 사용하여이 테이블에 특별히 액세스합니다 (S1.T1S2.T1).

일부 개체에는 소유자 (또는 소유자가 PUBLIC)가 없습니다. 예를 들어 공용 동의어 및 디렉터리. 이러한 개체의 이름은 데이터베이스에서 고유해야합니다. 이름 충돌을 피하기 위해 공용 동의어를 현명하게 사용하십시오 (= 내 의견으로는 아껴서).

+0

그렇다면 RedHat 웹 사이트 (두 링크 중 첫 번째 링크)에 대한 의견은 무엇을 의미합니까? – Rich

+0

@ 작가 : 아마도'타이머 '는 공개 동의어입니까? –

+0

"그러나 데이터베이스 인스턴스에 연결 한 사용자가 두 인스턴스 모두에 액세스 할 수 있으면 테이블 중 하나에 액세스 할 때주의해야합니다. 특정 스키마의 테이블을 명확하게 참조하려면 schema.table을 사용하십시오." - 그게 문제라고 생각해. http://stackoverflow.com/questions/1685775/oracle-same-table-name-on-different-schema – Rich

1

지금까지 오라클이가는대로, 당신은 두 개의 서로 다른 스키마에서 같은 테이블 이름을 가질 수 있습니다. 여러분이 읽고 있던 JBoss 사용법에 특정한 것이있을 수 있지만 오라클의 제한 사항은 아닙니다.