web-dev-qa-db-ja.com

SQL Server 2000データベースを2008 R2にアップグレードし、新機能を有効にする

最近、SQL Server 2000データベースを2008 R2にアップグレードしました。


私がしたこと:

  1. 古いマシンでSQL Server 2000(Express)サービスをシャットダウンします。
  2. データファイル(mydatabase.mdfおよびmydatabase.ldf)を新しいマシンに移動し、
  3. SQL Server Management Studio 2008を実行します。
  4. ローカルデータベースエンジンに接続し、
  5. データファイルをデータベースにアタッチします。
  6. データベースの互換性レベルをSQL 2008(100)に変更します。

質問:移行を完了するために他に何をすべきですか?

したい:

  1. チェックサムや完全復旧モデルなどの新機能を使用し、
  2. このデータベースをSQL 2008 R2で作成されたとおりに作成します。
  3. このデータベースを完全に互換性があり、正しく、新しいSQL 2008 R2データベースエンジンに完全に適合させる。

つまり、古いSQL 2000データベースを新しい2008 R2データベースに正しく完全に変換する方法を知りたい、すべてが正しく行われていることを落ち着かせ、すべての新しいことに満足している特徴。


この質問をしているのは、インターネット上にさまざまなことを言っているサイトがたくさんあるので、混乱するからです。インデックスを再構築する必要があると言う人もいれば、他のことをする人もいます...今私は何も知らないので、経験豊富な人の意見と明確で段階的な指示を聞きたいです。私は非常に小さな会社で働いており、私は一人でいるので、物事を台無しにしたくありません。


サー、私はあなたの答えに本当に感動しました、私はそれほど期待していませんでした。


だからいくつかのコメント:

  1. データベースは現在稼働中です。前述のとおり、最初の投稿で説明したように、MSDNで説明されているように、deattach-attachメソッドを使用してアップグレードされました。 http://msdn.Microsoft.com/en-us/library/ms189625.aspx それは迅速に行われなければならなかったので、私はそのようにすることを余儀なくされました。それがどれほど不適切であったかを忘れて、現在の状況に焦点を当てましょう。

  2. ユーザー/権限はここでは問題ではありません-数は少なく、権限は単純です。

  3. データベースを使用するアプリケーションは2012年までSQL 2000と互換性があるため、これも問題にはなりません。

  4. データベースファイル(MDF)は大きくありません-約1GBだけです。


いくつかの質問:

  1. バックアップ/復元方法を使用することをお勧めしますが、私は上記のようにしたので、今問題が発生する可能性はありますか?すべてが問題なく動作しました。

  2. チェックサムと完全復旧モデルについて:SQL 2000では利用できず、有効化されていなかったので、今すぐ使用したいと思います。データベースプロパティでこれらのオプションを有効にすることだけが必要だとおっしゃっていましたか。どこかで読みましたが、それだけでは不十分であり、インデックスなども再構築する必要があります。本当にわからないので、聞いてみます。

  3. このデータベースをSQL 2012に移行する準備をしています。つまり、最初はSQL 2000から2008 R2になりましたが、現在は2008 R2から2012になります(SQL 2000データベースのサポートがないため、これを直接行うことは不可能でした。 SQL 2012)。したがって、私はあなたのガイドに従う必要があることを理解しています:2008 R2でバックアップし、2012年に復元してから、残りのヒントを正しく実行しますか?

  4. バックアップ/復元の方法を説明してください:データベースのSQLクエリへのダンプのようなもので、一連のクエリを実行してデータベースを復元するようなものですか?ちなみに、この方法は私のデータベースを「デフラグ」するのでしょうか?そうでない場合、手動で最適化/最適化する方法は?

  5. SQL 2000 Expressを何年も使用していたので(管理インターフェイスなし)、エンジンを停止してDATAディレクトリをRARするだけでバックアップを実行していました。今のところ、SQL 2008を使用しているので、これはManagement Studioでバックアップ機能を使用するよりも優れていますか?

  6. トランザクションログのバックアップを頻繁に行う完全復旧モード-トランザクションログはどこに保存されますか-LDFファイルですか?どうすれば適切にバックアップできますか?


