Friday, January 30, 2009

The permissions granted to user 'IUSR' are insufficient

ปัญหาเกี่ยวกับ การ Deploy Report Service

# ประมาณอาทิตย์ก่อนมีปัญหากับเจ๊า Reporting Service

# แถมปัญหามีเฉพาะกับเครื่องตัวเองซะงั้น ลองเครื่องอื่นๆ มะเห็นเป็นเลยอ่ะ

# เรื่องมีอยู่ว่าจะทำรายงานด้วย Reporting Service ที่นี้ก็ต้องติดตั้ง MSSQL ตัวเต็มสิครับพี่น้อง

# ซึ่งในเครื่องเรามี express อยู่ด้วย แต่ไม่ถอนอ่ะมีไรมะ ใช้สองตัวเลยทั้ง เวอร์ชั่นเต็มกับ express มึนครับ

# พอลง MSSQL 2005 ตัวเต็มเสร็จซึ่งตอนลงอ่ะ เลือก component ไม่ครบ ขาดเจ้า Business Intelligence Development Studio

# ก็เลยต้องถอนแล้วชิ่งลงใหม่เพราะพยายามลงเพิ่มนะ แต่มันมะให้เพิ่มอ่ะ ก็คนลงมะเป็นอ่ะนะ

# หลังจากถอนมันออกแล้วลงใหม่ ซึ่งการลงครั้งที่สอง เลือก Component ให้หมดเลยหายห่วงเรื่องลงมะครบ ^^'

# เมื่อติดตั้ง Reporting Service มันจะสร้าง virtual host 2 ตัวคือ ReportServer กับ Reports



# ลองรัน http://localhost/Reports มันขึ้น Error ซะงั้น ซึ่งเราสามารถแก้ได้ที่ Start => Microsoft SQL Server 2005 => Configuration Tools => Reporting Services Configuration

# ทางด้านซ้ายเลือก Report Manager Virtual Directory จากนั้นติ๊กเอาเครื่องหมายที่ Require Secure Socket Layer (SSL) connections ออกซะ แล้วลองเข้า http://localhost/Reports อีกครั้ง



# ถ้าเราใช้ Firefox มันจะมีปัญหาอาไรก็ไม่รู้คือมันจะขึ้น Popup ถาม User กับ Password

# ซึ่งถ้าเราใช้ IE มันจะไม่ถาม

# มาถึงขั้นตอนทดสอบสร้าง Report แหละตาม Tutorial เลยนะ

# พอสร้างเสร็จจะ Deploy มัน Deploy ไม่ได้ซะงั้นมันขึ้นงี้อ่ะ

Error 1 The permissions granted to user 'HOST\IUSR_WINDOWS_XP' are insufficient for performing this operation. 0 0

# ถามเพื่อนเค้าก็ไม่เคยเป็น กำทำไงดีหาใน Google บอร์ดต่างประเทศมันบอกใ้ห้ reinstall ซะงั้น

# แล้วมัน reinstall อาไรล่ะ ไม่รู้อ่ะ reinstall MSSQL 2005 ซะเลย ^^'

# หลังจาก reinstall ลองสร้างโปรเจค Report ใหม่มันก็ Deploy ไม่ได้อยู่ดีขึ้นประมาณเดิมเลยอ่ะ - -'

# ไม่รู้จะทำไงแหละ ก็มั่วสิครับ ลองไปเรื่อย ^^' จนมาถึงลองมั่วลบ virtual host 2 ตัวที่ report service มันสร้างตอนเราติดตั้ง (Reports, ReportServer) และ New มันจาก Reporting Services Configuration ใหม่เลย 2 virtual host อ่ะ

# ทีนี้ก็ลองสร้าง report project ใหม่สิครับ คราวนี้ Deploy ผ่านครับพี่น้อง ^^'

# หลังจาก Deploy ผ่านก็ลองอันอื่นหลายอย่างและ ได้รู้ว่า



# ที่ virtual host ชื่อ ReportServer นะ เข้าไปตรงตั้ง Security มันอ่ะ

# ตรงลูกศรชี้ถ้าเราติ๊กมัน มันจะทำให้เรา Deploy report project ไม่ผ่านเด้อจะบอกให้

# อยากบอกว่าอย่าเลือก Anonymous Access สำหรับ ReportServer นั่นเอง

# สรุป คือ มั่วนั่นเองไม่รู้ว่ามันเกี่ยวอาไรกันนะ แต่ ลบ แล้วทำการสร้าง virtual host ทั้งสองใหม่มันได้ซะงั้น


References:

Mount partition windows on ubuntu by manual

เมาน์พาร์ทิชั่นวินโดวส์บนอูบันตูด้วยตัวเราเองไม่พึ่ง GUI ที่มีอยู่แล้ว
  • ไม่แน่ใจว่าเคยเขียนไว้ยังหว่า แต่ไม่เป็นไรกันเหนียวเขียนไว้อีกสักอัน ^^'
  • ปกติหรือป่าวมะรู้นะแต่ที่แน่เราก็ยังต้องพึ่ง ระบบ File M$ WD (FAT32|NTFS) ในการทำงานอยู่
  • ที่นี้เมื่อเราลง Ubuntu มันก็จะขึ้น drive ของระบบ WD ที่เมนู Places
  • ดังภาพด้านบนเรามี drive WD 2 drive มันก็ขึ้น media 2 ตัวที่ Places
  • เมื่อเราต้องการ Mount เราก็แค่คลิกที่มัน แล้วมันก็จะถามรหัสเราก็กรอกไปซะ (ไม่แน่ใจนะว่าถ้าเป็น FAT32 มันจะถามรหัสผ่านปะนะ แต่ Drive เราเป็น NTFS อ่ะ) เราก็เลือก Remember ซะจะได้ไม่กรอกรหัสในทุกๆ ครั้งที่ทำการ Mount
  • ถ้าระบบเป็น NTFS เมื่อเรา Mount ผ่าน GUI เราก็จะได้สิทธิ์เป็น root นะเพราะเราสามารถเปลี่ยนแปลงไฟล์ได้อ่ะ อันนี้คิดเอาเองนะ ซึ่งมันก็น่าจะเป็นแบบนั้นอ่ะ
  • เพราะปกติการ Mount NTFS มันจะอ่านได้อย่างเดียวนะ เท่าที่รู้มา
  • ซึ่ง Ubuntu มันก็ดีแบบนี้ล่ะ
  • แต่ไมใน /etc/fstab มันมะมี config เกี่ยวกับ drive ของ WD เลยซึ่งเราก็ไม่รู้ด้วยอ่ะว่า Ubuntu เค้าเขียน config สำหรับ Mount drive WD ไว้ที่ใหนอ่ะ
  • แต่เราอยากลอง Mount เองดูบ้างอ่ะ เผื่อวันข้างหน้าอาจจะไม่ได้ใช้ Desktop อ่ะ คิดเผื่อไว้อ่ะนะ
Mount M$ WD partition by manual Go

1. ใช้คำสั่งให้แสดงรายการ devices ที่เป็น drive ออกมาโดยคำสั่ง
$ sudo fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00004cc2

Device Boot Start End Blocks Id System
/dev/sda1 * 1 3978 31953253+ 7 HPFS/NTFS
/dev/sda2 3979 15752 94574655 f W95 Ext'd (LBA)
/dev/sda3 15753 19457 29760412+ 83 Linux
/dev/sda5 3979 15243 90486081 7 HPFS/NTFS
/dev/sda6 15244 15752 4088511 82 Linux swap / Solaris
2. ซึ่ง drive เราจะเป็น NTFS นะ จากนั้นเราก็เปิดไฟล์ /etc/fstab ขึ้นมาแก้คอนฟิกสักกะหน่อย ก่อนแก้ กันเหนียว backup ไว้ก่อนก็น่าจะดี
$ sudo cp /etc/fstab /etc/fstab.old ; sudo gedit /etc/fstab
3. เมื่อเปิดไฟล์ /etc/fstab ขึ้นมาแหละให้เราเพิ่มบรรทัดนี้ลงไปต่อจากข้อมูลเดิม (ต่อบรรทัดใหม่นะ)
/dev/sda1 /mnt/c ntfs nls=utf8,umask=0222 0 0
/dev/sda5 /mnt/d ntfs nls=utf8,umask=0222 0 0
  • ถ้าระบบไฟล์คุณเป็น FAT ให้ใช้แบบนี้
