web-dev-qa-db-ja.com

インスタンスとデータベース(OracleとSQL Server)

私はこれまでOracleを使用してきました。

  • インスタンス->プロセス+メモリ
  • データベース->物理データファイル

通常、1つのインスタンスが1つのデータベースにマップされます。データベース内には、多くのテーブルスペース(システム、ユーザーなど)が存在する可能性があります。

ただし、SQLサーバーについてはよくわかりません。 SQL Serverの場合、1つのインスタンス=複数のデータベースですか?または、1つのインスタンス=複数のスキーマ?

Oracleでは、1つのデータベースにsystem、sysaux、tempテーブルスペース、およびuserテーブルスペースが含まれています。つまり、システムとユーザーの両方が同じデータベースにあります。

SQL Serverでは、1つのシステムデータベースがあり、複数のユーザーデータベースにサービスを提供できるようです。

7
tiongmaru

私はOracleとSQL ServerのDBAです。

混乱は、SQL Serverの階層のセマンティックと追加レベルの不一致が原因ですが、それだけではありません!

両方のインスタンスの単一インスタンスデータベースについてのみ説明することに注意してください(意図的にしゃれた)。

インスタンス

Oracleでは、1つのインスタンスに割り当てられたメモリ量(SGA/PGA)と生成されたプロセス(smon、pmon dw0Xなど)があります。作成および使用されるすべてのものを監視するシステムビューがあります(V $およびdba_ビュー)。

これは、Oracleでよく知られている構造です。

そして、あなたはすでにそれを述べました、データベースは物理ファイルがある場所です。通常、RACに移行すると、違いが明白になります。

SQL Serverでは、インスタンスは同じように機能します。大量のメモリが割り当てられ、そのすべてを監視するシステムビュー(sys。)があります。

インスタンスには4つのシステムデータベースがあります。

  1. システムビューがあるシステム。
  2. システム関連情報も保持するmsdbデータベース。通常、ここにバックアップ関連のデータがあります。少なくとも古いバックアップレコードをフラッシュするには、少しメンテナンスが必要です。
  3. モデル、作成するすべての新しいデータベースのモデルとして使用される、適切に名前が付けられたデータベース。データファイルの設定(自動拡張、初期サイズ、バックアップモード)を変更して、すべての新しいデータベースがその恩恵を受けるようにすることをお勧めします。
  4. tempdbは以下で開発されました。

システムデータベースは、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

これらは、私が両方を比較するようになったときに頭に浮かぶものです。私は他の人からもっと聞いて、この答えを追加/修正したいです。

また、どちらも特に好みはありません。彼らはどちらも素晴らしい仕事をしていると思います。

17

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に接続することもできます。

各データベースは複数のスキーマを持つことができます。スキーマは、テーブル、プロシージャ、ビュー、その他のデータベースオブジェクトをグループ化します。

5
BuahahaXD

時々、写真は千の言葉に値する: SQL Server Instances

SQL Serverでは、インスタンスは製品の単一のインストールを表し、一意のサーバープロセスとして実行されます。各マシンは、SQL Serverの複数のインスタンスをホストできます。

各インスタンスには次のものがあります。

  1. 独自のバイナリ(Oracleでは、同じバイナリで複数のデータベースを実行できます)。これは、各インスタンスがSQL Serverの異なるバージョン/エディションである可能性があることも意味します。
  2. 独自のサーバープロセス
  3. システムデータベースのセット(マスター、モデル、msdb、tempdb)
  4. 独自の構成(サービス、レジストリキー...)
5
spaghettidba

私見、最高の比較はOracle 12cとでしょう。 Oracle 12cでは、データベースはSQL Serverインスタンスのようなものであり、その12cデータベース内の各コンテナーはSQL Serverデータベースのようなものです。コンテナを備えたOracle 12cとSQL Serverの両方で、コンテナまたはデータベースをデタッチして、別のインスタンスまたはデータベースに再アタッチできます。 1つの大きな違いは、SQL Serverを使用すると、インスタンス内に必要な数のデータベースを作成できることです。ただし、Oracle 12cでコンテナーを作成する場合は、コンテナー機能の料金を支払う必要があります。 Enterpriseも必要になる場合があります。

0
Gandolf989