私の質問は馬鹿げているように聞こえるかもしれません。私はプロのデータベース管理者ではありませんが、データベースエンジンのアップグレードなどの「ハードコア」タスクを実行できるのは私だけです。また、あなたのノウレッジが私のような他の人々に大いに役立つことも確信しています。

お時間と知識をありがとうございました。本当に感謝しています。

23
Mark Saelic

最初のステップを行うには、SQL Server 2000データベースで pgrade Advisor を実行し、それによって報告されるすべての問題に対処します。

ベストプラクティスとして、SQL Server 2000レガシーデータベースでアップグレードアドバイザーツールを使用し、トレースファイルをアップグレードアドバイザーツールにインポートして分析します。トレースファイルを使用すると、アップグレードアドバイザーは、アプリケーションに組み込まれたTSQLなど、データベースの単純なスキャンでは表示されない可能性のある問題を検出できます。 SQL Server 2000サーバーでSQLプロファイラーを使用してTSQLのトレースを通常の時間にキャプチャし、アップグレードアドバイザーを使用してこれらのトレースを分析できます。

したがって、残りの手順は次のようになります。

移行当日:

  1. sp_help_revlogin を使用して、2000サーバーでログインをスクリプトします。
  2. SQL 2000サーバーからジョブとリンクサーバーのスクリプトを作成します。
  3. 2000サーバーに接続するWebサーバーを停止します。 2000サーバーに接続しているアプリケーションがないことを確認します。
  4. backup your database and restore on destination sql 2008 R2 server。(note:detach/attachしないでください。問題が発生する可能性があり、データベースがデタッチされ、バックアップが作成されなくなります。 !)
  5. 2008 R2サーバーでバックアップが復元されたら、2008 R2サーバーでsp_help_revloginからの出力を実行して、ログインを再作成します。
  6. 同期します 孤立したユーザー (存在する場合)、新しいサーバーでSQLエージェントジョブとリンクサーバーを再作成します。
  7. 復元されたデータベースの互換性レベルを100に変更します。
  8. All_errormsgsおよびdata_purityオプションをオンにしたdbcc checkdb:DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. 復元されたデータベースでDBCC UPDATEUSAGEを実行するDBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. フルスキャンですべてのテーブルの統計を更新します:Update Statistics table_name with FULLSCAN
  11. オプション:断片化レベルを確認し、断片化レベルに応じて、すべてのインデックスのreorg/rebuildを実行します。 Olaのスクリプト を使用できます。
  12. sp_recompile 'procedureName'を使用してすべてのSPを再コンパイルします
  13. ビューを更新してくださいSP_REFRESHVIEW view_name
  14. データベースオプションを必ず変更してください。ページを確認してCHECKSUMにしてください。
  15. 復旧モデル(SQL 2000と異なる場合)をFULLに変更します。完全復旧モデルに変更する場合は、トランザクションログのバックアップを頻繁に実行するようにしてください。これは、T-Logを膨らませるのではなく、特定の時点を回復するのに役立ちます。
  16. SQL Server 2005以降では、 データベースメール が導入されました。したがって、SQLMailからデータベースメールに移行する必要があります。

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO
    

また、レプリケーションがある場合は、それをリセットする必要があります。ログシッピングやミラーリングのようなDR(2005年以降に新しく、2012年に廃止された)の場合、それもリセットする必要があります。

古いDTSパッケージは、C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(コマンドライン)または Package Migration Wizard を使用してSSISに移行する必要があります。

また、 https://dba.stackexchange.com/a/36701/878 にある私のスクリプトを使用することもできます。ただし、デタッチ/アタッチ方式を使用していますが、バックアップ/復元方式を使用することを強くお勧めします。それに応じてスクリプトを変更します。