/dev/sda1 /mnt/c vfat noauto,user 0 0
/dev/sda5 /mnt/d vfat noauto,user 0 0
  • การ mount เราจะมีพาธที่ /mnt ซึ่งอันนี้เราสามารถเลือกที่เป็นใหนๆ ก็ได้นะ
  • จากนั้นอย่าลืมบันทึกไฟล์ซะล่ะ
4. ในคอนฟิกเราตั้งพาธเป็น /mnt/c|d ซึ่งมันยังไม่มีอยู่จริงเราก็ต้องไปสร้างมันสิครับ
$ sudo mkdir /mnt/c /mnt/d
5. เมื่อเราสร้างเสร็จเราก็ทำการ mount สิครับพี่
$ sudo mount /dev/sda1 ; sudo mount /dev/sda5
6. ตามไปดูผลงานใน /mnt/c สิครับ
$ ls /mnt/c
7. แค่เนี๋ยอ่ะครับ

Other way it easier first way

Sample: if we have windows drive name "/dev/sda1" and "/dev/sda5"

1. create folder for mount file so sudo mkdir /media/disk
2. mount it by command sudo mount /dev/sda5 /media/disk
3. test on ubuntu 8 i think ubuntu 9 or higher can use this way same

Apply: if we need to mount auto when startup system make script startup

Example:

  • file name script /etc/init.d/automountd content follow
#! /bin/sh

mkdir /media/disk1
mkdir /media/disk5

mount /dev/sda1 /media/disk1
mount /dev/sda5 /media/disk5

sudo chmod +x /etc/init.d/automountd
sudo update-rc.d automountd defaults


Notes:
  • | หมายถึง หรือนะครับ
  • แต่ดีแฮะคือ เมื่อบูตระบบครั้งต่อไประบบมัน Mount ให้เลยอ่ะ
  • เมื่อทำตาม Post เนี๋ย drive WD ซึ่งอยู่ใน Places ก็จะหายไปนะ ถ้าอยากให้กลับมาเหมือนเดิมเราก็ต้องไปแก้ไฟล์ /etc/fstab กับคืนสู่สภาพเดิมของมันนะครับ
  • การ mount NTFS แบบนี้เมื่อเราเปิด /mnt/c หรือ d ด้วย nautilus เราไม่สามารถเปลี่ยนไฟล์ในนั้นได้นะเราต้องกระทำการด้วยสถานะรูทอ่ะ
  • จะยกเลิกก็ เปลี่ยนจาก mount เป็น umount นะ
  • งงอย่างการ mount ntfs ของ ubuntu ทำไม write ได้หว่า แต่ทำไม centos เรา write ไม่ได้ซะงั้น เป็นกับ kernel ปะเนี๋ย น่าจะใช่แน่เลยหว่า
Related Posts:
References:
  • Enviroment use Intrepid-Ibex (Ubuntu 8.10)

Convert integer 2 word in param crystal report

แปลงตัวเลขเป็นคำอ่าน

# นั่งแก้โค้ดเพื่อน เห็นเค้ารายงานบิลเค้ามีแปลงตัวเลขเป็นคำเลยเปิดดูสูตรของตัวแปรมันก็เป็นงี้อ่ะ

# ไม่รู้เหมือนกันว่าเพื่อนเค้าก๊อปโค้ดมาจากใหนนะครับ เครดิตให้เจ้าของโค้ดตัวจริงนะครับ ซึ่งไม่ทราบว่าคือคัย --'

# แต่ค้นหาด้วยกูเกิ้ลเห็นแต่โค้ด php เยอะเลยการแปลงตัวเลขเป็นคำอ่านอ่ะนะ



# คลิกขวาที่ Formula Fields => New... แล้วแปะโค้ดด้านล่างลงไป เปลี่ยนค่าตัวอักษรสีแดงเป็น field ตัวเลขซะ

Formula param in Crystal Report

stringVar array
D:= ["","สิบ","ร้อย","พัน","หมื่น", "แสน"];
stringVar array e:= ["หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก","เจ็ด","แปด","เก้า"];
stringVar array Mn;
stringVar array Ar1;
stringVar Arr;
numberVar F;
numberVar R;
numberVar j;
numberVar k;
numberVar u;
numberVar j2;
stringVar Bh;
numberVar F2;
numberVar j3;
numberVar u1;
numberVar m3;
stringVar Bh3;

Mn := "";
Bh3 := "";
stringVar sm:= replace(CStr(sum({Currency}),2,""),",","") ;
Ar1:=Split (sm,".");


F:= Len(Ar1[1]);
If F<=6 then Arr:=Ar1[1];
If F>6 and F<=12 then Arr:=Left(Ar1[1],Len(Ar1[1])-6)+":"+Right(Ar1[1],6);
If F>12 and F<=18 then Arr:=Left(Ar1[1],Len(Ar1[1])-12)+":"+ Mid(Ar1[1], F - 12 + 1, 6)+":"+Right(Ar1[1],6);

Mn:=Split (Arr,":" );
For j2:=1 to UBound (Mn) do (

F2:= Len(Mn[j2]);
For j:= 1 To F2 do (
If Mid(Mn[j2], j, 1) = "2" And F2 + 1 - j = 8 Then e[2]:= "ยี่";
If Mid(Mn[j2], j, 1) = "1" And F2 + 1 - j = 8 Then e[1]:= "";
If Mid(Mn[j2], j, 1) = "2" And F2 + 1 - j = 2 Then e[2]:= "ยี่";
If Mid(Mn[j2], j, 1) = "1" And F2 + 1 - j = 2 Then e[1]:= "";
If Mid(Mn[j2], j, 1) = "1" And F2 + 1 - j = 1 Then e[1]:= "เอ็ด";


For R:= 1 To 9 do (
u:= Val(Mid (Mn[j2],j,1));
If u = R Then Bh:= Bh + e[R] + D[F2 + 1 - j];
);
e[2]:= "สอง";
e[1]:= "หนึ่ง";
);

If j2 <> Ubound(Mn) Then Bh:= Bh + "ล้าน";
Mn[j2]:= Bh;
Bh:= "";
);

For j3:= 1 To 2 do (
If Mid(Ar1[2], j3, 1) = "2" And j3 = 1 Then e[2]:= "ยี่";
If Mid(Ar1[2], j3, 1) = "1" And j3 = 1 Then e[1]:= "";
If Mid(Ar1[2], j3, 1) = "1" And j3 = 2 Then e[1]:= "เอ็ด";

For m3:= 1 To 9 do (
u1:=Val(Mid(Ar1[2], j3, 1));
If u1 = m3 Then Bh3:= Bh3 + e[m3] + D[3 - j3];
);
e[2]:= "สอง";
e[1]:= "เอ็ด";

);

If Mn[1]<>"" and Bh3<>"" then
Join (Mn,"")+ "บาท"+Bh3 + "สตางค์"
Else If Mn[1]<>"" and Bh3="" then
Join (Mn,"")+ "บาทถ้วน"
Else If Mn[1]="" and Bh3<>"" then
Bh3 + "สตางค์"
Else
""

Note:
  • ไม่รู้เรื่องอ่ะบอกตรงๆ ดูโค้ดภาษาอื่นแล้วอ่ะยิ่งเป็นภาษาที่เรามะเคยแต่ะแล้วด้วย
  • ว่าจะลองเขียนด้วย java ดีกว่าเรา ใน narisa เห็นเค้าแนะอัลกอ เยอะเลยน่าจะง่ายๆ คิดว่านะต้องลอง
Related Links:
References:
  • get from my friend code in crytal report param
  • i am not sure original link of this code

