4

システムに Oracle をインストールしたので、orcl が SID になりました。これは、データベース インスタンスの一意の識別子です。

これで、スターター データベースがインストールの一部として作成されました。システム アカウントを使用して、2 人のユーザー user1 と user2 を作成しました。

SQL開発者を使用してユーザーにアクセスしています.これは、テーブル、ストアドプロシージャビューなどのすべてのデータベースオブジェクトとの2つの異なる接続を示しています.

それで

これら 2 人のユーザーを使用する場合、同じデータベースにアクセスしていますか? user1 または user 2 にログインしてすべての ddl コマンドを実行していますが、このデータはすべて同じ .dbf ファイルに保存されますか?

データベース インスタンスは 1 つのデータベースにしか接続できませんが、これは基本的に、新しいデータベースを作成するたびに、データベース インスタンスがそのデータベースを指すようにするには、構成を変更する必要があるということですか?

4

1 に答える 1

3

私の 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 ではるかに困難であるため (不可能ではないにしても)、多くのスキーマを持つ単一のデータベースを配置する方がはるかに簡単です。

于 2013-05-27T06:02:59.633 に答える