欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>MS Sql Server 日志清理数据库教程

MS Sql Server 日志清理数据库教程

2023-05-28 08:15:48 收藏本文 下载本文

“朝比奈彩”通过精心收集,向本站投稿了6篇MS Sql Server 日志清理数据库教程,下面是小编收集整理后的MS Sql Server 日志清理数据库教程,仅供参考,希望能够帮助到大家。

MS Sql Server 日志清理数据库教程

篇1:MS Sql Server 日志清理数据库教程

server

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,@MaxMinutes INT,@NewSize INT

USE grades -- 要操作的数据库名

SELECT @LogicalFileName = 'grades_log', -- 日志文件名

@MaxMinutes = 10, -- Limit on time allowed to wrap log.

@NewSize = 1 -- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size  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)

-- Wrap the log if necessary.

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (SELECT size  FROM sysfiles WHERE name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) > @NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log')

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

SET NOCOUNT OFF

篇2:有关日志压缩数据库教程

压缩

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS OFF

GO

CREATE PROCEDURE strink_logspace

AS

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

SELECT @LogicalFileName = rtrim(name),

@MaxMinutes = 10,     -- 最大执行时间

@NewSize   = 10      -- 最小空间

from sysfiles where status & 0x40 = 0x40

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size -- in 8K pages

FROM sysfiles

WHERE name = @LogicalFileName

SELECT db_name() +'日志原始大小' +

CONVERT(VARCHAR(30),@OriginalSize) + ' pages/ 8K 或 ' +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

-- Wrap log and truncate it.

DECLARE @Counter  INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'

-- Try an initial shrink.

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE    @MaxMinutes >DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) -- the log has not shrunk

AND (@OriginalSize * 8 /1024) >@NewSize -- The value passed in for new size is smaller than the current size.

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log') -- Because it is a char field it inserts 8000 bytes.

DELETE DummyTrans

SELECT @Counter = @Counter + 1

END  -- update

EXEC (@TruncLog) -- See if a trunc of the log shrinks it.

END  -- outer loop

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

SELECT db_name() +'日志最后大小' +

CONVERT(VARCHAR(30),size) + ' pages/ 8K 或 ' +

CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

PRINT '*** 数据库日志压缩成功 ***'

SET NOCOUNT OFF

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

--used

exec strink_logspace

篇3:用脚本缩小数据库日志数据库教程

脚本|数据|数据库

因为客户使用的数据库时常因为日志过大而导致硬盘空间不够,或者备份出来的文件太大无法通过邮件传送,

闲下有余,参考SQLSERVER的帮助文件,写了如下脚本,可以截断日志,以达到缩小文件的目的。有空大家可以在自己的SQLSERVER上测试下效果哦。。。:)也许对有些情况导致的日志过大没有作用,这点可以同各位同仁互相交流下。

--在MASTER数据库中执行以下脚本(使用查询分析器)

declare @dbname varchar(50)

declare temp_cur cursor scroll for select name from sysdatabases

open temp_cur

fetch first from temp_cur into @dbname

while @@fetch_status =0

begin

exec ('backup log '+@dbname+' with no_log')

exec ('dbcc shrinkdatabase('+@dbname+')')

exec ('dbcc checkcatalog ('+@dbname+')')

exec ('dump transaction '+@dbname+' with no_log')

fetch next from temp_cur into @dbname

end

close temp_cur

deallocate temp_cur

篇4:如何压缩MSSQL数据库日志的大小数据库教程

数据|数据库|日志|mssql|压缩

数据库在日积月累的操作过程中,不但自身体积会慢慢增长,其日志的容量大小同样也随着数据库实体文件的增长而增长,且会占用很大的空间.MSSQL数据库的大小包含数据(Data)和事务日志(TransactionLog)两个部分,

数据部分存储的是用户数据库中的数据,包含用户的数据表、视图、存储过程等等内容。

数据部分一般存储与数据库文件组中的.mdb文件中。一般来说,在正常使用的情况下,这

个部分的大小不会经常性地发生很大的变化,除非是用于存储论坛之类快速变化的数据内

容。一般而言,这个部分很少会需要缩小。

事务日志存储的是用户数据库操作的事务记录,主要是用于在数据库服务器发生故障(比

如电源故障之后),恢复数据库中的数据完整性而用的。这个部分一般存储于数据库文件

组中的.ldf文件中,

这个部分的大小经常会发生剧烈的变化。

在某些情况下,由于用户的查询语句(SQL语句)书写的问题,会造成数据库文件大小的

急剧膨胀,尤其是日志文件会变得非常大。这个时候需要对数据库加以缩小。缩小的操作

分为两个步骤:

步骤一 截断数据库中的日志内容

BACKUP LOG 数据库名称 WITH TRUNCATE_ONLY

步骤二 强制数据库压缩其大小

DBCC SHRINKDATABASE ( 数据库名称 , TRUNCATEONLY )

这两个步骤需要使用查询分析器来执行。关于其具体的意义,请参考MSSQL数据库附带的

Transact-SQL的帮助文件。

还有一种方法就是在MSSQL企业管理器的数据库属性>>选项中,将故障还原>>模型设置为简单,然后确定,这样也可以直接减少日志文件的体积.

篇5:如何修改MySQL日志文件位置?数据库教程

MySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面就教您修改MySQL日志文件位置的方法,供您参考,

今天需要改MySQL日志文件的位置,发现在/etc/my.cnf中怎么也改不了。

后来发现MySQL日志位是指定的:

[root@localhost etc]# ps auxgrep mysqld

root    11830 0.5 0.0  4524 1204 pts/0   S   03:03  0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/data/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid

mysql   11890 3.7 0.1 40456 9076 pts/0   Sl  03:03  0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock

root    11909 0.0 0.0  3908  664 pts/0   S+  03:03  0:00 grep mysqld

chkconfig --list发现是chkconfig on指定的,天是

vim /etc/init.d/mysqld得知这里的已经配置

get_mysql_option mysqld datadir “/var/lib/mysql”

datadir=“$result”

get_mysql_option mysqld socket “$datadir/mysql.sock”

socketfile=“$result”

get_mysql_option mysqld_safe log-error “/var/log/mysqld.log”

errlogfile=“$result”

get_mysql_option mysqld_safe pid-file “/var/run/mysqld/mysqld.pid”

mypidfile=“$result”

更改这里应该就行了

篇6:浅谈DataSet数据库教程

DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, 而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针,DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。

DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的Update方法。

DataSet的操作:

DataSet ds=new DataSet();

DataTable dt=new DataTable(“newTable”);

ds.Tables.Add(dt);DataSet ds=new DataSet();

DataTable dt=ds.Tables.Add(“newTable”);

上述两种方法都可以在DataSet中添加一个DataTable,看需要而进行选择。添加DataTable后,需向其中添加行和列。

DataSet ds=new DataSet();

DataTable dt=ds.Tables.Add(“newTables”);

DataColumn col=dt.Columns.Add(“newColumn”,typeof(int));

col.AllowDBNull=false;

col.MaxLength=4;

col.Unique=true;

上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最大长度为4和唯一性为真的列。

dt.PrimaryKey=new DataColumn[]{dt.Columns[“ID”]}

这段代码是继续上面代码的,为一个DataTable中添加一个主键列,主键列是一个数据组,如有多个主键,只需在数组中添加一个列即可。如下:

dt.PrimaryKey=new DataColumns[]{dt.Columns[“OrderID”],dt.Columns[“ProductID”]}

添加外键:

ForeignKeyConstraint fk;

fk=new ForeignKeyConstraint(ds.Tables[“Customers”].Columns[“CustomerID”],ds.Tables[“Orders”].Columns[“CustomerID”]);

ds.Tables[“Orders”].Constraints.Add(fk);

//上述代码假如已经为Cusomers表和Orders创建了主键,此句为添加外键约束,

上述是根据Customers表和Orders表的CustomerID来创建约束。

下面介绍修改DataRow中的内容:

DataRow dr=ds.Tables[“Customer”].Rows.Find(“ANTON”);

if(dr==null)

else

{

dr.BeginEdit();

dr[“CompanyName”]=“newValue”;

dr[“ContactName”]=“newValue2”;

dr.EndEdit();

}

//上面代码通过Row集合的Find方法来在DataTable中的行进行定位,找到“ANTON”行,再修改“ANTON”行中CompanyName列和ContactName列的值。通过BeginEdit和EndEdit来缓存对行的修改,还可调用 CancelEdit为取消修改。

判断某列是否为空值:

DataRow dr=ds.Tables[“Customers”].Rows.Find(“aaa”);

if(dr.IsNull(“ContactName”);

..

else

dr[“ContactName”]=DBNull.Value

//这里判断ContactName列是否为空,如果不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。

删除DataRow:

有两种方法可以删除DataRow,Delete方法和Remove方法和RemoveAt方法。其区别是Delete方法实际上不是从DataTable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而Remove方法则是真正的从DataRow中删除一行,RemoveAt方法是根本行的索引来删除。列:

DataRow dr=ds.Tables[“table”].Rows.Find(“a”);

ds.Tables[“table”].Remove(dr);

ds.Tables[“table”].Remove(index);

//dr 为“a”所在的行,查出后将其删除,index为 “a”所在的索引号。关于DataSet中的其用法,参照MSDN

【MS Sql Server 日志清理数据库教程】相关文章:

1.MSDESP3安装手记数据库教程

2.压缩MSSQL数据库日志文件大小

3.一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed

4.几十个的PL/SQL数据库教程

5.数据查询SELECT语句数据库教程

6.如何打开老版本数据库数据库教程

7.set的用法小介数据库教程

8.从动态SQL中返回值数据库教程

9.wordpress数据库备份及换空间详细教程

10.替换MSSQL数据库text字段恶意脚本数据库教程

下载word文档
《MS Sql Server 日志清理数据库教程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部