Wednesday, January 28, 2009

Pass parameters to crystal reports

การเพิ่มค่าให้ crystal report ผ่านตัวโปรแกรมเราเลย

  • ปกติที่เคยเขียนนะ ส่วนมากจะ query เอาข้อมูลผ่าน db อย่างเดียว
  • พอดีแก้โค้ดเพื่อนส่งงาน เพื่อนเค้าไม่เคยบอกเราเลยนะเนี๋ย
  • เห็นเข้าเขียนชื่อรายงานบนหัว crystal report จากในตัวโปรแกรมเลยไม่ต้อง query เอา
  • เราก็พึ่งรู้วิธีจากโค้ดเค้าเนี๋ยอ่ะ ^^'

Go
  • ที่ crystal report คลิกขวาที่ Parameter Fields => New...
  • ใส่ชื่อให้ Param ที่ช่อง Name: เราซะนะ
  • จากนั้นก็ลาก param1 (เราใส่ Name: เป็น param1) ของเราไปวางใน report ซะ
  • ส่วนการใส่ค่าโค้ดใน c# ก็ประมาณนี้
adapter.Fill(ds);
ds.WriteXmlSchema(Server.MapPath(@"ReportXSD.xsd"));
ReportDocument rpt = new ReportDocument();

rpt.Load(Server.MapPath(@"Report.rpt"));
rpt.Database.Tables[0].SetDataSource(ds.Tables[0]);


........วางโค้ดหลัง SetDataSource กับ Load ตรงนี้แหละ ลองเรียบร้อย .........

CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
  • การใส่ค่าแบบแรกเราอ้างจาก index ของตัวแปร
  • ในที่นี้เราจะเพิ่มค่าใ้ห้ param1 ซึ่งมันต่อจาก ReportName ดังภาพบนสุดฉนั้น index มันต้องเป็น 1 เพราะถ้าเราใช้ index 0 มันจะเป็นของ ReportName
rpt.ParameterFields[1].CurrentValues.AddValue("Hello world");
//rpt.SetParameterValue(1, "Hello world");

# แบบที่สองเราสามารถอ้างได้จากชื่อมันเลย

rpt.ParameterFields["param1"].CurrentValues.AddValue("Hello world");
//rpt.SetParameterValue("param1", "Hello world");

// ไม่ต้องใส่เครื่องหมาย @ หน้า param นะจะบอกให้

References

Tuesday, January 27, 2009

Join table from 2 databases

Join ตาราง ระหว่างฐานข้อมูลสองก้อน

# เคยแต่ join ใน database ก้อนเดียวกันมะเคย join จากคนละก้อนสักกะที

# เลยถามเพื่อนเขียว อืมแล้วเค้าก็บอกว่า มันแค่ใส่ dbo ต่อจากชื่อ db นี่เอง ^^'

SELECT a.[field], b.[field]
FROM [db1].dbo.[table] AS a , [db2].dbo.[table] AS b
WHERE a.[field] = b.[field]

# อันแรกนี้ทดสอบบน MS SQL

SELECT * FROM db_1.tb inner join db_2.tb on db_2.tb.id = db_1.tb.id

# ต้องลองกับ MySQL ด้วยผลปรากฏว่าฉลุย ไม่เห็นต้องใส่ dbo เลยอ่ะ สงสัย dbo เป็น syntax ของ mssql มั้ง

เพิ่มเติม join ใน update statement

# นั่งงมตั้งสับสนกันชิบหายเลยคือ update join แบบ mssql และ แบบ mysql สับสนกันหมดแหละ

แบบ MySQL

update a inner join b on a.id = b.id
set a.name = 'somsak'

แบบ MSSQL

update a
set a.name = 'somsak'
from a inner join b on a.id = b.id

สังเกต
  • mysql จะไม่ใช้ from คือ จะ inner join ต่อ update table เลย

Notes:
  • ทำไม MSSQL update 2 table ใน statement เดียวไม่ได้หว่า ที่นี้ และ ที่นี้ เค้าว่ามา
  • แล้ว MySQL ทำไม update ใน statement เดียวกันเลยได้หว่า ตัวอย่าง ที่นี้เลย

References:

Visible desktop icons on desktop

เปิดไอคอน Computer, Home , Network, Trash บนโต๊ะทำงาน


# ถ้าเป็น M$ WD คลิกขวาที่ Desktop => Properties => Desktop => Customize Desktop

# แต่ถ้าเป็น ubuntu เราสามารถทำได้ผ่าน Ubuntu Tweak

# หรือไม่ก็ Gconf-editor

# จากเรื่อง 10 สิ่งควรทำ ใน ubuntuclub 1 สิ่งในนั้นคือ กำจัด partition icons

# ก็เลยได้เขียนอันนี้ขึ้นมา อืมแต่เท่าที่จำได้ คุณพี่มะระ เขียนไว้อยู่นะเรื่องนี้อ่ะ แต่หาบทความพี่แกไม่เจอครับ

Go



1. กด Alt + F2 แล้วพิมพ์ gconf-editor



2. จากนั้นเข้าไปที่ /apps/nautilus/desktop

3. เลือกเอาได้เลยว่าจะให้แสดงไอคอนอาไรบ้างบนโต๊ะทำงานของเรา

4. จบแหละ

References:

Find fastest download server in ubuntu

เปลี่ยน download mirror สำหรับ apt-get ให้เร็วถึงใจ

# จากบทความ 10 สิ่งควรทำหลังติดตั้ง Ubuntu

# อ่านสิ่งแรกก็ชอบอ่ะครับ คือ การเลือก mirror สำหรับติดตั้งโปรแกรมแบบเร็วที่สุดแล้ว

Go



1. เข้าไปที่เมนู System => Administration => Software Sources

2. Download from: ให้เราเลือกเป็น Other...



3. จากนั้นมองไปทางด้านขวา จะเห็น Select Best Server กดซะ



4. มันก็จะทำการทดสอบอาไรของมันก็ไม่รุ้ (pinging ซะงั้น) รอครับพี่น้อง

5. จากนั้นเมื่อป๊อปอัพ Testing download servers ปิดลงมันจะเลือก mirror ให้เรา

6. จากนั้นเราก็กดที่ปิด Choose Server

7. แค่นี้แหละ แต่จากที่ทดสอบไมเวลาทดสอบเล่นกด Select Best Server แต่ละครั้งมันไม่ค่อยจาเหมือนกันเลยอ่ะ ^^' สงสัยจะขึ้นอยู่กับเน็ตเรามากกว่าแฮะ


References:

How to close noise alert sound in ubuntu system

ปิดเสียงเตือนใน Intrepid-Ibex (Ubuntu)

  • เคยเป็นมะพี่น้องเวลาใช้ Terminal หรือ ปิดเครื่องมันจะ beep beep beep beep beep ไม
  • ปัญหามีอยู่ว่า อืมไม่รู้ว่าเป็นปัญหาเหมือนกันปะนะ แต่เราคิดว่าเป็นปัญหาที่น่ารำคาญมากสำหรับเรา
  • คือ เมื่อเราเปิด Terminal ขึ้นมาแล้วพิมพ์คำสั่งตามปะสาคนธรรมดาอ่ะนะ มันก็ต้องพิมพ์ผิดกันมั่ง
  • ก็ตามปกติวิสัยของมนุษย์เรา เมื่อผิดแหละก็อยากจะลบมันให้เร็วที่สุด ก็กด Backspace แช่ซะเลย
  • ทีนี้เมื่อมันลบหมดไม่มีอาไรจะลบต่อมันก็ร้อง Beep ............... ซะได้ยินไปทั่วห้องเลยอ่ะ - -'
  • ถ้าเราใส่หูฟังอัดหูแล้วด้วย อาจทำให้เสียสุขภาพหูเราเหมือนกันนะ
  • ก็ประมาณนี้อ่ะ เป็นเรื่องน่ารำคาญสำหรับเรามากเลย
  • ก็ไม่รู้ว่าจะหาที่ใหนเหมือนนะ สำหรับวิธีปิดมันอ่ะ เพราะตอนแรกก็ไม่รู้คิดว่าอาจเป็นที่เครื่องเราคนเดียว ^^'
  • เข้าไปใน ubuntuclub.com ลองค้นหาในบอร์ดก็มะเจอขี้เกียจต้องกระทู้ใหม่อ่ะครับกลัวเปืองพื้นที่กระทู้เค้า
  • ลองค้นหา article (ค้นมั่วไปเรื่อย) ไปเจอบทความของคุณพี่ มะระ remaster แห่ง club
  • 10 สิ่งควรทำหลังติดตั้ง ubuntu
  • 1 สิ่งในนั้นมีเรื่องที่เรากำลังหาอยู่พอดี ^^'

