Oracle vs SQLServer比較:機能・速度・ライセンス・インストール手順まで

2014/03/10

OracleとSQLServerの機能、速度、ライセンス、インストール手順を比較した構造化した図解

SQLServerはWindowsサーバー上でしか使えませんが、OracleはLinux上でも使えるため、多くのインターネット上の巨大サービスのデータ管理で採用されてきた歴史があります。検索やSQL処理スピードは体感としてOracleのほうが快適に感じますが、管理ツールはSQLServerのほうが豊富で使いやすいです。

インドネシアIT業界の市場動向、セキュリティ課題、日系企業戦略を構造化した図解

インドネシアのIT業界|市場動向・セキュリティ課題・日系企業の戦略

インドネシアのIT業界はインターネット技術の発展により急速に成長している。インドネシアでは違法コピーが多く、KMS認証クラックがマルウェアの標的になりやすい。インドネシアのサイバー攻撃は元社員による怨恨が原因であることが多い。

続きを見る

この記事でわかること

  • OracleはLinux上でも利用可能で、SQLServerはWindowsサーバーでのみ利用できる。
  • Oracleのライセンス形態はProcessorライセンスとNamed User Plusライセンスの2通りである。
  • SQLServerとOracleは異なるライセンス体系を持ち、SQLServerはコア数をカウントする。
  • Oracle DBのインストールにはインストーラ、インスタンス作成、スキーマ作成の3ステップがある。
  • Oracleの表領域はDBFファイルとして格納され、スキーマの増加に応じて拡張が必要である。

OracleとSQLServer

DB操作のためのコマンドラインツールとしてSQL plus、GUIツールとしてSQLServerのManagement Studioに相当するOracle SQL Developerがありますが、スクリプト(拡張子sqlのSQLが記述されたDB全般で扱われるテキストファイル)の実行結果を確認したいときはGUIツールのほうが便利です。

SQL ServerもOracleと同じように3つのエディションがありますが、会計システムを少数のユーザーで使用する場合、サーバーライセンス(15万円)+CAL(ユーザー分)買っておけば問題ないわけです。

一方でSQLServer2012も同じようにComputing Power ライセンスモデル(CPUの中のコアの数)とCALモデル(何人で使うか)という似たようなライセンス体系になっていますが、Oracleのように物理プロセッサをカウントする方式ではなく1プロセッサごとに搭載されるコア数の合計をカウントするところがミソです。

この2つのDBは武蔵と小次郎みたいなもんで、バージョンが上がるたびに機能比較がされてきましたが、2014年当時では「検索のOracle、更新のSQLServer」と言われているらしいです。

ただDBにそれほど詳しくない私くらいのレベルの人間にしてみれば「データ量の多い大規模なシステムにはOracle、中堅どころの規模にはSQLServer」くらいの認識が一般的だと思います。

これはSQLServerはWindowsでしか使用できないがOracleはUnix系サーバでも利用できるという汎用性の濃淡が多少影響していると思います。

Oracleのライセンス形態はProcessorライセンス(サーバーのCPUの枚数)かNamed User Plus(NUP)ライセンス(何人で使うか)の2通りあり、インストール時にシリアルキー入力の必要もないので、11g R2のライセンスがあれば12cをインストールすることも可能です。

OracleとSQLServer2016年に価格改定があり、実質的な大幅値上げになりました(泪)。
OracleとSQLServerOracleとSQLServerOracleとSQLServer

Oracle clientとserverの関係

リスナーはサーバーで実行する個別のプロセスであり、クライアントからの接続要求を受け取りサーバーへの要求を管理します。

Oracleネットマネージャー

Oracleネットマネージャー

起動しているOracle関連のサービス

起動しているOracle関連のサービス

Oracleホーム

Oracleホーム

Oracleリスナー

Oracleリスナー

サーバー側とクライアント側で設定する項目

Database Configuration AssistantはOracleデータベースの作成と構成に使用します。

Oracle Net Configuration Assistantは、リスナー名やプロトコル・アドレスなどの基本的なOracle Netネットワーク・コンポーネントの構成、およびディレクトリ・サーバーを使用するためのOracleホームの構成に使用します。

