关于 SQL Server ErrorLog 错误日志说明_MsSql

默认情况下,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,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用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,getdate(),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

时间: 2024-10-11 10:43:24

关于 SQL Server ErrorLog 错误日志说明_MsSql的相关文章

关于 SQL Server ErrorLog 错误日志说明

默认情况下,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:\Pro

Sql Server 代理错误日志知多少

  一 概述 默认情况下,SQL Server 代理创建错误日志来记录警告和错误.日志中显示下列警告和错误: 警告消息,提供有关潜在问题的信息,例如"作业 在执行时被删除". 错误消息,通常需要系统管理员干预,例如"无法启动邮件会话".可以通过 net send 将错误消息发送给特定用户或计算机. 默认情况下,执行跟踪消息不写入 SQL Server代理日志错误,因为它们会将日志填满.如果错误日志已满,会降低选择和分析更严重的错误的能力.因为日志会增加服务器的处理负

SQL SERVER 9003错误解决方法_MsSql

SQLSERVER 9003错误解决方法 只适用于SQL2000 (只适用于SQL2000) "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft SQL Server,错误: 9003)" 看是9003错误,就想到可能是由于日志文件的原因,再看数据库文件可能损坏,于是想到dbcc checkdb指令. 方法如下: 1.我们使用默认方式建立一个供恢复使用的数据库(如pos).可以在SQL   Server   Enterprise   Manag

SQL Server 2000之日志传送功能

server SQL Server 2000之日志传送功能 - 描述 (1) 角色变更.角色互换.以及监控服务器所在位置     当线上数据库停摆时(可能是计划内维护工作,或是预期外的状况),如果还有备援服务器上的数据库可供存取,您可能会比较安心一点.一个设计良好的日志传送系统(将数据库交易日志文件从主要服务器传送到备援服务器)即可给予您这样的自信心.内建于 SQL Serve 2000 企业板与开发版的 Enterprise Manager 工具程序即支持日志传送功能. 角色变更     将日

SQL Server 2000之日志传送功能 - 描述(2)

server SQL Server 2000之日志传送功能 - 描述(2) 角色变更.角色互换.以及监控服务器所在位置     Step 4: 通知监控服务器角色已变更 SQL Server 2000 的日志传送会在监控服务器上安装监控工具程序:最好是在第三台服务器.为了通知监控服务器日志传送的角色已经过变更,您必须在监控服务器上执行 sp_change_monitor_role 预存程序,如程序代码列表3所示.尽管名称内含有 change 字眼,但它并不会变更监控服务器的角色.相反地,此预存程

SQL Server 2000之日志传送功能 - 设定(3)

server SQL Server 2000之日志传送功能 - 设定(3) 更改日志传送之组态设定         您可以使用数据库维护计划之[属性]对话盒来更改日志传送相关设定.在[交易记录文件备份]设定页提供的选项可更改日志传送过程中交易日志文件备份的组态.         [记录传送]设定页显示出您先前在维护计划内设定的日志传送配对服务器:如果您设定了其它组日志传送配对服务器,也会列在此处.本设定页也包含下列选项:新增目的数据库(用以建立新的日志传送配对服务器).删除既有日志传送配对服务器

SQL Server 2000之日志传送功能 - 问题解决

server|解决|问题 SQL Server 2000之日志传送功能可能發生的錯誤 一.残余数据    当您进行SQL Server 2000日志传送的实验时,也许偶而会中断设定过程.如果真是如此,那么某些资料仍然会存入每台服务器的日志传送资料表,并且影响到后续的日志传送设定动作.为了保证这些剩余资料都会被清除,请确实删除每台服务器msdb数据库内日志传送资料表之相关资料. 错误信息:Error 14261: The specified primary_server_name.primary_

SQL Server 2000之日志传送功能-设定

   日志传送功能可自动复制数据库的交易日志文件,并回存到备援服务器 (standby server) 的另外一个数据库.因此可大幅提高SQL Server数据库之可用性.因为备援数据库完整地接收来源数据库的异动情况,所以它就是一份来源数据库的复本 - 差别仅在于资料复制与加载过程所产生的时间差.然而,当主要服务器停摆时,您就可以将备援服务器更改为新的主要服务器.如果原来的主要服务器可重新上线使用,那么您可以将其设定为新的备援服务器 - 事实上就是对调两台服务器的角色.        在SQL

SQL Server 2000之日志传送功能 - 描述

server 角色变更.角色互换.以及监控服务器所在位置     当线上数据库停摆时(可能是计划内维护工作,或是预期外的状况),如果还有备援服务器上的数据库可供存取,您可能会比较安心一点.一个设计良好的日志传送系统(将数据库交易日志文件从主要服务器传送到备援服务器)即可给予您这样的自信心.内建于 SQL Serve 2000 企业板与开发版的 Enterprise Manager 工具程序即支持日志传送功能. 角色变更     将日志从主要服务器传送到次要服务器之后,您可在必要时以次要服务器置换