SQL Server ErrorLogエラーログの説明について

9916 ワード

デフォルトでは、SQL Serverは、次の名前のErrorLogファイルを7つ保存します.
ErrorLog
ErrorLog.1
ErrorLog.2
ErrorLog.3
ErrorLog.4
ErrorLog.5
ErrorLog.6
APACS OSバージョン6.1では、ErrorLogファイルはc:Program FilesMicrosoft SQL ServerMSSQL$WINCCLOGフォルダに保存されます.APACS OSバージョン7.0では、ErrorLogファイルはc:Program FilesMicrosoft SQL ServerMSSQLに保存されています.1MSSQLLOGフォルダにあります.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 Stioからsp_を実行できます.cycle_errorlogストレージ・プロシージャ.
定期的にerror logの書き込みを切り替える必要がある.一般的にDBCC errorlogコマンドを使用して操作できます.
Exec('DBCC ErrorLog')
あるいは、以下のコマンドで、spをジョブに定期的に実行することもできます.
 
  
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:データベースを分離するEnterprise Manager->サーバ->データベース->右クリック->データベースを分離
2:LOGファイルの削除
3:アドオン・データベース・エンタープライズ・マネージャ->サーバ->データベース->右クリック->アドオン・データベース
この方法は新しいLOGを生成し,大きさは520 K余りしかない.
このデータベース設定を自動的に縮小
またはコード:
次の例では、77169 databaseを分離し、77169 databaseのファイルを現在のサーバに添付します.
 
  
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

再操作:
Enterprise Manager--圧縮するデータベースを右クリック--すべてのタスク--データベースを縮小--ファイルを縮小--ログファイルを選択--縮小方法でXXXMに縮小を選択します.ここで縮小を許可する最小M数を与えます.この数を直接入力して、確定すればいいです.
三、これから成長させないためには
Enterprise Manager->Server->データベース->プロパティ->トランザクション・ログ->ファイルの増加を2 Mに制限
ログを自動的に縮小するには、次の文を使用します.
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.データベース・ファイルの縮小(圧縮しないと、データベースのファイルは縮小しません)
Enterprise Manager--圧縮するデータベースを右クリック--すべてのタスク--データベースの縮小--ファイルの縮小
--ログファイルを選択--縮小方法でXXMに縮小することを選択します.ここで縮小を許可する最小M数を与えます.この数を直接入力して、確定すればいいです.
--データファイルを選択--縮小方式でXXMに縮小することを選択します.ここで縮小を許可する最小M数を与えます.この数を直接入力して、確定すればいいです.
SQL文で行うこともできます
--データベースの縮小
DBCC SHRINKDATABASE(顧客資料)
--指定したデータファイルを縮小します.1はファイル番号です.
select * from sysfiles DBCC SHRINKFILE(1)
4.縮小ログ・ファイルを最大化するには(sql 7.0の場合、クエリー・アナライザでのみ実行できます)
a.データベースを分離する:
Enterprise Manager--Server--データベース--右クリック--データベースの分離
b.私のパソコンからLOGファイルを削除する
c.追加データベース:
Enterprise Manager--Server--データベース--右クリック--データベースを追加この方法では、500 K以上のサイズの新しいLOGが生成されます.
またはコード:
次の例では、77169 databaseを分離し、77169 databaseのファイルを現在のサーバに添付します.
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.後で自動的に収縮できるように、次のように設定します.
Enterprise Manager--Server--右クリックデータベース--プロパティ--オプション--自動シュリンクを選択
--SQL文の設定方法:
EXEC sp_dboption'データベース名','autoshrink','TR'
6.これからログを大きくしないようにするには
Enterprise Manager--Server--右クリック・データベース--プロパティ--トランザクション・ログ
--ファイルの増加を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