回答:
私は過去数年にわたってOracleとSQL Serverでの作業を入れ替えてきましたが、ここでその逆を行うことについて宣伝文句を書きました。 多くの慣用的およびアーキテクチャ上の違いがあり、さまざまな用語が各製品を取り巻くベンダーおよび開発者/ DBAコミュニティによって異なって使用されます。
物理的アーキテクチャ
SQL Serverは、さまざまなものをOracleとは少し異なるように編成し、Oracleに直接類似するものがない1つまたは2つの重要な概念を持っています。
「データベース」は、SQL Serverの個別のアイテムであり、独自のユーザー権限、スキーマ/名前空間、およびストレージがあります。Sybaseに精通している場合、製品の共通の起源により、Sybaseのデータベースとほぼ同じように機能します。
ファイルグループは、データベースに対してローカルですが、表スペースとほぼ同等です。
スキーマは、SQL Serverのデータベースユーザーとは異なる概念ですが、ユーザーはデフォルトのスキーマを持つことができます。
MVCCは、SQL Serverでは多少異なる動作をします。これは比較的新しい機能で、古いバージョンのロックが解除されるまで行の異なるコピーを保持します。SQL Serverには、ロールバックセグメントに直接相当するものはありません。SQL Serverデータベースではデフォルトではアクティブではありません。
Tempdbは、SQL Serverではるかに頻繁に使用されます。システムは、一時テーブルと中間結合結果にそれを使用します。後でtempdbの詳細。
テーブルのパーティション分割は、Oracleよりもやや不格好です。提供するものからパーティションキーを作成するパーティション関数を設定し、そのパーティション関数に対するパーティションスキームを設定する必要があります。パーティション構成は、パーティション構成にテーブルを作成するという点で、ファイルグループのように動作します。
パーティションをスワップインおよびスワップアウトするには、適切な構造の空のテーブルに制約を設定する必要があります。制約は、パーティションキーの値が、スワップしようとするパーティションに適切であることを保証します。
マテリアライズドビューは、SQL Serverではインデックス付きビューと呼ばれます。このGROUP BY
句にはCUBE
演算子があり、ドキュメントにはクエリ書き換え機能が含まれています。ただし、この機能は十分に文書化されておらず、ひどく成熟していない場合があります。YMMV。
SQL Serverは自律トランザクションをサポートしていませんが、XAまたはOLEDBトランザクションプロトコルを介した2フェーズコミットをサポートしています。
クラスタ化インデックスは、テーブル内のすべての列がクラスタ化インデックスに参加する必要がないため、Oracleのインデックス順テーブルとは少し異なります。SQL Serverアーキテクチャでは、OracleのIOTよりもはるかに広く使用されています。
SQL Serverはインデックスのカバーをサポートしていますが、結合インデックスはありません。ビットマップインデックスはサポートされていませんが、ファクトテーブルにヒットすることなく交差を計算できるインデックス交差/スター変換演算子があります。
シーケンスは、SQL Serverに比較的最近追加されたものです。従来、自動インクリメントキーはID列を介して行われます。を通じてID列に値をロードできますset identity_insert on
。
プログラミング
慣用的なT-SQLには、慣用的なPL / SQLといくつかの違いがあります。パラダイムの違いのいくつかがより詳細に説明するに値するほど十分に異なって機能します。
T-SQLにはパッケージの概念はありません。データベース内のすべてのストアドプロシージャと関数は、共通の名前空間に存在しますが、スキーマを使用してこれを分割することができ、名前空間はデータベースに対してローカルです。
一時テーブルの使用方法を体感してくださいSELECT INTO
。実際にカーソルを必要とするT-SQLコードに遭遇することはほとんどありません。一時テーブルを使用すると、操作を集合操作で実行できるステップに分割できます。 SELECT INTO
tempdbのログは最小限に記録され、ユーザーデータベースの特定の回復モードでも最小限に記録されるため、中間結合結果を保持するクエリ演算子と同じくらい高速です。
慣用的なT-SQLは、PL / SQLでカーソル変数を表示するような役割で一時テーブルを使用しますが、集合演算をより多く使用します。ただし、一時テーブルはかなり鈍いコードになる可能性があるため、注意して使用してください。
システムデータディクショナリは、古いバージョンのOracleよりもはるかに鈍いものでしたが、SQL Server 2005ではさらに良くなりました。Microsoftが提供するツールには、SSMSエクスプローラに組み込まれた多くのイントロスペクションがありますが、データディクショナリを回避します。それは区別しないALL
、USER
とDBA
ても、DBオブジェクトの景色。
SSMSにはクエリプランビューアーが組み込まれています。
T-SQLコードの識別子は[]で引用でき、引用されている場合はあらゆる種類のごみを含めることができます。ただし、「Direct / Transfer」列の呼び出しをキャッチすると、腸を引き裂きます。
SQL Serverには(2005 IIRC以降)ウィンドウ関数があるため、グループ内で注文や合計などを実行できます。
T-SQLには直接相当するものはありませんがCONNECT BY
、再帰CTEを介して再帰を実行できます。
(データベース内のスキーマではなく)データベース間をホップするコードを記述する必要がある場合は、パブリックシノニムを使用してオブジェクトをローカルにエイリアスし、コード内のエイリアスを参照することを検討してください。これにより、データベース名へのハードコーディングされた依存関係が回避されます。
データベース名へのハードコードされた依存関係を回避する場合、データベースを使用すると、同じサーバー上で複数の環境を非常に簡単に維持できます。
カスタム集計関数などのいくつかのことは、CLR sprocを使用してのみ実装できます。また、トランザクションコンテキストからエスケープする場合(ロールバック防止エラーロギングのために自律型トランザクションを偽装する場合など)、CLR sprocを使用できます。現在のトランザクションコンテキストの外部でローカル接続を作成できるためです。
セキュリティ
ログインはSQL Serverインスタンスレベルで定義されますが、各ログインは「データベースユーザー」としてゼロ個以上のデータベースにマップされます。パーミッションは「ログイン」(サーバー)と「ユーザー」(データベース)の両方に割り当てることができますが、データベースでは通常「ロール」が使用されます。ユーザーはロールに属し、権限はロールに割り当てられます。SQL Server 2012は「サーバーロール」を追加します。
SQL Server 2012では、「部分的に含まれるデータベース」と呼ばれる概念が導入され、ユーザーとロールの情報をそのデータベースに対してローカルに保持できます。
データベース内では、ユーザーとスキーマの概念は分離されています。ユーザーまたはロールをスキーマに割り当てることができ、スキーマはデータベースオブジェクトを所有します。
Windows認証は、背後でログイン情報を使用して、SQL Serverログインに対してマシンまたはドメインのユーザーを認証します。これに対するIIRCサポートは、Oracleのオプションの追加機能です。
特別なロールである「dbo」(「データベース所有者」の略)には、特定のデータベース内で一種のスーパーユーザー権限があります。各データベースには「dbo」ロールがあり、ユーザーは特定のデータベースの「dbo」ロールに割り当てることができます。
デフォルトの「dbo」スキーマもあります。オブジェクトはdboスキーマによって所有される場合があります-「dbo」ロール(またはシステム全体の管理者権限)を持つユーザーが作成したオブジェクトは、別のスキーマが明示的に指定されない限り、デフォルトで「dbo」スキーマによって所有されます。
セキュリティ情報は、単一のデータベースのバックアップでは保持されません。バックアップが復元されるサーバーでユーザーとロールを明示的に構成する必要があります。SQL Server 2012では、新しい「部分的に含まれるデータベース」機能を使用して、ユーザーとロールのデータをデータベースにローカルに保持できます。
SQL Server 2005から、呼び出し元、作成者、所有スキーマ、または指定されたユーザーのセキュリティコンテキストでストアドプロシージャを実行できます。
SQL Serverのビューでは、基になるテーブルのアクセス許可は、ビューを所有するスキーマのアクセス許可に基づいています。ビュー定義にはセッションから情報を取得するフィルターを含めることができますが、基になるテーブルのユーザー権限はセキュリティに関与しません。Oracleでは、権限付与の構成に応じて、基礎となる表に対するユーザー権限がビューに影響する場合があります。
監視とチューニング
TBA-OracleのメモリアーキテクチャとSGAなど
バックアップと復元
未定
ツーリング
Microsoftは、一連の周辺ツールをSQL Serverにバンドルしています。提供される主要なアイテムの一部は次のとおりです。
SQL Server Management Studio(SSMS):これは、Oracle上のSQL Developerと似たようなことを行います。エディターとコード実行機能を提供します。いくつかの便利な機能には、データベースオブジェクトブラウザーとクエリプランビューアーが含まれます。
SQL Server Analysis Services(SSAS):これは、データベースサーバーとは異なるOLAPサーバーです。クライアントとサーバー間の通信に独自のクエリ言語(MDX)とAPI(XML / A)を使用します。SQLでは照会できません。SSMSには、MDXおよび未加工のXMLAクエリを編集し、結果を表示する機能があります。ASCMD.EXEと呼ばれるコマンドラインクエリツールも提供されます。
SQL Server Reporting Services(SSRS):これは、レポートを公開するためのWebベースのレポートツールです。レポートは、BI Development Studio(BIDS)またはレポートビルダーを使用して構築し、Webポータルに公開できます。SSRSサーバー自体には、サーバーをプログラムで管理するためのWebサービスAPIがあります。SSRSレポートは、SQL Serverだけでなく、さまざまなソースからのデータを使用できることに注意してください。SSRSサーバーをプログラムで管理するためのRS.EXEと呼ばれるコマンドラインツールが提供されています。
SQL Server Integration Services(SSIS):これは、SQL Serverで提供されるETLツールです。アーキテクチャ的には、コード生成ツールではないという点でOWBまたはODIとはまったく異なります。ランタイムはクライアント側にあり、データベースサーバーとは別のマシンに配置できます。SSISパッケージはBIDSを使用して開発し、DTEXEC.EXEというコマンドラインツールを使用して個別に実行できます。
BI Development Studio(BIDS):これは、レポート、SSISパッケージ、およびSSASキューブを開発するためのビジュアルスタジオベースの環境です。他のVSベースの開発ツールがインストールされている場合(VS Professionalなど)、ツールを単一の環境と共通のプロジェクトグループに統合できます。
一括コピー(BCP):SQL * Loaderに似たコマンドライン一括挿入/抽出ツール
SQLCMD:SQL * plusに似たコマンドラインクエリツール
SQLプロファイラ:SQL Server、SSAS、およびスイート内の他のツールからトレース情報をキャプチャおよび評価できるトレースおよびプロファイリングツール。
SQL Serverエージェント:ある種の別の種類の定期的なジョブを実行できるジョブスケジューリングユーティリティ。
TRUNCATE TABLE ...
DML を一緒に実行できますEXECUTE IMMEDIATE
。T-SQLでは、SELECT
他の操作と一緒に使用して結果セットをクライアントに返すこともできますが、PL / SQLでは、s の出力をテーブルまたは他の宛先に送信する必要がありSELECT
ます。Oracleでは、純粋なSQLのみが結果セットをクライアントに返すことができます。
主な製品はSQL ServerとOracleの両方で動作しますが、回避する必要がある他の違いがいくつかありますので、注意してください。
日時の処理は非常に異なります:精度、処理する関数のセットが異なる
空の文字列は、SQL ServerではなくOracleでNULLです
文字エンコードとUnicodeの処理は大きく異なります。SQL Server varchar
では、通常()またはUnicode(nvarchar
、同じデータベースに)列を混在させることができます。Oracleでは、使用するエンコードの種類をデータベースレベルで決定します。