連載
» 2012年08月16日 05時00分 公開

SQL Serverミニマム管理Q&A:第2回 SQL Serverの管理ツール (2/2)

[打越浩幸,デジタルアドバンテージ]
前のページへ 1|2       

Q5:CUIツールのisql、osql、sqlcmdの違いは?

A:機能は似ているが、isqlはすでに廃止、osqlは非推奨、現在はsqlcmdが推奨されている。

 SQL ServerをCUIで管理するツールとしては、現在ではsqlcmdが推奨されているが、それ以外にもisqlやosqlというコマンドもある(あった)。これらは、SQL Serverのデータベース・エンジンに対して、Transact-SQLステートメントやシステム・プロシージャ(sp)、スクリプト・ファイルなどを実行させるためのコマンドライン・ツールである。初期のSQL Server(やMSDE)ではisqlが使われていたが、後にosqlコマンドに取って代わり(isqlはSQL Server 2005以降では利用できない)、現在ではさらにsqlcmdに置き換えられている(ただし互換性維持のため、現在でもosqlは利用できる)。その概要や主な違いは次の通りである。isql→osql→sqlcmdと、ほぼ互換性を保ちながら機能が強化されている。

コマンド 内容
isqlコマンド 一番古くからあるコマンド。SQL Server 2000以前のバージョンで利用可能。データベース・エンジンとはDB-Library(データベース・エンジンを直接呼び出すための、低レベルなライブラリ)経由で通信する
osqlコマンド isqlの後継コマンド。SQL Server 7.0以降で利用可能。ODBC(さまざまなデータベースに対して、統一した方法で接続できるように設計されたインターフェイス)経由でデータベース・エンジンと通信するため、高機能である
sqlcmdコマンド 現在の主流。OLEDB経由でデータベース・エンジンと通信する。SQL Server 2005以降で利用可能。変数の設定や管理者接続、SQL Server Management Studio 上での実行など、osqlに対して機能も強化されている
sqlpsコマンド PowerShellベースのコマンド。PowerShellでデータベースを操作できる。SQL Server 2008以降で利用可能
SQL Serverを管理するための主なCUIコマンド

Q6:osqlやsqlcmdの基本的な使い方は?

A:サーバやユーザー名を指定してSQL Serverに接続後、Transact-SQLステートメントやシステム・プロシージャなどを発行して実行するほか、バッチやタスクなどに組み込んで自動処理させる。

 (isqlや)osql、sqlcmdはそれぞれ似通った機能を持ち、使い方もそう変わらない。コマンド・プロンプトを開き、SQL Serverに接続するためのユーザー名とパスワードを指定する。SQL認証を利用している場合は「-U <ユーザー名> -P <パスワード>」とし(パスワード部分を省略するとパスワード入力のプロンプトが表示される)、Windows認証なら「-E」だけを指定する(現在ログオンしているユーザー名とパスワードが使用される)。さらに「-S」に続けてサーバ名もしくは接続文字列(サーバ名とインスタンス名をつないだもの、もしくは接続先のインスタンスを表す名前付きパイプ名など。パターンがいくつかあるので今後解説する)を指定する。サーバ名だけだと、「既定のインスタンス」に接続する。

C:\>osql  ……osqlでは-Uか-Eが必須
エラー: ユーザーが選択されていません。-U または -E スイッチを使用して試してください

C:\>osql -S .\sqlexpress -E  ……SQL ServerのExpress Editionに接続してみる
1> print @@version  ……バージョン番号を表示させるステートメント
2> go  ……goとすると実行される
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)  ……結果。バージョン表示
        Feb 10 2012 19:39:15
        Copyright (c) Microsoft Corporation
        Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
1> exit

C:\>sqlcmd -S .\sqlexpress  ……sqlcmdは-Eなしでもよい
1>



 この例では接続先を「-S .\sqlexpress」としているが、「-S PC1\sqlexpress」のようにコンピュータ名を付けてもよい(sqlexpressはExpress Editionのデフォルトのインスタンス名)。

 接続後に入力している「print @@version」や「go」「exit」などは、SQL Serverに実行させるためのTransact-SQLステートメントである。これらについては今後解説する。認証方法が間違っていたり、ログオンが許可されてないユーザー・アカウントの場合は接続できずにエラーとなる。

 上の例ではインタラクティブに利用しているが、コマンドの引数にTransact-SQLのステートメントを指定して(「-Q」オプションを使う)、直接実行させることもできる。

