โปรแกรมมั่ว พ่อลูกอ่อน
<VB.Net>โค้ด Restore SQLServer

จากบทความที่แล้วเราสามารถทำการ backup database ออกมาเป็น file ทีนี้ถ้าเราต้องการทำ restore ละ ก็ใช้ T-SQL เหมือนเดิม ลองดู syntax กันก่อนครับ

RESTORE DATABASE { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
[ RESTRICTED_USER ]
[ [ , ] FILE = { file_number | @file_number } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] KEEP_REPLICATION ]
[ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] REPLACE ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]


จะเห็นว่ามันมี option เยอะแยะเลย รายละเอียดของ option ไปดูใน Online book นะครับ ในตัวอย่างผมจะทำการ Full Recovery

สำหรับการ Restore มันมีจุดสำคัญคือ ต้องไม่มี user ใช้งาน datbase ครับ
ดังนั้นก่อนจะทำการ restore ให้บอก user ที่ใช้งานให้ออกไปก่อน (เราสามารถใช้ store procedure ดูรายชื่อคนที่ใช้งาน database อยู่ครับ แล้วจะให้ดีในโค้ดเราควรจะเตะ user ที่ใช้งานอยู่ออกไปด้วย เพื่อความปลอดภัย


ก่อนอื่นผมจะไปสร้าง table ใหม่ใน Northwind ก่อน สมมติชื่อ table1 จากนั้นก็ backup เป็นไฟล์ชื่อ mybackup.bak เมื่อ backup เสร็จแล้วก็ทำการ drop table1 ทิ้งไปครับ เดี๋ยวเราจะลอง restore database ถ้าผ่าน table1 ก็จะกลับมาหาเราอีกครั้ง

เอาละ หายไปเรียบร้อยแล้วครับ

คราวนี้มาดูโค้ดกันบ้าง จากบทความที่แล้วเราได้สร้างปุ่มเผื่อไว้แล้วชื่อ btnRestore

Private Sub btnRestore_Click(ByVal sender
As System.Object, ByVal e
As System.EventArgs) Handles
btnRestore.Click

    Dim
strSQL As String
    Dim
strCon As String
    strCon = "Data Source=NITHI;Initial Catalog=master;Integrated Security=True"
    Dim cmdRestore As SqlClient.SqlCommand = New SqlClient.SqlCommand
    SqlConnection1.ConnectionString = strCon
    SqlConnection1()
    cmdRestore.Connection = SqlConnection1
    Cursor = Cursors.WaitCursor
    Try
        strSQL = "ALTER DATABASE Northwind SET SINGLE_USER"
        cmdRestore.CommandText = strSQL
        cmdRestore.ExecuteNonQuery()
        strSQL = "RESTORE DATABASE Northwind "
strSQL &= "FROM DISK = 'C:\mybackup.bak' "
cmdRestore.CommandText = strSQL
        cmdRestore.ExecuteNonQuery()
        MsgBox("finish")
    Catch ex As Exception
        MsgBox("Error")
    Finally
strSQL = "ALTER DATABASE Northwind SET MULTI_USER"
        cmdRestore.CommandText = strSQL
        cmdRestore.ExecuteNonQuery()
    End Try
Cursor = Cursors.Arrow
    SqlConnection1.Close()
    cmdRestore.Dispose()
    cmdRestore = Nothing
End
Sub

จุดสังเกตุ
1. ใน Connection String ผมกำหนด Initial Catalog เป็น master (คือจริงๆเป็น database ตัวไหนก็ได้ที่ไม่ใช่ตัวที่เราต้องการ restore) ถ้าเรากำหนด Initial Catalog เป็น Northwind ก็เท่ากับว่าเรากำลังล๊อก database ด้วยตัวเองครับ (ผมก็เป็น กว่าจะรู้ตัว error ไปแล้ว)
2. ผมเลือกใช้คำสั่ง ALTER TABLE เพื่อ SET SINGLE_USER เพื่อกัน user อื่นออกจาก database
3. รันคำสั่ง Restore เสร็จแล้วก็อย่าลืม SET กลับเป็น MULTI_USER นะครับ
4. เนื่องจากบางครั้งกระบวนการ restore มันจะนานก็เลยสั่งให้เปลี่ยน cursor จะได้บอกให้ user รู้ว่ายังทำงานไม่เสร็จนะจ๊ะ


ลองรันโค้ดดูครับ
จะเห็นว่าระหว่างทำงาน Database จะเปลี่ยน mode เป็น Single User
เสร็จการ restore
Table1 กลับมาแล้ว การ restore ประสบผลสำเร็จ




Create Date : 12 ตุลาคม 2550
Last Update : 12 ตุลาคม 2550 0:08:40 น. 5 comments
Counter : 1093 Pageviews.

 
เข้ามาดู
แต่ไม่เข้าใจเท่าไรค่ะ

โง่คอมพ์


โดย: โสดในซอย วันที่: 12 ตุลาคม 2550 เวลา:1:31:58 น.  

 
เยี่ยมครับ


โดย: nano IP: 202.91.19.204 วันที่: 19 ธันวาคม 2550 เวลา:19:41:47 น.  

 
อยากถามนิดหน่อยอ่ะค่ะ

คือตอนนี้ทำโปรเจคอยู่

แล้วต้องการใช้ ActionFlag หลาย ๆ ตัวใน Form เดียวโดยที่จะมีหลาย Tab มน Form นี้
เลยอยากทราบว่าใช้ได้มั้ย หรือว่าต้องประกาศค่าตัว SqlCommand ยังไง
คือ ลองทำไปแล้ว แต่ว่า มันใช้ไม่ได้ค่ะ รบกวนช่วยตอยหน่อยนะค่ะ

ยังไงก็ติดต่อมาที่ nikujung_xxx@hotmail.com ก็ได่ค่ะ จะขอบพระคุณมาก ๆ


โดย: niku...Chun IP: 203.144.188.250 วันที่: 29 พฤษภาคม 2551 เวลา:17:14:31 น.  

 
I want to ask on time me restore my database but I'm using program connect with it. How will I write code ? (for VB 2005 connect SQL server 2005)


โดย: loun IP: 202.144.185.210 วันที่: 30 กรกฎาคม 2552 เวลา:17:10:02 น.  

 
โค้ดปุ่มSAVE VB.NET + SQL 2005 ใครรู้มั่งค่ะ


โดย: TOOM IP: 124.122.121.213 วันที่: 19 กันยายน 2552 เวลา:14:53:45 น.  

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

นายจวบ
Location :
กรุงเทพฯ Thailand

[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 2 คน [?]




โปรแกรมมั่ว พ่อลูกอ่อน
Group Blog
 
<<
ตุลาคม 2550
 123456
78910111213
14151617181920
21222324252627
28293031 
 
12 ตุลาคม 2550
 
All Blogs
 
Friends' blogs
[Add นายจวบ's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.