Go
1. เข้าไปที่เมนู System => Preferences => Sound



2. ที่ Play alert sound ไม่ต้องเลือกมันครับพี่น้อง หรือ ลองไม่ติ๊กที่ Play alerts and sound effects เลยน่าจะดีกว่านะคิดว่า ^^'

3. แค่นี้อ่ะ จบแล้วครับ ง่ายมากๆ อีกแหละ อาไรมันจะง่ายขนาดนั้นเนี๋ย

References:

Wednesday, January 21, 2009

How to config thai language for Gedit

ปัญหาระหว่างภาษาไทยกับ Gedit ใน linux (Ubuntu)
  • รู้ปัญหาตั้งนานแหละนะแต่ก็ไม่เคยหาวิธีแก้สักกะที
  • ก็เรื่องภาษาไทยกับ Gedit อ่ะนะ คือ ถ้าเราสร้างไฟล์ content ไทยกับ Gedit เลยมันก็ไม่มีปัญหาอ่ะ
  • แต่ถ้าเอาไฟล์ text มาจากเครื่องที่เป็น M$ WD ซึ่งถ้า content ในนั้นเป็น english ก็ไม่มีปัญหา
  • ปัญหาอยู่ที่ถ้าเนื้อหาไฟล์นั้นเขียนเป็นภาษาไทยอ่ะดิ Ubuntu เราไมอ่านเป็นภาษาต่างดาวซะงั้น
  • เห็นเค้าว่ามันเป็นเพราะ M$ WD เข้ารหัสภาษาไทยแบบ default คือ มันจะเป็น ANSI
  • ซึ่งใน Ubuntu Gedit มันจะมี Default เป็น UTF-8 ทำให้ Gedit อ่านไฟล์ภาษาไทยไม่รู้เรื่อง
  • บังเอิญมากเลยตอนเข้าไปที่ ubuntugeek พบบทความเเกี่ยวกับ gconf-editor
  • เลยลองค้นหา article ใน ubuntuclub ด้วยคำว่า gconf-editor
  • พบบทความมากมายหนึ่งในนั้นก็คือเรื่องปัญหาภาษาไทย กับ gedit นี้อ่ะ (แล้วมันเกี่ยวอาไรกันเนี๋ย)
  • นี่คือรูปปัญหา เห็นปะชื่อไฟล์ยังแสดงเป็นภาษาไทยได้ แต่ไม content มันแสดงเป็นภาษาต่างดาวอ่ะ
  • และนี่คือวิธีแก้ภาษาต่างดาว
  • Alt+f2 พิมพ์ gconf-editor (ลักษณะมันจะคล้ายๆ regedit ของ M$ WD อ่ะนะ)
  • ให้เราเข้าไปที่ /apps/gedit-2/preferences/encodings/
  • ดับเบิ้ลคลิกที่ auto_detected
  • เพิ่มคำว่า TIS-620 เข้าไป
  • แล้วก็เลื่อนมันให้ขึ้นไป ต่อ UTF-8 ซึ่งภาพมันอยู่บนสุด อันนี้ก็ใช้ได้แต่ ไม่แนะนำ
  • คือให้ UTF-8 อยู่บนสุดจากนั้นค่อยเป็น TIS-620 นะครับพี่
  • ไฟล์เราก็อ่านได้แหละ จบครับพี่น้อง

Note
  • ถ้าพิมพ์ gconf-editor แล้ว error เราก็ติดตั้งเค้าก่อนดิ
  • ถ้าเป็นฝั่ง base redhat ก็ yum install gconf-editor
  • base debian ก็ aptitude install gconf-editor

Refer

System.UnauthorizedAccessException

Acess to the path '...' is denied. (Web application)



# error ของวันก่อนดีนะเก็บไว้อยู่เลยได้มาเขียนใส่ log ตัวเองไว้

# วันก่อนนั่งเอาเว็บที่แก้เสร็จแหละ ขึ้น server และนั่งทำ virtual host สำหรับมัน

# พอลองรันเข้าระบบ อาไรต่างๆ ก็ใช้งานได้ไม่มีปัญหา

# แต่พอมาถึงจาทดสอบออกรายงาน คือ ใช้ crystal report เขียนแบบให้มันอ่านจาก schema อีกที

# แต่มันเขียน schema ลง server ไม่ได้อ่ะดิ มันเลยขึ้น error access denied ประมาณนี้

# ซึ่ง exception นี้มันก็บอก แจงวิธีแก้ไขซึ่งอยู่ในกรอบสีแดงนั้นแหละ


# ซึ่งเค้าเขียนแบบนี้อ่ะ

The grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropraiateuser or group. Highlight the ASP.NET account, and check the boxes for the desired access.

# เค้าบอกประมาณว่าให้เพิ่ม สิทธิ์ให้กับ user ชื่อ ASPNET หน่อยประมาณนั้น

# เราก็ทำตามประมาณที่เค้าบอกซะ

# คลิกขวาที่ directory ของ virtual web เราซะ เลือก Properties => เลือก tab Security

# ขั้นตอนนี้มั่วเอา ที่กรอบ Group or user names: เลือกที่ everyone (ที่จริงต้องเพิ่ม user ชื่อ aspnet แล้วเพิ่มสิทธิ์ต่างห่าง แต่หากเราตั้งที่ everyone เนี๋ย เหมือนเราทำ ^^' ค่อนข้างไม่ปลอดภัยอ่ะนะเนี๋ย ^^') ที่ Write ติ๊กซะให้มันเขียนได้

# มั่วๆ เอาแค่นี้อ่ะ แต่ก็มั่วมีหลักการนะ

# พอเลือก everyone แหละที่กรอบด้านล่าง Permissions for Everyone

# Allow ให้ Write ได้อ่ะ แค่นี้อ่ะ

# มั่วนะเนี๋ย แต่มันใช้ได้ก็เอาแหละ แต่คิดว่ามันคงสงผลต่อความปลอดภัยของเว็บน่าดู - -'

# ไม่ควรทำจริงๆ นะเนี๋ยคิดว่านะ เราควรเพิ่มเป็น asp.net user ดีกว่า อืมแต่ก็ไม่ปลอดภัยอยู่ดี

# ไปอ่านเจอที่บล็อคอาจารย์เราเอง (อ. M) เขียนไว้ถ้าเราไม่มีสิทธิ์ไปตั้งค่า permission ให้ folder ให้เราไปแก้ที่ไฟล์คอนฟิกอ่ะ

<identity impersonate=”true” />

# ใน web.config แค่นี้เอง ตัวเวบเราก็ไม่แคร์ User => ASP.NET และ Network Services แล้ว ถ้ากำหนดค่านี้เป็น True มันจะใช้ User => IUSR_ชื่อเครื่อง เป็นตัวรัน ASP.NET แทนก็จะสามารถ บันทึกไฟล์ลง Server ได้แล้วล่ะครับ

# รู้สึกว่าจะปลอดภัยขึ้นเยอะเลยนะ ขอบคุณ ท่านอาจารย์ เอ็ม มากเลย สำหรับบทความดีๆ ^^' ลอกมาแปะอย่างเดียวเลยเรา ^^'

# คิดว่าปัญหาน่าจะเป็นตัวเดียวกันนะ ไม่แน่ใจเหมือนกัน

