카탈로그, 스키마, 사용자 및 데이터베이스 인스턴스 관계 관계
여러 공급 업체 (Oracle, SQL Server, DB2, MySQL 및 PostgreSQL)의 데이터베이스를 비교 대상 개체를 고유하게 이미지하는 방법과 카탈로그가 필요합니까? 예를 들어, Java의 DatabaseMetadata에서 최소한 카탈로그와 스키마 fooPattern을 지정해야합니다.
카탈로그가 데이터 스토리지의 추상화에 결함이 있다는 사실입니까?
Oracle에서 :
- 서버 인스턴스 == 데이터베이스 == 카탈로그 == 동일한 실행 엔진에 의해 관리되는 모든 데이터
- 스키마 == 데이터베이스 내의 네임 스페이스, 사용자 계정과 동일
- 사용자 == 스키마 소유자 == 명명 된 계정, 스키마와 동일, 데이터베이스에있는 수있는 사용자, 스키마를 소유하고 가능한 다른 스키마에서 개체를 사용하는
- 실행중인 서버에서 개체를 구매하기 위해 (스키마 이름 + 개체 이름)이 필요합니다.
PostgreSQL에서 :
- 서버 인스턴스 == db 클러스터 == 동일한 실행 엔진에 의해 관리되는 모든 데이터
- == 카탈로그 == 동일한 db 클러스터의 다른 데이터베이스와 격리 된 db 클러스터 내의 단일 데이터베이스
- 스키마 == 데이터베이스 내의 네임 스페이스
- 사용자 == 데이터베이스에 허용되는 수있는 명명 된 계정, 된 각 데이터베이스의 개체를 식별 적으로 소유 및 사용
- 실행중인 서버에서 개체를 구매해야합니다 (데이터베이스 이름 + 스키마 이름 + 개체 이름).
MySQL에서 :
- 서버 인스턴스 == 카탈로그로 아직없는 데이터베이스 세트 만
- 데이터베이스 == 스키마 == 카탈로그 == 서버 내의 네임 스페이스.
- 사용자 == 명명 된 계정, 서버에 연결하고 하나 이상의 데이터베이스에서 개체를 사용할 수 있습니다. 소유 할 수 없음 -소유권 개념 없음
- 실행중인 서버에서 개체를 구매하기 위해 (데이터베이스 이름 + 개체 이름)이 필요합니다.
Microsoft SQL Server에서 :
- 서버 인스턴스 == 관리되는 데이터베이스 집합
- 스페이스 == 서버 내의 네임 스페이스 한정자, 거의라고 한정 데이터베이스
- 스키마 == 소유자 == 데이터베이스 내 네임 스페이스, 데이터베이스 역할에 연결됨, 기본적으로 만
dbo
사용됨 - 사용자 == 명명 된 계정, 서버에 연결하고 하나 이상의 데이터베이스에서 개체를 사용할 수 있습니다 소유 할 수 -스키마가 소유자로 작동 함
- 실행중인 서버에서 개체를 보유하고 있습니다 (데이터베이스 이름 + 소유자 + 이름).
따라서 귀하의 질문에 대한 답변은 다음과 있습니다.
개체를 발견하는 데 카탈로그 이름이 필요한지 여부는 구현에 따라 달라집니다. "카탈로그", "스키마"및 "데이터베이스"의 의미는 구현마다.
예, 카탈로그는 데이터 저장소의 추상화입니다. 자체 포함 된 격리 된 네임 스페이스로도 정의 될 생각하지만 모든 SQL 엔진이 수행하는 것이 아닙니다.
데이터베이스 와 스키마 는 모든 공급 업체에서 매우 잘 정의됩니다. 카탈로그 는 "데이터베이스"(적어도 Oracle 및 Postgres에서)와 동의어, "스키마"와 동의어 둘 다에입니다. 카탈로그 라는 용어 는 종종 메타 데이터 수집 (일명 시스템 테이블)을 의미합니다.
DB2의 경우 스키마가 네임 스페이스로 사용됩니다. 따라서 데이터베이스에서 데이터베이스에서 개체를 고유하게 떠오르는 구매 대상 * schema.object_name *이라고 말하면됩니다. 이것은 멀티 테넌시를 달성하는 매우 편리한 방법입니다. 데이터베이스의 각 테넌트에 스키마를 스키마를 도입합니다. 이를 통해 보안 및 관리 부서에서 우려 사항을 잘 분리 할 수 있습니다. 단일 DB2 데이터베이스에 32K 스키마를 사용할 수 있습니다.
DB2의 카탈로그는 데이터베이스에 대한 메타 데이터를 포함하는 시스템 테이블 모음입니다. 일반적으로 카탈로그 개체에 직접 액세스하는 것은 나쁜 습관으로 처리됩니다. API (예 : JDBC)에서 제공하는 기능을 사용하여 카탈로그 및 포함 된 메타 데이터를 탐색하는 것이 가장 좋습니다.
DB2에는 다른 추상화 계층이 있습니다. 머신 머신에서 여러 DB2 인스턴스를 사용할 수 있습니다. 각 인스턴스는 256 개의 별도 데이터베이스 (각각 32K 스키마 포함)를 관리 할 수 있습니다. 서버의 DB2 인스턴스 수는 사용 가능한 메모리 양에 최대 만 제한됩니다. 한 시점에 Amazon EC2 m1.large에서 실행되는 120 개의 DB2 인스턴스 (각각 하나의 데이터베이스와 10 개의 연결 포함)가 있습니다. 단일 서버에 DB2를 사용하고 있습니다. 마이그레이션하려는 새 버전을 테스트 할 때 유용합니다. 올바른 설치로 전환하는 것을 종종 잊지 버림에도 불구하고 혼란 스럽습니다.
filiprem의 게시물에서 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_3J6o2kqh6epwjd&AXTZcata6qlog=3vedk7Zepwjd%3vedk7Zepwjd%3vedk7Zepwjd%AXTZcata6qlog = 거짓
'ProgramingTip' 카테고리의 다른 글
직선 텍스트 출력을위한 MVC 3 Razor 구문? (0) | 2020.12.29 |
---|---|
"NO_MODIFICATION_ALLOWED_ERR"이 발생합니다. (0) | 2020.12.29 |
GitHub Api 다운로드 zip 또는 tarball 링크 (0) | 2020.12.29 |
header ()를 사용하여 PHP로 강제 파일 다운로드 (0) | 2020.12.29 |
GCD에서 "전역 면역"과 "주 면역"의 차이점은 무엇입니까? (0) | 2020.12.29 |