<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 น. |
|
|
|
โดย: niku...Chun IP: 203.144.188.250 วันที่: 29 พฤษภาคม 2551 เวลา:17:14:31 น. |
|
|
|
โดย: loun IP: 202.144.185.210 วันที่: 30 กรกฎาคม 2552 เวลา:17:10:02 น. |
|
|
|
โดย: TOOM IP: 124.122.121.213 วันที่: 19 กันยายน 2552 เวลา:14:53:45 น. |
|
|
|
|
|
|
|
|
| 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | |
|
|
|
|
|
|
|
|
|
แต่ไม่เข้าใจเท่าไรค่ะ
โง่คอมพ์