SQL Server ErrorLog 错误日志说明

感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

默认情况下,SQL Server 保存 7 个 ErrorLog 文件,名为:
ErrorLog
ErrorLog.1
ErrorLog.2
ErrorLog.3
ErrorLog.4
ErrorLog.5
ErrorLog.6
在 APACS OS 版本 6.1 中,ErrorLog 文件保存在 c:\Program Files\Microsoft SQL Server\MSSQL$WINCC\LOG 文件夹中。在 APACS OS 版本 7.0 中,ErrorLog 文件保存在 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG 文件夹中。ErrorLog 文件包含最新信息;ErrorLog.6 文件包含最老的信息。
每次重启动 SQL Server 时,这些日志文件都如下循环:
删除 ErrorLog.6 文件中的所有数据,并创建一个新的 ErrorLog 文件。
上个 ErrorLog 文件中的所有数据被写入到 ErrorLog.1 文件中。
上个 ErrorLog.1 文件中的所有数据被写入到 ErrorLog.2 文件中。
上个 ErrorLog.2 文件中的所有数据被写入到 ErrorLog.3 文件中。
上个 ErrorLog.3 文件中的所有数据被写入到 ErrorLog.4 文件中。
上个 ErrorLog.4 文件中的所有数据被写入到 ErrorLog.5 文件中。
上个 ErrorLog.5 文件中的所有数据被写入到 ErrorLog.6 文件中。
如果其中一个 ErrorLog 文件已很大,则可通过运行 sp_cycle_errorlog 存储过程手动循环这些 ErrorLog 文件。注意事项:旧的 ErrorLog 文件中的数据将被覆盖!如果必须保存旧的 ErrorLog 文件中的数据,则可将这些旧的 ErrorLog 文件复制到某个外部存储介质中。
在 APACS OS 版本 6.1 中,可利用 SQL Qry Analyzer Tool 从 SQL Server Enterprise Manager 运行 sp_cycle_errorlog 存储过程。在 APACS OS 版本 7.0 中,可从 SQL Server Management St io 运行 sp_cycle_errorlog 存储过程。

所以需要定期能切换写入error log . 一般可以使用DBCC errorlog命令来操作 。
Exec('DBCC ErrorLog')
或者可以通过以下命令,将sp 放在Job中定期执行。

代码如下:

 
create procedure sp_cycle_errorlog --- 1997/06/24 
as 
if (not (is_srvrolemember('sysadmin') = 1)) -- Make sure that it is the SA executing this. 
begin 
raiserror(15247,-1,-1) 
return(1) 
end 
dbcc errorlog 
return (0) 
GO 
 

代码如下:

 
获取数据库中所有的表 
SELECT SysObjects.name AS Tablename FROM sysobjects WHERE xtype = 'U' and sysstat<200 
获取数据库中所有表的列名 
SELECT SysColumns.name AS Columnsname,SysObjects.name AS Tablename FROM SysObjects,SysColumns WHERE Sysobjects.Xtype='u' AND Sysobjects.Id=Syscolumns.Id 
获取SQL所有数据库名、所有表名、所有字段名、表字段长度 
1.获取MSSQL中的所有数据库名: 
SELECT name FROM MASter..SysDatabASes ORDER BY name 
2.获取MSSQL中的所有用户表名: 
SELECT name FROM DatabASename..SysObjects WHERE XType='U' ORDER BY name 
XType='U':表示所有用户表; 
XType='S':表示所有系统表; 
3.获取指定表[tb_phone]的所有字段名: 
SELECT name FROM SysColumns WHERE id=Object_Id('tb_phone') 
4.SQL所有表的表名、所有字段名、表字段长度 
SELECT table_name AS 数据表名,column_name AS 字段名,ISNULL(column_default,'') AS 默认值,is_nullable AS 是否允许为NULL,data_type AS 数据类型,ISNULL(ISNULL(ISNULL(character_maximum_length,numeric_precision),datetime_precision),1) AS 类型长度 
FROM information_schema.columns 
WHERE NOT table_name IN('sysdiagrams','dtproperties') 
5.获取指定表[tb_phone]的表名,表字段名,字段类型和类型长度 
SELECT SysObjects.name AS Tablename,Syscolumns.name AS Columnsname,Systypes.name AS DateType,Syscolumns.length AS DateLength 
FROM Sysproperties RIGHT OUTER JOIN 
Sysobjects INNER JOIN 
Syscolumns ON Sysobjects.id = Syscolumns.id INNER JOIN 
Systypes ON Syscolumns.xtype = Systypes.xtype ON 
Sysproperties.id = Syscolumns.id AND 
Sysproperties.smallid = Syscolumns.colid 
WHERE (Sysobjects.xtype = 'u' OR 
Sysobjects.xtype = 'v') AND (Systypes.name <> 'Sysname') AND 
(Sysobjects.name = 'tb_phone') 
ORDER BY Columnsname 

