SQL DBをより頻繁にバックアップする


10

私は現在、SQLCMD.exeを呼び出して.sqlスクリプトを渡し、バックアップのために実行する(以下に示す)午前2時に毎晩起動するスケジュールされたタスクを持っています。私たちは、ビジネス面での大きな成長によりニーズが高まっているかなり小さな会社です。この時点で1日分のデータを失うと、数万ドルの費用がかかりますが、昨年は数百ドルかかります。このDBプラットフォームを、SQL Azureのような主要な冗長性でデータミラーリングが発生する別のソリューションに移行できるまで、より頻繁なバックアップを取得するために私ができる最善のことは何ですか?以下のこのスクリプトは、DBを強制的にオフラインにしますか?このスクリプトを、DBを操作するユーザーと一緒に実行できますか?

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

更新

うわー、明らかにここではSOよりもはるかに専用のDBAコミュニティ。これまでのフィードバックに感謝します。不足しているのは「ハウ」だけです。上記のSQLコマンドで毎日のバックアップに使用しているものを示しましたが、増分ログバックアップの例はMIAです。これは大きなDBではなく、現在SQLExpressで実行されています。私がHAまたはSQL Azureと言うとき、私は特に、中小企業として持っていない適切なアーキテクチャについて言及しています。このインスタンスは現在、唯一のサーバーで実行されています。そのサーバーがクラッシュした場合、回復するまでの時間が問題になります。SQL Azureが魅力的なのはこのためです。


それが役に立てば幸い、あなたの更新に私の答えを編集した

回答:


5

編集、更新から

1日分のデータを失う可能性があるとおっしゃっていたように、データベースを単純復旧モードにするだけです。その後、毎朝および/または夕方にFULLを実行できます。日中に自分自身をカバーしたい場合は、万が一の場合に備えて、データベースの差分バックアップを行う必要があります。これにより、完全バックアップ以降に加えられた変更がキャプチャされます。大量の入力が発生している時間枠がわかっている場合は、完了後にこのタイプのバックアップをそこに投入する可能性があります。復旧にかかる時間を節約できるため、余分なデータ入力を行う必要がありません。

これが唯一のサーバーなので、データベースに対してDBCC CHECKDBを実行していることを確認します。バックアップが破損していることがわかった場合、バックアップは役に立ちません(これについても誰かが言及していると思います)。エラーをキャッチするためにDBCCメッセージのSQL ERRORLOGをチェックするようにスケジュールされたタスクをセットアップするためのスクリプトをいくつか見つけることができます。SQL Serverは、DBCCメッセージから返されたエラーをネイティブで警告することはありません。そのため、スクリプトを実行するたびに手動で確認しない限り、役に立ちます。

差分バックアップコマンド:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

1
@Shawn:OPは「この時点で1日分のデータを失うと、昨年の数百ドルに対して数万ドルの費用がかかる」と述べ、1日分のデータを失う可能性があると彼はどこで言いましたか。
マリアン

8
  • SQL Serverのバックアップは中断しません。つまり、データベースは操作可能なままです。ドキュメントをお読みください。
  • 毎日完全バックアップを実行し、その後、出荷された(コピーされた)LOGバックアップ(ここでも、ドキュメントには...ドキュメントがあります)を定期的に(15分ごとなど)実行します。

4
バックアップはハウツーを必要としないものだと思いますが、ドキュメントを完全に読む-ビジネスに不可欠であり、そして-真剣に-重要です。卵料理ではありません。プロを雇う。
TomTom 2011

2
このサイトで回答に投票できないのは
残念

1
@RSolberg:TomTomの回答は有効であり、すでに入手した他のアドバイスも有効です。レスポンダーがバックアップの基本的な構文を実際に示すことは期待しないでください。私はショーンがそれをするのに十分親切だったと思いますが。バックアップ戦略を設計するだけでは十分ではありません。必要なときにすべてが有効になるように、RESTORE戦略と組み合わせる必要があります。
マリアン

2
@RSolberg:あなたを怒らせてすみません。これは意図されていません。しかし、このコミュニティはどのように役に立たなかったのでしょうか?良い有効な回答(およびコメント)があります。あなたのメッセージは次のとおりです。「この時点で1日分のデータを失うと、昨年は数百ドルでしたが、今回は数百ドルかかります。」したがって、そこに到達しないように、しっかりしたバックアップと復元の戦略が必要です。しっかりとした戦略は、基本をよく理解することから生まれます。マニュアルを読んで理解することから来ています。他に何か理解できたらごめんなさい!
マリアン