C:\>sqlcmd -S .\sqlexpress -E -Q "print @@version" ……直接実行の例
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
        Feb 10 2012 19:39:15
        Copyright (c) Microsoft Corporation
        Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

C:\>



 CUIのツールとはいえ、osqlやsqlcmdを使うと、コマンドをインタラクティブにも利用できるし、スクリプト・ファイルやタスク・スケジューラなどに組み込んで処理の自動化もできる。

Q7:SQL Serverで静的なポートを利用するには?

A:「SQL Server 構成マネージャー」で使用するポートを設定する。

 SQL Serverにリモートからアクセスする場合、初期のSQL ServerではTCPの1433番(と隣接するいくつか)のポートを固定的に割り当てて使っていた。だがセキュリティに対する要求が高くなった現在、動的なポートを使ったり、TCP/IP通信を無効にしたりすることがある(Express Editionのデフォルトのインストール状態では、TCP/IP通信は無効になっている)。

 しかし、昔のアプリケーションなどを使う場合は、これでは問題となる可能性がある。新しいデータベース・エンジンに置き換えると、アプリケーションが動かなくなるなどといった事態が発生するからだ。これを変更して固定的なポートの割り当てを行うには、SQL Server構成マネージャで設定を変更すればよい。

 このためにはまずSQL Server構成マネージャで[SQL Server ネットワークの構成]というツリーを開く。そして目的のインスタンスを選択して、右側ペインに表示された「TCP/IP」というプロトコルに注目する。インストールの形態によっては、これが「無効」になっていることがあるので、これを有効化すればよいが、その前に使用するポートを確認しておく。「TCP/IP」を右クリックして、ポップアップ・メニューから[プロパティ]を選択する。

現在のTCP/IPプロトコル設定を確認する 現在のTCP/IPプロトコル設定を確認する
このエディションのSQL Serverでは、各インスタンスごとに3種類の通信プロトコルが利用できる。ここではTCP/IPに注目する。
  (1)これはデフォルトのインスタンス。これの設定を変更してみる。
  (2)デフォルトではTCP/IPは無効になっている。
  (3)まずはプロパティの設定を変更する。
  (4)後で有効化すること。

 プロパティ画面を開いたら、「IPAll」という項目を探し(たいていの場合は一番下にある)。その設定内容を確認する。

TCP/IPプロトコル設定の変更(1) TCP/IPプロトコル設定の変更(1)
初期状態では動的ポートを使うようになっているので、これを変更する。
  (1)このタブを選択する。
  (2)この「IPAll」の内容に注目。
  (3)TCP/IPのポート番号は空である。ここに固定的なポート番号を入力する(例:1433)。
  (4)ここでは「0」となっているが、これは動的ポートを使うという指示。後で実際にポート番号が割り当てられたときに、その数値がここにセットされる。今はTCP/IPが無効になっているので、初期状態の「0」のまま。動的ポートを使わない場合は、ここを空にする。

 2つ項目があるが、「TCPポート」の内容を固定ポート番号(例えば1433)に、「TCP 動的ポート」の内容を空にする(何が入っていても、その内容を削除すること)。変更後は次のようになる。

TCP/IPプロトコル設定の変更(2) TCP/IPプロトコル設定の変更(2)
固定的な1433番のポートを使うように設定した。
  (1)ポート番号。
  (2)ここは空にする。

 このように設定してからこのダイアログを閉じる。そして先ほどのプロトコルの画面に戻り、「TCP/IP」の項目を右クリックし、ポップアップ・メニューから「有効化」を選択する。そしてさらにSQL Server構成マネージャで「SQL Serverのサービス」を表示させ、該当するインスタンスのサービスを再起動させる。これでSQL Serverは固定的なポートで要求を受け付けるようになる。

 以上の設定後、さらにWindowsファイアウォールで1433番の着信を許可するように設定する。静的なフィルタを設定すればよいだろう。

 場合によっては、ほかのポートも固定的に割り当てる必要があるかもしれない。SQL Serverで利用するポートについては、以下の情報も参考にしていただきたい。

「SQL Serverミニマム管理Q&A」のインデックス

SQL Serverミニマム管理Q&A

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。