Notes:
  • ทำไม M$ WD XP บางตัวมันไม่มี Securiy Tab หว่า แล้วไมบางตัวมีกำจริงๆ
  • เห็นใน XP Sp3 มี Security Tab นะ แต่เราใช้ sp2 ไม่เห็นเลยอ่ะ มันเกี่ยวกับ pack ด้วยมั้ยเนี๋ย
Related Links:
References:

Sunday, January 18, 2009

Command-line

บรรทัดคำสั่งพื้นฐาน

- สำหรับเราเอง เขียนไว้กันเหนียวเผื่อลืม
- อย่าเชื่อมาก ต้องลอง

What is command line ?
- One interface with linux os for linux user.

What is shell ?



Why should know command shell ?
- Can work on every linux distribution.
- Every nix base it's same command (little bit diff).
- Windows have a plan to change dos command to compatible with linux.
- Easy to work with.
- Any way, Command-line interface is faster (Comfirm by jui ^^' so really)

Terminal structure (teletypewriter)
- tty1 to tty7 (Desktop)
- By press Ctrl + Alt + F1 to F7

Linux file system
- in linux don't have drive every drive is folder
- / call "root" is top of directory in linux file system
- /bin : essential binaries
- /boot : static files of boot loader
- /etc : host specific system config
- /usr : shareable and read-only data
- /var : variable data files
- /sbin : system binary
- /tmp : temporary files delete on bootup
- /dev : location of special or device files
- /home : user home directory
- /lib : library and kernel modules
- /media : mount files
- /opt : add-on application software
- /root : home of root

Command prompt
- username@hostname:~$
- "username" is user in linux system
- "hostname" is computer name
- "~" working directory
- "$" is permission (and # for root)

Command-line pattern
- [command]
- [command] [option]
- [command] [option] [file or path]
- [command] [file or path] [option]
- [command] [option] [file or path] [file or path2]

Special path
- "." is current directory
- ".." is parent directory
- "~" is home directory

File of linux system
- File
- Hidden file
- Directory
- Link

Help for linux by
- "man"
- "--help"
### File command
$ ls -la             => directory listing with hidden files
$ cd dir             => change directory to dir
$ cd|cd ~            => change to your home
$ pwd                => print work directory for show current directory
$ mkdir dir          => create directory dir
$ rm file            => remove file
$ rm -r dir          => remove directory dir
$ rm -f file         => force remove file
$ rm -rf dir         => force remove dir
$ cp file1 file      => copy file1 to file2
$ cp -r dir1 dir     => copy dir1 to dir2, create dir2 if it doesn't exist
$ mv file1 file2     => rename or move file1 to file2 if file2 is an existing directory, moves file1 into directory file2
$ ln -s file link    => create symbolic link link to file
$ touch file         => create or update file time stamp
$ cat file           => output the content of file
$ cat > file         => places standard input into file instead text editor ^^' and stop by ^c (^ is ctrl)
$ cat file1 > file2  => copy content in file1 replace to file2 if files is an existing
$ cat file1 >> file2 => copy content in file1 append to file2 if files is an existing
$ more file          => output the content of file each page
$ less file          => output the content of file and can go to next or previous page
$ head file          => output the first 10 lines of file
$ tail file          => output the last 10 lines of file
$ div file1 file2    => output difference content between file1 and file2

### Searching
$ grep pattern files     => search for pattern in files
$ grep -r pattern dir    => search recursively for pattern in dir
$ grep ^pattern files    => search begin by pattern
$ command | grep pattern => search for pattern in the output of command
$ locate file            => file all instances of file

### Process management
$ ps               => display your currently active processes
$ ps -aux          => display any your currently processes
$ top              => display all running processes and change display every 1 sec
$ htop             => third party program same 'top'
$ kill pid         => kill process id pid
$ killall program  => kill all processes named proc (use with extreme caution)
$ bg               => lists stopped or background jobs; resume a stopped job in the background
$ fg               => brings the most recent job to foreground
$ fg n             => brings job n to the foreground
$ /etc/init.d/serv start|stop|restart|reload => for start stop service

### Shortcuts
$ Ctrl+C            => halts the current command
$ Ctrl+Z            => stops the current command, resume with fg in the foreground or bg in the background
$ Ctrl+D            => log out of current session, similar to exit
$ Ctrl+W            => erases one word in the current line
$ Ctrl+U            => erases the whole line
$ Ctrl+R            => type to bring up a recent command

### System info
$ clear|reset       => clear screen
$ echo pattern      => display pattern
$ time command      => use how long work with command
$ date              => show the current date and time
$ cal               => show this month's calendar
$ uptime            => show current uptime
$ w                 => display who is online
$ whoami            => who you are logged in as
$ finger user       => display information about user
$ uname -a|r        => show kernel information
$ cat /proc/cpuinfo => cpu information
$ cat /proc/meminfo => member information
$ man command       => show the manual for command
$ df                => show disk usage
$ du                => show directory space usage
$ free              => show memory and swap usage
$ whereis app       => show possible locations of app
$ which app         => show which app will be run by default

### Compression
$ tar cf file.tar files        => create a tar named file.tar containing files
$ tar xf file.tar              => extract the files from file.tar
$ tar czf file.tar.gz files    => create a tar with Gzip compression
$ tar xzf file.tar.gz          => extract a tar using Gzip
$ tar cjf file.tar.bz2         => create a tar with Bzip2 compression
$ tar xjf file.tar.bz2         => extract a tar using Bzip2
$ tar tf|tvf file.tar|.gz|.bz2 => display content in zip file
$ gzip file                    => compresses file and rename it to file.gz
$ gzip -d file.gz              => decompresses file.gz back to file

### Network
$ ping host            => ping host and output results
$ whois domain         => get whois information for domain
$ dig domain           => get DNS information for domain
$ dig -x host          => reverse lookup host
$ wget file            => download file
$ wget -c file         => continue a stopped download
$ ssh|telnet user@host => remote host
$ ftp|sftp host|user@host => remote ftp host
$ scp file user@host:path => copy file to remote host dont' forget (:) after remote host
=> scp file user@host ,incorrect ,it only copy file to file name user@host
$ scp user@host:file file => copy file from remote host

Example:
$ scp file1 user@somehost:/opt    => copy file1 to /opt of remote host
$ scp user@somehost:/opt/file1 ./ => copy file1 from remote host to current dir of local host

### Installation
$ Install from source:
./configure
make
make install

$ dpkg -i pkg.deb               => install a package (Debian)
$ dpkg -l                       => display installed package in system
$ dpkg -l program               => display program info

$ apt-cache search program      => for search program
$ apt-cache show program        => for show detail of prog and dependent library
$ sudo apt-get install program  => install program
$ sudo apt-get update           => update package repository
$ sudo apt-get upgrade          => upgrade program in system
$ sudo apt-get remove program   => remove program
$ sudo apt-get build-dep prog   => only install dependent package of program

$ rpm -Uvh pkg.rpm              => install a package (RPM)
$ rpm -ivh pkg.rpm              => same install package
$ rpm -evh pkg                  => erase package pkg

* option 'vh' for display percent while processing of command

### File permissions
$ chmod octal file  
=> change the permissions of file to octal
,which can be found separately for user,group
, and world by adding;

4 - read (r)
2 - write (w)
1 - execute (x)

Examples:
$ chmod 777              => read, write, execute for all
$ chmod 755              => rwx for owner, rx for group and world
$ chmod ugo+|-rwx        => u = owner, g = group , o = other
$ chown user.group file  => change to another user and group

For more options, see man chmod

### Forward output and something special
- ";" => run command finished can run command2 automatic by use ';'

Example:
$ chmod o+w file1 ; chmod o-rx file1

- "`" => is call 'backtrix' sinagure
Example:
$ passwd `whoami` => for change password current user logined
$ apt-get install linux-headers-lbm-`uname -r`-xen

$ !!    => repeates the last command
- "&&"  => same ";"
- "&"   => run program finished and can do any thing with that shell

Example:
$ gclctool &  => run calculator and can use that shell to any thing

- ">"   => forward output

Example:
$ ls -l > file1 => output of ls -l overwirte into file1 if exist file1

- ">>"  => forward output append

Example:
$ ls -l >> file1 => output of ls -l append into file1 if exist file1

- "\"   => use in long command

Example:
$ chmod o+w  file1 \
;chmod o-rx file1 \
;chmod o+rx file1

- "<"   => don't explain ^^' it reverse with ">"

Example:
$ mysql user < file1 =""> for check md5sum

- 0|1|2 => get type of output 1 is valid output, 2 is error output , 0 all output

Example:
$ ./configure 2> file => for get only error output into file

### Application and Utility
$ lsusb|lspci    => display device usb or pci type
$ fdisk          => display disk device
$ mount|unmount  => mount partition

Example:
$ mount -a       => mount all device in /etc/fstab

$ script file    => use record keylogger and press ^D for stop
$ ttyrec file    => third party program same 'script' it for record keylogger
$ ttyplay file   => display file so create by ttyrec
$ alias 'alias=command'  => for create alias instead long command

Example:
$ alias 'll=ls -l'

$ unalias alias  => cancel alias name

Example:
$ unalias ll

$ chroot => program for change eviroment for work

Sample chroot: when u use live cd if u must to use enviroment real system
Useful chroot: use chroot in live cd to correct real enviroment system but u must know path for config file

$ history  => for display all old command

### Administration tools
$ sudo|gksudo  => became to root and do it
note: edit permission sudo config file /etc/sudoers
$ su    => switch to root
$ sudo visudo  => can use this command only debian base

$ shutdown -h now|poweroff  => shutdown machine can can define time for shutdown by number minute instead "now"
$ shutdown -r now|reboot    => for reboot machine can define time for rebott

- setting ip /etc/network/interface
- setting dns /etc/network/resolve.conf
- cron , crontab

Example:
$ crontab -l => list task in cron of current user
$ crontab -e => for edit cron can see detail in wiki enter * 5 char , * is every day)
$ sudo crontab -e => crontab for superuser mode
note: if for some command need permission root , solve by crontab -e by sudo sample 'sudo crontab -e'

# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
*  *  *  *  *  command to be executed

Example:
$ crontab -e
* * * * * touch ~/test-cron.txt

$ sudo adduser|useradd user => add user i recommened 'adduser' it will be create home for user
$ sudo deluser user1        => remove user
note: u can check exist user by "ls /home"

### Text editor
- pico , nano
- vi stantdard editor in unix system
- searching      => default mode type '/word', press n|shift+n for find next and previous
- delete line    => default mode type 'dd'
- save file      => default mode ':w file'
- exit file      => default mode ':q!'
- save and exit  => default mode ':wq file'
- go to line     => default mode n+Shift+G => n is number of line to go
Note: '=>' = mean

Related Post:
References:

Thursday, January 15, 2009

Rid unnecessary files in linux by BleachBit

กำจัดไฟล์ที่ไม่จำเป็นออกจากระบบ linux โดย BleachBit.

# ก็แสวงหาอยู่นะโปรแกรมประเภทเนี๋ยบน linux อ่ะแต่ก็พึ่งเจอวันนี้อ่ะ
# ที่ ubuntugeek.com เค้าเขียนไว้ครับ
# ส่วนเว็บเจ้าของโปรเจคเค้าก็เขียนบรรยาย แต่เราอ่านมะรู้เรื่องอ่ะ ^^'
# bleachbit.blogspot.com อ่อนภาษาอย่างแรง
# BleachBit ถ้าจะให้เข้าใจง่ายๆเลยก็ คือ มันจะเป็นโปรแกรมประเภท CCleaner น่ะ
# ใช้กำจัดไฟล์ที่ไม่จำเป็นออกไปจากระบบให้เรา ไฟล์ขยะนั้นเอง เช่น temporaly ของ browser เป็นต้น

ขั้นตอนการติดตั้ง
1. เข้าไปที่เว็บเค้าเลย http://bleachbit.sourceforge.net/download.php แล้วก็โหลดตาม distro
2. ส่วนเราใช้ ubuntu ก็ .deb มา bleachbit_0.2.1-1_all_ubuntu810.deb ตาม version เลยอ่ะ
3. หรือ จะสั่งดาวน์โหลดผ่านบรรทัดคำสั่งก็
$ wget http://downloads.sourceforge.net/bleachbit/bleachbit_0.2.0-1_all_ubuntu810.deb
4. เมื่อโหลดไฟล์ .deb แล้วก็ double click มันเลย หรือบรรทัดคำสั่งก็
$ sudo dpkg -i bleachbit_0.2.0-1_all_ubuntu810.deb
5. ถ้าไม่มีอาไรผิดพลาดโปรแกรมมันจะอยู่ที่ Applications => Accessories => BleachBit

การใช้งาน
1. เข้าไปที่ Applications => Accessories => BleachBit คลิกซะ



2. จากนั้นมันจะถามเกี่ยวกับ software update ก็ Ok ซะ



3. จากนั้นก็เลือกว่าจะทำความสะอาดส่วนใหนกันบ้าง ตรงช่อง Active อ่ะ เลือกติ๊กตามสบายเลยอ่ะ



4. กด Delete มันก็จะขึ้นถามว่าจะลบ จริงๆ นะก็ Delete หรือ OK ซะ



5. เมื่อมันทำการเสร็จแหละมันก็จะบอกด้วยว่ามันลบไปแล้วจะได้พื้นที่ว่าเพิ่มขึ้นมาเท่าไหร่ หรือ ไฟล์ที่มันลบไปนะขนาดรวมทั้งหมดเท่าไหร่อ่ะนะ ซึ่งถ้ามันลบไปมากเราต้องเลื่อน ลงมาถึงจาเห็นนะครับ
6. แค่เนี๋ยแหละ ^^'

Referrences:

Monday, January 12, 2009

Backup All MS SQL Server Databases

Refer : Refactormycode.com
### โค้ดอันแรกนี้จะเป็นการแบ็คอัพทุกก้อนเลยถ้าชื่อฐานข้อมูลปกติก็ไม่มีปัญหา

Use Master

Declare @DatabaseName sysname
Declare @SQLCommand varchar(1024)
Declare curDBName Cursor For
Select [Name] From Master..Sysdatabases
Where [Name] Not In ('tempdb')

Open curDBName
Fetch curDBName Into @DatabaseName

While (@@fetch_status = 0)
Begin
if databasepropertyex (@DatabaseName,'Status') = 'online'
Begin
Select @SQLCommand = 'Backup Database ' + @DatabaseName +
' To Disk = ''D:\Backups\Databases\' + @DatabaseName + '.bak'' With Format'
execute (@SQLCommand)
End
Fetch curDBName Into @DatabaseName

End

Close curDBName
Deallocate curDBName

### Refractor above code to ใช้ระบุเฉพาะก้อนๆ ไป

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce (@ToExecute + 'Backup Database ' + [Name]
+ ' To Disk = ''D:\Backups\Databases\' + [Name] + '.bak'' With Format;'
+ char(13),'
')

From Master..Sysdatabases

Where [Name] Not In ('tempdb')
And databasepropertyex ([Name],'
Status') = 'online'

--Print @ToExecute
Exec (@ToExecute)

### Refractor above code to by juuier ^^'

Use Master

Declare @ToExecute VarChar(8000)

Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)

set @DatabaseName = '
ชื่อฐานข้อมูลที่ต้องการ backup'
set @PathTo = 'D:\Backups\samples\'

Select @ToExecute = Coalesce (@ToExecute + 'Backup Database ' + @DatabaseName
+ ' To Disk = ''' + @PathTo + @DatabaseName + '_backup_'
+ convert(varchar,year(getDate())) + '-'
+ convert(varchar,month(getDate())) + '-'
+ convert(varchar,day(getDate())) + '.bak'' With Format;'
+ char(13),'')

From Master..Sysdatabases

Where @DatabaseName Not In ('tempdb')
And databasepropertyex (@DatabaseName,'Status') = 'online'

--Print @ToExecute
Exec (@ToExecute)


Note: ดูเหมือนว่ามันจะมีปัญหากับ ชื่อ database ที่มีเครื่องหมายพิเศษนะเพราะมันขึ้นงี้อ่ะ

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '-'.

  • backup ฐานข้อมูลชื่อ db-1 ปัญหาคงคล้ายเรื่อง spacebar ในชื่อ
  • หรือ มันอาจ Command(s) completed successfully. แต่จะไม่มีการสร้างไฟล์ .bak อันนี้มันมั่ว - -'
  • แล้วมันจะแก้ไงล่ะเนี๋ย ^^' เอางี้ดีกว่าถ้าจะสร้าง Database ควรตั้งชื่อโดยใช้หลักเดียวกันกับชื่อ e-mail
  • ก็ใช้หลักการเดียวกับ การแก้เรื่องช่องว่า เช่นเมื่อเราสร้าง table ชื่อ table 1 ซึ่งมีช่องว่าคั่นกลางเวลาเราเขียนโปรแกรมจะมีปัญหาตอนเรียก table นั้น เราต้องเรียกในโค้ดเป็น [table 1]

set @DatabaseName = '[' + 'ชื่อฐานข้อมูลที่ต้องการ backup' + ']' -- แก้แบบนี้มันยังไม่หายเดื้องอ่

Select @ToExecute = Coalesce (@ToExecute + 'Backup Database ' + '[' +
@DatabaseName + ']' -- อันนี้อ่ะผ่าน ^^' ได้แหละ

####################################################################
### Final refractor above code to by juuier ^^' ok any database name

Use Master

Declare @ToExecute VarChar(8000)

Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)

set
@DatabaseName = 'ชื่อฐานข้อมูลที่ต้องการ backup'
set
@PathTo = 'D:\Backups\samples\'

Select @ToExecute = Coalesce (@ToExecute + 'Backup Database ' + '['
+ @DatabaseName + ']'
+ ' To Disk = ''' + @PathTo + @DatabaseName + '_backup_'
+ convert(varchar, year(getDate())) + '-'
+ convert(varchar, month(getDate())) + '-'
+ convert(varchar, day(getDate())) + '.bak'' With Format;'
+ char(13),'')

From Master..Sysdatabases

Where @DatabaseName Not In
('tempdb')
And
databasepropertyex
(@DatabaseName,'Status') = 'online'

--Print @ToExecute
Exec
(@ToExecute)

####################################################################

  • ลืมบอกไปอีกอย่างอันที่ backup (คำสั่งที่ refractor แล้ว) จะเป็นอบบ overwrite คือ มันจะเป็นการเขียนทับอ่ะนะ และ ถ้ามี ไฟล์ .bak อยู่แล้วมันก็จะสร้างไปทับไฟล์เดิม
  • ส่วนการ restore ไม่รู้อ่ะ แง๋ว ^^'
  • ถ้าเปรียบเทียบกับ Job ก็ไม่ต่างเท่าไหร่หรอกอ่ะ
  • Job มันก็คล้ายโปรแกรมเราที่เขียนขึ้นมาเพราะมันจะทำงานตามสคริปเราเหมือนเดิม
  • การใช้ Job backup ฐานข้อมูล Go


1. คลิกขวาที่ Jobs => New Job ...

2. มันจะได้ Dialog สำหรับกำหนดค่างานให้เรามองทางด้านซ้าย

General => ใช้ตั้งชื่อ และ กำหนดเจ้าของงาน
Steps => สร้างสคริปคำสั่ง
Scheduled => ตั้งเวลาการทำงาน



* Type เราสามารถเลือกรัน ไฟล์ประเภท bat, cmd หรือ exe ได้โดยเราเลือกเป็น CmdExec

3. เราไปดู Steps เราเลยดีกว่า Step name: ใส่ชื่อซะ และที่ Database: เลือก ชื่อ db ที่จะ backup ซะ

4. command: ให้เราเขียนประมาณนี้ สมมุติเราเลือก Database: เป็น ReportServer

BACKUP DATABASE ReportServer TO
DISK='D:\Backups\Databases\fullbackup.bak' WITH INIT

# หรือ จะใช้อันนี้คิดว่าน่าจะดีกว่านะ

Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)
Declare @Fullpath varchar(300)

set @DatabaseName = 'dbname'
set @PathTo = 'D:\database backups\'
set @Fullpath = @PathTo + @DatabaseName + '_backup_'
+ convert(varchar,year(getDate())) + '-'
+ convert(varchar,month(getDate())) + '-'
+ convert(varchar,day(getDate())) + '.bak'

BACKUP DATABASE @DatabaseName TO
DISK=@Fullpath WITH INIT

5. ตั้ง scheduled สำหรับเวลาทำงานของ Job

6. แค่นี้อ่ะ ง่ายมากๆ คิดว่าน่าจะดีกว่าที่จะมานั่งเขียนโปรแกรมเรียก สคริปอยู่นะ อืม แต่มันก็ไม่ต่างกันเท่าไหร่อ่ะ

เพิ่มเติม: เราสามารถ backup เป็นไฟล์เดียวก็ได้แต่ต้องทำแบบ append คือ จะไม่ลบข้อมูลก่อนหน้านี้ จะแยกกันตามวันเวลา backup แต่จะอยู่ในไฟล์เีดียวกัน แต่ไม่รู้ต้องใส่คำสั่งอาไรเพิ่มอีกอ่ะนะ ^^'

Example backup procedure

CREATE PROCEDURE [dbo].[BACKUP_PROCEDURE]
@backup_path varchar(50) = 'D:\Backups' -- path file bak
, @backup_name varchar(50) = 'sample' -- for bak name
, @database_for_backup varchar(50) = 'sample' -- database name for backup
AS
BEGIN

Declare @DatabaseNameForBackup varchar(50)
Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)
Declare @Fullpath varchar(300)

