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 )