Oracle Net Managerは、ローカル・クライアントやサーバー・ホスト上のOracleホームに対してOracle Net Servicesを構成します。

サーバー側

  1. Database Configuration Assisantでインスタンス作成
  2. Net Configuration Assistantでリスナー作成

クライアント側

  • Net managerでサービスネームを作成

Oracle DB ソフトウェアインストールとインスタンスとスキーマ作成の流れ

ここまででインスタンスとスキーマが準備できたので、あとはシステム環境(テーブルとか)を作成するだけです。

一方、クライアント側で起動するサービスは以下の1つで、Oracle clientはOracle DBがインストールされているサーバで稼動しているリスナーというサービスを経由してOracle DBに接続します。

ここまでの手順に間違いがなければ、サーバー側で以下の2つのサービスが起動しています。

以上でDBソフトウェアがインストールされたので、次はOracle Databese Configuration Assistance(DBCA)でインスタンスを作成します。

Oracle で「DBを作成する」というのは「インスタンスを作成する」のとほぼ同義で、そして1つのインスタンスの中に複数の「スキーマを作成」しますが、これは「ユーザを作成する」のとほぼ同義です。

DB構成ファイル自体はDB(インスタンス)ごとに以下に配置されます。

以上によりOracleベースの中にdbhome_1というホーム(ソフトウェアディレクトリ)が生成されます。

DBソフトウェアのインストールはsetup.exeを実行しインストーラを起動させ、以下の4つの主要設定パラメータを設定します。

Oracle DBの導入は以下の3ステップに分かれます。

  1. インストーラからDBソフトウェアのインストール
  2. DBCA(Database Configuration Assistant)からインスタンスの作成
  3. スキーマの作成
  1. Oracleベース(C:\app\Hp):インストールの場所ですべてのOracle関連ファイルの場所
  2. Oracleホーム(C:\app\Hp\product\11.2.0):Oracleベース内のDB構成ファイル以外の場所
  3. 初期データベースのGlobal DB Name(Orcl)
  4. ユーザIDとパスワード
  • C:\app\Hp\product\11.2.0\dbhome_1
  • C:\app\Hp\oradata\orcl
  1. OracleServiceORCL(OracleServiceの後ろにSID名をくっつけたもの)
  2. OracleOraDB11g_Home1TNSListener
  • OracleOraDB11g_Home1ClrAgent

インスタンスが作成できたら次にスキーマを作成します。

  1. [C:sqlplus /nolog]でログを保存しない状態でログイン
  2. [SQL> conn sys/admin@orcl as sysdba]で管理者権限でインスタンスに接続すると[Connected.]を返す。
  3. [SQL> @D:/createuser.sql スキーマ名 パスワード]で[User created.]を返す。

上記のcreateuser.sqlの中身は以下のとおり。

set verify off
spool &2
create user &1 identified by &1
default tablespace users
temporary tablespace temp;
grant dba to &1;
grant connect to &1;
grant create any trigger to &1;
grant create any sequence to &1;
grant create procedure to &1;
grant unlimited tablespace to &1;
grant alter rollback segment to &1;
grant select on v_$session to &1;
grant select on v_$mystat to &1;
grant execute on dbms_lock to &1;
grant select on v_$instance to &1;
spool off
quit

Oracleのアンインストール手順

regeditからOracle関連のレジストリキーを削除する際は、バックアップを取った上で、細心の注意を払いながら作業しましょう。

インストール手順は画像が多いのでアンインストール手順から先に説明します。

11g R2になってOUI(Oracle Universal Installer)でアンインストールしようとすると、「C:\app\HP\product\11.2.0\dbhome_1\deinstallで削除してください」と拒否されます。

  1. deinstallから来る質問に丁寧に回答する(ほとんどがYesかNo)。
  2. regeditを実行して以下のレジストリキーを削除する。
    HKEY_LOCAL_MACHINE/SOFTWARE/Oracle key
    HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Oracle key
    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora* key
  3. 再起動する。
  4. Oracle関連ディレクトリを全部削除する。
    C:\app\HP
    C:\Program Files (x86)\Oracle
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
  5. テンポラリーファイル「C:\temp」をクリアする。
  6. ごみ箱を空にする。