補足として:

  • オンにするインスタントファイル初期化 新しいサーバーで。
  • 同じサイズの 複数のtempdbデータファイル を用意します。
  • トレースフラグ1118を有効にする
  • 最大メモリと最小メモリを正しく構成します。特に最大メモリはデフォルトから離れています。
  • MAXDOP設定を適切に調整します。詳細は https://dba.stackexchange.com/a/36578/878 を参照してください。
  • インストールするのが最善-- sp_Blitz from Brent Ozar。実行して、報告された重大で優先度の高い問題に対処します。
  • SQL Power Doc kendalvandykeを使用することもできます-SQL Power DocはSQL Server 20から2012までのすべてのバージョンのSQL Serverで動作します。 Windows 2000およびWindowsからのWindows ServerおよびコンシューマWindowsオペレーティングシステムのバージョンXP Windows Server 2012およびWindows 8まで計画アップグレード-で使用されている非表示機能の確認インスタンス。
  • アドホックワークロードの最適化とデフォルトのバックアップ圧縮オプションを有効にします。

質問に対応しましょう...

移行を完了するには、他に何をすべきですか?

私の答えを参照してください。移行計画を適切に立てるのに役立ちます。ビジネスユーザーによる適切なアプリケーションテストと共に、移行計画を常にUAT(非運用)でテストします。

チェックサムや完全復旧モデルなどの新機能を使用します。

CHECKSUMはSQL Server 2005以降の新機能です。上記の移行手順の一部として説明しました。

full recovery modelは新しいものではありません。それはあなたのビジネスの種類に依存し、災害の場合に失うことができるデータの量によって決まります。

トランザクションログのバックアップを頻繁に実行する完全復旧モードでは、データ損失の量を減らすことで、特定の時点の状態に復元できます。

このデータベースを、SQL Server 2008 R2で作成されたとおりに作成します。

このデータベースを完全に互換性のある正しいものにし、新しいSQL 2008 R2データベースエンジンに完全に適合させる。

これを完全に理解しないでください!しかし、上記の移行手順が役立ちます。上記の手順に従って、データベースを復元し、互換性レベル10 100を変更するだけです。

古いSQL Server 2000データベースを新しい2008 R2データベースに正しく完全に変換する方法を知りたいだけです。落ち着いて、すべてが正しく行われ、すべての新機能に満足してください。

これには、アプリケーションコードの変更も必要になるため、注意が必要です。 SQL Server 2008 R2の新機能を使用するようにアプリケーションコードを変更した場合、問題は発生しません-UATまたはDEV環境でアプリケーションの完全なリグレッションテストを完全に実行したことが提供されます。これにより、実際の移行をPRODで行うときに最高の自信が得られます。


注:上記は覚えておくことができる手順であり、何も省略されていないことは確かです。見逃したものがある場合は、そのサイトまたは他の専門家をこのサイトに追加します。自由に追加してください。

実際の移行中に予期せぬ事態が発生しないようにするには、上記で概説したすべてのものを最初に非本番環境で再生する必要があります。

----------

その他の質問:

バックアップ/復元方法を使用することをお勧めしますが、私は上記のようにしたので、今問題が発生する可能性はありますか?すべてが問題なく動作しました。

