森脇 大悟 [著] 2007/08/06 11:00

この連載は小社刊『使える! SQL Anywhere』からの抜粋(P.61~68)、および一部加筆で構成されています。

SQL Anywhereは、組込み・中小規模ビジネス・モバイル分野などで特に普及している、省リソースで高速な処理を実現するリレーショナルデータベースです。この連載では、その魅力を紹介していきます。第5回は、データベースの再構築、アップデートなどについて説明します。

1 2 →

2.11 データベースファイルの再構築

 データベースファイルの再構築とは、既存のデータベースをテキストファイルにダンプし、それを新しいデータベースに適用し、データベースファイルを作り直すことである。再構築のメリットとして、主に次の点が挙げられる。

  1. データベースファイル形式の更新
  2.  
    SQL Anywhereのデータベースサーバは、過去のバージョンで作成されたデータベースファイルも管理可能だ。しかし、新機能の中にはデータベースファイルの構造に依存するものがあるため、新しいファイル形式でないと有効にならない機能もある。したがって、SQL Anywhereをアップグレード(特にメジャーバージョンアップ)した際は、データベースファイルを再構築するのが原則だ。
  1. データベースファイルのサイズの縮小
  2.  
    SQL Anywhereでは、削除(DELETE)されたデータが占めていた領域は再利用されるものの、物理的に削除されることはないので、データベースファイルが小さくなることはない。しかし、再構築により、新しいデータベースではそのような領域が解消される。
  1. データベースパラメータの変更(ページサイズや暗号化など)
  2.  
    ページサイズを指定できるのはデータベース作成時だけであり、既存のデータベースのページサイズを変更することはできない。しかし、再構築時に、新しいデータベースを異なるページサイズで作成すれば、ページサイズの“変更”が可能だ。このように、データベース作成時のみに指定可能なパラメータは、再構築時に変更する。データベースファイルの暗号化も同様だ。

 再構築している間はデータベースを停止する必要があるため、頻繁に行うわけにはいかないが(データベースのデータ量や利用のしかたに依存するが)、上記のような問題はまれであろうから、頻繁に再構築する必要もない。必要となったときに実行すればよい。

 再構築の手順は、以下のようにunloadとreloadの2つの過程からなる。

  1. unloadでは、既存のデータベースのスキーマやデータをテキストファイルにダンプする。
  2. reloadでは、ダンプされた情報を新しいデータベースに適用する。

 これらの作業は、Sybase CentralからGUIで操作することも可能だが、ここではコマンドラインによる手順を紹介する。

SQL Anywhere 10へのアップグレード
 SQL Anyhwhere 10では、ファイルフォーマットの互換性を犠牲にする代わりに、読み取り一貫性のサポートなど、大幅な機能追加をする判断をした。そのため、SQL Anyhwhere 10にアップグレードする際は、データベースファイルの再構築が必須となっている。詳しくは、「SQL Anywhereへのアップグレード」(ftp://ftp2.ianywhere.jp/public/tech/sa10ug.pdf)をご参照いただきたい。
なお、SQL Anywhere 10以降では、ふたたびファイルフォーマットの互換性が保たれる。

2.11.1 既存データベースのunload

 既存データベースをダンプするには、dbunloadコマンドを用いる。

$ dbunload -c "dsn=ASA 9.0 Sample" c:\unload

 指定されたデータベースに接続し、引数のディレクトリにダンプされたファイルを生成する。生成されるファイルには2種類あり、(1) reload.sqlというreload用のSQL文が書かれたファイルと、(2) datの拡張子を持つデータファイルからなる。unload終了後、古いデータベースは停止させてかまわない。

2.11.2 新しいデータベースの作成

 reload先となる新しいデータベースを作成する。データベースの作成時でしか変更できない項目は、ここで設定する。

$ dbinit -p 8192 new_asademo.db

2.11.3 データのreload

 新しいデータベースを起動し、unload時に作成されたreload.sqlを新しいデータベースに対して実行する。

$ dbeng9 -n newasademo new_asademo.db
$ dbisql -c "eng=new_asademo;uid=dba;pwd=sql" reload.sql

2.11.4 その他のテクニック

 以上が再構築の一連の手順であるが、実は、これらを自動化する便利なオプションがdbunloadコマンドにある。

-an

 前ページ以降で説明した作業と同じことをdbunloadコマンドの-anオプションで実行できる(ページサイズの指定は後述)。-anで指定された新しいデータベースを自動作成し、さらにreloadも実行される。ダンプファイルは自動削除されるので残らない。

$ dbunload -c "dsn=ASA 9.0 Sample" -an new_asademo.db

-ar

 -arオプションでは、“同じ”データベースに対して再構築できる。“同じ”の意味は、物理的に同じファイルという意味ではなくて、新規に作成されたデータベースが既存のデータベースと置換されるという意味である。すなわち、新データベースへのreloadが完了した後、新データベースは停止し、旧データベースが削除されて、新データベースのファイル名が書き換わる。

$ dbunload -c "dsn=ASA 9.0 Sample" -ar

-ap

 -anや-arオプションと共に使われ、新しいデータベースのページサイズを指定できる。

同期に関係するとき

 Mobile Link同期クライアントは、トランザクションログを用いて同期するため、再構築の前後でトランザクションログを維持する必要がある。それには、dbunloadコマンドの -arオプションのあとにディレクトリを指定する。そうすると、同期に必要な部分のトランザクションログが指定されたディレクトリに保存されるので、同期クライアントの引数にこのディレクトリを指定すれば、同期が継続できる。


1 2
→
INDEX
SQL Anywhereのデータベース再構築/アップデート
Page1
2.11 データベースファイルの再構築
2.12 SQL Anywhereのアップデート
2.13 サイレントインストール
2.14 各種コマンド
次回
プロフィール
森脇 大悟 モリワキ ダイゴ

1974年生まれ。神奈川県川崎市出身。京都大学理学部物理学科卒業。同大学院 修士課程中退後、有限会社グルージェント(現・株式会社グルージェント)入社。

SIとして金融や物流システムを手がける。2003年アイエニウェア・ソリューションズ株式会社入社。エンジニアとして製品の導入支援やコンサルティング業務に携わり、Mobile Linkを使った大規模案件を得意とする。個人としてはRubyやDebianが好きで、それらのコミュニティにも参加している。Debian Offial Develoer。


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト