กำลังกู้คืน mdf. วิธีการกู้คืนไฟล์ mdf ฐานข้อมูล Microsoft SQL Server จากสถานะถูกระงับ

บางครั้งคุณต้องเผชิญกับสถานการณ์ที่ผลงานหลายปีที่อยู่ในฐานข้อมูล SQL ตกอยู่ในความเสี่ยง บทความนี้เกี่ยวกับวิธีการป้องกันการสูญหายของข้อมูล และหากเกิดเหตุการณ์นี้ขึ้น วิธีการกู้คืนข้อมูลจากสิ่งที่เหลืออยู่ในฐานข้อมูลปกติครั้งหนึ่ง

มาเริ่มกันเลย สถานการณ์มีดังนี้: มีเซิร์ฟเวอร์ที่มี 1C+SQL ทำงานอยู่ ในขณะที่ฐานข้อมูล SQL กำลังทำงานอยู่ ไฟฟ้าก็ถูกตัด ผลลัพธ์ที่ได้นั้นน่าเสียดาย: ฐานข้อมูลอยู่ในสถานะต้องสงสัย และเมื่อ 1c พยายามเชื่อมต่อกับฐานข้อมูลนั้น มีข้อผิดพลาดเกิดขึ้นโดยบอกว่าไม่สามารถเชื่อมต่อได้เนื่องจาก ฐานข้อมูลถูกทำเครื่องหมายว่าต้องสงสัยในการกู้คืน โดยทั่วไปโหมดนี้หมายความว่าเซิร์ฟเวอร์ MSSQL จะพยายามกู้คืนฐานข้อมูลโดยใช้วิธีของตัวเอง ฉันไม่ได้แตะต้องอะไรเลยและทิ้งทุกอย่างไว้ข้ามคืนโดยหวังว่าในตอนเช้าฐานจะกลับคืนมา แต่ในตอนเช้ามันก็เหมือนเดิมดังนั้นจึงไม่มีทางไปที่ฐานได้ ตามกฎแห่งความใจร้ายมีการสำรองข้อมูลแต่มีอายุสามวันแถมยังมีเอกสารอีกเพียบที่ประมวลผลผ่านฐานข้อมูลเท่านั้นแต่ไม่ใช่ผ่านเอกสารกระดาษเช่น ไม่มีวิธีกู้คืนเอกสารด้วยตนเอง หลังจากใช้พลังงานและเส้นประสาทไปมาก (ซึ่งอย่างที่ทราบกันดีว่าไม่ได้รับการฟื้นฟู :)) ฉันจึงมาถึงขั้นตอนต่อไปนี้ที่จำเป็นในการฟื้นฟูฐาน

1) หลักการพื้นฐานในช่วงแรกคือการไม่ทำอันตราย เราปิดเซิร์ฟเวอร์ SQL และคัดลอกไฟล์ *.mdf และ *.ldf ออกจากฐานข้อมูล
2) โดยหลักการแล้วมันเกิดขึ้นที่สถานะต้องสงสัยเกิดขึ้นเนื่องจากเส้นทางไปยังไฟล์ที่มีฐานข้อมูลมีการเปลี่ยนแปลง (ตัวอย่างเช่นมีการเพิ่มดิสก์ใหม่ในระบบซึ่งถูกลบออกไปแล้วโฟลเดอร์ที่มีฐานข้อมูล ถูกเปลี่ยนชื่อ ฯลฯ) แน่นอนว่าเส้นทางนั้นถูกกู้คืน แต่ฐานข้อมูลยังคงถูกทำเครื่องหมายว่าต้องสงสัย นี่คือสิ่งที่เราทำ:
3) เปิดตัวเซิร์ฟเวอร์ SQL
4) เราพยายามเชื่อมต่อฐานข้อมูลผ่าน Enterprise Manager:
คลิกขวาที่ฐานข้อมูล ในเมนูที่ปรากฏขึ้น เลือกงานทั้งหมด->แนบฐานข้อมูล จากนั้นในกล่องโต้ตอบที่ปรากฏขึ้น ให้เลือกไฟล์ที่มีฐานข้อมูล (*.mdf) และตั้งค่าพารามิเตอร์ที่จำเป็น
5) หรือผ่าน Query Analyzer ด้วยสิ่งนี้:
ก. sp_attach_db @dbname = "DemoXMB",
ข. @filename1 = "E:\Data\DemoXMB_Data.MDF",
ค. @filename2 = "E:\Data\DemoXMB_Log.LDF"
6) แน่นอนว่าเส้นทางไปยังฐานข้อมูลจำเป็นต้องถูกแทนที่ด้วยเส้นทางของคุณเอง ถ้าฐานต่อกันก็อาจบอกว่าเราออกไปด้วยความตกใจเล็กน้อย แต่ถ้าไม่ก็ไปต่อ
7) หากไฟล์บันทึกไม่เสียหาย (*.ldf) แต่ *.mdf เสียหาย (เช่นเมื่อเชื่อมต่อฐานข้อมูล sql จะบ่นเกี่ยวกับข้อผิดพลาดในไฟล์ mdf) และโหมดการสำรองข้อมูลถูกตั้งค่าเป็นเต็ม เรากู้คืนฐานข้อมูลโดยไม่ต้องกู้คืนธุรกรรมบันทึก เกือบ 100% ที่ความทรมานทั้งหมดสามารถจบลงที่นี่
8) ในทางกลับกัน หากไฟล์ ldf เสียหาย แต่ไฟล์ *.mdf ยังคงอยู่ เมื่อทำการเชื่อมต่อ ฐานข้อมูลจะบ่นว่าบันทึกธุรกรรมไม่มีหรือเสียหาย ในกรณีนี้ คุณสามารถใช้ HP "sp_attach_single_file_db"

