카탈로그, 스키마, 사용자 및 데이터베이스 인스턴스 간의 관계
여러 공급업체(Oracle, SQL 서버, DB2, MySQL 및 Postgre)의 데이터베이스를 비교하려면 다음과 같이 하십시오.SQL) 객체를 일의로 식별하는 방법과 카탈로그가 필요한가요?예를 들어 Java의 DatabaseMetadata I에서는 적어도 카탈로그와 스키마 fooPattern을 지정해야 합니다.
카탈로그가 데이터 스토리지의 추상화에 불과하다는 것이 사실입니까?
Oracle의 경우:
- 서버 인스턴스 == 데이터베이스 == 카탈로그 == 동일한 실행 엔진에서 관리되는 모든 데이터
- 스키마 == 데이터베이스 내 네임스페이스, 사용자 계정과 동일합니다.
- 사용자 == 스키마 소유자 == 데이터베이스에 연결할 수 있고 스키마를 소유하며 다른 스키마에서 개체를 사용할 수 있는 명명된 계정입니다.
- 실행 중인 서버 내의 임의의 오브젝트를 식별하기 위해 필요한 것은 (실행명+오브젝트명)입니다.
포스트그레SQL:
- 서버 인스턴스 == db cluster == 동일한 실행 엔진에서 관리되는 모든 데이터
- database == catalog == db 클러스터 내의 단일 데이터베이스로, 동일한 db 클러스터의 다른 데이터베이스와 격리됨
- 내 으로는 "schema" == "schema")
public
- 허용된 각 데이터베이스의 개체를 개별적으로 소유하고 사용할 수 있는 사용자 == 이름 있는 계정
- 실행 중인 서버 내의 임의의 오브젝트를 식별하기 위해 필요한 것은 (프로세서명+스키마명+오브젝트명)입니다.
MySQL의 경우:
- 서버 인스턴스 == 카탈로그에서 식별되지 않고 데이터베이스 집합만 식별됩니다.
- database == schema == catalog == 서버 내의 네임스페이스입니다.
- 사용자 == 이름 있는 계정으로, 서버에 연결할 수 있으며 하나 이상의 데이터베이스에서 개체를 사용할 수 없습니다(소유할 수는 없음).
- 실행 중인 서버 내의 임의의 오브젝트를 식별하기 위해 필요한 것은 (실행명+오브젝트명)입니다.
Microsoft SQL Server의 경우:
- 서버 인스턴스 == 관리되는 데이터베이스 집합
- 서버 내 데이터베이스 == 네임스페이스 한정자(카탈로그라고도 함)
- schema owner 역할에 으로는 "schema == "skema == "skema == "skema" == "skema" "" == "skema" "skema" == "skema" == "skempace" 입니다.
dbo
- 사용자 == 이름 있는 계정으로, 서버에 연결할 수 있으며 하나 이상의 데이터베이스에서 스키마가 소유자로 작동합니다.
- 실행 중인 서버 내의 임의의 오브젝트를 식별하기 위해 필요한 것(예: 이름 + 소유자 + 오브젝트 이름)
그래서 당신의 질문에 대한 답은 다음과 같습니다.
개체를 식별하는 데 카탈로그 이름이 필요한지 여부는 구현에 따라 달라집니다.카탈로그, 스키마 및 데이터베이스의 의미는 구현마다 다릅니다.
예, 카탈로그는 데이터 스토리지의 추상화입니다.또한 독립된 네임스페이스로 정의해야 한다고 생각합니다만, 모든 SQL 엔진이 그렇게 하는 것은 아닙니다.
데이터베이스와 스키마는 모든 벤더가 잘 정의하고 있습니다.카탈로그는 (적어도 Oracle 및 Postgres에서는) "데이터베이스"와 동의어일 수도 있고 "스케마"와 동의어일 수도 있고 둘 다 동의어일 수도 있습니다.카탈로그라는 용어는 메타데이터 수집(시스템 테이블이라고도 함)을 의미하기도 합니다.
스키마는 액세스 제어 계층이 있는 논리적 네임스페이스를 나타내므로 프로그래머가 SQL 데이터베이스에서 아티팩트를 구성하기 위해 사용해야 하는 것입니다.
DB2의 경우 스키마가 네임스페이스로 사용됩니다.따라서 데이터베이스 내의 객체를 일의로 식별하려면 *schema.object_name*이라고 합니다.이것은 멀티 테넌시(Multi-tenancy)를 실현하는 매우 편리한 방법입니다.데이터베이스의 각 테넌트에 대해 개별 스키마를 가질 수 있습니다.이것에 의해, 시큐러티 측면과 관리 측면의 양쪽 모두의 염려를 적절히 분리할 수 있습니다.단일 DB2 데이터베이스에 32K 스키마를 가질 수 있습니다.
DB2의 카탈로그는 데이터베이스에 대한 메타데이터를 포함하는 시스템 테이블의 모음입니다.일반적으로 카탈로그 개체에 직접 액세스하는 것은 잘못된 관행으로 간주됩니다.카탈로그 및 카탈로그에 포함된 메타데이터를 탐색하려면 API에서 제공하는 기능(예: JDBC)을 사용하는 것이 가장 좋습니다.
DB2에는 다른 추상화 계층도 있습니다.동일한 시스템에서 여러 DB2 인스턴스를 실행할 수 있습니다.각 인스턴스는 256개의 개별 데이터베이스(각각 32K 스키마)를 관리할 수 있습니다.서버의 DB2 인스턴스 수는 사용 가능한 메모리 양에 의해서만 제한됩니다.한때 Amazon EC2 m1.large에서 DB2 인스턴스 120개(각각 데이터베이스 1개 및 연결 10개)가 실행되고 있었습니다.또한 단일 서버에 DB2를 여러 개 설치할 수 있습니다.이 기능은 마이그레이션할 새 버전을 테스트할 때 유용합니다.올바른 인스톨로 전환하는 것을 잊어버리는 경우가 종종 있습니다만, 혼란스럽기는 합니다.
philiprem이 게시한 mysql에 대해 여기에 언급된 것은 잘못된 것 같습니다.다음 링크와 같이 mysql에서 jdbc 카탈로그는 데이터베이스에 대응합니다.jdbc 스키마는 지원되지 않습니다.
- http://forums.mysql.com/read.php?39,137564,137629#msg-137629
- http://bugs.mysql.com/bug.php?id=23304
- http://books.google.com/books?id=a8W8fKQYiogC&pg=PA25&lpg=PA25&dq=jdbc+catalog+schema&source=bl&ots=oj0HAA91zL&sig=vRjgPLV_3J6o2kqh6epwvZNZgcM&hl=en&sa=X&ei=3k7zT-_qBueW2AXSjdDkAw&ved=0CFYQ6AEwAg#v=onepage&q=jdbc%20catalog%20schema&f=false
언급URL : https://stackoverflow.com/questions/7942520/relationship-between-catalog-schema-user-and-database-instance
'programing' 카테고리의 다른 글
Mockito를 사용한 정적 메서드 조롱 (0) | 2022.09.30 |
---|---|
github 작업 - mysql에 연결할 수 없습니다. (0) | 2022.09.30 |
MySQL 5.7.12 가져오기에서는 CHARTER SET 'binary' 문자열에서 JSON 값을 생성할 수 없습니다. (0) | 2022.09.30 |
mySQL 서브쿼리 제한 (0) | 2022.09.30 |
Panda는 시리즈/데이터프레임 컬럼을 조건부 생성 (0) | 2022.09.30 |