お世話になってます。
あるサーバー(サーバーA)上のSQLServer7.0で作成したバックアップファイルを
復元先のサーバー(サーバーB)に復元したところ、MDFファイルが3GBに対し、
LDFファイルが100GBありました。
LDFファイルのサイズを圧縮しようと、SQLServer7.0のメニューで、
1. フルバックアップ
2. トランザクションログの切り捨て
3. 圧縮
※以下「1.」、「2.」、「3.」を何度か繰り返し。
を行ってみましたが、300MB程度減っただけで、それ以上は小さくなりませんでした。
SHRINKDATABASE
や
TRUNCATE
も試してみましたが、サイズ、変わりませんでした。
他に試すことはありますでしょうか?
No.1ベストアンサー
- 回答日時:
懐かしいですね、SQL Server 7。
ちょっとメニューがどうだったか覚えていないのですが、バックアップをファイル単位(データまたはトランザクション)でできるのであれば、トランザクションファイルだけをバックアップすれば、トランザクションログの使用領域は小さくなります。その上でトランザクションファイルの圧縮をすれば、ファイルとしての実体は小さくなります。この手順は現在のバージョンでも変わりありません。
あとは復旧モデルを「完全」以外にする、別のバージョン(たとえば無償の2008 Expressなど)に復元してみるなどが考えられます。
サーバーの設定の影響もあるかもしれないので、可能であれば、サーバーAで同じ作業をして小さくなるのを確認してからフルバックアップしたものを復元した方が確実かと思います。
あと、試したことはないのですが、LDF(トランザクションファイル)は実データではないので、一度デタッチしてLDFを削除し、同名のLDF(新規のデータベースを作って同名のLDFを作成、ファイルの新規作成で0バイトのテキストファイルをリネームして~.ldfで保存など)を作ってアタッチすることもできると聞いたことがあります。以前SQL Server 2008でそれを試したらうまくいかず、さらに元のLDFを削除してしまったためにどうにもならなくなった思い出があるので、試すのであれば削除ではなく別の場所に退避しておくことをお勧めします。
ありがとうございます。
お返事が遅くなってしまいました。
実のところ今回、SQL7のDBバックアップファイルからSQL2000に復元することが目的だったのですが、
LDFが大きいせいか、SQL2000上で復元完了後、OS自体が壊れてしまいます。
(Cドライブに入れない等、エラー多発で、さらには再起動するとOSが見つからないエラーになってしまいます、、、)
で、仕方なく、MDFのみSQL2000上に移しアタッチしたところ、新しいLDFが作成され、
無事にSQL2000上にDBを移行することができました。
No.2
- 回答日時:
下記のSQLを実行してみてください。
見やすいように半角スペース2つは全角スペース1つに変換してます。
使用される際は「全角スペース1つ」を「半角スペース2つ」に変換してください。
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
-- *** 検索条件により、次の 3 行を変更してください。 ***
USE データベース名 -- ログを圧縮するデータベース名を指定してください。
SELECT @LogicalFileName = 'ログファイル名', -- 圧縮したいログファイルを確認指定してください。
-- (ログファイルは sp_helpfile で確認可能です)
@MaxMinutes = 10, -- ログファイル圧縮処理の実行時間を指定します。
@NewSize = 512 -- 単位は MB です。
-- セットアップ/初期化
DECLARE @OriginalSize int
SELECT @OriginalSize = size -- 8K ページ
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
-- ログをラップし、それを切り捨てます。
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
-- 最初の圧縮を試みます。
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- 必要な場合に、ログをラップします。
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- 有効期間は切れていません
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
-- ログは圧縮されていません
AND (@OriginalSize * 8/1024) > @NewSize -- 新しいサイズに渡される値は、現在のサイズ未満です。
BEGIN -- 外部ループ
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- 更新します
INSERT DummyTrans VALUES ('Fill Log') -- char フィールドなので、8000 バイト挿入します。
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END -- 更新
EXEC (@TruncLog) -- ログの切り捨て。
END -- 外部ループ
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
PRINT '*** データベース全体のバックアップを実行します ***'
SET NOCOUNT OFF
ありがとうございます。
お返事が遅くなってしまいました。
実のところ今回、SQL7のDBバックアップファイルからSQL2000に復元することが目的だったのですが、
LDFが大きいせいか、SQL2000上で復元完了後、OS自体が壊れてしまいます。
(Cドライブに入れない等、エラー多発で、さらには再起動するとOSが見つからないエラーになってしまいます、、、)
で、仕方なく、MDFのみSQL2000上に移しアタッチしたところ、新しいLDFが作成され、
無事にSQL2000上にDBを移行することができました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server PCが悪くなって新しいPCにSSMSのデータを移すよう頼まれたけど移し方が分からない 1 2023/05/18 16:54
- 画像編集・動画編集・音楽編集 連続質問です 動画ファイルの圧縮時のビットレートというのについて教えてください 2 2023/08/06 11:50
- ネットワーク syslog保存サーバーに蓄積するログファイル容量について 3 2023/01/09 20:13
- PDF PDFファイルの圧縮 1 2022/10/04 13:48
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- その他(パソコン・スマホ・電化製品) 圧縮ファイル解像について 7 2023/07/31 08:42
- サーバー サーバーマネージャーが消えた 1 2023/04/09 00:13
- その他(パソコン・スマホ・電化製品) 動画ファイルを圧縮 11 2023/08/09 19:07
- サーバー Laravelをレンタルサーバーにインストールするにはどうすればいいですか? 2 2022/06/29 10:17
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こんにちは。
-
SQLServerでトランザクションロ...
-
期限切れのバックアップの削除
-
DATファイルをEXCELで開きたい
-
警察はスマホに保存した動画や...
-
復旧中のデータベースについて
-
postgresql についてです
-
【DB】同じトランザクション内...
-
PCが悪くなって新しいPCにSSMS...
-
dbFailOnError とは?
-
一つのトランザクションでSELEC...
-
DAOファイルのSQLクエリの部分...
-
業務用のデータベースサーバー...
-
OracleのROWIDについて…
-
エクセルのフィルタ抽出が固まる
-
ファイルメーカーで画像を参照...
-
SQL Server Management Studio ...
-
SQLServerのDB(テーブル?)が...
-
Sqliteで使えない文字。
-
ACCESS2003での150人同時利用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
期限切れのバックアップの削除
-
ログファイルの圧縮がされずに...
-
トランザクションログの切り捨...
-
バックアップの容量と時間の見積り
-
XamppでインストールしたMySQL...
-
ログ ファイルはいっぱいです。...
-
SQLServer2000でのトランザクシ...
-
SQL-Server トランザクションロ...
-
BACKUP DATABASE とINSERTが同...
-
SQLServerのトランザクションロ...
-
制御ファイルの多重化の意味に...
-
オラクル、ファイルのミラー化...
-
SQLServerでトランザクションロ...
-
SQLServer7.0のLDF圧縮
-
oracleとSQL Server比較検証
-
トランザクションログファイル...
-
SQLデータを保存して書き戻したい
-
外付けのハ-ドディスクの使用...
-
DATファイルをEXCELで開きたい
-
【DB】同じトランザクション内...
おすすめ情報