Tuesday, December 1, 2009

วิธี reset ค่า Compact Check Count ใน Outlook Express

script เอาไว้สำหรับ reset ค่า Compact Check Count เพื่อไม่ให้ Outlook Express ถามให้ Compact ตอนที่ออกจากโปรแกรม

Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "Identities"

oReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrKeys

For Each strKey In arrKeys
  strKeyPath = "Identities\" & strKey & "\Software\Microsoft\Outlook Express\5.0"
  oReg.SetDWORDValue HKEY_CURRENT_USER,strKeyPath, "Compact Check Count", 0
Next

Friday, October 30, 2009

SQL Server Version Database

เอาไว้สำหรับดูว่า SQL Server Version ไหน ต้องลง patch, service pack ตัวไหน ซึ่งมีประโยชน์สำหรับช่วยเลือก download patch มาเก็บเอาไว้ เพื่อใช้ในการ setup server ใหม่ หรือ setup server ทดแทนเครื่องเดิม ให้ได้ version เดิม

http://www.sqlsecurity.com/FAQs/SQLServerVersionDatabase/tabid/63/Default.aspx

Thursday, August 13, 2009

การแก้ไขปัญหาใช้ Flash Drive ไม่ได้ โดยแสดง Error ว่า Access Denied

หลายวันก่อน ผมเจอปัญหา ไม่สามารถใช้งาน flash drive/thumb drive/usb drive ได้ โดยอาการคือ เมื่อเสียบ flash drive ทั้งหลายเข้าไปที่ port usb แล้ว windows สามารถ detect เจอ และ แสดงขึ้นมาเป็น drive มี drive letter ตามปกติ เช่น F: แต่ว่า icon ของ usb drive กลับกลายเป็นรูป icon ของ folder และ เมื่อ Double-Click เพื่อใช้งาน จะขึ้น error ว่า Access Denied และแม้ว่าจะพยายามหลีกเลี่ยงไปใช้วิธี Right-Click แล้วเลือก Explore ก็จะขึ้น error ว่า Access Denied เช่นเดิม

ปัญหานี้เกิดจาก Registry ของ Autoplay เปลี่ยนไป ซึ่งวิธีแก้ก็คือ ใช้โปรแกรม Autoplay Repair Wizard (สามารถ download ได้จาก web ของ Microsoft) โปรแกรมชื่อ Autofix.exe โดยวิธีใช้คือ run โปรแกรมนี้ แล้วเลือก drive ที่ต้องการแก้ scan หา error แล้วก็ repair ตามที่โปรแกรมแนะนำ

Link สำหรับ download โปรแกรม
http://www.microsoft.com/downloads/details.aspx?familyid=C680A7B6-E8FA-45C4-A171-1B389CFACDAD

Friday, May 8, 2009

วิธีตั้ง Schedule สำหรับ Backup SQL Server Express

ข้อเสียอย่างหนึ่งของ SQL Express ก็คือ มันไม่มี Maintenance plan และไม่มี SQL Server Agent ดังนั้น คำถามที่จะพบบ่อย ก็คือ จะสามารถตั้ง Schedule สำหรับ Backup Server Express หรือทำ Automatic Backup SQL Server Express ได้อย่างไร

โชคดีที่ Windows ยังมี Scheduled Tasks มาให้ สำหรับใช้ตั้งเวลาให้โปรแกรมทำงาน ดังนั้น หากเราสามารถเขียน Script ที่ใช้ในการ Backup ได้ แล้ว Add เข้าไปใน Scheduled Tasks และ ตั้งเวลา เราก็สามารถ Backup SQL Server Express แบบอัตโนมัติได้ เช่นกัน

วิธีที่ได้ทดลองใช้ ก็คือ ใช้สั่ง Backup ผ่าน batch file ซึ่งคนที่เคยใช้ DOS คงจะรู้จักกันดี โดยมีรายละเอียดของ batch file ดังนี้

BackupDB.BAT

@echo off
set bkfolder=d:\backup
@echo Backup database is working ....
REM ************* Backup database DB 01***************
set dbname=DB01
for /F "tokens=1,2,3 delims=/ " %%i in ('date/t') do @set d=%%k%%j%%i
for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do @set t=%%i%%j%%k
sqlcmd -E -S.\SQLEXPRESS -o"%bkfolder%\backup_db_%dbname%_%d%%t%.log" -Q"backup database %dbname% to disk='%bkfolder%\%dbname%_%d%%t%.bak' "

