กู้คืนสคริปต์แบบสอบถาม SQL ที่ไม่ได้บันทึก


197

วิธีการกู้คืนสคริปต์ที่ไม่ได้บันทึกหากแท็บ SSMS ขัดข้อง / ไม่ได้บันทึกถูกปิดโดยไม่ตั้งใจ


3
ฉันเห็นด้วยกับหลักการของจอห์น อย่างไรก็ตามสิ่งนี้เกิดขึ้นเป็นครั้งคราวสำหรับพวกเราทุกคน: "ฉันคิดว่าฉันได้ช่วยสิ่งนั้นไว้!" ทำให้เป็นนิสัยที่จะช่วยประหยัดก่อนที่คุณจะเริ่มเขียนโค้ด Ctrl + S เป็นเพื่อนของคุณ!
แกรม

4
ลอง SSMSBOOST (โหมดชุมชนอิสระ) หรือ Redgate (ไม่ฟรี แต่มีประโยชน์มาก)
Vasily Ivoyzha

2
น่าเสียดายที่ปัจจุบัน SSMS ไม่มีคุณสมบัติเลิกทำแท็บปิด ฉันได้สร้างรายการเชื่อมต่อต่อไปนี้เพื่อให้ Microsoft หวังว่าจะเพิ่มสิ่งนี้ในรุ่นอนาคต: connect.microsoft.com/SQLServer/Feedback/Details/1044403
Rob Nicholson

คำตอบ:


425

การโพสต์สิ่งนี้ในกรณีที่บางคนสะดุดปัญหาเดียวกัน

Googled สำหรับดึงสคริปต์ที่ไม่ได้บันทึกและพบวิธีแก้ปัญหา

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

Use <database>
SELECT execquery.last_execution_time AS [Date Time], execsql.text AS [Script] FROM sys.dm_exec_query_stats AS execquery
CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
ORDER BY execquery.last_execution_time DESC

27
นั่นเป็นวิธีการค้นหาที่อยู่นอกกล่อง แต่จะเก็บข้อมูลไว้ตราบที่แบบสอบถามยังคงอยู่ในแคชแผน (หรือจนกว่าจะมีการเริ่ม SQL Server ใหม่แล้วแต่ว่าจะถึงอย่างใดก่อน) คุณควรจะยังคงเป็นนิสัยในการบันทึกงานของคุณ
Matt

5
มันอาจคุ้มค่าที่จะต้องทราบว่าคุณต้องได้รับอนุญาต VIEW SERVER STATE เพื่อที่จะใช้งานแบบสอบถามนี้
BornToCode

4
หากคุณใช้การสืบค้นนี้บนฐานข้อมูลที่มีการสืบค้นหลายข้อฉันขอแนะนำให้เพิ่มเงื่อนไขตัวกรองคือส่วนคำสั่งเช่นที่ execsql.text เช่น '% สคริปต์บางส่วนของคุณเพื่อค้นหาโดย%'
Jeff Fol

3
ขอบคุณสำหรับการค้นหาสิ่งนี้ช่วยให้ฉันประหยัดเวลาได้มากเมื่อฉันปิดแท็บผิดโดยไม่ตั้งใจ เนื่องจากมีการประหารชีวิตขยะจำนวนมาก (สิ่งที่คุณไม่ต้องการหรือไม่รู้จัก) ฉันขอเสนอการเพิ่มเล็ก ๆ น้อย ๆ ในการกรองสิ่งที่เกินโดยทิ้งมันทั้งหมดลงในตารางชั่วคราวแล้วอ่านตัวกรองหรือไม่
Sava Glodic

3
งานนี้สมบูรณ์แบบสำหรับฉันฉันได้พัฒนาสคริปต์นั้นทั้งเช้าแล้วฉันปิดหน้าต่างโดยไม่บันทึกและเริ่มร้องไห้
RobsionKarls

167

คุณอาจพบพวกเขาในหนึ่งในสถานที่เหล่านี้ (ขึ้นอยู่กับรุ่นของ Windows ที่คุณใช้)

Windows XP

C:\Documents and Settings\YourUsername\My Documents\SQL Server Management Studio\Backup Files\

Windows Vista / 7/10

%USERPROFILE%\Documents\SQL Server Management Studio\Backup Files

หรือ

%USERPROFILE%\AppData\Local\Temp

Googled จากแหล่งนี้และแหล่งนี้


2
รุ่น Windows ที่ฉันใช้งานคือ Windows 7 ไม่มีไฟล์ในตำแหน่งนี้ มันว่างเปล่า. ภายใต้ AppData \ Local \ Temp ไฟล์แบบสอบถาม Microsoft SQL Server คือ o kb
BumbleBee

2
นี่ยอดเยี่ยม - ช่วยฉันทำงานสองสามชั่วโมงหลังจากระบบล่ม! พบไฟล์ในBackup Files\Solution1
Kevin Pope

