私はこれまでOracleを使用してきました。
通常、1つのインスタンスが1つのデータベースにマップされます。データベース内には、多くのテーブルスペース(システム、ユーザーなど)が存在する可能性があります。
ただし、SQLサーバーについてはよくわかりません。 SQL Serverの場合、1つのインスタンス=複数のデータベースですか?または、1つのインスタンス=複数のスキーマ?
Oracleでは、1つのデータベースにsystem、sysaux、tempテーブルスペース、およびuserテーブルスペースが含まれています。つまり、システムとユーザーの両方が同じデータベースにあります。
SQL Serverでは、1つのシステムデータベースがあり、複数のユーザーデータベースにサービスを提供できるようです。
私はOracleとSQL ServerのDBAです。
混乱は、SQL Serverの階層のセマンティックと追加レベルの不一致が原因ですが、それだけではありません!
両方のインスタンスの単一インスタンスデータベースについてのみ説明することに注意してください(意図的にしゃれた)。
インスタンス
Oracleでは、1つのインスタンスに割り当てられたメモリ量(SGA/PGA)と生成されたプロセス(smon、pmon dw0Xなど)があります。作成および使用されるすべてのものを監視するシステムビューがあります(V $およびdba_ビュー)。
これは、Oracleでよく知られている構造です。
そして、あなたはすでにそれを述べました、データベースは物理ファイルがある場所です。通常、RACに移行すると、違いが明白になります。
SQL Serverでは、インスタンスは同じように機能します。大量のメモリが割り当てられ、そのすべてを監視するシステムビュー(sys。)があります。
インスタンスには4つのシステムデータベースがあります。
システムデータベースは、SQL Server上の他のすべてのデータベースのメタデータ情報を保持します。
一時スペース
Oracleの場合:
一時テーブルスペース(一時テーブルスペースを作成)。 Oracleでは、一時テーブルスペースはPGA(プロセスメモリ、デフォルトで200M(最大11g))に収まらない操作のスピルゾーンです。たとえば、ハッシュ結合は、一時テーブルスペースで200Mを超えると、一般に原因になります。実行速度の遅いクエリ)。
SQL Serverでは、「システムデータベース」セクションにtempdbデータベースがあり、これはOracleよりも非常に活発に使用されています。非常に高速なディスクに配置します(SSDまたはファイバーが思い浮かびます)
したがって、2番目の大きな違いがあります。
オブジェクト
SQL Serverの場合:
オブジェクト(テーブル、ビュー)は、Oracleのようにユーザーに関連付けられているのではなく、「データベース」に関連付けられています。 「データベース」はオブジェクトを保持します(所有していません)。データベースの作成時に、これらのオブジェクトを格納するためのデータファイルが示されます。
Oracleの場合:
ユーザーは、同じ名前のスキーマに配置されるオブジェクトを作成します。ユーザーの名前を慎重に指定することが重要になります。
そして、3つ目の大きな違いがあります:
セキュリティ
Oracleの場合:
ユーザーが作成され、少なくともセッションを作成して、許可されたオブジェクトにアクセスできるようになります。または、自分のスキーマ(リソースロール)にオブジェクトを作成する権利があり、その名前でスキーマが作成されます。
テーブルスペースを作成して、オブジェクトを作成できる各ユーザーのデフォルトにすることを選択することもできます。それが行われない場合、デフォルトのテーブルスペースが使用されます。通常は「USER_DATA」です。
SQL Serverの場合:
オブジェクトはスキーマ内の特定のユーザーによって所有されていないため、ユーザーを最初に作成してから、特権を割り当てる必要があります。通常、オブジェクトの作成を行うメインユーザーになるユーザーには、特定のデータベースに対する「所有者」ロールが付与されます。
SQL Serverのそのユーザーは、スキーマの所有者のOracleと同等ですが、複数の所有者がいる場合があります。
SQL ServerがOracleより優れているのはセキュリティです。SQLServerのセキュリティは、デスクトップユーザーを管理するActive Directoryに関連付けることができます。これらのデスクトップユーザーは、「読み取り専用」と言うユーザーグループに関連付けることができます。そのActive DirectoryグループをSQL Serverに追加して、データベースへの「読み取り専用」アクセスを付与することができます。
ユーザーが退職すると、Active Directory管理者はそのユーザーを削除し、データベースへのアクセスも失われます。
OracleはLDAPを使用できますが、実際には、Windowsデスクトップユーザーとの結び付きがあまりよくありません。
4番目の大きな違い。
セマンティック
SQL Serverには追加のレイヤーがあります。 SQL Serverデータベースでは、オブジェクトをスキーマに編成できます。スキーマにも所有者がいる場合があります。より細かいセキュリティも導入されますが、使用されている間は一般的ではありません。また、必要に応じて追加のセキュリティ機能を活用できるように、開発段階の早い段階でオブジェクトをスキーマごとにグループ化することもお勧めします。
ログ/アーカイブログ
最後に、OracleとSQL Serverではアーカイブログの動作が異なります。 SQL Serverではデータベースごとにログファイルが作成されますが、Oracleではインスタンスレベルでアーカイブログモードがオンになっています。
ここで線がぼやけます。一部の側面では、SQL Serverのデータベースは実際にはデータベースです。他の例では、それらはよりスキーマのように見えます。
SQLサーバーでのアーカイブは、オプションバックアップモードをフルに設定して設定されます。次に、ログバックアップを実行してアーカイブします。ログのバックアップでは、機能を開始する前に完全バックアップを実行する必要があります。
Oracleでは、アーカイブされたログは自動的にアーカイブされ、その後リモートの場所にバックアップされます。
概要
Oracle:
Instance->User1->Schema1(named User1)->Tablespace1
->Tablespace2
->User2->Schema2(named User2)->Tablespace3
->User3->Granted "read only"->schema2.table1
SQLサーバー:
Instance->Database1->Schema1
->Database2->Schema2
->User1
->User2
->User1->Granted "owner"->Database1
->User2->Granted "read only"->Database2->Schema2
これらは、私が両方を比較するようになったときに頭に浮かぶものです。私は他の人からもっと聞いて、この答えを追加/修正したいです。
また、どちらも特に好みはありません。彼らはどちらも素晴らしい仕事をしていると思います。
Oracleはわかりませんが、SQL Serverでの意味を明確にします。
1つのWindows Serverに、SQL Serverの複数のインスタンスが存在する場合があります(独立したインストール)。
各インスタンスには独自のデータベース(ユーザーデータベースとシステムデータベース)があります。
各インスタンスには独自のシステムデータベース(master、model、msdb、tempdb)があることを理解することが重要です。インスタンスは、さまざまなSQL Serverのエディション、バージョンを使用でき、さまざまな製品をインストールできます。
一部のSQL Serverコンポーネントは、1つのサーバー(SQLブラウザーなど)上のインスタンス間で共有されます。
インスタンスBからインスタンスAにアクセスするには、インスタンスAにマップするリンクサーバーをインスタンスBに作成する必要があります。このメカニズムを使用してSQL ServerをOracleに接続することもできます。
各データベースは複数のスキーマを持つことができます。スキーマは、テーブル、プロシージャ、ビュー、その他のデータベースオブジェクトをグループ化します。
私見、最高の比較はOracle 12cとでしょう。 Oracle 12cでは、データベースはSQL Serverインスタンスのようなものであり、その12cデータベース内の各コンテナーはSQL Serverデータベースのようなものです。コンテナを備えたOracle 12cとSQL Serverの両方で、コンテナまたはデータベースをデタッチして、別のインスタンスまたはデータベースに再アタッチできます。 1つの大きな違いは、SQL Serverを使用すると、インスタンス内に必要な数のデータベースを作成できることです。ただし、Oracle 12cでコンテナーを作成する場合は、コンテナー機能の料金を支払う必要があります。 Enterpriseも必要になる場合があります。