正しい方向に向けていただければ幸いです。私はT-SQLを頻繁に使用するわけではありませんが、グーグル操作をして、以下のスクリプトを見つけました。スクリプトを少し修正しました。
スクリプトで次のことを行います。
- システムDBを除くすべてのデータベースを選択します。
- リカバリをシンプルに設定します。
- システムデータベースを除くすべてのdb(.ldf)のログファイルを圧縮するには
スクリプト:
USE MASTER
declare
@isql varchar(2000),
@dbname varchar(64)
declare c1 cursor for select name from master..sysdatabases where name not in ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
open c1
fetch next from c1 into @dbname
While @@fetch_status <> -1
begin
select @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
select @isql='USE @dbname checkpoint'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
select @isql='DBCC SHRINKFILE @dbname.ldf'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
fetch next from c1 into @dbname
end
close c1
deallocate c1
なぜ、なぜ、なぜ?「正しい方向」とは?スクリプトは機能しませんか?もしそうなら、どうですか?エラーメッセージが表示されますか?それは何ですか?おそらく最後のブロックでUSEコマンドが必要です。しかし、もう一度:なぜ、なぜ、なぜ?
—
アーロンバートランド
.ldfファイルはサーバーのディスク領域の70%を占めるためです。しかし、あなたがより良い方法を知っているなら、教えてください。スクリプトが機能するかどうかわかりません。ただ実行することはできません。本番環境なので、最初に機能することを確認する必要があります。
—
Arviddk 2014年
これをテストできる開発環境またはテスト環境がありませんか?率直に言って、誰が書いたかに関わらず、私はここから何も取らず、インターネット上の見知らぬ人の保証のみに基づいてそれをプロダクションに適用します...
—
アーロンベルトラン
@Arviddk復旧モデルをFULL / BULK LOGGEDからSIMPLEに変更した結果はどうなりますか?あなたが気づいているなら、先に進んでそれをしてください。
—
BuahahaXD 2016年
同じことをしたいと考えているかもしれない将来の読者のための理由についてコメントしたかっただけです。以前は、トランザクションログバックアップを使用して完全なSQLバックアップを行っていました。その後、バックアップの実行にDell AppAssureを使用するように切り替え、トランザクションログのバックアップを必要としない場所に移動しました。現在、複数のサーバーにまたがる何百ものデータベースが、理由もなくテラバイトのLDFファイルでいっぱいに設定されています。これは、バックアップ/復元だけでなく、それを取り巻くその他の事柄、レプリケーションなどにも影響します。
—
Thorin