ฉันเพิ่งเปลี่ยนเซิร์ฟเวอร์ที่ไว้วางใจเก่าของเราเป็นรุ่นใหม่กว่า และใช้โอกาสนี้ในการอัปเกรดเป็น Windows Server 2016

นับตั้งแต่การอัปเกรด เราพบปัญหาสองสามข้อ และฉันเริ่มสงสัยว่าปัญหาทั้งสองเกี่ยวข้องกันหรือไม่

อย่างแรกคือปัญหากับ SQL Server 2014 ซึ่งฉันโพสต์เกี่ยวกับที่นี่: SQL Server 2014 - การกู้คืนที่รอดำเนินการ เกือบทุกวัน

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

ไฟล์ฐานข้อมูลจะอยู่ในโฟลเดอร์ที่แชร์ผ่านเครือข่าย แม้ว่าจะถูกใช้โดย SQL Server ที่ติดตั้งในเครื่องเท่านั้น

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

เราได้ปิดการใช้งานการแสดงตัวอย่างในเบราว์เซอร์ไฟล์ Mac แต่ดูเหมือนว่าจะไม่สร้างความแตกต่าง ตัวตรวจสอบไวรัสและการสำรองข้อมูลทั้งหมดถูกระงับเพื่อป้องกันไม่ให้ล็อกไฟล์ แต่ยังคงดำเนินต่อไป

ข้อเสนอแนะใด ๆ

answer

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

สิ่งที่คุณสามารถทำได้หลังจากข้อเท็จจริงคือเพียงแค่เริ่มขุด Windows มีเครื่องมือในตัวเพื่อดูว่ามีใครในเครือข่ายล็อกไฟล์ผ่านสแนปอินMMC ของโฟลเดอร์ที่ใช้ร่วมกันหรือไม่

ชุดเครื่องมือที่มีประโยชน์อย่างยิ่งอีกชุดหนึ่งมีเครื่องมือpstoolsบรรทัดคำสั่งสำหรับการดูการล็อกจากระยะไกล

สุดท้ายProcess Explorerเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการดูว่าเกิดอะไรขึ้น เมื่อคุณมีสถานการณ์ล็อก ให้เปิดโปรแกรม Process Explorer และค้นหาที่จับไฟล์นั้น และดูว่ามีอะไรล็อกอยู่ สำรวจจากที่นั่น

ฉันมีปัญหาการล็อกไฟล์กับ Server 2016 และฉันพบว่าแม้กระทั่งการปิดไคลเอ็นต์ยังคงเปิดไว้ได้เมื่อฉันสะดุดข้ามโพสต์ของคุณ และอีกสองสามคนบ่นเกี่ยวกับเซิร์ฟเวอร์ 2012+ ที่มีการล็อกอย่างเข้มงวด

คุณได้ลองเปลี่ยน HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DormantDirectoryTimeout เป็น 1-5 วินาทีแทนที่จะเป็น 600 เช่นบทความเกี่ยวกับเทคโนโลยีนี้และบทความด้านเทคนิคนี้แนะนำหรือไม่ หากบุคคลนี้ถูกต้อง แสดงว่า SMB v3 ก้าวร้าวมากขึ้นในการล็อก

ฉันได้ลองใช้การตั้งค่า DormantDirectoryTimeout บนเซิร์ฟเวอร์ Windows 2012 R2 ที่มีไคลเอนต์ Win 8.1 แล้ว โดยไม่มีผลใดๆ เซสชันผู้ใช้ (ดูโดยใช้ cmd net sessions) ยังคงเปิดอยู่หลังจากออกจากระบบ ไฟล์หลายร้อยไฟล์ยังคงเปิดอยู่

อย่างไรก็ตาม การสร้าง reg.value บนเวิร์กสเตชันไคลเอ็นต์ Win 8.1 จะได้ผลตามที่ต้องการ: หลังจากเวลาประมาณ ระยะเวลาที่ระบุเซสชันถูกปิดบนเซิร์ฟเวอร์และการล็อกไฟล์หายไป (ตรวจสอบโดยใช้net sessions)

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