Thaiadmin

Serve Zone => Database => ข้อความที่เริ่มโดย: Fz40 ที่ 4 พฤษภาคม 2007, 14:51:30

หัวข้อ: [กรณีศึกษา] มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: Fz40 ที่ 4 พฤษภาคม 2007, 14:51:30
  :) จาถามเกี่ยวกับการวางแผนการ backup และ restore ครับ เนื่องจากผมมีการ backup ในหนึ่งวันจะมีการ backup full ตอนเช้า 1 ครั้ง  backup log ทุก ๆ 1 ชั่วโมง และ backup dif ตอน 4 โมงเย็น อีกครั้ง แล้วเวลาผม restore ไปที่เครื่องสำหรับ test ผมก็ต้องเอา file backup full ซึ่งมีขนาดใหญ่ 45 GB มาลงทำให้เวลาในการ restore นานมาก ประมาณ 9 ชั่วโมงครับ บนเครื่อง PC (เขาให้เครื่องมาเป็นอย่างนี้ครับ) ที่ผมมีคำถามคือ ทำอย่างไรถึงจะ restore ต่อจากที่เราเคย restore มาแล้วครับ ซึ่งการ restore จาห่างกันประมาณ 1 เดือน แบบ ถ้าวันนี้เราเอา full มา restore แล้วเอา dif มาลงต่ออีก พอวันรุ่งขึ้น เราจะเอาแต่ dif มาลงต่อได้ไหมครับ (ความคิดผม ๆ ว่ามันไม่น่าจะได้เพราะมันมี full มากั้น แต่ไม่แน่ใจครับว่าเข้าใจถูกหรือเป่า)
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: SamaKitty VB ที่ 4 พฤษภาคม 2007, 16:20:17
ผมก็มีปัญหาเหมือนกันล่ะครับ เพราะว่า ทดลอง เอา Full มารีสโตร์ แล้วตามด้วย Log หรือ Diff  มันไม่ยอมอ่ะ

ที่ทำไว้ที่
http://www.thaiadmin.org/board/index.php?topic=16494.0

นั่นก็ เป็นแค่ ทดลอง แค่ Full Backup แต่ไม่ได้ทดสอบการ รีสโตร์ แล้วตามด้วย LOG หรือ Diff
ที่ผ่าน ก็แค่ Restore จาก Full Backup

ตอนนี้ ที่ใช้งานจริง ก็ ทำแค่ Full Backup  ทุกๆ 3 วัน และ ทุกๆ ชั่วโมง จะ Backup Transaction Log
ตามที่เป็นกรณีศึกษา ใน
http://www.thaiadmin.org/board/index.php?topic=28805.0

แต่ เวลา Restore เข้าจริงๆ กลับ Restore ไม่ได้ซะเฉยเลย   เฮ้อออ
เดี๋ยวไว้มีเวลา จะหาทางแก้ปัญหาที่เกิดนี้อีกที  เผื่อ เหตุการณ์ไม่คาดคิด
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: insanity ที่ 4 พฤษภาคม 2007, 20:56:40
จาก Book Online นะครับ

"A differential backup records only the changes made to the data in the database after the last full database backup."

ดังนั้น คุณ Fz40 ถูกต้องแล้วครับ ทำแบบที่คุณว่า เอา  differential database backup มา restore ต่อ ๆ กันไม่ได้

ซึ่งถ้าคุณต้องการทำ warm standby server หรือ ต้องการเอา backup มา restore เพื่อเผื่อเอาไว้กรณี database จริงมีปัญหา จะได้นำเอาตัว standby server มา online เพื่อใช้งานแทนได้ทันที ก็สามารถทำดังนี้ได้ครับ

1. restore ตัว database backup ที่เป็น full
2. restore transaction log ที่ได้ backup เอาไว้ ตามลำดับไฟล์ต่อ ๆ ไปเรื่อย ๆ

แต่ database ใน warm standby server นี้ อาจจะไม่สามารถใช้งานได้ หรือ ใช้งานได้แค่ read only ซึ่งขึ้นกับ option ในการ restore ที่เลือกเอาไว้ ลองสังเกต option ในหน้าจอ restore ดูนะครับ จะมี
- leave database operational. No additinal transaction logs can be restored.
   ซึ่งหมายถึง restore เสร็จแล้ว ให้ database online พร้อมใช้งานได้เลย จึงทำให้ไม่สามารถนำ log ไฟล์ต่อไปมา restore ต่อไปได้ ซึ่งก็คือ with recovery หรือ