SQL Server 的每一个数据库,无论是系统数据库(master,model,sybsystemprocs,tempdb),还是用户数据库,都有自己的transaction log,每个库都有syslogs表。Log记录用户对数据库修改的操作,所以如果不用命令清除, log会一直增长直至占满空间。清除log可用dump transaction 命令;或者开放数据库选项trunc log on chkpt,数据库会每隔一段间隔自动清除log。管理好数据库log是用户操作数据库必须考虑的一面。
一、删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有520多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 77169database,然后将 77169database 中的一个文件附加到当前服务器。

代码如下:

 
EXEC sp_detach_db @dbname = '77169database' 
EXEC sp_attach_single_file_db @dbname = '77169database',@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf' 

二、清空日志

代码如下:

 
DUMP TRANSACTION 库名 WITH NO_LOG 

再操作:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
三、如果想以后不让它增长
企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M
自动收缩日志,也可以用下面这条语句:
ALTER DATABASE 数据库名 SET AUTO_SHRINK ON
故障还原模型改为简单,用语句是:

代码如下:

 
USE MASTER 
GO 
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE 
GO 
------------------------------------------ 
截断事务日志: 
BACKUP LOG { database_name | @database_name_var } 
{ 
[ WITH 
{ NO_LOG | TRUNCATE_ONLY } ] 
} 
--压缩日志及数据库文件大小 
/*--特别注意 
请按步骤进行,未进行前面的步骤,请不要做后面的步骤,否则可能损坏你的数据库. 
--*/ 

1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(客户资料)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:
select * from sysfiles DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 77169database,然后将 77169database 中的一个文件附加到当前服务器。
a.分离
EXEC sp_detach_db @dbname = '77169database'
b.删除日志文件
c.再附加
EXEC sp_attach_single_file_db @dbname = '77169database',@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf'
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择自动收缩
--SQL语句设置方式:
EXEC sp_dboption '数据库名','autoshrink','TR'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:

代码如下:

 
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 
-------------------------------------------------------------- 
/*--压缩数据库的通用存储过程 
压缩日志及数据库文件大小,因为要对数据库进行分离处理,所以存储过程不能创建在被压缩的数据库中。 
/*--调用示例 
exec p_compdb 'test' 
--*/ 
use master --注意,此存储过程要建在master数据库中 
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,--要压缩的数据库名 
@bkdatabase bit=1,--因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库 
@bkfname nvarchar(260)='' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间 
as 

--1.清空日志
exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')
--2.截断事务日志:
exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
--3.收缩数据库文件(如果不压缩,数据库的文件不会减小
exec('DBCC SHRINKDATABASE(['+@dbname+'])')
--4.设置自动收缩
exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TR''')
--后面的步骤有一定危险,你可以可以选择是否应该这些步骤
--5.分离数据库

代码如下:

 
if @bkdatabase=1 
begin 
if isnull(@bkfname,'')='' 
set @bkfname=@dbname+'_'+convert(varchar,getdate(),112) 
+replace(convert(varchar,108),':','') 
select 提示信息='备份数据库到SQL 默认备份目录,备份文件名:'+@bkfname 
exec('backup database ['+@dbname+'] to disk='''+@bkfname+'''') 
end 
--进行分离处理 
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+'''') 
--删除日志文件 
declare @fname nvarchar(260),@s varchar(8000) 
declare tb cursor local for select fname from #t where type=64 
pen 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 
--附加数据库 
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 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大