วันศุกร์ที่ 29 มกราคม พ.ศ. 2553

ติดตั้ง Webmin

Using the Webmin APT repository

If you like to install and update Webmin via APT,
edit the /etc/apt/sources.list file on your system

sudo vi /etc/apt/sources.list
and add the line :

deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
You should also fetch and install my GPG key with which the repository is signed,
with the commands :

sudo wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc
You will now be able to install with the commands :

sudo apt-get update
sudo apt-get install webmin
All dependencies should be resolved automatically.
จากเว็บเค้า

วันพุธที่ 27 มกราคม พ.ศ. 2553

วิธีจัดการถีบ process ที่ log ใน MS SQL server 2005

วิธีดูว่ามี log เกิดขึ้นหรือไม่ มีหลักๆ 2 แบบ
  1. ดูด้วย Activity Monitor ของ MS SQL Server Management Studio
  2. ใช้คำสั้ง SQL ไป select ข้อมูลเอง หรือเรียกใช้ stored procedure ของระบบเอง
    หรือจะเรียกใช้ของเราที่สร้างขึ้นเอง
ถ้าใช้วิธีที่ 1 เราต้องตั้งค่าใน filter โดยเลือก Blocking Type เป็น BlockedOrBlocking มันจะกรองข้อมูลเฉพาะที่เกิดการ log เมื่อดูข้อมูลแล้วให้สังเกตุดูที่คอลัมน์ Blocked by มันจะบอกว่า spid อะไรที่ทำการ log อยู่ ก็ให้ไปเลือกที่แถวข้อมูล spid นั้น แล้วจัดการ kill มันซะ แต่ถ้า spid มันเป็นเลขติดลบ เช่น -2 (เจอหลายทีละ) วิธีนี้ kill มันไม่ได้ มันเป็นพวกโปรเซสกำพร้า (orphaned) ข้อมูลเพิ่มเติมจาก MS


Activity Monitor

วิธีที่ 2 ใช้คำสั่ง stored procedure ใน SQL เช่น sp_lock, sp_who, sp_who2 ฯลฯ คำสั่งที่มากับ SQL 2005 ไม่ค่อยแจ๋วเท่าไร ต้องสร้างมาใช้เองดีกว่าอันแรกก็
sp_lock2
จะแสดงข้อมูล process ต่างๆ โดยจะแสดง UOW ด้วย (แก้ไขเพิ่มเติมเอง) ต้นฉบับ

CREATE PROC sp_lock2
(
@dbname sysname = NULL,
@spid int = NULL
)
AS
/*************************************************************************************************
Copyright © 2001 Narayana Vyas Kondreddi. All rights reserved.

Purpose: To display detailed lock information

Written by: Narayana Vyas Kondreddi
http://vyaskn.tripod.com

Tested on: SQL Server 7.0 and SQL Server 2000

Date modified: Jan-27-2010 1:30 PM

Email: vyaskn@hotmail.com

Add New column: UOW ให้มันแสดงข้อมูลนี้เพื่อนำไปจัดการกับ spid กำพร้า (พวก -2 เป็นต้น)
by Pom

Examples:

To see all the locks:
EXEC sp_lock2

To see all the locks in a particular database, say 'pubs':
EXEC sp_lock2 pubs

To see all the locks held by a particular spid, say 53:
EXEC sp_lock2 @spid = 53

To see all the locks held by a particular spid (23), in a particular database (pubs):
EXEC sp_lock2 pubs, 23
*************************************************************************************************/

BEGIN
SET NOCOUNT ON
CREATE TABLE #lock
(
spid int,
dbid int,
ObjId int,
IndId int,
Type char(5),
Resource char(20),
Mode char(10),
Status char(10)
)

INSERT INTO #lock EXEC sp_lock

