SQL Server 2008 の完全なメンテナンス プラン
データベースの最適化
このセクションは、データベースを最適化することに専念しています。この例では、次のことを行うコードをセットアップします (サーバーがどのように接続されているかを示す大まかな図を参照してください)。
- ライブ サーバーから共有バックアップ フォルダにデータベースをバックアップする
- データベースの再インデックス
- すべての接続を切断し、レポート サーバーでデータベースを復元します。
- リンクされたサーバーは、すぐに別の記事になります
- ログの配布については、近日中に別の記事で説明します
クロス サーバーを実行する場合は、SQL Server が実行されているアカウントがターゲット サーバーのファイル システムにアクセスできるようにする必要があります。
すべての SQL コードはユーティリティ データベースから実行され、スキーマは「maint」に設定されます
私たちが以下に書いた他の多くの記事があり、あなたに興味があるかもしれません.
完全な保守計画
これで、これらの個別のコード セグメントをすべて、正しい順序で呼び出す別の手順で管理できるようになりました。これはライブ サーバーに配置されます。コードは次のように実行されます。
- 時間を計る
- 夕方の場合は、データベースのインデックスを再作成します
- データベースのバックアップを実行します (必要な場所に追加します)
- 夕方の場合は、他のデータベースをバックアップします(必要な場所に追加してください)
- 接続を切断し、データベースを復元します (必要な場所に追加します)
このコードは、数か月にわたって試行およびテストされ、問題なく実行されました。
ログ ファイルとデータベース ファイルの圧縮は最小限に抑える必要があることに注意してください。バックアップを実行すると、ログが空になります (ただし、使用されているスペースは保持されます)。通常の勤務時間外に実行する必要がある場合。
SQL Code
Use [utilities]GOCREATE PROC [maint].MaintenancePlan AS BEGINDECLARE @BackupType VARCHAR(1)='E'IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGINSET @BackupType='D'END--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!--Re-index LiveIF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'--Create BackupBACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!--Backup Other Files at NightIF @BackupType='E' BEGIN EXEC [maint].DatabaseReIndex 'dbname' --Backup Others BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak' WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10END--Restore Backups on other serverEXEC [server].[utilities].[maint].KillConnections 'dbname';EXEC [server].[utilities].[maint].RestoreDatabase_{dbname};--Restore Backups on other server for db_2 etcIF @BackupType='E' BEGIN EXEC [server].[utilities].[maint].KillConnections 'dbname2'; EXEC [server].[utilities].[maint].RestoreDatabase_{dbname2};ENDENDGO
データベースのバックアップ
データベースをバックアップするコードを取得するには、SSMS からコードをスクリプト化するのが最も簡単です。
通常使用するプロセスに従い、[新しいクエリ ウィンドウへのスクリプト アクション] を選択します。
このコードをメンテナンス プランにコピーします。
データベースの再インデックス
次に、データベースを再インデックス化するためのコードを追加します。これは、システムに名前を伝えるだけでよい共有ストアド プロシージャです。
コードの重複を避けるために、以下のリンクでそれについて読むことができます。
接続を切断する
データベースで復元を実行する場合、データベースへの接続 (復元を実行するプロセス) は 1 つしか持てないため、ストアド プロシージャを作成して、現在のプロセス以外のすべての接続を閉じることができます。これについては、別の記事を再度作成しました。
データベースの復元
このコードは、SQL Server Management Studio からスクリプト化することもできます。このコードをストアド プロシージャに追加すると、他のプロセスや他のサーバーからも簡単に呼び出すことができます。より多くのオプションをカバーするために、これを別の記事に移動しました。