* MS SQL Server で DB から SQL スクリプトを生成する手順とオプション
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server] [SQL]
MS SQL Server2000 の 管理ツール Enterprise Manager で、既に存在するデータベースのインスタンスやテーブル、ストアドプロシージャなどをスクリプト化する手順と、指定するオプションのメモ。
要するに、GUI のツールで開発用サーバ上の DB を直接操作しながら作って、完成した時点でテストサーバや本番サーバに配備するというスタイルで DB まわりを作るようになったので、逆の作業が必要になったということだ。
もちろん、私も初めて DB を作ったときは CREATE TABLE をテキストエディタで手書きしたものだ。その後 CREATE TABLE を自動生成するスクリプトを作ったり、したが、現在は GUI のツールを利用するというスタイルに落ち着いている。私が扱うのはテーブル数15から30程度の小規模な DB なので、それで十分用が済んでしまう。
わざわざ SQL に落とさずに、SQL Server の DTS (Data Transformation Service - データ変換サービス) で転送すれば用が済んでしまう場合もある。ただ、プレーンテキストのスクリプトにするということは、スナップショットとして保存したり、Subversion や PVCS、VSS などの汎用のバージョン管理ツールで履歴を管理できるということだ。これは大きな利点だ。SQL Server は VisualStudio + VSS と緊密に連携することもできるが、サーバの構成などによってはその方法を採れないことも多いため、スクリプト化は非常にありがたい機能だ。
「SQL スクリプト生成ウインドウ」が表示されるので、対象オブジェクトやオプションを指定する。
以下、オプションのメモ。
■はチェックボックスのチェックオンを、□はオフを表す。
●はラジオボタンのチェックオンを、○はオフを表す。
スクリプト ファイルに説明用ヘッダーを含める(I)をオンにしておくと、対象オブジェクトの名前と現在の日付をコメントとして挿入してくれる。以下のような感じ。「/****** オブジェクト : ストアド プロシージャ dbo.P_GetLandscapeCustomers スクリプト日付 : 2006/08/23 12:43:12 ******/」テキストの差分をとる場合に邪魔になる場合はオフにすればいい。
「拡張プロパティを含める」をオンにしておくと、EnterpriseManager のテーブルデザイナで付加したカラム(列)への説明コメントも含めてスクリプトを生成してくれる。
- なぜ SQL スクリプトを作成するのか
既存の DB から SQL スクリプトを作成するという、本来と逆の手順をとるのはなぜか。それは、DB のテーブル設計やストアドのコーディングを RDBMS 付属の GUI ツールや自動生成ツールに頼るようになり、CREATE TABLE を手で書いたりすることがなくなったからだ。要するに、GUI のツールで開発用サーバ上の DB を直接操作しながら作って、完成した時点でテストサーバや本番サーバに配備するというスタイルで DB まわりを作るようになったので、逆の作業が必要になったということだ。
もちろん、私も初めて DB を作ったときは CREATE TABLE をテキストエディタで手書きしたものだ。その後 CREATE TABLE を自動生成するスクリプトを作ったり、したが、現在は GUI のツールを利用するというスタイルに落ち着いている。私が扱うのはテーブル数15から30程度の小規模な DB なので、それで十分用が済んでしまう。
わざわざ SQL に落とさずに、SQL Server の DTS (Data Transformation Service - データ変換サービス) で転送すれば用が済んでしまう場合もある。ただ、プレーンテキストのスクリプトにするということは、スナップショットとして保存したり、Subversion や PVCS、VSS などの汎用のバージョン管理ツールで履歴を管理できるということだ。これは大きな利点だ。SQL Server は VisualStudio + VSS と緊密に連携することもできるが、サーバの構成などによってはその方法を採れないことも多いため、スクリプト化は非常にありがたい機能だ。
- SQL スクリプト生成の手順
Enterprise Manager の データベースオブジェクトを右クリックし、SQL スクリプト生成を選択。「SQL スクリプト生成ウインドウ」が表示されるので、対象オブジェクトやオプションを指定する。
以下、オプションのメモ。
■はチェックボックスのチェックオンを、□はオフを表す。
●はラジオボタンのチェックオンを、○はオフを表す。
- 「全般」タブ スクリプト化するオブジェクト指定
基本は全オブジェクトを SQL スクリプト化する。抜けがあると怖いので、全オブジェクトのスクリプト(O) を明示的に指定するのがよい。■全オブジェクトのスクリプト(O)
■全テーブル(T)
■全ビュー(W)
■全ストアド プロシージャ(P)
■全デフォルト(D)
■全ルール(U)
■全ユーザー定義データ型(Y)
■全ユーザー定義関数(F)
- 「書式」タブ スクリプト書式オプション
「すべての従属オブジェクトに対してスクリプトを生成(E)」は今回必要ないのでオフにした。スクリプト オプションを使用して、オブジェクト スクリプトを作成する方法を指定できます。
■オブジェクトごとに CREATE <object> コマンドを生成(C)
■オブジェクトごとに DROP <object> コマンドを生成(D)
□すべての従属オブジェクトに対してスクリプトを生成(E)
■スクリプト ファイルに説明用ヘッダーを含める(I)
■拡張プロパティを含める(X)
□7.0 互換の機能のみスクリプトを作成(O)
スクリプト ファイルに説明用ヘッダーを含める(I)をオンにしておくと、対象オブジェクトの名前と現在の日付をコメントとして挿入してくれる。以下のような感じ。「/****** オブジェクト : ストアド プロシージャ dbo.P_GetLandscapeCustomers スクリプト日付 : 2006/08/23 12:43:12 ******/」テキストの差分をとる場合に邪魔になる場合はオフにすればいい。
「拡張プロパティを含める」をオンにしておくと、EnterpriseManager のテーブルデザイナで付加したカラム(列)への説明コメントも含めてスクリプトを生成してくれる。
- 「オプション」タブ スクリプト作成オプション
全部チェックオン。ただし、「データベース スクリプト(C)」はデータベースファイル (.mdf) や トランザクションログファイル (.ldf) の絶対パスをハードコードしてしまう。そのため、パスが異なる環境で実行する場合はチェックをオフにするか、スクリプト中のパスを修正して整合性をとる。■データベース スクリプト(C)
■データベース ユーザーとデータベース ロール スクリプト(S)
■SQL Server ログイン (Windows と SQL Server ログイン) スクリプト(L)
■オブジェクト レベル権限スクリプト(M)
テーブル スクリプト作成オプション
■インデックス スクリプト(X)
■フルテキスト インデックス スクリプト(I)
■トリガ スクリプト(R)
■主キー、外部キー、デフォルトと CHECK 制約スクリプト(K)
ファイル オプション
○ファイル フォーマット
○MS-DOS テキスト (OEM)(D)
○Windows テキスト (ANSI)(W)
●インターナショナル テキスト (Unicode)(U)
生成するファイル
●1 ファイルに作成(F)
○オブジェクトごとにファイル作成(B)
約200年後の今日である2219年8月4日は、レイストーム作戦 - Operation Raystorm の発動日だ。この日を記念して、私は毎年8月4日にはプレイステーションのシューティングゲーム「レイストーム」をプレイすることにしている。
レイストーム作戦とは、セシリア連合軍による地球破壊を阻止することを目的としたバルカ機関の作戦行動を指す。以下、いろいろなところで語られているレイストーム作戦の要約。
2219年。恒星間飛行を実用化し、地球は恒星間国家の主星として繁栄していた。20を超える殖民惑星を統治するため、地球/太陽系連合軍を設立し、軍政を敷く。
これに反発した殖民惑星諸国が最重要拠点「セシリア」を中心として「セシリア連合」を設立し、地球からの解放を求めて開戦。地球は24時間で降伏。
地球降伏からさらに24時間後。セシリア連合は地球居住民の強制移民と地球の破壊を宣言。抵抗勢力は武力で鎮圧。さらに、地球破壊のために全艦隊を集結させた。
バルカ機関は、開発中の R-GRAY 全13機よって「セシリア制圧作戦」 - OPERATION RAYSTROM を発動する。
以上がレイストーム作戦発動までの経緯。ただ、この内容についてはいろいろと疑問が尽きない。
そもそもバルカ機関って何? とか、軍政を敷いていたほどであるにもかかわらず地球側の降伏が異常に早いとか、何も地球を壊さなくてもとか。前作レイフォースやレイシリーズ最終作レイクライシスなどの資料を読めばいろいろわかるのかもしれない。
ちなみに、地球側の降伏が早いのは、相当量の戦力をセシリア連合軍に奪取されたからであろうと思われる。各エリアのボスを見ると、地球側から略奪した兵器を転用しているケースが非常に多い。
都市部上空での戦闘。空中においては敵戦闘機編隊による迎撃、地上からは対空砲による迎撃程度で、敵の攻撃はまだあまり激しくない。しかし、私はもともとゲームが上手くないし、最近はかなりご無沙汰のため、途中でレーザーパワーアップを一個取り逃す。
ボスは陸上戦艦 Pendragon (ペンドラゴン)。完全にすべてのパーツを破壊した上で撃破。AREA1 クリア時の STRATEGY VALUATION (戦略評価) は、ENEMY DESTROYED (敵破壊率) が98%、LOCK-ON SHOOTDOWN (ロックオン撃墜率) が100%。敵を逃してるし、ロックオンを上手く連鎖できなかったため、スコアは755300点。うまい人の基準だと「100万点行けば良しとしていた」というくらいだから、今回の私の得点は全く振るわないものだ。
確か、序盤に登場する赤い蛇のような敵を短時間で倒すことでレーザーパワーアップを持った敵が登場するはず。でも、うまく倒せない。R-GRAY2 が持つ最大値である16ロックに到達することはまだできない。
このエリアは曲が最高にいい。曲名は Aquarium といい、イルカの鳴き声と綺麗な旋律が海を連想させる。
ボスは空中戦艦 Vercingetorix。何て読むのこれ? バーシンゲトリックス? ヴェルキンゲトリクス? まあ、いずれにせよ大きな飛行機。両翼のパーツには目もくれず、中央を集中的にロックオンして撃墜。
前半の山場は、高得点を狙える赤ボート。普通の敵は基礎点が100点か200点。だが、この赤ボートの基礎点はなんと4000点。16ロック目で撃破すれば、倍率補正がかかって999900点となる。しかし、この赤ボートはタイミング良く撃破しないとすぐに自爆してしまうので、少々慣れが要る。
今回赤ボートで得られた得点は640000点。全然ダメだけど、このくらいでいいんだ。私程度の腕のプレイヤーに重要なことは、やられないこと。先に進む事が重要。・・・とかなんとか言ってる間に早速一機やられてしまった。やれやれ。
ボスは大型機動兵器 zenobia (ゼノビア)。軽く蹴散らしてクリア。
AREA3 クリア時で、2943950点。上級者ならこの程度の点数は2面クリア時に出しているんだろうなー。
このステージは楽しい。小さな戦闘機一機で巨大な艦隊を殲滅するという爽快感を味わえるからだ。大量の迎撃ミサイルと戦闘機を撃ち落とし、その隙を縫うように戦艦のブリッジをロックオンして撃沈していくのは非常に気持ちいい。初代 R-TYPE のステージ3の巨大戦艦ステージに通ずるものがある。
もちろん、相手は戦艦なので侮れない。高出力のレーザーや爆雷も使ってくるため、やられることもあったりする。いつもならだいたいこのエリアで初めてミスするんだけど、今日は AREA4に来るまでに2機やられてる。もう後に引けない。・・・とか言ってる間にやられた。もちろんコンティニュー。
ボスは巨大戦艦 Hannibal (ハンニバル)。ほんとに大きい戦艦で、惑星破壊能力を持った中間子砲を備えているとのこと。非常に物騒だ。こんな重要で強力な船を奪われちゃったら、そりゃあ地球側は降伏するしかないって。ブリッジに集中ロックオンしてクリア。
ステージクリア後にワープの演出がある。地球周回軌道には敵軍の本拠地セシリアへワープするためのゲートがあるようだ。
音楽がなかなかいい。「るー、るねあ、るなてぃっく」と歌ってくれる。ノイ=タンツ Mix だとさらに「るねあ、るなてぃっく、るみねそんす」と歌ってくれるが、今回は通常の曲なので「るなてぃっく」まで。
このエリアは、後半のレーザーを乱射するビットと、その後の特攻してくる戦闘機群が辛い。
ボスは Genseric (ジェンセリック?)。変形型の機動兵器。2つの形態に変化し、何種類かの武器を使って攻撃してくる。なんとか撃破。パターンが決まれば、そんなに苦労しない。
敵の攻撃も激しくなっているので、通常の戦闘が辛い。でも、それ以上にボスが辛い。
ボスは Alaric (アラリック)。変形する機動兵器。慣性コントロールのためにハマチからとれる物質を材料に使っているとのこと。ハマチねえ。材料はともかく、アラリックは強い。
レーザーを乱射するビット、ばらまき弾、高速レーザー、どれも気を抜くとやられる。私程度の腕だと、だいたい1クレジットから2クレジット分やられるのが常。今回は2クレジット分くらいやられた。
敵の中枢だけあって、攻撃はかなり厳しい。でも、ここは音楽がいいのでがんばれる。
ボスは Spartacus JUDA SUB SYSTEM (スパルタカス)。要するに迎撃要塞みたいなもの。上端を集中ロックオンして撃破。撃破すると爆風が円を描くのだが、この演出がきれい。落下していく様もいい。
まず敵のバリア発生装置を破壊。第二形態へ移行させる。
第二形態ではサーチライトのようなレーザーを回るようにして避け、追尾型の爆雷をやり過ごし、誘導レーザーを引きつけてかわす。これらをすべてきれいにかわせたときは、とても気持ちいい。難易度が上がっていると、爆雷や誘導レーザーの量が増える。その状態でも避けられたときは、脳内麻薬がどっと出る感じ。
最終形態に移行したユグドラシルのコアを集中ロックオン & スペシャルアタックしてユグドラシルを撃破した。レイストーム作戦完了。
- レイストーム作戦 - Operation Raystorm とは
レイストーム作戦とは、セシリア連合軍による地球破壊を阻止することを目的としたバルカ機関の作戦行動を指す。以下、いろいろなところで語られているレイストーム作戦の要約。
2219年。恒星間飛行を実用化し、地球は恒星間国家の主星として繁栄していた。20を超える殖民惑星を統治するため、地球/太陽系連合軍を設立し、軍政を敷く。
これに反発した殖民惑星諸国が最重要拠点「セシリア」を中心として「セシリア連合」を設立し、地球からの解放を求めて開戦。地球は24時間で降伏。
地球降伏からさらに24時間後。セシリア連合は地球居住民の強制移民と地球の破壊を宣言。抵抗勢力は武力で鎮圧。さらに、地球破壊のために全艦隊を集結させた。
バルカ機関は、開発中の R-GRAY 全13機よって「セシリア制圧作戦」 - OPERATION RAYSTROM を発動する。
以上がレイストーム作戦発動までの経緯。ただ、この内容についてはいろいろと疑問が尽きない。
そもそもバルカ機関って何? とか、軍政を敷いていたほどであるにもかかわらず地球側の降伏が異常に早いとか、何も地球を壊さなくてもとか。前作レイフォースやレイシリーズ最終作レイクライシスなどの資料を読めばいろいろわかるのかもしれない。
ちなみに、地球側の降伏が早いのは、相当量の戦力をセシリア連合軍に奪取されたからであろうと思われる。各エリアのボスを見ると、地球側から略奪した兵器を転用しているケースが非常に多い。
- August 4, 2219 / ALBION D.U. / EARTH (AREA1)
ゲームはアルビオン連合特別地区から始まる。ALBION D.U. の D.U. とはおそらく The District of Union (連合行政特別区) の略だろう。自機として、最大16のロックオン数と雷のような特性のレーザーを備える R-GRAY2 (アール・グレイ2) を選んだ。都市部上空での戦闘。空中においては敵戦闘機編隊による迎撃、地上からは対空砲による迎撃程度で、敵の攻撃はまだあまり激しくない。しかし、私はもともとゲームが上手くないし、最近はかなりご無沙汰のため、途中でレーザーパワーアップを一個取り逃す。
ボスは陸上戦艦 Pendragon (ペンドラゴン)。完全にすべてのパーツを破壊した上で撃破。AREA1 クリア時の STRATEGY VALUATION (戦略評価) は、ENEMY DESTROYED (敵破壊率) が98%、LOCK-ON SHOOTDOWN (ロックオン撃墜率) が100%。敵を逃してるし、ロックオンを上手く連鎖できなかったため、スコアは755300点。うまい人の基準だと「100万点行けば良しとしていた」というくらいだから、今回の私の得点は全く振るわないものだ。
- August 5, 2219 / OLD GAUL CITY / EARTH (AREA2)
旧ゴウル市の洋上を進む。開始後まもなく突撃してきた機体により、R-GRAY2 一機を失う。あり得ない事態だ。こんなに腕が落ちているなんて。確か、序盤に登場する赤い蛇のような敵を短時間で倒すことでレーザーパワーアップを持った敵が登場するはず。でも、うまく倒せない。R-GRAY2 が持つ最大値である16ロックに到達することはまだできない。
このエリアは曲が最高にいい。曲名は Aquarium といい、イルカの鳴き声と綺麗な旋律が海を連想させる。
ボスは空中戦艦 Vercingetorix。何て読むのこれ? バーシンゲトリックス? ヴェルキンゲトリクス? まあ、いずれにせよ大きな飛行機。両翼のパーツには目もくれず、中央を集中的にロックオンして撃墜。
- August 5, 2219 / PALMYRA VALLEY / EARTH (AREA3)
パルミラ渓谷を抜ける。初めはなんでこんな所を抜けるかよくわからなかったが、以前読んだムックか何かによると、ここは戦略上の要衝だとか。エリアは、高速飛行する前半と、敵基地を襲撃する後半部分とに大別できる。前半の山場は、高得点を狙える赤ボート。普通の敵は基礎点が100点か200点。だが、この赤ボートの基礎点はなんと4000点。16ロック目で撃破すれば、倍率補正がかかって999900点となる。しかし、この赤ボートはタイミング良く撃破しないとすぐに自爆してしまうので、少々慣れが要る。
今回赤ボートで得られた得点は640000点。全然ダメだけど、このくらいでいいんだ。私程度の腕のプレイヤーに重要なことは、やられないこと。先に進む事が重要。・・・とかなんとか言ってる間に早速一機やられてしまった。やれやれ。
ボスは大型機動兵器 zenobia (ゼノビア)。軽く蹴散らしてクリア。
AREA3 クリア時で、2943950点。上級者ならこの程度の点数は2面クリア時に出しているんだろうなー。
- August 5, 2219 / 3RD FLEET / EARTH ORBIT (AREA4)
地球周回軌道上に展開する第三艦隊を突破する。この第三艦隊は、もともと地球の艦隊だったものをセシリア連合軍が奪取したものらしい。で、そのおかげでセシリアは地球に大勝したとのこと。なるほどね。このステージは楽しい。小さな戦闘機一機で巨大な艦隊を殲滅するという爽快感を味わえるからだ。大量の迎撃ミサイルと戦闘機を撃ち落とし、その隙を縫うように戦艦のブリッジをロックオンして撃沈していくのは非常に気持ちいい。初代 R-TYPE のステージ3の巨大戦艦ステージに通ずるものがある。
もちろん、相手は戦艦なので侮れない。高出力のレーザーや爆雷も使ってくるため、やられることもあったりする。いつもならだいたいこのエリアで初めてミスするんだけど、今日は AREA4に来るまでに2機やられてる。もう後に引けない。・・・とか言ってる間にやられた。もちろんコンティニュー。
ボスは巨大戦艦 Hannibal (ハンニバル)。ほんとに大きい戦艦で、惑星破壊能力を持った中間子砲を備えているとのこと。非常に物騒だ。こんな重要で強力な船を奪われちゃったら、そりゃあ地球側は降伏するしかないって。ブリッジに集中ロックオンしてクリア。
ステージクリア後にワープの演出がある。地球周回軌道には敵軍の本拠地セシリアへワープするためのゲートがあるようだ。
- August 6, 2219 / CARTHAGE BASE / SECILIA ORBIT (AREA5)
ワープアウトすると、そこはセシリアの周回軌道上にあるカルタゴ基地。日付も進んで8月6日。音楽がなかなかいい。「るー、るねあ、るなてぃっく」と歌ってくれる。ノイ=タンツ Mix だとさらに「るねあ、るなてぃっく、るみねそんす」と歌ってくれるが、今回は通常の曲なので「るなてぃっく」まで。
このエリアは、後半のレーザーを乱射するビットと、その後の特攻してくる戦闘機群が辛い。
ボスは Genseric (ジェンセリック?)。変形型の機動兵器。2つの形態に変化し、何種類かの武器を使って攻撃してくる。なんとか撃破。パターンが決まれば、そんなに苦労しない。
- August 6, 2219 / ETRURIA / SECILIA (AREA6)
セシリアの首都エトルリア市上空。敵の攻撃も激しくなっているので、通常の戦闘が辛い。でも、それ以上にボスが辛い。
ボスは Alaric (アラリック)。変形する機動兵器。慣性コントロールのためにハマチからとれる物質を材料に使っているとのこと。ハマチねえ。材料はともかく、アラリックは強い。
レーザーを乱射するビット、ばらまき弾、高速レーザー、どれも気を抜くとやられる。私程度の腕だと、だいたい1クレジットから2クレジット分やられるのが常。今回は2クレジット分くらいやられた。
- August 7, 2219 / JUDA CENTRAL SYSTEM / SECILIA (AREA7)
セシリアの中枢、ジューダ セントラルシステム。正しくはジューダではなくジュダもしくはユダなんだろうけど、ナレーションではジューダと伸ばしているように聞こえる。敵の中枢だけあって、攻撃はかなり厳しい。でも、ここは音楽がいいのでがんばれる。
ボスは Spartacus JUDA SUB SYSTEM (スパルタカス)。要するに迎撃要塞みたいなもの。上端を集中ロックオンして撃破。撃破すると爆風が円を描くのだが、この演出がきれい。落下していく様もいい。
- 最終ボス ユグドラシル
最終ボスは世界樹ユグドラシル。ここも音楽がいい。戦っている気分を盛り上げてくれる。まず敵のバリア発生装置を破壊。第二形態へ移行させる。
第二形態ではサーチライトのようなレーザーを回るようにして避け、追尾型の爆雷をやり過ごし、誘導レーザーを引きつけてかわす。これらをすべてきれいにかわせたときは、とても気持ちいい。難易度が上がっていると、爆雷や誘導レーザーの量が増える。その状態でも避けられたときは、脳内麻薬がどっと出る感じ。
最終形態に移行したユグドラシルのコアを集中ロックオン & スペシャルアタックしてユグドラシルを撃破した。レイストーム作戦完了。