IF @dbname IS NULL
BEGIN
IF @spid IS NULL
BEGIN
SELECT a.spid AS SPID,(SELECT DISTINCT req_transactionUOW from master..syslockinfo where req_spid = a.spid) AS UOW,
(SELECT DISTINCT program_name FROM master..sysprocesses WHERE spid = a.spid) AS [Program Name],
db_name(dbid) AS [Database Name], ISNULL(object_name(ObjId),'') AS [Object Name],IndId, Type, Resource, Mode, Status
FROM #lock a
END
ELSE
BEGIN
SELECT a.spid AS SPID,(SELECT DISTINCT req_transactionUOW from master..syslockinfo where req_spid = a.spid) AS UOW,
(SELECT DISTINCT program_name FROM master..sysprocesses WHERE spid = a.spid) AS [Program Name],
db_name(dbid) AS [Database Name], ISNULL(object_name(ObjId),'') AS [Object Name],IndId,
Type, Resource, Mode, Status
FROM #lock a
WHERE spid = @spid
END
END
ELSE
BEGIN
IF @spid IS NULL
BEGIN
SELECT a.spid AS SPID,(SELECT DISTINCT req_transactionUOW from master..syslockinfo where req_spid = a.spid) AS UOW,
(SELECT DISTINCT program_name FROM master..sysprocesses WHERE spid = a.spid) AS [Program Name],
db_name(dbid) AS [Database Name], ISNULL(object_name(a.ObjId),'') AS [Object Name],a.IndId,
ISNULL((SELECT name FROM sysindexes WHERE id = a.objid and indid = a.indid ),'') AS [Index Name],
a.Type, a.Resource, a.Mode, a.Status
FROM #lock a
WHERE dbid = db_id(@dbname)
END
ELSE
BEGIN
SELECT a.spid AS SPID,(SELECT DISTINCT req_transactionUOW from master..syslockinfo where req_spid = a.spid) AS UOW,
(SELECT DISTINCT program_name FROM master..sysprocesses WHERE spid = a.spid) AS [Program Name],
db_name(dbid) AS [Database Name], ISNULL(object_name(a.ObjId),'') AS [Object Name],a.IndId,
ISNULL((SELECT name FROM sysindexes WHERE id = a.objid and indid = a.indid ),'') AS [Index Name],
a.Type, a.Resource, a.Mode, a.Status
FROM #lock a
WHERE dbid = db_id(@dbname) AND spid = @spid
END
END

DROP TABLE #lock

END


ส่วนนี้ก็เป็นแบบที่หาตัวที่ทำให้เกิด log เลยล่ะมั้ง
Create Table #Tmp
(
spid smallint,
ecid smallint,
status nchar(30),
loginame nchar(128),
hostname nchar(128),
blk char(5),
dbname nchar(128),
cmd nchar(128),
request_id smallint
)

Create Table #TmpLocks
(
spid smallint,
dbid smallint,
ObjId int,
IndId smallint,
Type nchar(4),
Resource nchar(16),
Mode nvarchar(8),
Status nvarchar(28)
)

Insert Into #Tmp
Exec sp_who

Insert Into #TmpLocks
Exec sp_lock

--If (
Select TL.spid,Count(*) From #Tmp T Join #TmpLocks TL On T.spid = TL.spid
Where /*This is for tempdb*/ dbid = 2 And objid In (1, 2, 3)
group by TL.spid
--) > 0
--Then you can kill the concerned spid with the command :
--Kill — The concerned spid

Drop Table #Tmp
Drop Table #TmpLocks ต้นฉบับ

ลำดับต่อมา วิธีจัดการกับ spid -2
use master
go
select req_transactionUOW from syslockinfo where req_spid = -2
go

Use KILL 'UOW' to terminate orphaned DTC transactions

KILL 'FE4A57F2-28C5-44F9-8416-B08760DFE7E9'

Once the KILL process completes successfully then you can be assured by referring to SQL error log for following text:

Spid 60 tried to abort the distributed transaction with UOW {FE4A57F2-28C5-44F9-8416-B08760DFE7E9}. ต้นฉบับ

วันอังคารที่ 26 มกราคม พ.ศ. 2553

VB Script สำหรับ export Event Log ของ Windows XP

dtmThisDay = Day(Date)
dtmThisMonth = Month(Date)
dtmThisYear = Year(Date)
strBackupName = dtmThisYear & "-" & dtmThisMonth & "-" & dtmThisDay & " "

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=imper
sonate, (Backup, Security)}!\\" _
& strComputer & "\root\cimv2")

Set colLogFiles = objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile")

For Each objLogfile in colLogFiles
If objLogFile.FileSize <> 100000 Then
strBackupLog = objLogFile.BackupEventLog _
("D:\Eventlogs\" & strBackupName & objLogFile.LogFileName & ".evt")
objLogFile.ClearEventLog()
End If
Next

เซฟทั้งหมดลงไฟล์ ชื่ออะไรก็ได้.vbs มันเรียกใช้งานมันจะไปเซฟ Event log ทุกหมวดไว้ที่
D:\Eventlogs\