1

私はインターネット全体を探していましたが、私の問題に対する許容できる解決策を見つけることができません。妥協のない解決策さえあるのだろうかと思っています...

私はDBAではありませんが、巨大なWebサイトで作業している一人のチームであり、追加の団体に追加の資金を提供することはありません。そのため、できる限り最善を尽くしています。

私たちのバックアップ計画はひどいものであり、私はそれを改善するのに本当に苦労しています。現在、SQL Server 2005を実行しているサーバーは2つあります。ミラーリングされたデータベース(監視なし)があり、正常に機能しているようです。私は正午と深夜に完全バックアップを行います。これらはサービスプロバイダーによって毎晩テープにバックアップされ、古いレコードを手元に置いておくために、バックアップファイルを毎週DVDに書き込みます。ミラーリングは監視サーバーがないと意味がないように見えるので、最終的にはログ配布に切り替えたいと思います。

問題は、トランザクションログがノンストップで増加していることです。私が行った調査から、ミラーリングされたデータベースのログファイルを切り捨てることができないようです。では、どうすればファイルの成長を止めることができますか?

このウェブページに基づいて、私はこれを試しました:

USE dbname
GO
CHECKPOINT
GO
BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
GO
DBCC SHRINKFILE('dbname_Log', 2048)
GO

しかし、それはうまくいきませんでした。私が見つけた他のすべては、ミラーを機能させるために、backuplogコマンドを実行する前にミラーを無効にする必要があると言っています。

私の質問(TL; DR)

ミラーを無効にせずにトランザクションログファイルを縮小するにはどうすればよいですか?

4

11 に答える 11

5

技術的には、ミラー化された LOG を縮小することは可能です。困っているのは、truncate_only でログをバックアップすることです。ミラーリングはそれを受け入れません。1 つの方法は、ログをディスクにバックアップすることです。

use [DATABASE_NAME]
checkpoint
BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
dbcc shrinkfile(DATABASE_NAME_Log,1)

これは現在のメンテナンス計画の一部であり、約 2 年間問題なく動作しています。

于 2012-03-28T15:16:56.763 に答える
1