Oracleのアンインストール手順

Oracle 11g Release2 32bit版のインストール手順(12画面)

ここからDBCAがGrobal database name:orcl, SID:orclでインスタンスを生成し始めます。

Grobal database nameのデフォルトはorclなので必要に応じて変更します。

ここでCreate and configure Databaseを選ぶとOracle DB Softwareのインストール後にDataBase Configuration Assistantが自動で起動し、初期DB(インスタンス)をorclの名前で生成します。

ただ通常はInstall database onlyを選択して後からDBCAでインスタンスを作成すると思います。

11gといっても11.2.0.1はバグありなので、最新版11.2.0.4をインストールします。

まずはメルアドやProxy情報はあまり気にせず先に進みましょう。

Oracle 11g Release2 32bit版のインストール手順
Oracle 11g Release2 32bit版のインストール手順Oracle 11g Release2 32bit版のインストール手順
Oracle 11g Release2 32bit版のインストール手順
Oracle 11g Release2 32bit版のインストール手順
Oracle 11g Release2 32bit版のインストール手順7Oracle 11g Release2 32bit版のインストール手順8
Oracle 11g Release2 32bit版のインストール手順9
Oracle 11g Release2 32bit版のインストール手順10Oracle 11g Release2 32bit版のインストール手順11
Oracle 11g Release2 32bit版のインストール手順12
Oracle 11g Release2 32bit版のインストール手順13

Oracle client 11g 32bit版のインストール手順(11画面)

ここまででOracle Clientのインストールは完了しているので、次はNet Managerで接続先のリスナー情報を設定します。

ここでいくつかFailedになったとしても必ずしも致命的なエラーとは限らないので、勇気を出してIgnore Allで抜けましょう。

Administrator版をインストールするとSQL PlusやSQL Developer、Net Managerなどのツールが自動的にインストールされます。

Oracle 11g Release2 32bit版のインストール手順1
Oracle 11g Release2 32bit版のインストール手順2
Oracle 11g Release2 32bit版のインストール手順3Oracle 11g Release2 32bit版のインストール手順4
Oracle 11g Release2 32bit版のインストール手順5
Oracle 11g Release2 32bit版のインストール手順6
Oracle 11g Release2 32bit版のインストール手順7Oracle 11g Release2 32bit版のインストール手順8
Oracle 11g Release2 32bit版のインストール手順9
Oracle 11g Release2 32bit版のインストール手順10
Oracle 11g Release2 32bit版のインストール手順11
Oracle 11g Release2 32bit版のインストール手順12
Oracle 11g Release2 32bit版のインストール手順13
Oracle 11g Release2 32bit版のインストール手順14

DBCAによるDB(インスタンス)作成手順(18画面)

Oracle DeveloperでSYSMANという管理者アカウント(スキーマ)への接続を作成すると・・・

Oracle Developer起動時にJava2 SE SDKのjava.exeのPathを聞かれる場合は以下を指定。

Character setの指定はインスタンス単位で行う(スキーマ単位では行えない)のでインスタンス生成時に指定する必要がある。

管理者アカウント(スキーマ)であるSYS、SYSTEM、SYSMANおよびDBSNMPが生成される。

このとき通常はGlobal DB name=SIDでOK。SIDとは複数インスタンス構築時に区別するための識別子である。

DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順

  • C:\app\Toshiba\product\11.2.0\dbhome_1\jdk\bin

DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順
DBCAによるDB(インスタンス)作成手順

Oracleスキーマオブジェクトの構成

Oracleのスキーマオブジェクトは主に以下のオブジェクトで構成されています。パッケージやプロシージャーやファンクションは他のOracleオブジェクト(SQL Plusなど)やユーザーアプリケーション(VBなど)からCallできます。

  1. テーブル:
  2. インデックス:
  3. ビュー:
  4. パッケージ:プロシージャーまたはファンクションのライブラリ
  5. プロシージャー:ユーザープログラム(戻り値なし)
  6. ファンクション:ユーザープログラム(戻り値あり)
  7. トリガー:テーブル操作をトリガーに自動実行されるプロシージャー

スキーマにログイン