4
ถ้าเพียงฉันสามารถโหวตคำตอบนี้ได้ตามจำนวนชั่วโมงที่ฉันบันทึกไว้โดยไม่ต้องเขียนข้อความค้นหาที่หายไปใหม่
ctorx

1
ลองค้นหาในโฟลเดอร์ temp .. ไฟล์เช่น ~ vsA497.sql มีอยู่ แต่ขนาดของไฟล์แต่ละรายการคือ 0kb แม้หลังจากเปิดแล้วฉันจะไม่เขียนบรรทัดในไฟล์ ในโฟลเดอร์สำรองไม่มีไฟล์
Mark

1
C: \ Users \ YourUserName \ AppData \ Local \ Temp กู้คืนสิ่งที่ฉันทำหายไปอย่างแน่นอน ไฟล์หายไป 5 นาทีที่ผ่านมา Windows 10, SQL Server Management Studio 17.
dmoney

53

ช้าไปงานปาร์ตี้ แต่ไม่มีตำแหน่งที่กล่าวถึงก่อนหน้านี้ทำงานได้สำหรับฉัน - ด้วยเหตุผลบางอย่างไฟล์สำรอง / การตอบกลับอัตโนมัติถูกบันทึกไว้ภายใต้โฟลเดอร์ VS15 บนพีซีของฉัน (นี่เป็นสตูดิโอจัดการ SQL Server 2016)

C: \ Users \ YOURUSERNAME \ Documents \ Visual Studio \ Backup Files \ Solution1

คุณอาจต้องการตรวจสอบการตั้งค่าเครื่องมือ - ตัวเลือก - สภาพแวดล้อม - การนำเข้าและส่งออกตำแหน่งของไฟล์การตั้งค่าอาจนำคุณไปยังโฟลเดอร์สำรองของคุณ - ฉันไม่เคยมองใต้โฟลเดอร์ VS15 สำหรับสิ่งนี้


7
สิ่งนี้ถูกต้องสำหรับ SSMS 2017 ฉันพบไฟล์ที่หายไปในโฟลเดอร์ VS15 นี้แทน
irgnosis

1
ตรวจสอบโฟลเดอร์นี้ออก ของฉันก็ซ่อนตัวอยู่ที่นี่เช่นกัน
Radderz

1
ขอบคุณขอบคุณขอบคุณ!!!! หากสคริปต์ตัวใหญ่หายไปจากความผิดพลาดที่ไม่คาดคิดและนี่คือโฟลเดอร์ที่มันสิ้นสุดลงไป !!!
Unfallener

1
ขอบคุณ - ฉันไม่พบสคริปต์ของฉันทุกที่!
keithm

2
คุณควรได้รับตราฮีโร่สำหรับตรานี้
Joe Schmucker

32

ใช้ตำแหน่งต่อไปนี้ซึ่งคุณสามารถค้นหาทั้งหมด~AutoRecover.~vs*.sql( ไฟล์ค้นหาอัตโนมัติ ):

C:\Users\<YourUserName>\Documents\SQL Server Management Studio\Backup Files\Solution1

4
"โฟลเดอร์นี้ว่างเปล่า"
adolf กระเทียม

นี่คือสิ่งที่ฉันจำไม่ได้ ฉันไม่ได้ จำกัด เฉพาะโฟลเดอร์ที่โพสต์และพบสิ่งที่ฉันได้สูญเสียไปจากการตายของ SSMS
Jeff Moden

1
หรือคุณสามารถลอง: C: \ Users \ YourUserName \ My Documents \ SQL การจัดการเซิร์ฟเวอร์ Files \ Solution1 Studio \ Backup Server \
Backup1

11

บางทีคุณอาจไม่พบไดเรกทอรีที่แนะนำหรือไฟล์กู้คืนของคุณหายไปขอบคุณพระเจ้าที่ฉันทำซ้ำความผิดพลาดด้วยสคริปต์ที่ไม่ได้บันทึกและพาฉันไปที่ไดเรกทอรีนี้:

C: \ Users \ user \ OneDrive \ Documents \ Visual 2015 \ Backup Files \ Solution1

ดังนั้นบางทีนี่อาจช่วยวันของคุณ :)


9

ฉันรู้ว่านี่เป็นเธรดเก่า แต่สำหรับทุกคนที่ต้องการดึงสคริปต์หลังจากเกิดข้อผิดพลาด SSMS ให้ทำดังต่อไปนี้

  1. เปิด Local Disk (C):
  2. เปิดโฟลเดอร์ผู้ใช้
  3. ค้นหาโฟลเดอร์ที่เกี่ยวข้องกับชื่อผู้ใช้ของคุณและเปิดมัน
  4. คลิกไฟล์เอกสาร
  5. คลิกโฟลเดอร์ Visual Studio หรือคลิกโฟลเดอร์แฟ้มสำรองหากมองเห็น
  6. คลิกโฟลเดอร์แฟ้มสำรอง
  7. เปิดโฟลเดอร์ Solution1
  8. ไฟล์ชั่วคราวที่กู้คืนมาจะอยู่ที่นี่ ไฟล์จะลงท้ายด้วย vs ตามด้วยหมายเลขเช่น vs9E61
  9. เปิดไฟล์และตรวจสอบรหัสที่หายไป หวังว่าจะช่วย ขั้นตอนที่แน่นอนเหล่านั้นได้ผลสำหรับฉันแล้ว ฉันใช้ SQL Server Express 2017

