本稿は、森脇氏が執筆した『使える! SQL Anywhere』(翔泳社刊)のP.18~31を抜粋し修正した記事に、森山氏が最新版の内容を一部加筆して再構成されています。
2.1 インストール
今回はまず、SQL Anywhereのインストール方法を説明する。インストール自体は簡単なので、ここでは、わかりにくい部分のみ取り上げる。
今回は評価目的のため、アイエニウェア社のWebページから無償版のDeveloper Editionをダウンロードして利用する。ダウンロードに日本語マニュアルもダウンロードしておくと良い。
それ以外の用途でも無償で利用できるライセンスが用意されているので、参考として以下に記す。各エディションには、あらかじめユーザ登録(無償)が必要だ。詳細は同Webページを参照していただきたい。
Edition | 用途および有効日数 |
Developer Edition | 開発・テストに限り無償で無期限使用可能。実運用環境への適用には別途ライセンスの購入が必要です。 |
Educational Edition | 高等教育以上の教育機関での教育用途、非商用リサーチ、学問のための使用に限り、無償で無期限使用可能。学校内システムでの利用にはライセンスの購入が必要です。 |
Web Edition | ブラウザベースのクライアントアプリケーションへの適用に限り無制限(ただし、WebサーバとDBサーバを同一筐体で使用する等、若干の制限あります)。 |
2.1.1 Windows版のインストール
「setup.exe」を実行すると、以下の画面が表示され、[SQL Anywhere 11のインストール]ボタンを押すとインストールが開始される。
登録キーの入力画面が表示されたら、Developer Edition登録キーを入力する。
インストール途中で以下の画面が表示され、セットアップタイプを選択することができる。
[すべて]を選択した状態で[次へ]ボタンを押すと、すべての機能がインストールされる。
また、必要な機能をインストールしたい場合は[カスタム]を選択し[次へ]ボタンを押すと、以下の画面が表示され機能を選択できる。
この画面で表示されている、選択可能な機能の意味は次のとおりである。
分類 | 機能 | 説明 |
データベース | SQL Anywhere | Windows用の全機能搭載リレーショナル・データベース |
SQL Anywhere for Windows Mobile | Windows Mobile用の全機能搭載リレーショナル・データベース | |
Ultra Light | 小型デバイス用のコンパクトなリレーショナル・データベース | |
同期とメッセージング | Mobile Link | 他社データベース間とのデータ同期を可能にするコンポーネント |
QAnywhere | Mobile Linkをインフラとしたメッセージ通信するコンポーネント | |
SQL Remote | SQL Anywhere間のデータベース同期コンポーネント | |
管理ツール | - | SQL AnywhereとMobile Linkサーバの監視用ツール |
サンプル | - | 各種機能のサンプル |
高可用性 | - | SQL Anywhereデータベースのミラーリングを行うコンポーネント |
有償製品版のインストールではライセンス情報を入力する必要がある。ライセンス数を入力し、ライセンスのタイプを選択する。なお、Developer Editionをインストールする場合は、この画面は表示されない。
2.1.2 インストールされる環境変数
インストールされる環境変数として、以下のものがある。
SQLANY11
SQL Anywhereがインストールされたディレクトリを示す。本稿でも、インストールされたディレクトリを%SQLANY11%で示す。デフォルトでは、「C:\Program Files\SQL Anywhere 11」になる。
SQLANYSAMP11
サンプルプログラムなどで利用される。%SQLANYSAMP11%で示すディレクトリは、デフォルトでは、「C:\Documents and Settings\All Users\Documents\SQL Anywhere 11\Samples」になる。
2.2 GUIツール
2.2.1 Sybase Central
Sybase Centralは、GUIによるデータベース管理ツールで、データベースの作成やテーブルの作成など、SQL Anywhere管理のあらゆる操作が行える(図2.3)。また、テーブルのデータを表示して修正することもできるので、簡単なデータ操作も可能だ(図2.4)。
各オブジェクトの操作は、右ペインのタブや左ペインのオブジェクトを右クリックすると表示されるポップアップメニューから行う。なお、左ペインでテーブルを選択してからコピーすると、Sybase Central内でコピーできる。また、メモ帳などにペーストすると、テーブルスキーマのSQL文がテキスト表示される。
[サーバ・メッセージと実行されたSQL]ウィンドウの赤枠のタブ(図2.5)を選択すると、Sybase CentralからGUIで操作した内容をSQLとしても確認することもできる。実行されたSQL文を確認したり、別途スクリプトを用意する時などにも参考になる。
2.2.2 Interactive SQL
Interactive SQLは、SQL Anywhereに接続してSQL文を実行するためのツールだ。GUIとコマンドラインの両方で利用できる。GUIで利用すると、SELECT文などのSQLが返す結果セットはテーブル形式で表示される。また、SQL文の実行時間やオプティマイザが選択したクエリプランも表示できるので、SQL文のチューニングに役立つ。
Interactive SQLの実行コマンドであるdbisql.exeに対して-noguiオプションを付けて実行すると、対話的にSQLを実行できる。次に実行例を示す。
$ dbisql -c "dsn=SQL Anywhere 11 Demo" -nogui (DBA)> select top 5 id, surname, givenname from customers order by id; id surname givenname ----------------------------------------------------- 101 Devlin Michaels 102 Reiser Beth 103 Niedringhaus Erin 104 Mason Meghan 105 McCarthy Laura (5 ロー) 実行時間 : 0.312 秒 (DBA)> exit $
dbisqlコマンドの引数にSQL文指定すると、そのSQL文が実行される。
$ dbisql -c "dsn=SQL Anywhere 11 Demo" "select * from customers"
SQL文のバッチ処理
dbisqlコマンドの引数にファイル名を指定した場合は、そのファイル(コマンドファイル)に書かれたSQL 文が実行される。
$ dbisql -c "dsn=SQL Anywhere 11 Demo" a_command_file.sql
このとき、コマンドファイル内の変数をパラメータ化して、コマンドファイルを汎用化したい場合もあるだろう。Interactive SQLのREADコマンドを用いると、コマンドファイルにパラメータを渡すことができるので、バッチスクリプトを書く際に便利だ。たとえば、次のようなコマンドファイル「select_product.sql」を用意する。
PARAMETERS MIN_QUANTITY; SELECT * from products WHERE quantity > {MIN_QUANTITY};
MIN_QUANTITYがパラメータだ。100という数字を渡すには、次のようなコマンドを実行すればよい。
$ dbisql -c "dsn=SQL Anywhere 11 Demo" read c:\select_product.sql 100
2.2.3 高速ランチャ機能
Sybase CentralとInteractive SQLには、起動を速くする高速ランチャ機能がついている。1度目の起動を終了してもバックグラウンドプロセスが残り、2度目以降の起動が高速になる。この機能はデフォルトでオンになっているので、バックグラウンドプロセスのメモリ使用量などが気になる場合は、[ツール]-[オプション]から、高速ランチャ機能を無効にするとよい。
2.3 SQL Anywhereのアーキテクチャ
2.3.1 データベースのファイル構成
データベースを構成するファイルには、(1)データベースファイル、(2)トランザクションログファイル、(3)テンポラリファイルの3種類がある(図2.7)。
データベースファイル(*.db)
データベースファイルには、スキーマ、データ、インデックスなど、すべてのデータベース情報が記録される。デフォルトではデータベースファイルは1つだけだが、テーブルやインデックス単位でデータベースファイルを増やせる(上限は合計12ファイル)。次のような場合に複数のデータベースファイルを持つとよい。
1. ディスクI/Oの分散によるパフォーマンスの向上
複数のディスク(HDD)があるとき、複数のデータベースファイルを用意して別々のディスクに配置すれば、データベースファイルへのディスクI/O(入出力)が分散されるので、パフォーマンスが向上する。
2. OSによるファイルサイズの制限
通常、データベースファイルのサイズは、データが増えるに従って自動的に拡張されるので、日々監視するような必要はない。しかし、データ量が増えてデータベースファイルのサイズが大きくなり、OSのファイルサイズ制限にひっかかりそうなときは、データベースファイルを複数に分けてその制限を回避するとよい。
なお、保存するデータ量があらかじめ把握できる場合は、データベースファイル作成時にファイルサイズを確保しておくことで、ファイルのフラグメンテーションの発生を抑制できる。
SQL Anywhereのデータベースファイルやトランザクションログファイルの形式はOSによらず共通なので、ファイルをコピーするだけでデータベースを移行できる。たとえば、Windows CE上のデータベースファイルをWindowsにコピーしたり、Windows上のデータベースファイルをLinuxにコピーしたりすれば、移行先でそのデータベースを利用できる。
それぞれのデータベースファイルは、1:1に対応するDBSPACE名で論理的に区別される。
- テーブル
- 主キー、外部キー
- インデックス
- ビュー
- ストアドプロシージャ、トリガ
- ユーザ、グループ
- Javaオブジェクト
トランザクションログファイル(.log)
トランザクションログとは、データがコミット(COMMIT)されるごとに記録されるログのことで、トランザクションログファイルに保存される。デフォルトでは、1つのトランザクションログファイルがある。設定により、トランザクションログなしで運用したり、(1つ増やして)2つのトランザクションログファイルを利用したりすることも可能だ。
2つのトランザクションログファイルを利用したものを、トランザクションログミラー機能と呼ぶ。2つのファイルに対して同じログを同時に書き込み、冗長化することで耐障害性を高めている(トランザクションログミラーファイルの拡張子は.mlg)。
一方、トランザクションログファイルを使わずにデータベースを運用することも可能だが、パフォーマンスや耐障害性の点から、トランザクションログファイルの利用を推奨する。
テンポラリファイル(.tmp)
テンポラリファイルは自動的に作成・削除され、SQLによるデータのソートや結合処理でキャッシュが足りないときなどに利用される。テンポラリファイルが作成される場所は次の環境変数で指定できる。
- SATMP
- TMP
- TMPDIR
- TEMP
これらの環境変数を順番に調べ、最初に定義されている場所が選ばれる。いずれも定義されていなければ、データベースサーバのカレントディレクトリが選ばれる。
データベースやトランザクションログファイルと別のディスクにテンポラリファイルを配置すれば、ディスクI/Oが分散され、パフォーマンスの向上が期待できる。
2.3.2 データベースサーバの構成
データベースサーバは、1つ以上のデータベースを管理できる(上限は255)。データベースサーバは1つのプロセスであり、クライアントからの接続処理、SQL文の解析や最適化、ファイルアクセスなどのすべての処理をマルチスレッドで実行する。マルチCPUに対応しているので、CPUの数を増やすことでパフォーマンスを向上させることができる(図2.8)。
データベースサーバには、次の2種類がある。
- ネットワークサーバ
- パーソナルサーバ
ネットワークサーバは全機能を搭載している。一方、ネットワーク接続など一部の機能を制限したのがパーソナルサーバで、次のような制限がある。
- 同一マシンからの接続のみを受け付ける(ネットワーク接続不可)
- 同時接続は10台まで
- 1CPUのみ利用可能(マルチCPU機能には対応しない)
このような制限があるため、パーソナルサーバはソフトウェア組み込み時や開発時などで使用されることが多い。
2.3.3 キャッシュ割り当て
SQL Anywhereのプロセスは1つなので、考慮すべきキャッシュ領域も1つだけだ。デフォルトでは、SQL Anywhereのキャッシュサイズは自動的に増減する。データベース処理にもっとキャッシュが必要であれば増やし、必要なければ減らす。上限下限のサイズを指定することもできるので、その範囲内でサイズが調節される。なお、デフォルトの上限サイズは、Windowsでは256MBである。大量のメモリを使用可能なときは、データベースサーバの起動時に上限サイズを大きく設定するとよい。自動調整機能を使わずに、キャッシュサイズを固定することも可能だ。設定方法などについては、次回の「2.5 動的キャッシュ割り当て」で解説する。
次回
次回は、データベースの作成・起動の方法や、ユーザ作成の方法について紹介する。社内評価や開発を目的としたSQL Anywhereの利用であれば、無償のDeveloper Editionを利用できるので、ぜひ一度、実際に試していただきたい。