REM ************* Backup database DB 02***************
set dbname=DB02
for /F "tokens=1,2,3 delims=/ " %%i in ('date/t') do @set d=%%k%%j%%i
for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do @set t=%%i%%j%%k
sqlcmd -E -S.\SQLEXPRESS -o"%bkfolder%\backup_db_%dbname%_%d%%t%.log" -Q"backup database %dbname% to disk='%bkfolder%\%dbname%_%d%%t%.bak' "

REM ************* Delete old files ***************
@echo Deleting files older than 3 days ...
mkdir %bkfolder%\trash
robocopy %bkfolder% %bkfolder%\trash *.* /MOV /MINAGE:3 /NFL /NDL /NJH /NJS
del %bkfolder%\trash\*.* /q
rmdir %bkfolder%\trash

คำอธิบายการทำงาน
- เครื่องที่ทดสอบ ตั้ง Date format ใน Regional Options ไว้เป็น dd/mm/yyyy
- บรรทัดที่ 2 กำหนด path ที่จะเก็บไฟล์ backup เอาไว้ที่ d:\backup
- บรรทัดที่ 5 กำหนดชื่อ DB ที่จะ backup ให้เป็น DB01
- บรรทัดที่ 6 ใช้คำสั่ง date/t เพื่อแยกค่า วัน/เดือน/ปี สลับตำแหน่งเก็บใส่ตัวแปร d ในรูปแบบ yyyymmdd
- บรรทัดที่ 7 ใช้คำสั่ง time/t เพื่อเก็บเวลาใส่ ตัวแปร t
- บรรทัดที่ 8 ใช้ sqlcmd เพื่อสั่ง ให้ run คำสั่ง backup โดย Connect เข้าที่ ./SQLEXPRESS แบบ trusted connection โดยจะ backup database DB01 ไปเก็บไว้ใน d:\backup ชื่อ DB01_yyyymmddhhmmAM.bak และสร้างไฟล์ log ชื่อ backup_db_DB01_yyyymmddhhmmAM.log ไว้ให้
- บรรทัดที่ 10-14 เหมือนกับ 4-8 แต่เป็น DB02
- บรรทัดที่ 16-21 เป็นการใช้ robocopy ซึ่งอยู่ใน Windows Server 2003 resource kit ในการช่วยลบไฟล์ที่เก่ากว่า 3 วันทิ้งไปจาก d:\backup ซึ่งหากต้องการแก้ไขจำนวนวัน ก็กำหนดได้ที่ /MINAGE:3

(ตอนตรวจเลขบรรทัด อาจจะต้อง copy code ไปไว้ใน notepad ก่อน แล้วจึงค่อยเทียบบรรทัด เนื่องจากอาจจะเกิดการ wrap text ขึ้นบรรทัดใหม่ของข้อความใน blog)

จากนั้น ก็ตั้งเวลาใน Scehduled Tasks ให้ไปเรียก BackupDB.bat ให้ run ตามเวลาที่ต้องการ ซึ่งหากจะเพิ่ม Database ที่จะทำการ backup หรือ จะเพิ่มการ Backup log ก็สามารถเพิ่มเข้าไปใน batch file ได้


นอกจากวิธีนี้แล้ว เท่าที่เคย Search ดู ผมพบว่ามีอยู่ 2 บทความที่น่าสนใจ ก็คือ
- Automating Database maintenance in SQL 2005 Express Edition ของคุณ Jasper Smith ซึ่งมีอยู่ 2 ตอน
- Scheduling Backups for SQL Server 2005 Express ของ Edgewood Solutions Engineers

ซึ่งทั้ง 2 บทความ จะใช้วิธีสร้าง Stored Procedure ขึ้นมา แล้วเรียกใช้เพื่อสั่งให้ Backup โดยตั้งเวลาให้เรียกทำงานผ่าน Scheduled Tasks ของ Windows เช่นกัน

( ทดลองกับ SQL 2005 Express Edition บน Windows XP )

Saturday, April 25, 2009

Database shrink แล้วขนาดไม่ลดลง

อาทิตย์นี้เจอ DB อยู่ 1 ก้อน มีขนาด mdf ประมาณ 105GB (เหลือ free ประมาณ 40GB) ส่วน ldf 30GB (เหลือ free > 28GB) ซึ่ง ldf นั้นสามารถ shrink ได้ปกติ ก็เลย shrink เหลือ 5GB และ set autogrowth ให้มัน growth ทีละ 1GB แทน

แต่ mdf นั้น หลังจากได้สั่ง shrink ให้เหลือ 75GB แล้ว run คำสั่งไป 2 ชม. ก็ error ไม่สามารถ shrink ได้