- leave database nonoperational but able to restore additinal transaction logs
   หมายถึง restore แล้ว ยังไม่ online ให้ รอเอา transaction log backup ตัวต่อ ๆ ไปมา restore ต่อ ซึ่งก็คือ with norecovery หรือ
- leave database read-only and able to restore additinal transaction logs
   หมายถึง restore แล้ว ให้ read-only และ รอเอา transaction log backup ตัวต่อ ๆ ไปมา restore ต่อได้ ซึ่งก็คือ with standby

ดังนั้น ถ้าจะ restore transaction log ต่อ ๆ กัน หลาย ๆ ไฟล์แล้ว เลือกได้แค่ option 2 หรือ 3 นะครับ จนถึงครั้งที่ restore transaction log ตัวสุดท้ายแล้ว จึงค่อยเลือก option ที่ 1 เพื่อให้ databae online กลับเข้ามา

ดูคำสั่งที่เป็น command line นะครับ สมมติว่ามี backup เช่น
1. nwind_tlog1400.trn                    เวลา 14.00 น.  
2. nwind_fullbackup.bak             เวลา 15.00 น.
3. nwind_tlog1600.trn                    เวลา 16.00 น.  
4. nwind_tlog1800.trn                    เวลา 18.00 น.  
5. nwind_tlog2000.trn                    เวลา 20.00 น.  

การเอา backup เหล่านี้ มา restore เพื่อใช้เป็นตัวทดสอบ หรือ จะใช้เป็น standby server ก็แล้วแต่สามารถทำได้ดังนี้
1. restore ตัว full ก่อน โดย

restore database NorthWind
from disk = 'c:\nwind_fullbackup.bak'
with norecovery      --  <-- with norecovery เพราะจะ restore transaction log ต่อ
go

2. restore transaction log backups ต่อ ๆ ไป

restore log Northwind
from disk = 'c:\nwind_tlog1600.trn'
with norecovery      --  <-- with norecovery เพราะจะ restore transaction log ต่อ
go

restore log Northwind
from disk = 'c:\nwind_tlog1800.trn'
with norecovery      --  <-- with norecovery เพราะจะ restore transaction log ต่อ
go

restore log Northwind
from disk = 'c:\nwind_tlog2000.trn'
with recovery     --  <-- with recovery แล้ว เพื่อให้กลับมา online
go

( หมายเหตุ คำสั่งยังไม่ได้ test นะครับ ขอโทษที )

จะเห็นว่าในการ restore transaction log backup ครั้งสุดท้าย จะต้องใช้ option with recovery เพื่อนำ database ให้กลับมา online พร้อมใช้งาน   ลองสังเกตตัวก้อน database หลังจากที่ restore แต่ะลขั้นนะครับ มันจะยังเป็นสีเทาอยู่ จนขั้นตอนสุดท้าย


* สำหรับ การนำเอา transaction log backup มา restore ต่อ ๆ กันไป เพื่อให้ได้ warm standby server นั้น  นอกจากใช้ with norecovery ตามตัวอย่างแล้ว ยังสามารถเลือกใช้ option with standby ก็ได้ ซึ่งข้อดีของ option with standby ก็คือ ตัว warm standby server นี้จะเป็น read only ซึ่งอาจจะนำไปใช้งานในการ run report ที่ไม่ต้องการข้อมูล update แบบ realtime ได้
   ( เรื่อง with standby จะมีรายละเอียดเกี่ยวกับ undo file อีกนิดหน่อย ดูเพิ่มได้จาก book online )

** หลักการทั้งหมดนี้ จะคล้ายกับ feature หนึ่ง ของ SQL Server Enterprise Edition ที่เรียกว่า log shipping ซึ่งก็คือ การ synchronize database ปลายทาง ให้เหมือนกับ database ต้นทาง โดยวิธีการส่ง transaction log ไปยังปลายทาง  สำหรับรายละเอียดวิธีการ config สามารถอ่านเพิ่มเติมได้จาก book online ครับ 

*** ใน SQL2000 Resource Kit จะมี ตัวอย่างหนึ่ง เรียกว่า  Simple Log Shipper (SLS) ซึ่งจะมีรายละเอียด พร้อม stored procedure มาให้พร้อมใช้งานสำหรับกรณีที่คล้าย ๆ กับที่เป็นตัวอย่างข้างต้นนี้ เพื่อทำ warm standby server ที่เป็นแบบ read-only

พอแค่นี้ก่อนละกัน เมื่อย  ^-^

หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: Fz40 ที่ 5 พฤษภาคม 2007, 13:23:08
ขอบคุณครับ พี่ insanity ที่ให้ความรู้ แล้วถ้าผม restore ของวันต่อไปก็ต้องเริ่มใหม่ที่ full เหมือนเดิมใช่ไหมครับ ไม่สามารถเอาแต่ log มาต่อได้  ส่วนพี่ VB NeverDie ; ) ก็คงได้คำตอบแล้วดิครับ ว่าทำไมมัน restore log ไม่ได้   :)  คำตอบเดียวได้ถึง 2 คำถาม สุดยอกครับ (ไม่ทราบว่ารับลูกศิษย์ไหมครับ  :)) 
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: SamaKitty VB ที่ 5 พฤษภาคม 2007, 13:36:13
ขอบคุณครับ พี่ insanity ที่ให้ความรู้ แล้วถ้าผม restore ของวันต่อไปก็ต้องเริ่มใหม่ที่ full เหมือนเดิมใช่ไหมครับ ไม่สามารถเอาแต่ log มาต่อได้  ส่วนพี่ VB NeverDie ; ) ก็คงได้คำตอบแล้วดิครับ ว่าทำไมมัน restore log ไม่ได้   :)  คำตอบเดียวได้ถึง 2 คำถาม สุดยอกครับ (ไม่ทราบว่ารับลูกศิษย์ไหมครับ  :)) 
สิ่งที่คุณ insanity บอกมา ผมทดสอบแล้วครับ (ด้วยกระทู้ก่อนหน้านี้ )
ผลออกมาคือ   ได้  ถ้าเป็น Database ชื่อเดิม เซอร์เวอร์ ตัวเดิม
แต่ สิ่งที่ผมบอกว่า ไม่ได้ คือ Database ชื่อใหม่  เซอร์เวอร์ ตัวเดิม  (สำหรับการทดสอบ)
และ ที่ยังไม่ได้ลอง คือ  Database ชื่อเดิม เซอร์เวอร์ ตัวใหม่    เพราะไม่มีเครื่องจะลองครับ  ไม่มีเวลาด้วย

แต่ไม่เป็นไร  ผมไม่ซีเรียส    คุณ Fz40  ก็ได้คำตอบไปแล้ว  สำหรับผม ก็ได้ความรู้จาก คุณ insanity เพิ่มเติมด้วย  :)
ผมคงต้องฝึกใช้ Command แทนการใช้ Wizard ให้มากขึ้นล่ะครับ  :)
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: insanity ที่ 5 พฤษภาคม 2007, 19:54:46
ถ้า คุณ Fz40  อยากจะทำ Standby Server ที่เหมือน ๆ กับ Server จริง ๆ สามารถ

1. Restore full database backup ครั้งแรก จากนั้น ก็
2. Restore transaction log backup.. ที่ Backup เอาไว้ทุก ๆ ชม. ไปได้เรื่อยๆ  ตลอดตามที่ต้องการครับ เพียงแค่ตอน restore log จะต้องใช้ option with norecovery หรือ with standby เพื่อให้สามารถ restore transaction log backups ตัวต่อ ๆ ไปได้

    ซึ่งถ้าทำแบบนี้ คุณ Fz40 ก็จะได้ Standby Server ที่เกือบเหมือนกับของจริง เพียงแต่ Update ล้าหลัง Server ตัวจริง อยู่ไม่เกิน 1 ชม. ซึ่งหาก Server ตัวจริง Down ลงไป ก็จะสามารถนำ Standby Server นี้มาใช้แทนได้ทันที ดังนี้
    การเอา DB กลับมา Online (recovery) สามารถใช้คำสั่ง

restore log Northwind
with recovery
go

หรือ จะใช้ว่า

restore database Northwind
with recovery
go

   จะเห็นว่า ถ้าหากเราไม่มีไฟล์ backup ของ transaction log ที่จะ restore ต่อไปแล้ว แต่ว่า DB ยังอยู่ในภาวะ Loading อยู่ (คือ ยังไม่ recover กลับมา) เราสามารถเอา DB กลับมา online เพื่อใช้งาน โดยใช้คำสั่ง restore ที่ไม่ต้องระบุชื่อไฟล์ backup ดังข้างต้น ได้



อ้างถึง
แต่ สิ่งที่ผมบอกว่า ไม่ได้ คือ Database ชื่อใหม่  เซอร์เวอร์ ตัวเดิม  (สำหรับการทดสอบ)

