程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 關於 SQL Server ErrorLog 毛病日記解釋

關於 SQL Server ErrorLog 毛病日記解釋

編輯:MSSQL

關於 SQL Server ErrorLog 毛病日記解釋。本站提示廣大學習愛好者:(關於 SQL Server ErrorLog 毛病日記解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是關於 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:\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是用戶操作數據庫必需斟酌的一面。
1、刪除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'

2、清空日記

DUMP TRANSACTION 庫名 WITH NO_LOG

再操作:
企業治理器--右鍵你要緊縮的數據庫--一切義務--壓縮數據庫--壓縮文件--選擇日記文件--在壓縮方法裡選擇壓縮至XXM,這裡會給出一個許可壓縮到的最小M數,直接輸出這個數,肯定便可以了
3、假如想今後不讓它增加
企業治理器->辦事器->數據庫->屬性->事務日記->將文件增加限制為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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved