พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

ท่านใดพอมีแนวทางเรื่อง backup database sql server สั่งงานโดยใช้ Vb.net

+3 votes
ครับที่ผมรู้คือการ Copy ง่าย ๆ แต่ถ้าสั่งจาก VB มันต้องสั่ง Stop services ด้วยรึป่าว

หรือท่านใดมีแนวทางแบบไหนบ้างครับ

ขอบคุณครับ
ถามเมื่อ May 22, 2012 in VB.Net โดย Szeretet You (252 คะแนน)
   

1 Answer

+1 vote

 

การสั่งให้ DBMS ทำการ backup และ restore ทำได้โดยการส่ง SQL statement ที่ถูกต้องไปให้
 
อาจจะส่งประโยค SQL ดังกล่าว ไปโดย Command.ExecuteNotQuery() ของ .Net
หรือ ConnectionObject.Execute SQLStatements ของ ADO ก็ได้
 
ทีนี้ คำสั่ง SQL ดังกล่าว คนที่ไม่ได้เป็น Database Administrator 
คงไม่ได้จำ syntax ได้ขึ้นใจแน่ วิธีการของผมก็คือ เปิด Enterprise Manager
แล้วทำขั้นตอนการ Backup (หรือ Restore) โดยใช้ Menu และ Wizard
แต่เมื่อถึงขั้นตอนสุดท้าย ให้บันทึกเป็น Schedule task จากนั้นให้ไปเปิดส่วน
Management --> SQL Server Agents --> Jobs 
คลิกขวาที่ Job ที่ถูกสร้างขึ้น เลือกเมนู Property
จากนั้นคลิกที่แท็บ Steps เลือกงาน แล้วคลิก Edit
 
ตัวอย่างการสร้าง jobs เพื่อทำการ backup ฐานข้อมูล tempdb 
ผมได้ SQL ดังนี้


BACKUP DATABASE [DatabaseName] TO DISK = N'C:[i]DatabaseName.backup' WITH INIT , 
NOUNLOAD , NAME = N'DatabaseName backup', NOSKIP , 
STATS = 10, NOFORMAT 



ส่วนโค้ด Visual Basic .Net
จะได้ตัวอย่างดังนี้

 

        Dim cmd As OleDb.OleDbCommand
        Dim strSQL As String

        strSQL = "BACKUP DATABASE [MyDatabase] TO  DISK = N'C:\MyDatabase.backup' WITH  INIT," _
            & " NOUNLOAD,  NAME = N'MyDatabase backup', " _
            & " NOSKIP ,  STATS = 10,  NOFORMAT "

        Try
            ' ---- ได้วางคอนโทรล OleDbConnnection ตั้งชื่อว่า cn 
            ' ---- แล้วกำหนด ConnectionString ไปยัง SQL Server หรือ MSDE เรียบร้อยแล้ว
            cn.Open()
            cmd = New OleDb.OleDbCommand(strSQL, cn) 
            cmd.ExecuteNonQuery() ' ---- ส่ง SQL statement ไป execute ที่เซิร์ฟเวอร์
            MsgBox("Backup OK.")

        Catch ex As Exception
            MsgBox(ex.Message)
            MsgBox("Backup Failed.")

        Finally
            cn.Close()
        End Try

 


ส่วนคำสั่งในการRESTORE เป็นภาษา T/SQL อย่างง่ายๆ 
ลองดูและนำไปประยุกต์ใช้งานครับ

RESTORE DATABASE TestDB 
FROM DISK = 'c:\Northwind.bak'

 
ทีนี้การ restore มันมีเงื่อนไขอยู่อย่างหนึ่ง คือ ต้องไม่มี user ใช้งาน database นั้นๆอยู่ครับ
ถ้ามีคนใช้งานอยู่ Database มันจะไม่สามารถ restore ได้ จะเกิด error 3101
ดังนั้น    1. คุณต้องมั่นใจว่าไม่มีคนใช้งาน database อยู่ (ไม่งั้นโดน user โวย เพราะกำลังทำงานอยู่)
                1.1 กรณีนี้จะให้ดีคือคุณบอก user ให้ออกจากโปรแกรมก่อน
                1.2 เสร็จแล้วคุณก็สั่ง เตะ user ที่ค้างอยู่ออกไป อันนี้ทำได้หลายวิธี อาจจะสั่งผ่าน store procedure ก็ได้ 
            2. ตัวคุณเองก็ตัองไม่ใช้ database ด้วย (ตอนลองผมก็ error เพราะว่าดันไปสร้าง Connection ที่ Initial Catalog เป็น database ตัวที่เราอยาก restore เท่ากับว่า ผม lock database ไว้ด้วยตัวเองซะงั้น - แนะนำว่าให้ set initial catalog เป็น master)
 
อย่าลืมทดสอบคำสั่งต่างๆ กับฐานข้อมูลสำหรับการทดสอบก่อนนำไปใช้งานจริง
 
 
 
ที่มา โดยคุณ surrealist และ jnithi จาก http://www.greatfriends.biz/webboards/msg.asp?b=SURREALIST&id=6027
 

หรือศึกษาเพิ่มเติมได้ที่ http://www.bloggang.com/mainblog.php?id=jnithi&month=11-10-2007&group=1&gblog=6

 

 

ตอบเมื่อ May 22, 2012 โดย HuaNaa (455 คะแนน)
ขอบคุณครับผม

Related questions

+4 votes
1 คำตอบ
1,742 views ถามเมื่อ May 5, 2012 in Software โดย beebrabie (106 คะแนน)
+3 votes
1 คำตอบ
364 views ถามเมื่อ Apr 23, 2012 in Network-Server โดย anonymous
+2 votes
1 คำตอบ
0 votes
1 คำตอบ
794 views ถามเมื่อ Jul 4, 2012 in C# โดย Sitthichai Nooyang (496 คะแนน)
...