ตัวอย่างเช่น:
ใช้ต้นแบบ
EXEC sp_attach_single_file_db @dbname = "DemoXMB",
@physname = "c:\mssql7\data\DemoXMB_Dat.mdf"

เมื่อดำเนินการคำสั่งเหล่านี้ ไฟล์ DemoXMB_Log.ldf จะถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับฐานข้อมูล โดยมีขนาด 1MB และขยายอัตโนมัติ
หากมีไฟล์ *.MDF และ *.LDF หรือข้อมูลถูกจัดเก็บไว้ในไฟล์ฟิสิคัลมากกว่าหนึ่งไฟล์ (จำนวนไฟล์ฟิสิคัลที่เชื่อมต่อทั้งหมดไม่ควรเกิน 16 ไฟล์) คุณควรใช้ HP "sp_attach_db"

ตัวอย่างเช่น:
ใช้ต้นแบบ
EXEC sp_attach_db @dbname = "DemoXMB",
@filename1 = "c:\mssql7\data\DemoXMB_Dat.mdf",
@filename1 = "c:\mssql7\data\DemoXMB_Log.ldf"

หากต้องการเชื่อมต่อไฟล์ฟิสิคัลมากกว่า 16 ไฟล์เข้ากับฐานข้อมูล ให้ใช้คำสั่ง:
สร้างฐานข้อมูลสำหรับแนบ

อย่างไรก็ตาม หากไม่มีสิ่งใดช่วยได้ ไฟล์ทั้งสองเสียหายและฐานข้อมูลยังอยู่ในสถานะต้องสงสัย คุณสามารถลองรีเซ็ตสถานะของฐานข้อมูลโดยใช้ลำดับต่อไปนี้: (ก่อนใช้ HP นี้ คุณต้องอนุญาตให้แก้ไขตารางระบบโดยตรง)
ใช้ต้นแบบ
ไป
อนุญาตให้แก้ไขตารางระบบโดยตรง:
sp_configure "อนุญาตการอัปเดต",1
ไป
กำหนดค่าใหม่ด้วยการแทนที่
ไป
หากต้องการรีเซ็ตแอตทริบิวต์ที่ต้องสงสัย ให้เรียกใช้ sp_resetstatus ในฐานข้อมูลหลักของ HP:
sp_resetstatus "ชื่อฐานข้อมูล"
ไป
ตอนนี้ขอห้ามไม่ให้มีการปรับเปลี่ยนตารางระบบโดยตรง:
sp_configure "อนุญาตการอัปเดต",0
ไป
กำหนดค่าใหม่ด้วยการแทนที่
ไป