-- @DatabaseNameForBackup = @backup_name
set @DatabaseNameForBackup = @database_for_backup
set @DatabaseName = @backup_name
set @PathTo = @backup_path
set @Fullpath = @PathTo + @DatabaseName + '_backup_'
+ convert(varchar,year(getDate())) + '-'
+ convert(varchar,month(getDate())) + '-'
+ convert(varchar,day(getDate())) + '.bak'

BEGIN TRY

--BACKUP DATABASE @DatabaseName TO
BACKUP DATABASE @DatabaseNameForBackup TO
DISK=@Fullpath WITH INIT

print 'backup successed'

return 1 -- แจ้งการทำงานว่าสำเร็จด้วยดี

END TRY
BEGIN CATCH

print 'backup error'

return -1 -- สำหรับแจ้งการทำงานว่าล้มเหลว

END CATCH

END

Error ที่อาจพบ

Msg 3201, Level 16, State 1, Procedure BACKUP_PROCEDURE, Line 18
Cannot open backup device 'D:\backup.bak'. Operating system error 5(error not found).
Msg 3013, Level 16, State 1, Procedure BACKUP_PROCEDURE, Line 18
BACKUP DATABASE is terminating abnormally.

  • เมื่อเราทำการสร้าง procedure สำหรับ backup แล้วทำการเรียก procedure บางครั้งมันอาจเกิด error แบบนี้เมื่อเราทำการ execute procedure
  • น่าจะเกียวกับ permission อันนี้เดาเอาเอง ^^' ถ้าเกิด error ดังตัวสีแดงให้เราลองเปลี่ยน path สำหรับเก็บไฟล์ bak ใหม่ดู เช่น จาก error จะเห็นว่าเราบันทึกไฟล์ไว้ที่ 'D:\backup.bak'
  • ให้เราลองเปลี่ยน path เป็นที่อื่นเช่น sub folder ลงไปอีกอาไรประมาณนั้น 'D:\Backups\backup.bak' ต้องสร้าง Backups folder ไว้ด้วยล่ะ