วิธีที่ทดลอง shrink mdf ใหม่ ก็คือ แทนที่จะ shrink ทีเดียวเลย 30GB ก็เปลี่ยนเป็นทะยอย shrink จาก 105GB --> 100GB --> 95GB --> .... ซึ่งก็ทำให้สามารถ shrink ได้สำเร็จผ่านไปได้ด้วยดี

Monday, March 23, 2009

แก้ไข Job ไม่ได้ หลังเปลี่ยนชื่อ Server (MS SQL 2000)

Error จะขึ้นว่า Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server.

วิธีแก้ไขตาม Web ของ MS (http://support.microsoft.com/kb/281642) จะให้ทำการ แก้ชื่อ Server กลับไปชื่อเดิม -> สร้าง Script ของ Job -> ลบ Job ทิ้ง -> เปลี่ยนชื่อ Server เป็นชื่อใหม่ -> Run script ที่สร้างไว้เพื่อสร้าง Job ใหม่ ซึ่งไม่ค่อยสะดวกเท่าไหร่ และทำให้เกิด downtime ด้วย

แต่ มีอีกวิธีหนึ่งซึ่งจะสะดวกกว่า ก็คือ เราสามารถแก้ไข ด้วยการ update ข้อมูลชื่อ Server ที่ field : originating_server ใน Table : msdb.dbo.sysjobs ซึ่งหลังจาก update แล้ว ก็จะสามารถแก้ไข Job ได้ตามปกติ

Wednesday, March 18, 2009

ปัญหา Export pdf ใน Crystal Reports ของ Visual Studio 2005 แล้ว Font Size เล็กลง

ปัญหาที่พบนี้เจอกับ ASP.NET ซึ่ง pdf ที่ Export ออกมา มีขนาด Font ที่เล็กลงกว่าปกติ และทดลองทำตาม วิธีแก้ไขที่เจอใน Web ด้วยการ update ด้วยไฟล์ dbex10win_en.zip และ แก้ Registry HKEY_CURRENT_USER\SOFTWARE\Crystal Decisions\10.0\Crystal Reports\Export\PDF โดยแก้ไขค่า ForceLargerFonts ชนิด REG_DWORD เป็น 1 แล้วก็ยังมีปัญหาอยู่

ผมเข้าใจว่าเหตุที่วิธีข้างต้นใช้งานไม่ได้ เป็นเพราะว่า Crystal Reports (CR) ที่มากับ VS2005 จะเป็น version 10.2 แต่วิธีแก้ไขดังกล่าว เป็นของ CR 10.0

สำหรับวิธีแก้ไขของ CR ใน VS2005 แล้วใช้งานได้สำเร็จ มีดังนี้
1. copy ไฟล์ 2 ไฟล์ ตามรายการไปไว้ที่ C:\Program Files\Common Files\Crystal Decisions\2.0\bin โดยใช้ไฟล์
- crtslv.dll version 8.6.1.726 วันที่ 2003/07/25
- ExportModeller.dll version 8.6.2.440 วันที่ 2003/07/28
ซึ่งทั้ง 2 ไฟล์นี้ มาจาก CR 8.5

2. สั่ง run regsvr32 สำหรับไฟล์ dll 2 ไฟล์ในข้อ 1
- regsvr32 "C:\Program Files\Common Files\Crystal Decisions\2.0\bin\crtslv.dll"
- regsvr32 "C:\Program Files\Common Files\Crystal Decisions\2.0\bin\ExportModeller.dll"

3. copy ไฟล์ crxf_pdf.dll ไปไว้ที่ C:\Program Files\Common Files\Business Objects\2.7\Bin โดยใช้ไฟล์
- crxf_pdf.dll version 9.2.0.565
( ไม่ต้อง run regsvr32)

4. Restart IIS ใหม่
- net stop w3svc
- net start w3svc

(ใช้งานบน Windows Server 2003 Standard + framework 2.0 + CRRedist2005_x86.msi )

Sunday, February 22, 2009

การ Reset registry ของ Excel ให้เป็นค่า Default ใหม่

บางครั้ง เราจะเจอเหตุการณ์ที่ เมื่อ Double Click เจ้าไฟล์ *.xls จากใน Explorer แล้ว ตัวโปรแกรม Excel จะเปิดขึ้นมา แต่ว่า มันไม่เปิดไฟล์ที่เราเรียกให้ แต่หากว่า เราเปิดไฟล์ *.xls จากเมนูของ Excel ที่ File -> Open จะสามารถเปิดไฟล์ได้ปกติ

หนึ่งในวิธีแก้ไข ก็คือ การ Reset registry ของ Excel ให้กลับสู่ค่า Default เหมือนกับตอนเพิ่งติดตั้งโปรแกรมเสร็จ ซึ่งคำสั่ง ก็คือ
1. ปิดโปรแกรม Excel ก่อน
2, Excel /unregserver จากนั้น ก็
3. Excel /regserver

โดยที่ 2-3 ทำเพื่อเป็นการ Reset registry ของ Excel

Friday, January 23, 2009

ความหมายในชื่อของ computer virus

โดยทั่วไปผู้ผลิต Antivirus จะตั้งชื่อ virus โดยประกอบไปด้วยส่วนต่าง ๆ คือ prefix + ชื่อ + suffix ซึ่งแต่ละส่วนมีความหมายดังนี้

Prefix
ตรง prefix จะบ่งบอกถึงชนิดของ virus หรือ malware เช่น
- W32 หรือ Win32 จะหมายถึง virus ที่ติดต่อกับ Windows-32 bit ( Windows 95/98,Me,NT4,2000,2003,XP)
- W95 หมายถึง virus ที่ติดต่อกับ Windows 95/98

บางครั้งผู้ผลิต Antivirus อาจจะกำหนด prefix เพื่อระบุถึงลักษณะของอาการ เช่น
- TROJ หมายถึง Trojan house
- I-Worm หมายถึง Internet/email worm
- OM หมายถึง MS Office macro virus และ ตัวอย่างของ prefix ของ macro virus อื่น ๆ ก็เช่น W97M, WM, X2KM ซึ่งจะระบุถึง version ของ Office หรือ โปรแกรมในชุดของ Office ด้วย เช่น X2KM ก็คือ macro virus ที่ติดต่อกับ Excel 2000

Name
ต่อจาก prefix ก็จะเป็นชื่อของ virus ซึ่งโดยทั่วไปมักจะแยกจาก prefix ด้วยเครื่องหมาย underscore,(_) จุด หรือ slash (/) เช่น W32/Bagle ก็คือ virus ชื่อ Bagle

Suffix
ส่วนท้ายของชื่อ virus ซึ่งจะแยกจากชื่อของ virus ด้วยเครื่องหมายจุด จะใช้สำหรับบอกถึงความแตกต่างของ virus ที่อยู่ในตระกูล/สายพันธุ์เดียวกัน ที่เกิดตาม ๆ กันมา เช่น W32/Bagle.A , W32/Bagle.B

ซึ่งการตั้งขื่อ จะตั้งเรียงตาม A- Z เช่น Bagle.A, Bagle.B , .. Bagle.Z จนครบ แล้วจึงเริ่มใหม่เป็น Bagle.AA, Bagle.AB ต่อไปเรื่อย ๆ

Modifier
ในบางครั้ง จะมีการเพิ่ม modifier ต่อท้าย suffix เพื่ออธิบายรายละเอียดเพิ่มเติมของชนิด virus เช่น
- @mm หมายถึง mass-mailing email worm
- @dl หมายถึง downloader

จากข้อมูลทั้งหมด ถ้าเราเห็น virus ที่ชื่อ W32/Bagle.BB@mm เราก็จะบอกได้ว่า เป็น virus แบบ mass-mailing ที่พัฒนามาจากตระกูล Bagle ซึ่งติดต่อกับ Windows 32-bit

Virus ตัวหนึ่ง อาจจะมีชื่อหลายชื่อก็ได้ ซึ่งในการหาข้อมูลเกี่ยวกับ virus ตัวหนึ่ง ๆ นั้น เราจะต้องเข้าใจว่ามันอาจจะถูกเรียกชื่อแตกต่างกัน ตามผู้ผลิต Antivirus แต่ละราย ดังนั้น ในการค้นหาข้อมูลของ virus เราอาจจะต้องอ้างอิงถึงผู้ผลิต Antivirus ด้วย

ตัวอย่างเช่น หากจะต้องการหาข้อมูลของ Bagle.AT ได้อย่างถูกต้อง เราอาจจะต้องเพิ่มชื่อของผู้ผลิต Antiviurs เข้าไปด้วย เพราะ virus ตัวนี้มีชื่อเรียกที่หลากหลาย เช่น
- Trend Micro เรียก WORM_BAGLE.AT
- Sophos เรียก W32/Bagle-AU
- McAfee เรียก W32/Bagle.bb@mm
- Computer Associates เรียก Win32.Bagle.AQ
- Kaspersky เรียก I-Worm.Bagle.at
- หรือ บางครั้ง อาจจะเจอชื่อเรียกที่แตกต่างกันเลย เช่น Symantec เรียกว่า W32.Beagle.AW@mm


ที่มา : http://antivirus.about.com/od/whatisavirus/a/virusnames.htm