私の Oracle での経験では、分割の典型的な単位はスキーマです。Oracle のスキーマは、SQL Server や PostgreSQL でデータベースを使用するのと同じように使用されます。これらは、ユーザーとオブジェクトの論理的な分離の両方を表します。物理的な分離は通常、テーブルスペースを使用して行われます。表領域は、データが格納される物理ファイルのグループです。スキーマは、異なる表領域を共有または使用できます。スキーマごとに 1 つのテーブルスペースを持つことは一般的ではありません。通常、いくつかの表領域を共有するか、1 つだけを共有することさえあります。
それを念頭に置いて、あなたの質問にもっと直接的に答えるために、
1) 他のデータベースと同様に、オブジェクトが属するスキーマを指定できます。
CREATE TABLE MY_SCHEMA.TABLE_X ( X NUMBER )
2 つのステートメントのスキーマCREATE
が異なる場合、異なるオブジェクトが作成されます。Oracle の違いは、デフォルトのスキーマがユーザーごとに変わることです。デフォルトのスキーマは常に、現在接続されているスキーマ/ユーザーです。したがって、次のようにスキーマを省略した場合:
CREATE TABLE TABLE_X ( X NUMBER )
暗黙のスキーマは、現在接続されているスキーマ/ユーザーです。したがって、としてログインしている場合MY_SCHEMA
、上記は最初の例と同等です。2 人の異なるユーザーとして接続する場合、暗黙のスキーマは異なり、DDL は2 人のユーザー間で同等ではありません。そのため、 schema を指定しないと、同じステートメントを実行しても 2 つの異なるオブジェクトが作成されます。
2 つのオブジェクトが同じ表領域にある場合は、同じ物理ファイルに格納できます。(明示的に作成せず、スキーマの作成時に別のデフォルトのテーブルスペースを指定しなかった場合、それらはおそらく USERS テーブルスペースにあります。) それでも、これらは 2 つの完全に別個のオブジェクトです。
最初の例のようにスキーマを明示的に指定すると、DDL は誰が実行するかに関係なく同等になります (ただし、パーミッションによって一部のユーザーが実行できない場合があります)。そのため、オブジェクトを 1 回作成することになり、2 回目に作成しようとすると、CREATE OR REPLACE
または類似のものを使用していない限り、エラーが発生します。
2) この質問に対する答えはわかりませんが、前述したように、Oracle では通常、分離の基本単位はデータベースではなくスキーマです。あなたが尋ねている質問は、スキーマがそのように使用される理由の大部分を占めていると思います。同じマシン/インスタンスに複数の実際のデータベースを配置することは、他のデータベースよりも Oracle ではるかに困難であるため (不可能ではないにしても)、多くのスキーマを持つ単一のデータベースを配置する方がはるかに簡単です。