โดยพื้นฐานแล้ว เมื่อฉันทำตามขั้นตอนเหล่านี้ทั้งหมด สถานะผู้ต้องสงสัยก็ถูกรีเซ็ต แต่! เมื่อพยายามดำเนินการใด ๆ SQL ก็เริ่มสาบานว่าฐานข้อมูลยังอยู่ในสถานะต้องสงสัย แล้วฉันก็ทำสิ่งนี้:

จาก QA เรารันสคริปต์:
ใช้ต้นแบบ
ไป
sp_configure "อนุญาตการอัปเดต", 1
กำหนดค่าใหม่ด้วยการแทนที่
ไป

ที่นั่นเรายังทำ:
อัปเดตสถานะชุดฐานข้อมูล sys= 32768 โดยที่ name = " "

รีสตาร์ทเซิร์ฟเวอร์ SQL โดยหลักการแล้ว ควรมองเห็นฐานได้ชัดเจน (ในโหมดฉุกเฉิน)

จาก QA เราดำเนินการ:
ใช้" "
ไป
sp_dboption" ", "single_user", "จริง"
ไป
DBCC CHECKDB(" ", REPAIR_ALLOW_DATA_LOSS)
ไป

หากทุกอย่างเป็นไปตามลำดับแล้ว:
sp_dboption" ", "single_user", "เท็จ"
ไป
ใช้ต้นแบบ
ไป
sp_configure "อนุญาตการอัปเดต", 0
ไป

หลังจากนั้นก็เป็นไปได้ที่จะดูตารางฐานข้อมูลจาก SQL แต่ไม่สามารถทำงานกับมันได้ ตอนนี้คุณจำเป็นต้องใช้บริการการแปลงข้อมูลเพื่อส่งออกข้อมูลไปยังฐานข้อมูลใหม่ หลังจากนี้ เราจะกู้คืน/ทดสอบฐานข้อมูลโดยใช้เครื่องมือ 1C ความสนใจ! หลายคนไม่ใส่ใจกับประเด็นสำคัญนี้ เป็นผลให้วันหนึ่งคุณอาจค้นพบว่าฐานข้อมูลได้รับการกู้คืนแล้ว พูดง่ายๆ ก็คือไม่ถูกต้องทั้งหมด เหล่านั้น. ในเอกสารแทนที่จะเป็นระบบการตั้งชื่อจะมีประมาณ 10122/<Объект не найден>นี่คือปัญหาที่เกิดขึ้นสำหรับฉัน แต่อาจมีทางเลือกมากมาย ดังนั้นจึงเป็นการดีกว่าที่จะเสียเวลา แต่ตรวจสอบฐานข้อมูลโดยใช้ 1C

หากไม่มีสิ่งใดช่วยได้เลย และข้อมูลจำเป็นต้องกู้คืนอย่างยิ่ง ก็ยังมียูทิลิตี้บุคคลที่สามที่เรียกว่า MSSQLRecovery ชำระค่าสาธารณูปโภคแล้ว แต่คุณสามารถใช้เวอร์ชันสาธิตได้ซึ่งสามารถดาวน์โหลดได้ที่นี่: http://www.officerecovery.com/mssql/download_demo.htm โปรแกรมนี้ง่ายมาก และการคืนค่าฐานข้อมูลมีสามขั้นตอน: 1) เลือกไฟล์ด้วยฐานข้อมูล; 2) เลือกเส้นทางที่จะบันทึก 3) กดปุ่มกู้คืน; เรากำลังรออยู่ โปรแกรมแยกวิเคราะห์ฐานข้อมูล SQL ทีละชิ้นและวางไว้ในไดเร็กทอรีแยกต่างหาก ที่นั่นเธอยังเพิ่มไฟล์ .bat เพื่อกู้คืนฐานข้อมูลจาก "ชิ้นส่วน" ที่ได้รับ ฉันไม่เคยใช้มันเพราะว่า... จัดการเพื่อกู้คืนฐานข้อมูลโดยใช้ขั้นตอนก่อนหน้า

