1. ホーム
  2. データベース
  3. mssql2005

Sqlserver 2005のログファイルが大きすぎる削減する方法

2022-01-20 12:44:46

Sqlserver 2005のログファイルが大きすぎるため、減らす方法は以下の通りです。

dbNameをデータベース名として、以下の3行を実行します。

バックアップログ dbName with NO_LOG
バックアップログ dbName with TRUNCATE_ONLY
DBCC SHRINKDATABASE(dbName)

ログファイルを1MBに削減

sql server emptying log files 2011-04-06 23:05

1:LOGを削除する

1: データベースの取り外し Enterprise Manager -> Server -> Database -> 右クリック -> Detach Database

2: LOGファイルを削除する

3: データベースの添付 Enterprise Manager->サーバー->データベース->右クリック->データベースの添付

このメソッドは新しいLOGを生成し、そのサイズは520K強である

次に、このデータベースを自動縮小に設定します。

またはコードを使用してください。

次の例では、77169databaseをデタッチし、77169databaseから現在のサーバーにファイルをアタッチします。

EXEC sp_detach_db @dbname = "77169database"
EXEC sp_attach_single_file_db @dbname = "77169database",
Physname = "c:Program FilesMicrosoft SQL ServerMSSQLData77169database.mdf"。

2:ログを空にする

DUMP TRANSACTION ライブラリ名 WITH NO_LOG

RE.

Enterprise Manager - 圧縮したいデータベースを右クリック - All Tasks - Shrink Database - Shrink File - Select Log File - shrink method で shrink to XXM を選択、ここで縮小できる最小M数が表示されますので、この数字を直接入力してOKです。

3:後で伸びないようにしたい場合

Enterprise Manager->サーバー->データベース->プロパティ->トランザクションログ->ファイルのサイズを2Mに制限する。

ログを自動的に縮小するには、次のような記述も可能です。

ALTER DATABASE データベース名
auto_shrinkをオンに設定します。

フェイルオーバーモデルはシンプルに、ステートメントで

USE MASTER
GO
ALTER DATABASE データベース名 SET RECOVERY SIMPLE
GO

---------------------------------------------------------------------------------

トランザクションログの切り捨て。

BACKUP LOG { database_name | @database_name_var }.
{
[ WITH
{ no_log | truncate_only }] です。
}

-- Hoはhovertree.comを尋ねました。

--ログとデータベースのファイルサイズを圧縮

/* --- 特記事項
前のステップを行わずに次のステップを行わないでください。
そうでない場合は、データベースが破損する可能性があります。
--*/

1. ログを空にする

DUMP TRANSACTION ライブラリ名 WITH NO_LOG

2. トランザクションログを切り捨てる。

BACKUP LOG データベース名 WITH NO_LOG

3. データベースファイルを縮小する (データベースファイルは圧縮されていない場合、縮小されません

Enterprise Manager - 圧縮するデータベースを右クリック - すべてのタスク - データベースの縮小 - ファイルの縮小

--ログファイルを選択--縮小方法で「XXMに縮小」を選択すると、縮小できる最小のM数が表示されるので、この数字を入力してOK。

--縮小モードでshrink to XXMを選択すると、縮小できる最小のM数が表示されますので、この数字を入力してOKです。

これは、SQLステートメントでも可能です

-- データベースを縮小する

DBCC SHRINKDATABASE (顧客プロファイル)

--指定されたデータファイルを縮小します。1 はファイル番号で、次のステートメントで照会できます: select * from sysfiles

dbcc shrinkfile(1)

4. ログファイルのサイズを最大化する(sql 7.0の場合、このステップはクエリ・パーサーのみで行うことができます)。

a. データベースを切り離す。
Enterprise Manager - サーバ - データベース - 右クリック - データベースの切り離し

b.マイコンピュータ内のLOGファイルを削除する

c.データベースをアタッチする。

Enterprise Manager - Server - Database - 右クリック - Append Database

このメソッドは、500K強のサイズの新しいLOGを生成します。

またはコードで。

次の例では、77169databaseをデタッチし、77169databaseから現在のサーバーにファイルをアタッチします。

a.デタッチング

EXEC sp_detach_db @dbname = "77169database"。

b.ログファイルを削除する

c.再適用

EXEC sp_attach_single_file_db @dbname = "77169database"。
Physname = "c:Program FilesMicrosoft SQL ServerMSSQLData77169database.mdf"。

5. 後で自動的に縮小するには、次のようにします。

Enterprise Manager - Server - Databaseを右クリック - Properties - Options - "Auto Shrink"を選択します。

--SQL文の設定方法。
EXEC sp_dboption "データベース名", "autoshrink", "TRUE"。

6. 後でログが大きくなり過ぎないようにしたい場合
Enterprise Manager - Server - データベースを右クリック - Properties - Transaction logs
-- ファイルサイズを xM に制限する(x は許可された最大データファイルサイズ)。

-- SQL文の設定方法です。
alter データベース データベース名 modify file(name=logical file name,maxsize=20)

-------------------------------------------------------------------------------------------
/* - 圧縮データベースの共通ストアドプロシージャ

ログとデータベースのファイルサイズを圧縮
データベースを分離したため
そのため、圧縮されたデータベースではストアドプロシージャを作成することができない

/* - Example call
exec p_compdb "test"
--*/
use master --Note, this procedure should be built in the master database
go
if exists (select * from dbo.sysobjects where id = object_id(N"[dbo]. [p_compdb]") and OBJECTPROPERTY(id, N"IsProcedure") = 1)
drop procedure [dbo]. [p_compdb].
GO
create proc p_compdb
@dbname sysname, - the name of the database to be compressed
@bkdatabase bit=1, -- you can choose whether to automate the database because it may be corrupted during the log separation step
@bkfname nvarchar(260)="" --file name of the backup, if not specified, it will be automatically backed up to the default backup directory, the backup file name is: database name + date and time
as

-1. Clear the log
exec("DUMP TRANSACTION ["+@dbname+"] WITH NO_LOG")
-2. Truncate the transaction log.
exec("BACKUP LOG ["+@dbname+"] WITH NO_LOG")
--Shrink the database file (if not compressed, the database file will not be reduced)
exec("DBCC SHRINKDATABASE(["+@dbname+"])")
--4. Set auto-shrink
exec("EXEC sp_dboption """+@dbname+""","""autoshrink"",""TRUE"& quot;"")
-- The latter steps are somewhat dangerous, you can choose whether you should these steps
--5. Separate the database
if @bkdatabase=1
begin
if isnull(@bkfname,"")="" 
set @bkfname=@dbname+"_"+convert(varchar,getdate(),112)
+replace(convert(varchar,getdate(),108),"":","")
select prompt="Backup database to SQL default backup directory,backup file name:"+@bkfname
exec("backup database ["+@dbname+"] to disk=""""+@bkfname+"""")
end
-- for separation processing
create table #t(fname nvarchar(260),type int)
exec("insert into #t select filename,type=status&0x40 from ["+@dbname+"]. .sysfiles")
exec("sp_detach_db """+@dbname+""""")
--delete log file
declare @fname nvarchar(260),@s varchar(8000)
declare tb cursor local for select fname from #t where type=64
open tb 
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s="del ""+rtrim(@fname)+"""
exec master..xp_cmdshell @s,no_output
fetch next from tb into @fname
end
close tb
deallocate tb
--append database
set @s=""
declare tb cursor local for select fname from #t where type=0
open tb 
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=@s+","""+rtrim(@fname)+"""""
fetch next from tb into @fname
end
close tb
deallocate tb
exec("sp_attach_single_file_db """"+@dbname+"""""+@s)
go