อันนี้คุณ VB ต้องใช้ คำสั่ง restore ที่ใช้ option with replace น่ะครับ เพราะว่า โดยปกติแล้วการ restore จะมีกลไกป้องกัน
1. การ restore ไปทับไฟล์ที่มีอยู่แล้ว  และ
2. ยังมีการป้องกันการนำเอา backup ไป restore ทับ database คนละชื่อ กับต้นฉบับ Backup ด้วย

ซึ่งถ้าจะบังคับให้ restore แล้ว จะต้องใช้ with replace ครับ ตัวอย่าง

restore database NewNorthwind
from disk = 'D:\Northwind_fullbackup.bak'
with norecovery,           -- <--  จะ recovery หรือ norecovery ก็แล้วแต่ว่าจะ restore log ต่อรึเปล่า
replace,                           -- <--  ใช้ with replace ตรงนี้
move  'Northwind' to 'C:\Data\NewNorthwind.mdf',
move  'Northwind_log' to 'C:\Data\NewNorthwind_log.LDF'
go
 
ถ้าจะ restore log ต่อ ก็ใช้คำสั่งเหมือนที่เคย post ด้านบนต่อได้ครับ ( SQL Server มันยอมครับ ) ดังนี้

restore log NewNorthwind
from disk ='D:\Northwind_log01.trn'
with recovery               -- <--  สมมติมี log ไฟล์เดียว แล้วก็จะ recover กลับมาละ
go


 ^-^

หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: Fz40 ที่ 5 พฤษภาคม 2007, 20:13:11
สุดยอดเลยครับ พี่ทั้ง 2 เก่งจังเลยครับ ตอนนี้ผมมีความรู้สึกว่าเริ่มสนุกกับการเป็น DB admin แล้วละครับ  ผมขอ + พี่ทั้ง 2 เลย ครับ  :)
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: Fz40 ที่ 5 พฤษภาคม 2007, 20:28:04
พี่ VB NeverDie ; )  ครับ ถ้ากรณี Database ชื่อใหม่  เซอร์เวอร์ ตัวเดิม  ถ้าเป็น command ก็ใช้แบบพี่  insanity  แต่ถ้าใช้ Wizard ตรง tab option ในส่วนของ logical file name  มันจะเป็นชื่อของ DB เดิม ก็ไม่ต้องเปลี่ยนอะไรครับ ส่วนช่อง move to physcial file name ก็ให้เปลี่ยน file name เดิมให้เป็น File name ของ DB ใหม่ที่เสร้างขึ้นอ่ะครับ  เท่านี้เราก็จะได้ database ที่เหมือนตัวหลักแต่คนละชื่อครับ   :)
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: insanity ที่ 5 พฤษภาคม 2007, 21:12:16
ตอนนี้ผมมีความรู้สึกว่าเริ่มสนุกกับการเป็น DB admin แล้วละครับ 

สนุกเพราะคนตั้งคำถามอ่ะครับ   

 ^-^
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: insanity ที่ 5 พฤษภาคม 2007, 21:29:08
คุณ Fz40 ลองอ่านอันนี้เพิ่มเติมดูซิครับ

http://www.thaiadmin.org/board/index.php?topic=54178.0


อ่านแล้ว รีบวางแผน backup  พร้อมกับทดลอง/ทดสอบ restore  และทำเป็นคู่มือ Step by step เอาไว้จะดีมากเลย
หัวข้อ: Re: มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: Fz40 ที่ 5 พฤษภาคม 2007, 21:33:35
 :) ขอบคุณ ครับ  ตอนนี้ผมวางแผน backup Full ตอนตี 4 แล้วก็ backup log ทุก ๆ ชั่วโมง  backup dif ตอน 4 โมงเย็น  เพราะที่ทำงานผมทำ 24 ชั่วโมง 7 วัน ปริมาณข้อมูลค่อนข้างสูงในแต่ละวันครับ
หัวข้อ: Re: [กรณีศึกษา] มีคำถามมาถามอีกแล้วครับ
เริ่มหัวข้อโดย: ตะเกียง ที่ 5 กุมภาพันธ์ 2009, 12:24:05
ผมจะ ทำ DTS เพื่อ Import ข้อมูลไปไว้อีก Server อีกเครื่อง โดยจะให้มันไปสร้าง Table ที่ Server ใหม่
แต่ทำพลาดมันสร้าง Table ทับที่ตัวจริง ทำให้ข้อมูลหายหมด มีวิธีเอากลับมาไหมครับ