すべてが正常に機能し、データベースをアタッチできた場合、[〜#〜] no [〜#〜]問題は発生しません。デタッチ/アタッチvsバックアップ/復元は、データベースを別の場所に移動する方法の1つにすぎません。ただ気を付けてください.. バックアップ/復元何かがうまくいかなくて(最悪の場合)少なくともデータベースを復元および回復するためのバックアップがあるので、より安全で信頼できます。

チェックサムと完全復旧モデルについて:SQL Server 2000では利用できず、有効化されていなかったため、今すぐ使用したいと思います。データベースプロパティでこれらのオプションを有効にすることだけが必要だとおっしゃっていましたか。どこかで読みましたが、それだけでは不十分であり、インデックスなども再構築する必要があります。本当にわからないので、聞いてみます。

言ったように、チェックサムはバージョン2005以降の新機能です。これは、SQL Serverが特にI/Oによるページの破損を検出するメカニズムです。詳細については、私の回答 here を参照してください。

チェックサムを有効にするだけでなく、復旧モデルを完全に変更するには、以下のT-SQLコードを使用して実行できます。

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

注:データベースオプションを設定すると、2008R2から2012への移行を行っても保持されます。

このデータベースをSQL Server 2012に移行する準備をしています-最初は2000から2008 R2でしたが、今は2008 R2から2012になります(SQLで2000データベースがサポートされていないため、これを直接実行することは不可能でしたサーバー2012)。したがって、私はあなたのガイドに従う必要があることを理解しています:2008 R2でバックアップし、2012年に復元してから、残りのヒントを正しく実行しますか?

はい、お願いします。言ったように、バックアップの復元は、それを行わない正当な理由がない限り、優先方式です。

バックアップ/復元の方法を説明してください:データベースのSQLクエリへのダンプのようなもので、一連のクエリを実行してデータベースを復元するようなものですか?ちなみに、この方法は私のデータベースを「デフラグ」するのでしょうか?そうでない場合、手動で最適化/最適化する方法は?

バックアップ/復元は... Sybase、Oracle、またはおそらくMySQLでも使用されるダンプとロードに似ています。そのSQL Serverはそれを..バックアップ/復元と呼びます。

必読: SQL Serverバックアップについて Paul Randall著。

単純な構文(完全な構文については [〜#〜] bol [〜#〜] )を参照してください:

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

次に、復元先サーバーで次のように復元できます。

-宛先のディスクレイアウトがソースサーバーのディスクレイアウトと一致しない場合

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

-宛先のディスクレイアウトがソースサーバーのディスクレイアウトと一致すると仮定

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

ちなみに、この方法は私のデータベースを「デフラグ」するのでしょうか?そうでない場合、手動で最適化/最適化する方法は?

バックアップ/復元はデータベースを最適化しません。断片化レベルに応じて、Alter Index ReorganizeまたはRebuildを使用する必要があります。

SQL Serverは初めてなので、Ola Hallengren'sを使用することを強くお勧めします。

SQL Server 2000 Expressを何年も使用していたので(管理インターフェイスなし)、エンジンを停止してDATAディレクトリをRARするだけでバックアップを実行していました。今のところ、SQL Server 2008を使用しているので、これはManagement Studioでバックアップ機能を使用するよりもまだ優れていますか?

エンジンを停止することは、バックアップを実行するためにできる悪いことです!!

私が言及したバックアップに関するPaulのリンクを読み、Olaのスクリプトを使用してください。 Microsoftには、自動バックアップを実行するためのスクリプトを含むKB記事があります- SQL Server ExpressでSQL Serverデータベースのバックアップをスケジュールして自動化する方法

トランザクションログのバックアップを頻繁に行う完全復旧モード-トランザクションログはどこに保存されますか-LDFファイルですか?どうすれば適切にバックアップできますか?

すべてのSQL Serverデータベースには、すべてのトランザクションと各トランザクションによって行われたデータベースの変更を記録するログがあります。トランザクションログは、データベースの重要なコンポーネントです。

トランザクションログの通常の命名規則拡張子は「.LDF」ですが、任意の拡張子を使用できます。

これで答えが非常に無駄のないものになるので、これについてはこれ以上詳しく説明しません。 トランザクションログ管理 を参照してください。私の回答 ここ にも優れたリンクがあります。


編集:8/24/2016 ..これは将来の読者を助けるでしょう:

インスタンス全体をあるバージョンから別のバージョンに移行する場合は、私は強くお勧めします PowerShellベースのソリューションを使用する Start-SqlMigration

enter image description here

37
Kin Shah