แต่! เราควรจะหยุดที่นี่ บทความจะไม่สมบูรณ์หากฉันไม่ได้อธิบายวิธีการป้องกันปัญหาดังกล่าว ดังนั้น วิธีที่ง่ายและน่าเชื่อถือที่สุด: การเก็บถาวร การเก็บถาวร และการเก็บถาวรอีกครั้ง ใน Enterprise Manager ไปที่เมนู Tools->Wizards->Management->Backup Wizard และกำหนดค่าพารามิเตอร์ที่จำเป็นทั้งหมด ด้วยเหตุนี้ ฐานข้อมูล SQL ของฉันจึงถูกรีเซ็ตไปที่ดิสก์โดยสมบูรณ์ในเวลากลางคืน และทุกๆ 15 นาที จะมีการสำรองข้อมูลการเปลี่ยนแปลงที่เกิดขึ้นในฐานข้อมูล โดยหลักการแล้ว ถ้าฉันมีข้อมูลสำรอง ฉันจะย้อนกลับไปในไม่กี่นาทีแล้วดื่ม Coca-Cola ต่อไป :)

หากคุณมีคำถาม/ความคิดเห็นเพิ่มเติม โปรดเขียนที่นี่:

คืนค่า MDF

หากฐานข้อมูล Microsoft SQL Server ไม่ทำงานและฐานข้อมูลมีสถานะ "ระงับ" (เป็นสีเทา) ใน SQL Management Studio ความสมบูรณ์ของข้อมูลในนั้นจะถูกบุกรุกอย่างร้ายแรง วิธีการกู้คืนฐานข้อมูลที่เสียหายจากสถานะถูกระงับ? วิธีการกู้คืนข้อมูลที่จัดเก็บไว้ในไฟล์ฐานข้อมูล .mdf

คำอธิบายทีละขั้นตอนสำหรับการกู้คืนไฟล์ .mdf ที่เสียหาย:

  • ถอนการแนบฐานข้อมูลจาก MS SQL Server ใน SQL Management Studio
  • สร้างฐานข้อมูลเปล่าใหม่สำหรับการนำเข้าข้อมูลที่กู้คืนในภายหลัง
  • ปล่อย กล่องเครื่องมือซ่อมแซมเซิร์ฟเวอร์ SQLและเลือกไฟล์ .mdf ของฐานข้อมูลที่ถูกปิดใช้งานในหน้าแรกของโปรแกรม

ดำเนินการทุกขั้นตอนภายในโปรแกรมและ:

  • หรือบันทึกข้อมูลเป็นสคริปต์ sql หลังจากบันทึกข้อมูลเป็นสคริปต์ sql บนดิสก์แล้ว คุณจะต้องเรียกใช้ไฟล์ .bat พร้อมด้วยพารามิเตอร์ที่จำเป็นเพื่อนำเข้าข้อมูลไปยังฐานข้อมูลใหม่
  • หรือส่งออกข้อมูลโดยตรงไปยังฐานข้อมูลใหม่
กล่องเครื่องมือซ่อมแซมเซิร์ฟเวอร์ SQLไม่ฟรีและเป็นโอเพ่นซอร์ส ผู้ใช้สามารถลองใช้โปรแกรมนี้ก่อนซื้อโดยใช้เวอร์ชันสาธิต โปรแกรมนี้ไม่ได้รับอนุญาตภายใต้ GNU General Public License (GPL) หรือ GNU Lesser General Public License (LGPL)

ความต้องการของระบบ: Windows 98 หรือสูงกว่า

ฐานข้อมูลเป็นพื้นฐานของระบบข้อมูลองค์กรจำนวนมาก สามารถจัดเก็บข้อมูลได้เกือบทุกชนิด ตั้งแต่เอกสารการปฏิบัติงานไปจนถึงเอกสารทางบัญชี แม้แต่ข้อมูลที่ไม่พร้อมใช้งานชั่วคราวก็อาจนำไปสู่การสูญเสียที่สำคัญได้ เราจะพูดอะไรเกี่ยวกับการสูญเสียโดยสิ้นเชิงของพวกเขา! ในขณะเดียวกัน สถานการณ์นี้ค่อนข้างเป็นจริง ทางกายภาพ ฐานข้อมูลเป็นไฟล์ธรรมดาที่อาจเสียหายได้ง่ายอันเป็นผลมาจากการโจมตีของไวรัส ความล้มเหลวของซอฟต์แวร์หรือระบบไฟล์ ความล้มเหลวของฮาร์ดไดรฟ์ การกระทำของผู้ใช้ที่ไม่ระมัดระวัง ฯลฯ ในกรณีเหล่านี้ ฐานข้อมูลจะหยุดเปิด และทำให้ข้อมูลทั้งหมดที่โพสต์ในนั้นไม่สามารถเข้าถึงได้

