วัตถุประสงค์หลักของฐานข้อมูลที่มีอยู่คือเพื่อให้ง่ายต่อการย้ายฐานข้อมูลของคุณไปยังเซิร์ฟเวอร์ใหม่โดยไม่ต้องนั่งร้านอยู่รอบ ๆ โดยที่ในใจฉันจะจัดการกับปัญหาที่อาจเกิดขึ้นเล็กน้อยซึ่งจะทำให้การโยกย้ายนี้ยากขึ้น - และส่วนใหญ่หมุนรอบข้อเท็จจริงที่ว่าฐานข้อมูลที่มีอยู่นั้นมีอยู่เพียงบางส่วนใน SQL Server 2012 (การบังคับใช้การกักกันไม่ได้บังคับจริง)
สตริงการเชื่อมต่อ
สตริงการเชื่อมต่อกับฐานข้อมูลที่มีอยู่จะต้องระบุฐานข้อมูลในสตริงการเชื่อมต่ออย่างชัดเจน คุณไม่สามารถพึ่งพาฐานข้อมูลเริ่มต้นของล็อกอินเพื่อสร้างการเชื่อมต่อได้อีกต่อไป หากคุณไม่ได้ระบุฐานข้อมูล SQL Server จะไม่ดำเนินการผ่านฐานข้อมูลที่มีอยู่ทั้งหมดและลองค้นหาฐานข้อมูลใด ๆ ที่ข้อมูลรับรองของคุณอาจตรงกัน
แบบสอบถามข้ามฐานข้อมูล
แม้ว่าคุณจะสร้างผู้ใช้เดียวกันด้วยรหัสผ่านเดียวกันในฐานข้อมูลที่มีอยู่สองแห่งบนเซิร์ฟเวอร์เดียวกันแอพพลิเคชันของคุณจะไม่สามารถทำการสืบค้นข้ามฐานข้อมูลได้ ชื่อผู้ใช้และรหัสผ่านอาจเหมือนกัน แต่ไม่ใช่ชื่อผู้ใช้เดียวกัน เหตุผลนี้ หากคุณมีฐานข้อมูลบนเซิร์ฟเวอร์ที่โฮสต์คุณไม่ควรป้องกันไม่ให้มีผู้ใช้ที่มีอยู่เดิมกับบุคคลอื่นที่ใช้เซิร์ฟเวอร์โฮสต์เดียวกัน เมื่อมาถึงการบรรจุเต็มรูปแบบ (น่าจะเป็นในรุ่นหลังจาก SQL Server 2012 ไม่เคย) การสืบค้นข้ามฐานข้อมูลจะถูกห้ามอย่างเด็ดขาด ฉันขอแนะนำอย่างยิ่งว่าคุณไม่ควรสร้างการเข้าสู่ระบบในระดับเซิร์ฟเวอร์ด้วยชื่อเดียวกับผู้ใช้ฐานข้อมูลที่มีอยู่และพยายามหลีกเลี่ยงการสร้างชื่อผู้ใช้ที่มีอยู่เดิมในฐานข้อมูลที่มีอยู่ หากคุณต้องการเรียกใช้แบบสอบถามที่มีฐานข้อมูลที่มีอยู่หลายแห่งให้ทำเช่นนั้นโดยใช้การเข้าสู่ระบบระดับเซิร์ฟเวอร์ที่มีสิทธิ์ที่เหมาะสม (คุณอาจคิดว่านี่เป็นsysadmin
แต่สำหรับแบบสอบถามแบบอ่านอย่างเดียวนี่คือCONNECT ANY DATABASE
และSELECT ALL USER SECURABLES
)
ชื่อพ้อง
ชื่อ 3- และ 4 ส่วนส่วนใหญ่สามารถระบุได้ง่ายและปรากฏใน DMV อย่างไรก็ตามหากคุณสร้างคำพ้องความหมายที่ชี้ไปที่ชื่อ 3 หรือ 4 ส่วนสิ่งเหล่านี้จะไม่ปรากฏใน DMV ดังนั้นหากคุณใช้คำพ้องความหมายอย่างหนักคุณอาจพลาดการพึ่งพาจากภายนอกและอาจทำให้เกิดปัญหา ณ จุดที่คุณย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์อื่น ฉันบ่นเกี่ยวกับปัญหานี้ แต่มันจะถูกปิดเป็น "โดยการออกแบบ"และไม่ได้อยู่รอดการโยกย้ายไปยังระบบการตอบใหม่ โปรดทราบว่า DMV จะพลาดชื่อ 3 และ 4 ส่วนที่สร้างผ่าน SQL แบบไดนามิก
นโยบายรหัสผ่าน
หากคุณสร้างผู้ใช้ฐานข้อมูลที่มีอยู่บนระบบที่ไม่มีนโยบายรหัสผ่านคุณอาจพบว่าเป็นการยากที่จะสร้างผู้ใช้รายเดียวกันบนระบบอื่นที่มีนโยบายรหัสผ่านอยู่ นี่เป็นเพราะCREATE USER
ไวยากรณ์ไม่สนับสนุนการข้ามนโยบายรหัสผ่าน ฉันยื่นข้อผิดพลาดเกี่ยวกับปัญหานี้และยังคงเปิดอยู่ (และยังไม่รอดจากการย้ายเมื่อเชื่อมต่อถูกยกเลิก) และดูเหมือนว่าสำหรับฉันแล้วในระบบที่มีนโยบายรหัสผ่านคุณสามารถสร้างการเข้าสู่ระบบระดับเซิร์ฟเวอร์ที่ข้ามนโยบายได้อย่างง่ายดาย แต่คุณไม่สามารถสร้างผู้ใช้ฐานข้อมูลที่ทำเช่นนั้น - แม้ว่าผู้ใช้รายนี้จะเป็นผู้สืบทอด น้อยกว่าความเสี่ยงด้านความปลอดภัย
การตรวจทาน
เนื่องจากเราไม่สามารถพึ่งพาการจัดเรียงของ tempdb ได้อีกต่อไปคุณอาจต้องเปลี่ยนรหัสใด ๆ ที่ใช้การเปรียบเทียบที่ชัดเจนหรือDATABASE_DEFAULT
ใช้CATALOG_DEFAULT
แทน ดูบทความ BOL นี้สำหรับประเด็นที่มีศักยภาพบางอย่าง
IntelliSense
หากคุณเชื่อมต่อกับฐานข้อมูลที่มีอยู่ในฐานะผู้ใช้ที่มีอยู่ SSMS จะไม่สนับสนุน IntelliSense อย่างสมบูรณ์ คุณจะได้รับการขีดเส้นใต้พื้นฐานสำหรับข้อผิดพลาดทางไวยากรณ์ แต่ไม่มีรายการหรือคำแนะนำเครื่องมืออัตโนมัติและรายการสนุก ๆ ทั้งหมด ฉันยื่นข้อผิดพลาดเกี่ยวกับปัญหานี้และยังคงเปิดอยู่ - และอีกหนึ่งเรื่องที่ไม่รอดจากการย้าย
เครื่องมือ SQL Server Data
หากคุณวางแผนที่จะใช้ SSDT สำหรับการพัฒนาฐานข้อมูลปัจจุบันยังไม่มีการสนับสนุนอย่างเต็มที่สำหรับฐานข้อมูลที่มีอยู่ ซึ่งหมายความว่าการสร้างโครงการจะไม่ล้มเหลวหากคุณใช้คุณลักษณะหรือไวยากรณ์ที่แบ่งการบรรจุเนื่องจาก SSDT ในปัจจุบันไม่ทราบว่าการบรรจุคืออะไรและสิ่งใดที่อาจทำลายได้
แก้ไขฐานข้อมูล
เมื่อรันALTER DATABASE
คำสั่งจากภายในบริบทของฐานข้อมูลที่มีอยู่ rRather กว่าที่ALTER DATABASE foo
คุณจะต้องใช้ALTER DATABASE CURRENT
- นี่คือเพื่อที่ว่าถ้าฐานข้อมูลถูกย้ายเปลี่ยนชื่อ ฯลฯ คำสั่งเหล่านี้ไม่จำเป็นต้องรู้อะไรเกี่ยวกับบริบทภายนอกหรือการอ้างอิงของพวกเขา .
อีกไม่กี่คน
บางสิ่งที่คุณอาจไม่ควรใช้ แต่ถึงกระนั้นก็ควรพูดถึงในรายการสิ่งที่ไม่สนับสนุนหรือเลิกใช้แล้วและไม่ควรใช้ในฐานข้อมูลที่มีอยู่:
- ขั้นตอนการกำหนดหมายเลข
- ขั้นตอนชั่วคราว
- การเปลี่ยนแปลงการเรียงในวัตถุที่ถูกผูกไว้
- เปลี่ยนการดักจับข้อมูล
- ติดตามการเปลี่ยนแปลง
- การทำซ้ำ
ทุกคนกล่าวว่าสิ่งเหล่านี้ไม่ได้เป็นข้อเสียเปรียบในการใช้ฐานข้อมูลที่มีอยู่พวกเขาเป็นเพียงปัญหาที่คุณควรระวังและไม่ได้เปิดเผยอย่างชัดเจนในเอกสารอย่างเป็นทางการ
คุณจะต้องตรวจสอบให้แน่ใจว่าหากฐานข้อมูลที่มีอยู่กำลังจะถูกโยกย้ายหรือเป็นส่วนหนึ่งของกลุ่มความพร้อมใช้งานหรือกำลังทำมิรเรอร์เซิร์ฟเวอร์ปลายทางที่เป็นไปได้ทั้งหมดจะมีsp_configure
ตัวเลือกที่contained database authentication
กำหนดเป็น 1
คุณอาจพบว่าการโพสต์บล็อกนี้มีประโยชน์เช่นเดียวกับโพสต์นี้ถึงแม้ว่าพวกเขาจะอัปเดต RTM ล่วงหน้า