一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 關于 SQL Server ErrorLog 錯誤日志說明

關于 SQL Server ErrorLog 錯誤日志說明

2019-12-03 14:51MSSQL教程網 Sql Server

關于 SQL Server ErrorLog 錯誤日志說明學習sqlserver的朋友可以參考下。

默認情況下,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 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品一二三四区 | 国产caonila在线观看 | 国产日韩一区二区三区 | 潘甜甜在线观看 | 欧美视频一区二区专区 | 国产精品综合在线 | 亚洲免费在线观看视频 | h片免费网站 | 成人毛片高清视频观看 | 欧美黑人成人免费全部 | 欧美高清在线精品一区二区不卡 | 国产精品久久久久久久久久久搜索 | 日本加勒比在线精品视频 | 女人扒开下面让男人桶爽视频 | 精品视频一区二区三区 | 国产一区二区精品久久 | 国产综合成色在线视频 | 亚洲乱码尤物193yw在线播放 | 饱满奶大30p | 免费国产之a视频 | 青青青手机视频在线观看 | 国模李丽莎大尺度啪啪 | 国内外成人在线视频 | 99撸 | 关晓彤被草 | 无人视频在线观看完整版高清 | 闺蜜的样子小说安沁在线阅读 | 东方影视欧美天天影院 | 午夜欧美精品久久久久久久 | 久久无码人妻AV精品一区 | 激情影院费观看 | 免费国产在线观看 | 农夫69小说小雨与农村老太 | 波多野结衣不卡 | 四虎影视库永久在线地址 | 国产精品久久久精品日日 | 15同性同志18 | 欧美激情影音先锋 | 国产福利在线观看91精品 | 好看的亚洲视频 | 男人疯狂进女人下部视频动漫 |