ミラーサーバーインスタンスがプリンシパルサーバーインスタンスに遅れをとっている場合、アクティブなログスペースの量は増加します。この場合、データベースミラーリングを停止し、ログを切り捨てるログバックアップを取り、そのログバックアップをミラーデータベースに適用してミラーリングを再開する必要があります。期待していた答えではありません。=(

ファイルを縮小するには、次のスクリプトを試すことができます。

exec sp_dboption DBName、'trunc。chkptにログオンします。'、真のチェックポイントDBCC SHRINKFILE(DBNameFileName、500); exec sp_dboption DBName、'trunc。chkptにログオンします。'、false

お役に立てれば。

于 2009-06-23T15:31:47.477 に答える
1
  1. .. を使用して、ミラー パートナーをオフに設定します。ALTER [DatabaseName] SET PARTNER OFF
  2. プリンシパルでトランザクション ログのバックアップを取得します。BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
  3. DatabaseName_log_datetime.trnこれを Mirror Server の任意の場所にコピーします。
  4. オプションを使用して、このトランザクション ログをNoRecoveryミラー データベースに復元します。 RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
  5. プリンシパル サーバーとミラー サーバーのログ ファイルを縮小します。
  6. 再度、プリンシパルでトランザクション ログのバックアップを作成し、ミラー サーバー上のミラー化されたデータベースで、このトランザクション ログを復元オプションなしで復元します。
  7. ミラーリング セキュリティを構成します。
于 2011-12-05T17:40:43.387 に答える
1

忘れられていたので、実際にこれに答える必要があると思いました。

データベースがミラーリングされている場合、ミラーを非アクティブ化しない限り、t-log を圧縮できないことが判明しました。 私が間違っている場合は、訂正してください。ただし、有効な解決策が見つかりません!

サーバーが 2 台しかない場合は、ログ配布が最適です。ミラーリングは、監視サーバーなしではほとんど無意味です。フェールオーバーする唯一の方法はプリンシパルからであるからです...プリンシパルがクラッシュしたときにフェールオーバーできない場合、ミラーを持つ目的が無効になります。

この件に関する情報や提案を共有したい人がいる場合は、喜んで聞いてください。

于 2009-07-29T14:21:54.000 に答える
0

なぜこれが機能するのかわかりませんが、実際に機能するだけです。これをクエリウィンドウのブロックとして実行します。あなた自身の裁量で使用してください。マイクロソフトがコメントしてくれるといいですね。

use my_database
dbcc shrinkfile ( my_database_log, 1000 )
use my_database
dbcc shrinkfile ( my_database_log, 1000 )
alter database my_database
  modify file ( 
    name = my_database_log, 
    size = 1000MB
  )
于 2010-05-22T12:55:23.300 に答える
0

ミラーデータベースがプリンシパルデータベースでない限り、ミラーデータベースをミラーから外さずにミラーデータベースに対して実際に何もすることはできません。

プリンシパルサーバーにデータベースをバックアップし、後で縮小する場合は、機能するはずです。つまり、メンテナンス計画には縮小作業を含める必要があります。これらの変更は、同期することによって自動的にセカンダリ(ミラー)サーバーに渡されるはずです。

トランザクションファイルのみを縮小する縮小を作成する場合は、次のT-SQLを使用できます。

USE [your_db_name]
GO
DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
GO

次に、データベースごとにそのスニペットを使用し、バックアップの実行直後に実行します。

これにより、プリンシパルサーバー、つまりセカンダリ/ミラーサーバーでログファイルが小さく保たれます。

これがお役に立てば幸いです。

ところで。ディスクにログファイル用のスペースが残っていない場合は、ミラーモードを解除し、データベースをシンプルリカバリモードに設定し、ログファイルを縮小して、フルに設定するしかありません。リカバリモードを再度実行し、ミラーを再度セットアップします(データベースogログファイルのバックアップを使用してミラーサーバーに復元します)。

さらに、問題がライセンスである場合は、SQLExpressを監視サーバーとして使用できます。あまり多くのリソースを必要としないので、これがWebアプリケーションの場合は、Webサーバーを使用できます。監視サーバーのログファイルも確認することを忘れないでください。

于 2011-03-01T11:33:48.183 に答える
0

唯一の方法: 1) ミラーリングを停止する 2) プリンシパルのファイルを縮小する 3) プリンシパルのバックアップを完了する + トランザクション jrnl 4) ミラー サーバーを停止し、ミラー データベースの mdf と ldf を削除する 5) ミラー サーバーを開始し、ミラー データベースを削除する 6) 回復バックアップなしで復元するof 3) mirroServer で 7) ミラーリングを再インストール Ouf !

于 2009-08-14T06:47:20.307 に答える
0

ミラーを使用してデータベースのトランザクション ファイルを縮小することは可能です。アクティブな仮想ログ ファイルがあるため、バックアップを実行する必要があります 。 base-en-miroir-499.aspx

于 2011-03-14T09:53:04.340 に答える
0

データベース ログが大きくなりすぎると縮小できないのは事実です。その時点で唯一の選択肢は、ミラーを壊して縮小し、再作成することだと思います。さらに、2 台のサーバーでミラーリングを使用する必要があるかどうかの問題はありますが、ミラーリングを使用する場合は、トランザクション ログを定期的にバックアップすることをお勧めします。スペースが解放され、MSSQL がログ ファイル内のデッド スペースを再利用できるようになります。これは何も縮小しませんが、成長を止めるという要件を満たしています。

その後、ファイルのバックアップを定期的に削除するだけです。たとえば、これを行うことができます:

USE your_database
GO
BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
GO

可能であれば、時間外に行ってください。

于 2010-01-06T16:23:21.023 に答える
-1

** 縮小はミラーリングで実行できますが、ログを切り捨てることはできません。これは、ログがミラー サーバーに送信され、プリンシパルが確認を待機するためです。

この問題の解決策は、切り捨てなしでログをバックアップしてからログ ファイルを圧縮することです。または、圧縮を無視することもできます。それでもうまくいかない場合は、ログをバックアップする前にチェックポイントを試してください。これはうまくいくはずです...

于 2012-06-21T07:39:23.310 に答える