2
@RSolbergに同意しますが、ここでの回答のほとんどには「方法」が示されていませんが、それはラッセルが理解していなかった「何」の詳細に質問が欠けていたためでもあります。必要なものについてもう少し詳しく説明する必要がありますが、ここのサイトは「RTFM n00b」に関するものではないことに同意します。また、ご指摘のとおり、Stack Overflowは10k なので、失礼または混乱を招くコメントのフラグ付けを確実に理解できます。将来的には、フラストレーションで一杯になるよりは、もっと早くそれを行うべきです。
jcolebrand

6

あなたがする必要がある最初のことは、どれだけのデータを失う余裕があるかを理解することです。それまでは、データベースをバックアップする頻度がわかりません。これはあなたが思いつくはずの数ではありません。これは、企業(またはより小さな会社のCEO)が決定する必要があるものです。彼らが戻ってくる最初の数字は0分です。これは実行できますが、実行するには非常にコストがかかります。実際には、バックアップを取ることができるデータの最小量は約2分ごとです。システムで変更されるデータの量が十分に少ない場合は、毎分バックアップを実行できます。

トランザクションログのバックアップを行うには、データベースを完全復旧モードにする必要があります。

5分のデータを失う余裕がある場合は、おそらくフルバックアップを毎日、トランザクションログのバックアップを5分ごとに実行することをお勧めします。15分のデータを失う可能性がある場合は、15分ごとに完全バックアップとトランザクションログバックアップを実行することをお勧めします。

別のオプションは、上記で説明したように、毎週の完全バックアップ、毎日の差分バックアップ、およびトランザクションログのバックアップをx分ごとに実行することです。

データベースの障害やデータの削除時に、頻繁にバックアップを行う必要があるほど、より多くのファイルを復元する必要があることに注意してください。データベースの復元にかか​​る時間を短縮するために、1日を通して差分バックアップを実行することは理にかなっています。

BACKUPデータベースとBACKUP LOGステートメントを使用するすべてのバックアップはオンラインで実行され、ユーザーがデータベースにアクセスするのを妨げることはありません。


実際にどれだけのデータが失われるかを評価することができます。私はCIOが事業部門の決定に毎日関与する傾向があるため、中小企業では多くの帽子をかぶる必要があります。
RSolberg、2011

1
そうすれば、ディスカッションがずっと短くなります。
mrdenny、2011

3

たとえば、月曜日から金曜日の午前9時から午後5時までの最も忙しい時間で、一般的なビジネスシナリオがあるとします。それから私は提案します:日曜日の夜の完全バックアップ。午前8時、午後6時、および午前1時の差分バックアップ(リカバリ時間を短縮するため)。1時間ごとに、またはビジネスに必要なものに応じて、バックアップをログに記録します。

保存期間に応じて、古いバックアップファイルを消去する自動クリーンアップジョブが必要です。これらはすべて、SQLメンテナンスプランを使用して作成できます。SQL 2005のこのリンクを確認してください

バックアップは何らかの形式の冗長ディスク(ミラーリング)に保存する必要があります。または、オフサイトストレージにテープを使用できます。ユーザーは、バックアップの実行中もシステムで作業を続けることができます。


2

毎晩完全バックアップを行うことはありません。それが大規模なデータベースである場合、メディアに多くのスペースを占めることは言うまでもなく、非常に長い時間がかかる可能性があります。毎週末に完全バックアップを実行し、毎晩差分バックアップを実行します。次に、トランザクションログのバックアップ(データベースが完全に回復している場合)を1時間ごとまたは30分ごとに実行しますが、ディスクに障害が発生した場合は、これらの.bakファイルと.trnファイルが別のディスクにあることを確認してください。


タグが失われました。これは巨大なデータベースではありません。現在、SQLExpressインスタンスで実行されています。
RSolberg、2011

1
Expressで実行されている数万ドル?面白い!
AndreiRînea12年

あんまり。何を保存するか(テキストなし、バイナリなし)によって異なります。これは10ギガバイトのデータです。大企業(深刻な大企業)の会計システムを10ギガバイトで実行できます。1日あたり100.000注文のオンラインショップでは、10ギガバイトで簡単に店頭で作業できます。
TomTom 2013

1

バックアップフォルダーを夜間クラウド同期して、オフサイトストレージを取得できますか?これはヘルスケア企業向けだと確信しているので、HiPAコンプライアンスに十分に安全なものはありますか?それとも、それらを超暗号化するだけですか?

スクリプトは少なくともバックアップのコピーをネットワーク共有に配置しますか?物理的な箱が爆発した場合...


上記すべてに対してはい。実際にミラーリングされたネットワークドライブにバックアップし、その環境から安全なデータセンターにデータをコピーします。
RSolberg、2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.