โปรแกรมสามารถช่วยให้คุณรับมือกับปัญหานี้และส่งคืนข้อมูลที่ดูเหมือนจะสูญหายอย่างถาวรได้ กล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQL- ได้รับการออกแบบมาเพื่อแยกและบันทึกข้อมูลจากฐานข้อมูล MS SQL Server ที่เสียหาย (รองรับไฟล์ Microsoft SQL Server 7.0, 2000, 2005, 2005 64 บิต, 2008 และ 2008 R2) โดยปกติแล้ว กล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQL ไม่สามารถรับประกันการกู้คืนข้อมูลทั้งหมดได้อย่างสมบูรณ์ จำเป็นต้องเข้าใจว่าในบางกรณีความเสียหายอาจรุนแรงมากจนไม่สามารถดึงข้อมูลบางส่วนออกมาได้ กระบวนการกู้คืนและบันทึกข้อมูลจากฐานข้อมูล MS SQL Server ที่เสียหายโดยใช้โปรแกรม กล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQLดำเนินการโดยใช้วิซาร์ดทีละขั้นตอน ในแต่ละขั้นตอน ผู้ใช้จะต้องดำเนินการเพียงครั้งเดียว ซึ่งสะดวกและใช้งานได้จริง

ขั้นตอนแรกคือการเลือกฐานข้อมูล MS SQL Server ที่เสียหาย วิธีที่สะดวกที่สุดในการทำเช่นนี้คือการใช้ Windows Explorer ซึ่งจะเปิดขึ้นเมื่อคุณคลิกปุ่ม ส่วนขยาย *.mdf และ *.ndf (ส่วนขยายฐานข้อมูล MS SQL Server มาตรฐาน) จะถูกระบุเป็นตัวกรองการเลือกโดยอัตโนมัติ ไฟล์ที่วิเคราะห์แล้วทั้งหมดจะถูกเพิ่มลงในรายการเข้าถึงด่วนพิเศษ ในอนาคตหากต้องการเลือกผู้ใช้เพียงแค่คลิกที่ไอคอนเลื่อนเคอร์เซอร์ไปที่เอกสารที่ต้องการในรายการที่เปิดขึ้นแล้วคลิกปุ่มซ้ายของเมาส์

การเปลี่ยนไปสู่ขั้นต่อไปจะดำเนินการโดยใช้ปุ่มถัดไป ในกรณีนี้ โปรแกรมจะแสดงกล่องโต้ตอบถามว่าจำเป็นต้องวิเคราะห์ไฟล์ต้นฉบับหรือไม่ หากคำตอบคือใช่ ระบบจะดึงข้อมูลบริการจากฐานข้อมูลที่เสียหายและแสดงข้อมูลที่สามารถกู้คืนได้ เพื่อความสะดวกของผู้ใช้ หน้าต่างจะแบ่งออกเป็นสองส่วน ทางด้านซ้าย หมวดหมู่ข้อมูลที่เป็นไปได้ทั้งหมดจะแสดงขึ้น: ตารางผู้ใช้และระบบ (ตารางผู้ใช้และตารางระบบ), มุมมอง (มุมมอง), ขั้นตอนการจัดเก็บ (ขั้นตอนการจัดเก็บ), ฟังก์ชัน (ฟังก์ชัน) และประเภทข้อมูลที่ผู้ใช้กำหนด เมื่อคุณวางเคอร์เซอร์บนรายการใดรายการหนึ่ง รายการของวัตถุที่มีอยู่และเนื้อหาจะปรากฏทางด้านขวา ผู้ใช้จะต้องตรวจสอบอย่างรอบคอบและมั่นใจว่าโปรแกรม กล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQLจะรับมือกับงานและสามารถกู้คืนข้อมูลที่สูญหายได้จริง

