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コマンド |
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を使うと、コマンドをインタラクティブにも利用できるし、スクリプト・ファイルやタスク・スケジューラなどに組み込んで処理の自動化もできる。
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」を右クリックして、ポップアップ・メニューから[プロパティ]を選択する。
プロパティ画面を開いたら、「IPAll」という項目を探し(たいていの場合は一番下にある)。その設定内容を確認する。
2つ項目があるが、「TCPポート」の内容を固定ポート番号(例えば1433)に、「TCP 動的ポート」の内容を空にする(何が入っていても、その内容を削除すること)。変更後は次のようになる。
このように設定してからこのダイアログを閉じる。そして先ほどのプロトコルの画面に戻り、「TCP/IP」の項目を右クリックし、ポップアップ・メニューから「有効化」を選択する。そしてさらにSQL Server構成マネージャで「SQL Serverのサービス」を表示させ、該当するインスタンスのサービスを再起動させる。これでSQL Serverは固定的なポートで要求を受け付けるようになる。
以上の設定後、さらにWindowsファイアウォールで1433番の着信を許可するように設定する。静的なフィルタを設定すればよいだろう。
場合によっては、ほかのポートも固定的に割り当てる必要があるかもしれない。SQL Serverで利用するポートについては、以下の情報も参考にしていただきたい。
Copyright© Digital Advantage Corp. All Rights Reserved.