Windows Serverなら問題ないですがUNIX上ではコマンドラインで入力されたIDとPWDは「ps -ef | grep sqlplus」であっさり表示されてしまうので、SQLPlusは/nolog付きで起動してインスタンスに繋ぎに行ったほうが良さそうです。

まずSQLPlusを起動しsys権限のユーザでOracle DB(スキーマ)にログインして行います。

C:\sqlplus sys/admin@orcl as sysdba
C:\sqlplus /nolog

SQL> connect sys/admin@orcl as sysdba
Connected.

スキーマの作成と削除

cascadeとは「滝のように上から下へ流れる」という意味であり、スキーマに含むオブジェクトまでごっそり削除というニュアンスです。CSSもCascading Style Sheetの略で、上位のセレクタに適用したプロパティの値は下位のセレクタにも適用されます。

スキーマを削除するには、そのスキーマーがオブジェクトを持っている場合でも削除できるようにcascadeを付けます。

スキーマTEST2を作成し権限を付与するためのスクリプトにUIDとPWDを引数として実行します。

set verify off
spool &2
create user &1 identified by &1
default tablespace users
temporary tablespace temp;
grant dba to &1;
grant connect to &1;
grant create any trigger to &1;
grant create any sequence to &1;
grant create procedure to &1;
grant unlimited tablespace to &1;
grant alter rollback segment to &1;
grant select on v_$session to &1;
grant select on v_$mystat to &1;
grant execute on dbms_lock to &1;
grant select on v_$instance to &1;
spool off
quit
SQL> @D:/createuser.sql TEST2 TEST2
User created.
drop user TEST2 cascade;

リコンパイル

UTL_RECOMPパッケージの場合、スキーマ名を省略すると全スキーマをまとめてリコンパイルできます。

スキーマに含まれている無効なPL/SQLモジュール、無効なビュー、Javaクラス、索引タイプおよび演算子など、スキーマーの全オブジェクトを対象としてリコンパイルするにはDBMS_UTILITYパッケージのCOMPILE_SCHEMAプロシージャー、またはUTL_RECOMPパッケージを使います。

ストアドプロシージャーの実行はEXEC(UTE)またはCALLで行います。

EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('TEST2');
EXECUTE UTL_RECOMP.RECOMP_SERIAL('TEST2');  
EXECUTE UTL_RECOMP.RECOMP_SERIAL(); 

インポートとエクスポート

Oracle11gからimp/expコマンドはサポートされなくなり、その代わりにデータポンプDataPump(expdp/impdb)が使えるようになりました。imp/expとの違いはユーティリティ側で処理されるかデータベース側でジョブとして処理されるかであり、imp/expコマンドに比べてパフォーマンスが向上しています。

従来(論理)バックアップには「C:\app\HP\product\11.2.0\client_1\BIN」内のimp.exeとexp.exeを使用していました。

imp TEST2/TEST2@orcl file=D:\test2.dmp log=d:\temp\TEST2.log full=y
expdp test2/test2@orcl schemas=demo dumpfile=DEMO.dmp logfile=DEMO_exp.log
impdp test2/test2@orcl remap_schema=demo dumpfile=DEMO.dmp logfile=DEMO_imp.log

表領域の拡張

最初はUSERS01.DBFの1個だった表領域のDBFファイルが8GBのサイズで8個追加された。[/caption]

私のPCの場合、33GBのUSERS01.DBFが一杯一杯になり、スキーマのリストアでエラーが出るようになったので、8GBのサイズで以下のように分割して拡張しました。

Oracleの表領域はUSERS01.DBFというように拡張子がDBFのファイルとしてインストールディレクトリの中の「C:\app\User\oradata\orcl」などに格納されていますが、スキーマが増えるにつれていずれ初期容量を超えてしまいますので表領域の拡張が必要になります。


ALTER DATABASE DATAFILE 'C:\oracle\oradata\mcf\USERS01.DBF' RESIZE 8192M;
ALTER DATABASE DATAFILE 'C:\oracle\oradata\mcf\USERS01.DBF' AUTOEXTEND OFF;alter tablespace USERS
add datafile 'C:\oracle\oradata\mcf\USERS02.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS03.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS04.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS05.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS06.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS07.DBF' size 8192m autoextend off,
 'C:\oracle\oradata\mcf\USERS08.DBF' size 8192m autoextend off,