ขั้นตอนต่อไปคือการเลือกวิธีการบันทึกข้อมูล ความจริงก็คือในยูทิลิตี้ที่เป็นปัญหา ข้อมูลที่แยกจากไฟล์ที่เสียหายสามารถบันทึกลงในฮาร์ดไดรฟ์ในรูปแบบของชุดสคริปต์ใน SQL หรือส่งออกโดยตรงไปยังฐานข้อมูล MS SQL Server ตัวเลือกแรกนั้นดีเพราะช่วยให้คุณสามารถถ่ายโอนข้อมูลที่แยกออกมาไปยังเซิร์ฟเวอร์ใดก็ได้ ในการดำเนินการนี้เพียงคัดลอกแพ็คเกจสคริปต์ผลลัพธ์ไปยังคอมพิวเตอร์ที่ต้องการแล้วเรียกใช้ที่นั่น และตัวเลือกที่สองสะดวกกว่าในกรณีที่พีซีที่กำลังดำเนินการกู้คืนมีการเชื่อมต่อกับฐานข้อมูลที่ต้องการ ในกรณีนี้ ข้อมูลจะถูกส่งออกไปยังข้อมูลนั้นโดยไม่ต้องดำเนินการใดๆ เพิ่มเติม

จากนั้นผู้ใช้จะต้องเลือกข้อมูลที่ต้องการกู้คืนจากไฟล์ที่เสียหายและบันทึก เพื่อจุดประสงค์นี้โปรแกรม กล่องเครื่องมือการกู้คืน SQLจะแสดงบนหน้าจออีกครั้งว่าเธอสามารถดึงอะไรออกมาได้ และผู้ใช้จะต้องเลือกข้อมูลที่ต้องการโดยทำเครื่องหมาย/ยกเลิกการทำเครื่องหมายที่ช่องทำเครื่องหมาย คุณสามารถเลือกหรือยกเลิกการเลือกฐานข้อมูลทั้งหมด หมวดหมู่ข้อมูลทั้งหมด หรือออบเจ็กต์แต่ละรายการ (ตาราง มุมมอง ขั้นตอนการจัดเก็บ ฯลฯ) ได้ในคราวเดียว

หลังจากเสร็จสิ้นการเลือกแล้ว คุณสามารถเริ่มกระบวนการสแกนไฟล์ต้นฉบับและบันทึกข้อมูลที่แยกออกมาได้ โดยคลิกที่ปุ่มเริ่มการกู้คืน ระยะเวลาของงานนี้ขึ้นอยู่กับปัจจัยสองประการ ประการแรก โครงสร้างและขนาดของไฟล์ต้นฉบับ และประการที่สองคือประสิทธิภาพของคอมพิวเตอร์ที่ใช้งาน เป็นที่น่าสังเกตว่าในบางกรณีฐานข้อมูลมีขนาดใหญ่ ดังนั้นการกู้คืนข้อมูลจากฐานข้อมูลเหล่านั้นอาจใช้เวลาหลายวัน ทันทีหลังจากกระบวนการเสร็จสมบูรณ์ กล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQL จะแสดงบันทึก โดยจะให้ข้อมูลเกี่ยวกับกระบวนการกู้คืนข้อมูลทั้งหมดที่ดำเนินการในระหว่างเซสชันการทำงานปัจจุบัน

ดังนั้นโปรแกรม SQL Server Recovery Toolbox จึงเป็นเครื่องมือที่ประสบความสำเร็จในการกู้คืนข้อมูลจากฐานข้อมูล MS SQL Server ที่เสียหาย มีลักษณะเด่นอยู่ 2 ประการ ประการแรกคือประสิทธิภาพ ยูทิลิตี้ดังกล่าวสามารถกู้คืนข้อมูลได้มากที่สุดเท่าที่จะเป็นไปได้จากไฟล์ที่เสียหาย คุณสมบัติที่สองของกล่องเครื่องมือการกู้คืนเซิร์ฟเวอร์ SQL คือใช้งานง่ายมาก ด้วยความช่วยเหลือของโปรแกรมนี้ ผู้ใช้ทุกคน แม้จะเพิ่งเริ่มศึกษาคอมพิวเตอร์ ก็สามารถดึงข้อมูลจากฐานข้อมูลที่เสียหายและบันทึกได้โดยไม่ต้องมีการฝึกอบรมล่วงหน้า