Related Posts
References
  • MSSQL 2005

สรุปสั้นๆ ได้ใจความการ backup
-------------------- Easier -------------------

จริงแล้ว backup สั้นๆ แค่นี้ก็ได้

Backup Database [DatabaseName] to DISK='c:\BackupFile'

ถ้ามี BackupFile อยู่แล้ว จะเป็นการ append อ่ะนะเข้าใจตรงกันไม่ต้องกลัวว่าจะไปทับของเดิม
อีกอย่างควรเติมนามสกุล bak เพื่อบอกประเภทไฟล์ซะหน่อยเดียวงง ว่ามันไฟล์อาไรหว่า

-------------------- End easier ---------------
บทความที่คล้ายกัน

Friday, January 9, 2009

Google Chrome Tips and Trick

ทิปกูเกิ้ลโครม

# Chrome เนี๋ยก็ออกมาได้พักใหญ่แล้วอ่ะนะ beta หายไปแหละ
# แต่ก็ไม่ค่อยได้ไปคล่องแวะ กับเค้าสักเท่าใหร่ เลยไม่ค่อยสนใจเรื่อง chrome มาก
# แต่พอดีเอาโค้ดเว็บแอฟ คนอื่นเค้ามาแก้อ่ะนะ เลยลง chrome เล่นๆ ลองรันโค้ดที่เรานั่งทำลายดูว่าผลมันจะเหมือนกันกับ ie กับ ff ป่าว ผลก็โอนะ ยังไม่พบปัญหา สามารถทำงานได้ดีเช่นเดียวกับ ff เรา
# เมื่อได้แตะมันค่อนข้าง บ่อยสัก 2 ถึง 3 วันผ่านไป อยากรู้ว่ามันมีไร ที่ต่างจาก หรือ เจ๋งกว่า browser เจ้าอื่นมั่ง
# นั่งหาข้อมูลในอินเทอร์เน็ต สักหน่อยแล้วกัน สิ่งที่เจอก็น่าสนใจอ่ะนะ (ขี้เกียจมานั่งใช้แล้วสังเกตเองแย่อ่ะ)