Oracleクライアントからサーバーへの接続時のエラー

これは「クライアントのtnsnames.oraのHOSTパラメータで指定したホスト名(またはIPアドレス)上で、tnsnames.oraのPORTパラメータで指定したポート番号でサーバーのリスナーが起動していない(Listenしていない)」ということです。

PCにOracleサーバーとクライアントを両方インストールすると、サーバーのNet Configuration AssistantやNet Managerは無効になります。よってこの場合に設定するtnsnames.oraとlistener.oraはクライアントのものであり、サーバーのもの(dbhome_1フォルダ内のもの)は使用しません。

Oracle ClientはOracel Serverに「サーバー→リスナー→データベース」の順番に接続していきますが、私の場合Oracleの接続エラーで一番多いのはリスナーに関係するものであり、中でもエラーの常習犯が以下のORA-12514です。

Oracleクライアントからサーバーへの接続時のエラー

ローカルネーミングパラメータtnsnames.ora

sqlplusからorclというデータベースサービスにアクセスするには「localhostというサーバーのポート番号1521でリスナーが起動」していればよいわけです。

 

  • C:\app\HP\product\11.2.0\client_1\network\admin\tnsnames.ora
# tnsnames.ora Network Configuration File: C:\app\HP\product\11.2.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

リスナーパラメータlistener.ora

「HP-PC(localhostでもOK)というホスト名のポート番号1521でリスナーが起動」していればよいわけです。

今動いているデータベースサービス名やポート番号はサーバー上から以下のコマンドで確認の上、パラメタファイルと比較します。

 

  • C:\app\HP\product\11.2.0\client_1\network\admin\listener.ora
# listener.ora Network Configuration File: C:\app\HP\product\11.2.0\client_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = Oracle8)
      (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = HP-PC)(PORT = 1521))
  )

ADR_BASE_LISTENER = C:\app\HP\product\11.2.0\client_1\log

Oracleクライアントからサーバーへの接続時のエラー

ネーミングメソッドパラメータsqlnet.ora

tnsnames.oraファイルの構成パラメターをローカルネーミングパラメター、listener.oraファイルの構成パラメターはリスナーパラメーター、sqlnet.oraファイルの構成パラメータをネーミングメソッドパラメータと呼びます。

TNSNAMESはローカルネーミングファイルtnsnames.oraを使った接続で、EZCONNECTはネーミングパラメータを使わず、以下の簡易接続するものです。

Oracle ClientからOracle Server DBの接続は、サーバーとクライアント両方のOracle Net(アプリケーション層のプロトコル)を通じて、リスナーと接続できるようにします。Oracle Netの構成では、ネーミングメソッドパラメータsqlnet.oraでOracle Server DBの識別方法を設定します。

  • C:\app\HP\product\11.2.0\client_1\network\admin\sqlnet.ora
# sqlnet.ora Network Configuration File: C:\app\HP\product\11.2.0\client_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

Oracleクライアントからサーバーへの接続時のエラー

よくある質問|OracleとSQLServerの比較

本稿の内容に沿って、繰り返し出る問いを短く整理します。

OracleとSQLServerの主な違いは何ですか?

OracleはLinuxやUnix系サーバーでも利用できるため、汎用性が高いです。一方、SQLServerはWindowsサーバー上でしか動作しません。検索速度はOracleの方が快適に感じられますが、管理ツールの使いやすさではSQLServerが優れています。

OracleとSQLServerのライセンス形態はどのように異なりますか?

OracleはProcessorライセンスとNamed User Plus(NUP)ライセンスの2通りがあります。SQLServerはComputing PowerライセンスモデルとCALモデルを採用しており、コア数を基にライセンスを計算します。Oracleは物理プロセッサをカウントする方式です。

Oracleのインストール手順はどのように進めますか?

Oracleのインストールは3ステップに分かれます。まずインストーラからDBソフトウェアをインストールし、次にDatabase Configuration Assistant(DBCA)でインスタンスを作成します。最後にスキーマを作成して完了です。