0

共有ホスティングサーバーにライブデータベースがあります。私は自分のサイトのコードにいくつかの大きな変更を加えています。最初にデータベースを設計する際に犯したいくつかの愚かな間違いを修正したいと思います。これらの変更には、多数のフィールドのサイズの変更、およびテーブル間の参照整合性の適用が含まれます。可能であれば、ローカルテストサーバーとリモートサーバーの両方で変更を加えたいと思います。

データを処理するための複雑なクエリの記述にはかなり慣れていますが、グラフィカルインターフェイスなしでデータベース構造を変更した経験はほとんどありません。

Visual Studioデータベースエクスプローラーでリモートデータベースにアクセスできますが、データ操作以外の目的で使用することはできません。昨夜、SQL Management Studio Expressをインストールしましたが、40回以上のクラッシュの後、あきらめました。いまいましいことにパッチを当てることさえできませんでした。

リモートサーバーはSQL2005です/MyLittleAdminWebインターフェイスが利用可能です。だから私の質問は、これらの変更を達成するための最良の方法は何ですか。リモートサーバーで使用できるグラフィカルインターフェイスはありますか?そうでない場合は、データベースをローカルマシンにコピーして修正し、再アップロードする簡単な方法はありますか?最後に、上記のいずれも実行可能でない場合、クエリを介して参照整合性を修正するための適切な情報へのリンクを持っている人はいますか?

やや一般的な質問で申し訳ありません-私はこれを本来よりもはるかに難しくしているように感じますが、一晩中検索/試した後、私はどこにも行きませんでした。助けてくれてありがとう。ほんとうにありがとう。

...また、誰かが私が借りることができるタイムマシンを持っています-私はこれのために私の過去の自分のお尻を蹴りに行く必要があります。

4

1 に答える 1

2

通常、ホスティングプロバイダーではデータベースのバックアップと復元が可能です。そのため、移動を実行する最も簡単な方法は、ライブDBのバックアップ、バックアップファイルのダウンロード、ローカルでの復元、すべての変更、ローカルデータベースのバックアップ、アップロードです。その後、ライブサービスで復元します。この間、サイトは管理上のシャットダウンに置かれる必要があります。これにより、この操作を実行している間、サイトがデータを更新し続けることはありません。ローカルSQLインスタンスがホスティングプロバイダーとまったく同じビルドバージョン(@@ version)であることを確認する必要があります。そうでない場合、ローカルSQLがデータベース構造をアップグレードし、ホスティングプロバイダーに復元できなくなります(または、バージョンがホストのバージョンよりも前の場合、ローカルサーバーに復元できません)。MSDN BOLには、次の方法に関する詳細なガイドがあります。バックアップ/復元を使用してデータベースをコピーします。

バックアップ/復元の代わりにデータベースをデタッチ/アタッチすることもできますが、MDFとLDFの両方を同期して移動する必要があり、バックアップよりもサイズが大きいため、これはお勧めしません。

これは、ローカルコピーのすべてのスキーマ変更をウィザードの方法で実行できることを前提としています。速くて正しい。もちろん、それは簡単ではありません。推奨される方法は、新しいスキーマに到達するために必要なすべての変換を適用するスクリプトを時間内に準備することです。このようなスクリプトを生成できるSQLDiffSQL Compare、 SQLDeltaなどのツールがあります。Visual StudioDatabaseEditionでもこれを行うことができます。

私がこれを行う方法は次のようになります:

  1. 開発マシンにライブホストとまったく同じスキーマがあることを確認します。よくわからない場合は、ライブサーバーのバックアップを取り、ローカルに復元できます。これが私のリファレンス、v1になります。スキーマ。
  2. v1のバックアップを保持します。参考のために
  3. スキーマをターゲットに変更するスクリプトの開発を開始します。スクリプト構文のメモリを自分で更新する必要がある場合があります。実行する操作については、SQL Server Management Studioウィザードに移動し、UIですべてのオプションを選択してから、[スクリプトオプションの表示]を選択します。 、これにより、希望する変更を実行するためにSSMSが実行しているスクリプトが正確に表示されます。
  4. スクリプトに追加する変更ごとに、v1を復元してテストできます。手順1でスクリプトを実行したときの参照バックアップ。
  5. 必要なスキーマの変更がすべて完了するまで、スクリプトを繰り返し、一度に1つの変更を追加します。変更するたびに、手順4のようにもう一度テストできます。
  6. スクリプトは、スキーマに対するDDLの変更だけでなく、必要なDMLの変更(参照データの変更、値の変更、テーブル間の列の移動など)も行う必要があります。
  7. スクリプトの準備ができたら、新しいバックアップをダウンロードしてスクリプトを適用し、更新されたバックアップをアップロードしてライブホストに復元できます。または、ライブホストでスクリプトを実行することもできます(もちろん、何かがひどくうまくいかない場合に備えて、スクリプトをバックアップした後)。

私のプロジェクトでは、データベースの展開とアップグレードを常にスクリプトに依存しています。実際、データベース拡張プロパティを使用して、アプリケーションにデプロイされたスキーマの「バージョン」を格納し、コードでは、スキーマを最後のバージョンに戻すすべてのスクリプトをロールフォワードするだけです。私のブログには、この手法を説明する記事があります:バージョン管理とデータベース

于 2009-07-18T18:30:27.130 に答える