1. อันนี้รู้ตั้งนานแหละเรื่อง Tab ว่าโพรเซสมันแยกกันอยู่แล้ว Tab ใหนเจ๊งก็ทำลายเฉพาะ Tab นั้น แต่ก็ไม่รู้ว่าเราจะรู้ได้ไงว่า Tab ใหนโพรเซส อันใหนเมื่อเราดูใน Windows Task Manager ที่แท๊ป Processes เพราะทุกแท๊บโพรเซสมันจะชื่อ chrome.exe ซะงั้น - -' โฮงี้ก็แย่ดิ

- แต่เดี๋ยวก่อน chrome เค้าก็มี Task Manager ของเค้าเองโดยคลิกขวาแถวเค้าเรียกว่าไรล่ะ ^^' ตรงที่ใกล้ปุ่ม minimize , maximize อ่ะนะใน ie หรือ ff เค้าเรียกว่า title bar อ่ะแต่ใน chrome เค้าเอา Tab ไปวางแถวนั้นเลยมะรู้จาเรียกมันเหมือนกะ เค้าได้ปะ



- คลิกที่ Task Manager ซะ
- หรือเปิด task manager ของ Chrome อย่างง่ายเลยก็ Shift + esc



- มันก็จะขึ้นลิสให้เราว่ามี tab ไรบ้างแล้วก็บอก ชื่อเว็บของแต่ละ tab ด้วยล่ะ เมื่อเรารู้ว่าเราเข้าเว็บใหนแล้วมันเดื้องเราก็ทำประมาณนี้ แล้วก็คลิกเลือกที่ มันแล้วก็ End process อ่ะสุดยอดจริงๆ ความสามารถเนี๋ยนะ
- ซึ่งเราว่า ff สู้เค้าไม่ได้เลยส่วนเนี๋ย ไม่แน่ ff 4 อาจจะเป็นแบบ chrome มั่งก็ได้เพราะ chrome ก็เอาความสามารถของ add-on บางตัวใน ff มา buit-in ให้ตัวมันอ่ะ

2. พูดถึงเรื่อง google chrome นำความสามารถแบบ add-on บางตัวใน ff มาใช้ ก็เลยอยากจะเขียนถึงเรื่องนี้ซะหน่อย ไอ้ตัว add-on นั้นก็คือ ปริซึ่ม(โปรเจค add-on ชื่อ PrismforFirefox ซึ่งคาดว่าจะ buit-in บน ff ในอนาคต อ่ะ) ซึ่งมันก็คือ สร้าง บราวเซอร์สำหรับ url นั้นๆ โดยเฉพาะและ ตัดพวก bar ต่างๆ ออกไปจนหมดจน เว็บนั้นดูคล้าย application บนระบบเลยล่ะ (RIA = Rich Internet Application)

ตัวอย่าง:
- สมมุติเราต้องการทำ Gmail ให้เป็นเหมือน Application ซึ่งจะทำไอคอนไว้บน Desktop ด้วย
- เปิด Gmail.com ใน chrome จากนั้น คลิกที่รูปคล้ายๆ กระดาษข้างรูปปะแจอ่ะ



- คลิกที่ Create application shortcuts...
- เลือกว่าเราต้องการสร้าง shortcut ไปไว้ที่ใหนบ้างในระบบเรา



- เมื่อเราคลิกที่ ไอคอน Gmail ที่เราได้สร้างไว้มันก็จะขึ้นหน้า Gmail มาให้ซึ่งหน้านั้นจะตัด bar ต่างๆ ออกทำให้หน้าตัว บราวเซอร์ดูคล้าย Application เลยอ่ะ


- อันนี้เป็น Add-on FF ชื่อ Refractor for Prism สำหรับ FF 3+

3. อยากเสริมอีกเรื่อง Ctrl + Shift + N หรือเราไปที่รูปปะแจที่อยู่ถัดจากรูปกระดายด้านบนขวาอ่ะ คลิกมันจะพบคำว่า New incognito window ก็คลิกมันได้เหมือน ซึ่งคีย์ลัดมันก็ Ctrl + Shift + N นั่นแหละ



- คิดว่ามันไม่น่าจะเหมือนกับ Safe mode ของ FF นะเพราะ เท่าที่ใช้ Safe mode ของ FF มันจะคล้ายการเข้า Safe mode ของ windows อ่ะ คือ มันจะไม่โหลด add-on ที่เราติดตั้งเลย แต่อันอื่นไม่รู้นะไม่ได้สังเกต
- แต่ incognito window ของ chrome เนี๋ยจะเป็นแบบ pivacy policy มากกว่าคือ เมื่อเราเข้าเว็บด้วย incognito window และเมื่อปิดมัน มันจะทำลาย history ทั้งหมดรวมทั้ง cookies ต่างๆ ด้วยล่ะ
- incognito window ของ google chrome ก็เป็น feature ที่น่าใช้เหมือนกันนะ ไม่แน่ใจว่า Safe mode ของ FF จะคล้ายแบบนี้ป่าว หรือ FF จะมี add-on เสริมสำหรับเรื่องนี้หว่า อันนี้ก็ไม่รู้

4. ส่วน Shortcut อื่นๆ ก็ดูใน Menu มันอ่ะเยอะเลย เลือกใช้อันที่น่าใช้อ่ะ สำหรับเราแค่นี้พอ

Note:
  • แต่ใน blognone เค้าบอกว่ามันยังมีปัญหาเรื่องภาษาไทยอยู่ เช่น "ก็" เมื่อเรากด Delete มันก็จะลบทั้งไม้ไต่คู้ และ กอไก่
  • จะเห็นได้ชัดตอนใช้ Chrome แก้บล็อคเนี๋ยอ่ะ (ภาษาไทยนะ)
  • เราว่า IE กับ FF เวอร์ชั่นหน้าๆ ต้องเลืียนแบบไอ้พวกนี้แน่เลย ^^'
  • ใครลอกใครกันหว่า มั่วไปหมด

Popular Posts