7

ฉันใช้ Windows 8 และพบสคริปต์ที่ขาดหายไปในเส้นทางด้านล่าง:

C:\Users\YourUsername\Documents\SQL Server Management Studio\Backup Files

7

ไปที่ SSMS >> เครื่องมือ >> ตัวเลือก >> สภาพแวดล้อม >> กู้คืนอัตโนมัติ

มีการตั้งค่าสองแบบ:

1) บันทึกข้อมูลการกู้คืนอัตโนมัติทุก ๆ นาที

ตัวเลือกนี้จะบันทึกไฟล์ SQL Query ในช่วงเวลาที่แน่นอน ตั้งค่าตัวเลือกนี้เป็นค่าต่ำสุดที่เป็นไปได้เพื่อหลีกเลี่ยงการสูญเสีย หากคุณตั้งค่านี้เป็น 5 ในกรณีที่แย่ที่สุดคุณอาจสูญเสียงาน 5 นาทีสุดท้าย

2) เก็บข้อมูลการกู้คืนอัตโนมัติเป็นเวลาหลายวัน

ตัวเลือกนี้จะเก็บข้อมูลการกู้คืนอัตโนมัติสำหรับวันที่ระบุ แม้ว่าฉันจะแนะนำในกรณีที่เกิดอุบัติเหตุเปิด SQL Server Management Studio ทันทีและกู้คืนไฟล์ของคุณ อย่าเลื่อนงานที่สำคัญนี้สำหรับวันที่ในอนาคต


11
การติดตั้งอัตโนมัติขององค์กรรีสตาร์ทเครื่องเมื่อไม่ได้ใช้ - นี่จะบังคับให้ปิดแอปทั้งหมด มีแท็บเปิดอยู่บางแท็บไม่ได้บันทึก ฉันเลือกทั้งสองตัวเลือกเหล่านี้และไม่มีตัวเลือกการกู้คืนหรือเอกสาร 'temp' ในสถานที่อื่น ๆ ที่ระบุโดยผู้ตอบแบบสอบถามคนอื่น ๆ
adolf กระเทียม

ฉันมีทั้งตัวเลือก แต่ไม่มีอะไรถูกกู้คืนหลังจาก SSMS ล้มเหลว
Kate

6

SSMSBoost add-in (ฟรีในปัจจุบัน)

  • ติดตามงบที่ดำเนินการทั้งหมด (บันทึกไว้ในดิสก์)
  • กฎระเบียบจะบันทึกภาพรวมของเนื้อหาของ SQL Editor คุณเก็บประวัติของการแก้ไขสคริปต์ของคุณ บางครั้ง "รุ่นที่ดีที่สุด" ไม่ใช่รุ่นล่าสุดและคุณต้องการคืนค่าสถานะระดับกลาง
  • ติดตามแท็บที่เปิดอยู่และอนุญาตให้เรียกคืนได้หลังจากรีสตาร์ท แท็บที่ไม่ได้บันทึกจะถูกกู้คืน

+ คุณสมบัติอื่น ๆ อีกมากมาย (ฉันเป็นผู้พัฒนาของ Add-in)


1
นี่คือการเพิ่มเข้าที่ยิ่งใหญ่โดยวิธีการ มันช่วยให้ฉันทำงานสองชั่วโมงที่ฉันคิดว่าฉันได้ช่วย แต่ก็ไม่ได้ (ฉันไม่มีส่วนเกี่ยวข้องกับ Andrei)
Jonathan

หวังว่าฉันจะได้คะแนนมากขึ้น SSMSBoost ได้ "บันทึกเบคอนของฉัน" มากกว่าหนึ่งครั้ง
Andrew Steitz

4

คุณสามารถค้นหาไฟล์ได้ที่นี่เมื่อคุณปิดหน้าต่าง SSMS โดยไม่ตั้งใจ

C:\Windows\System32\SQL Server Management Studio\Backup Files\Solution1

ระบบปฏิบัติการ Windows 8.1?
Kiquenet

4

ฉันสามารถกู้คืนไฟล์ได้จากตำแหน่งต่อไปนี้:

C:\Users\<yourusername>\Documents\SQL Server Management Studio\Backup Files\Solution1

ควรมีไฟล์กู้คืนแตกต่างกันต่อแท็บ ฉันว่าจะหาไฟล์สำหรับวันที่คุณทำมันหาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.